日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

quartus频率计 时钟设置_Verilog频率计设计

發布時間:2023/12/20 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 quartus频率计 时钟设置_Verilog频率计设计 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這是以前的一個可編程邏輯課上機實驗三

實驗報告

數字頻率計的基本設計思路是在給定一個time開始測量的時候產生的T的個數,也就是采用一個標準的基準時鐘,在單位時間(1秒)里對被測信號的脈沖數進行計數。測頻法包括直接測頻法、等精度頻率測量法、周期法等。

數字頻率計的原理如圖6-1所示。對系統時鐘的信號分頻后產生1Hz的輸出頻率被作為控制模塊的時鐘輸入,由控制模塊產生的計數使能信號和清零信號對計數模塊進行控制,而由其產生的鎖存信號load對鎖存模塊進行控制,一旦計數使能信號為高電平,并且時鐘上升沿到來,計數器便開始正常計數,清零信號到來則計數清零,而當鎖存信號為高電平時,數據便被鎖存器鎖存,然后將鎖存的數據輸出到顯示模塊顯示出來,數據鎖存保證系統可以穩定顯示數據,顯示譯碼驅動電路將二進制表示的計數結果轉換成相應的能夠在數碼顯示管上可以顯示的十進制結果。

(1)分頻器模塊

分頻器模塊將對系統時鐘進行分頻,輸出1Hz赫茲的信號,作為測頻控制模塊的輸入信號。例如,假設系統時鐘為1024Hz,則對其進行2的10次方分頻即可得到1Hz的分頻輸出信號。

(2)測頻控制模塊

測頻控制模塊的輸出包括計數器的使能端,清零端以及數據鎖存器的鎖存信號。分別控制計數器的計數和清零。當鎖存信號為高電平時,計數器的計數結果被鎖存并輸出到顯示模塊顯示。

1 moduletestctl(clk,tsten,clr,load);2

3 inputclk;4

5 outputtsten,clr,load;6

7 regloadcnt,div2,clr;8

9 always@(posedgeclk)10

11 div2<=~div2;12

13 always@(clk,div2)14

15 begin

16

17 if (clk==0 && div2==0)18

19 clr=1;20

21 else

22

23 clr=0;24

25 end

26

27 assign load=~div2;28

29 assign tsten=div2;30

31 endmodule

View Code

該模塊的仿真結果可參考圖6-2。

(3)計數器模塊

計數器是完成計數步驟的一個單元。它也可用與分頻、定時、產生節拍脈沖和脈沖序列等。本設計中為了可以使計數器正常工作,必須只有當使能端為1的時候才開始計數,每個時鐘的上升沿到來時計數器加1,當累加到10的時候就清零,同時產生進位信號,同時計數器也應帶有清零信號,一旦清零信號有效時,計數器立即清零。

(4)鎖存器模塊

鎖存,就是把信號暫存以維持某種電平狀態。測量模塊的工作任務成功后,在load信號的上升沿到來時把測量值存入reg當中,之后發送到顯示模塊當中。鎖存器主要是為了保護數據,使其在下次觸發或者復位時仍然有效。

(5)顯示模塊

LED顯示器在許多的數字系統中作為顯示輸出設備,使用非常廣泛。它內部有七個發光的a、b、d、e、f和g二極管。通過點亮不同的LED字段,可顯示數字0,1,┅,9和A,b,C,d,E,F等不同的字符及自定義一些段發光代表簡單符號。

(6)頂層模塊

按照圖一所示的數字頻率計的框圖,調用各單元模塊,完成數字頻率計的頂層設計,并進行仿真,實現頻率測量。

練習

(1)分頻器模塊

1 modulefre_div (clk, clk_out);2 inputclk;3 outputclk_out;4 reg [8:0] counter;5 regclk_out;6 parameter N = 1000; //改變N的值變成任意偶分頻,同時counter的范圍需要相應修改

7

8 always @ (posedgeclk)9 begin

10 if (counter == N/2 - 1) //偶分頻數一半時反相

11 begin

12 clk_out <= ~clk_out;13 counter <= 0; //置0,從0計數

14 end

15 else

16 counter <= counter + 1;17 end

18 endmodule

(2)測頻控制模塊

1 moduletestctl (clk_out_ctl, tsten, rst_ctl, load);2 inputclk_out_ctl;3 outputtsten, rst_ctl, load;4 regrst_ctl, div2;5 always @(posedge clk_out_ctl) begin

6 div2 = ~div2;7 end

8 always @(clk_out_ctl or div2) begin

