3、存器////////////////////标准信号F="100K",测周/////////////////////////// reg[9:0]count;//100K时钟分频计数器 always@(posedgeclkornegedgerst_n) begin if(!rst_n) count<=1'b0; else if(count<10'd499) count<=count+1'b1; else count<=1'b0; end regclk_100K;//100K时钟输出寄存器 always@(posedgeclkorneg
4、edgerst_n) begin if(!rst_n) clk_100K<=1'b0; else if(count<=249)//时钟的占空比为50% clk_100K<=1'b0; else clk_100K<=1'b1; end ///////////////////////////////////////////// //待测频率进行2分频,2分频后,就可以只计二分频后信号的高电平或低电平 //就可以了,如果不2分频,只记高电平或低电平的话,信号的占空比不同会导致结果不准确
5、 regfre_2; always@(posedgefreornegedgerst_n) begin if(!rst_n) fre_2<=1'b0; else if(fre) fre_2<=~fre_2;//2分频 end //////////////测周计数模块,计2分频后的待测频的高电平或低电平/////////////////////// //相当于在待测频率的整个周期内计数////////////////////////////////////////////////////// reg[12:
6、0]cnt;//计数寄存器//由于位宽的限制,最大计数值8192,所以测低频(低于14HZ时会出错) always@(posedgeclk_100Kornegedgerst_n) begin if(!rst_n) begin cnt<=13'd0; end else if(!fre_2) //低电平计数 cnt<=cnt+1'b1; else begin cnt <=13'd0;//不为低电平时清零 end end ////////锁存信号,上升沿有效////////////////////////// regload;
7、 always@(posedgefre_2ornegedgerst_n) begin if(!rst_n) begin load<=1'b0; end else load<=~load;//产生上升沿 end////////////////////////////////// reg[12:0]cnt_r;//存储锁存的值 always@(posedgeload)//load上升沿锁存 begin cnt_r<=cnt;//将计数值锁存 end/////////////////////////数据处理单/////////////