名稱:多功能頻率計周期、脈寬、占空比、頻率測量verilog(代碼在文末付費下載)
軟件:Quartus
語言:Verilog
代碼功能:
多功能頻率計,可測量信號的周期、脈沖寬度、占空比、頻率,語言為verilog,quartus軟件設計仿真。
演示視頻:
部分代碼展示
module?signal_detect( input?clk_in,//輸入100M基準時鐘 input?reset_p,//復位信號 input?signal_in,//待測頻率輸入 output?[31:0]total_frequency,//輸出頻率 output?[31:0]total_cycle,//輸出周期 output?[31:0]pulse_width,//輸出脈寬 output?[31:0]duty_cycle//輸出占空比 ); frequency_detect?i_frequency_detect( .?clk_in(clk_in),//輸入100M基準時鐘 .?reset_p(reset_p),//復位信號 .?signal_in(signal_in),//待測頻率輸入 .?total_frequency(total_frequency),//輸出頻率 .?total_cycle(total_cycle)//輸出周期 ); pulse_detect?i_pulse_detect( .?clk_in(clk_in),//輸入100M基準時鐘 .?reset_p(reset_p),//復位信號 .?signal_in(signal_in),//待測頻率輸入 .?pulse_width(pulse_width),//輸出脈寬 .?duty_cycle(duty_cycle)//輸出占空比 ); endmodule module?frequency_detect( input?clk_in,//輸入100M基準時鐘 input?reset_p,//復位信號 input?signal_in,//待測頻率輸入 output?[31:0]total_frequency,//輸出頻率 output?[31:0]total_cycle//輸出周期 ); //parameter?count_1s=32'd100_000_000;//1s所需計數(shù)周期數(shù)(仿真時用下一句) parameter?count_1s=32'd1000;//仿真時用該句,實際應為上一句(仿真時為減小仿真時間,將閘門開啟時間減小為10us) reg?[31:0]?door_1s_cnt=32'd0;//閘門信號1s開啟一次 always@(posedge?clk_in) if(reset_p==1) door_1s_cnt<=32'd0; else if(door_1s_cnt==count_1s) door_1s_cnt<=32'd0; else door_1s_cnt<=door_1s_cnt+32'd1; reg?door_1s=0; always@(posedge?clk_in) if(door_1s_cnt==count_1s) door_1s<=~door_1s;//閘門信號1s開啟一次 reg?[31:0]?CNT1=32'd0;//基準時鐘計數(shù)器 reg?[31:0]?CNT2=32'd0;//待測頻率計數(shù)器 reg?[31:0]?CNT1_buf=32'd0;//基準時鐘計數(shù)器寄存器 reg?[31:0]?CNT2_buf=32'd0;//待測頻率計數(shù)器寄存器
設計文檔(文檔點擊可下載):
1. 工程文件
2. 程序文件
3. 原理圖文件
4. 程序編譯
5. Testbench
6. 仿真圖
6.1整體仿真圖
仿真圖可看出測得占空比duty_cycle=20%;脈寬pulse_width=200ns,周期total_cycle=1001ns,頻率total_frequency=999000Hz,其中頻率誤差較大(實際應為1000000Hz,誤差999Hz)這是因為仿真時為減小仿真時間,使用的閘門信號為10us,閘門實際應為1s,減小了100000倍。
6.2局部細節(jié),被測信號脈寬200ns,測試結果為200,正確
6.3局部細節(jié),被測信號周期1000ns,測試結果為1001ns,誤差1ns。(誤差與頻率一樣,可以通過增大閘門減小誤差)
點擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=187