9 if (clk_out_ctl == 0 && div2 == 0) begin

10 rst_ctl = 1;11 end

12 else

13 begin

14 rst_ctl = 0;15 end

16 end

17 assign load = ~div2;18 assign tsten =div2;19 endmodule

(3)計數器模塊(改正在注釋里)

1 modulecounter (enable,clk_t,rst_count,dout,cout);2 inputenable,clk_t,rst_count;3 output [15:0] dout;4 outputcout;5 regcout;6 reg [15:0] dout;7 always @(posedge clk_t) begin//有問題,always @(posedge clk_t or posedge rst_count)//異步復位

8 if (!rst_count) begin//if (rst_count) begin dout = 16'd0; cout = 1'b0; end//先寫復位,首先考慮復位信號

9 if (enable) begin//else begin

10 if(dout == 65535) begin //if (enable) begin

11 dout = 16'd0; // if(dout == 65535) begin dout = 16'd0; cout = 1'b1; end

12 cout = 1'b1; // else dout = dout + 16'd1;13 end //end

14 else begin //end

15 dout = dout + 16'd1;

16 end

17 end

18 end

19 else begin

20 dout = 16'd0;

21 cout = 1'b0;

22 end

23 end

24 endmodule

25

26

27

(4)鎖存器模塊

1 modulelatch_out (in_dout, save_dout, load_in);2 inputload_in;3 input [15:0] in_dout;4 output [15:0] save_dout;5 reg [15:0] reg_in;6 wire [15:0] save_dout;7 always@(load_in)8 if(load_in)9 reg_in =in_dout;10 assign save_dout =reg_in;11 endmodule

(5)顯示模塊

【1】二進制轉BCD碼模塊(參考)

1 modulebin_bcd_cp (bin, wan, qian, bai, shi, ge, bcd);2 input [15:0] bin;3 output [31:0] bcd;4 output reg [3:0] wan;5 output reg [3:0] qian;6 output reg [3:0] bai;7 output reg [3:0] shi;8 output reg [3:0] ge;9 integeri;10 always @(bin) begin

11 wan = 4'd0;

12 qian = 4'd0;

13 bai = 4'd0;

14 shi = 4'd0;

15 ge = 4'd0;

16 for (i = 15; i >= 0; i = i - 1) begin

17 if (wan > 4) wan = wan + 3;18 if (qian > 4) qian = qian + 3;19 if (bai > 4) bai = bai + 3;20 if (shi > 4) shi = shi + 3;21 if (ge > 4) ge = ge + 3;22

23 wan = wan << 1;24 wan[0] = qian[3];25 qian = qian << 1;26 qian[0] = bai[3];27 bai = bai << 1;28 bai[0] = shi[3];29 shi = shi << 1;30 shi[0] = ge[3];31 ge = ge << 1;32 ge[0] =bin[i];33 end

34 end

35 assign bcd = {{12{1'b0}}, wan, qian, bai, shi, ge};

36 endmodule

【2】八段顯示數碼管

moduleseg7 (data_in, data_out );input [3:0] data_in ;output [7:0] data_out ;reg [7:0] data_out ;always @(data_in) begindata_out= 7'b1111111;

case(data_in )4'b0000: data_out = 8'b1100_0000; //0

4'b0001: data_out = 8'b1111_1001; //1

4'b0010: data_out = 8'b1010_0100; //2

4'b0011: data_out = 8'b1011_0000; //3

4'b0100: data_out = 8'b1001_1001; //4

4'b0101: data_out = 8'b1001_0010; //5

4'b0110: data_out = 8'b1000_0011; //6

4'b0111: data_out = 8'b1111_1000; //7

4'b1000: data_out = 8'b1000_0000; //8

4'b1001: data_out = 8'b1001_1000; //9

4'b1010: data_out = 8'b1000_1000; //A

4'b1011: data_out = 8'b1000_0011; //b

4'b1100: data_out = 8'b1010_0111; //c

4'b1101: data_out = 8'b1010_0001; //d

4'b1110: data_out = 8'b1000_0110; //E

4'b1111: data_out = 8'b1000_1110; //F

default: data_out = 8'b1111_1111;

endcase

end

endmodule

(6)頂層模塊

把各個模塊生成symbol,通過創建 block diagram/schematic file 手動連線生成。

RTL:

仿真波形:

注:各個小模塊的仿真測試都要一個一個做(在此我省略了)

如有錯誤還請指出,如有侵權還請告知,如需轉載請注明出處!

總結

以上是生活随笔為你收集整理的quartus频率计 时钟设置_Verilog频率计设计的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。