quartus频率计 时钟设置_Verilog频率计设计
這是以前的一個(gè)可編程邏輯課上機(jī)實(shí)驗(yàn)三
實(shí)驗(yàn)報(bào)告
數(shù)字頻率計(jì)的基本設(shè)計(jì)思路是在給定一個(gè)time開(kāi)始測(cè)量的時(shí)候產(chǎn)生的T的個(gè)數(shù),也就是采用一個(gè)標(biāo)準(zhǔn)的基準(zhǔn)時(shí)鐘,在單位時(shí)間(1秒)里對(duì)被測(cè)信號(hào)的脈沖數(shù)進(jìn)行計(jì)數(shù)。測(cè)頻法包括直接測(cè)頻法、等精度頻率測(cè)量法、周期法等。
數(shù)字頻率計(jì)的原理如圖6-1所示。對(duì)系統(tǒng)時(shí)鐘的信號(hào)分頻后產(chǎn)生1Hz的輸出頻率被作為控制模塊的時(shí)鐘輸入,由控制模塊產(chǎn)生的計(jì)數(shù)使能信號(hào)和清零信號(hào)對(duì)計(jì)數(shù)模塊進(jìn)行控制,而由其產(chǎn)生的鎖存信號(hào)load對(duì)鎖存模塊進(jìn)行控制,一旦計(jì)數(shù)使能信號(hào)為高電平,并且時(shí)鐘上升沿到來(lái),計(jì)數(shù)器便開(kāi)始正常計(jì)數(shù),清零信號(hào)到來(lái)則計(jì)數(shù)清零,而當(dāng)鎖存信號(hào)為高電平時(shí),數(shù)據(jù)便被鎖存器鎖存,然后將鎖存的數(shù)據(jù)輸出到顯示模塊顯示出來(lái),數(shù)據(jù)鎖存保證系統(tǒng)可以穩(wěn)定顯示數(shù)據(jù),顯示譯碼驅(qū)動(dòng)電路將二進(jìn)制表示的計(jì)數(shù)結(jié)果轉(zhuǎn)換成相應(yīng)的能夠在數(shù)碼顯示管上可以顯示的十進(jìn)制結(jié)果。
(1)分頻器模塊
分頻器模塊將對(duì)系統(tǒng)時(shí)鐘進(jìn)行分頻,輸出1Hz赫茲的信號(hào),作為測(cè)頻控制模塊的輸入信號(hào)。例如,假設(shè)系統(tǒng)時(shí)鐘為1024Hz,則對(duì)其進(jìn)行2的10次方分頻即可得到1Hz的分頻輸出信號(hào)。
(2)測(cè)頻控制模塊
測(cè)頻控制模塊的輸出包括計(jì)數(shù)器的使能端,清零端以及數(shù)據(jù)鎖存器的鎖存信號(hào)。分別控制計(jì)數(shù)器的計(jì)數(shù)和清零。當(dāng)鎖存信號(hào)為高電平時(shí),計(jì)數(shù)器的計(jì)數(shù)結(jié)果被鎖存并輸出到顯示模塊顯示。
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
該模塊的仿真結(jié)果可參考圖6-2。
(3)計(jì)數(shù)器模塊
計(jì)數(shù)器是完成計(jì)數(shù)步驟的一個(gè)單元。它也可用與分頻、定時(shí)、產(chǎn)生節(jié)拍脈沖和脈沖序列等。本設(shè)計(jì)中為了可以使計(jì)數(shù)器正常工作,必須只有當(dāng)使能端為1的時(shí)候才開(kāi)始計(jì)數(shù),每個(gè)時(shí)鐘的上升沿到來(lái)時(shí)計(jì)數(shù)器加1,當(dāng)累加到10的時(shí)候就清零,同時(shí)產(chǎn)生進(jìn)位信號(hào),同時(shí)計(jì)數(shù)器也應(yīng)帶有清零信號(hào),一旦清零信號(hào)有效時(shí),計(jì)數(shù)器立即清零。
(4)鎖存器模塊
鎖存,就是把信號(hào)暫存以維持某種電平狀態(tài)。測(cè)量模塊的工作任務(wù)成功后,在load信號(hào)的上升沿到來(lái)時(shí)把測(cè)量值存入reg當(dāng)中,之后發(fā)送到顯示模塊當(dāng)中。鎖存器主要是為了保護(hù)數(shù)據(jù),使其在下次觸發(fā)或者復(fù)位時(shí)仍然有效。
(5)顯示模塊
LED顯示器在許多的數(shù)字系統(tǒng)中作為顯示輸出設(shè)備,使用非常廣泛。它內(nèi)部有七個(gè)發(fā)光的a、b、d、e、f和g二極管。通過(guò)點(diǎn)亮不同的LED字段,可顯示數(shù)字0,1,┅,9和A,b,C,d,E,F等不同的字符及自定義一些段發(fā)光代表簡(jiǎn)單符號(hào)。
(6)頂層模塊
按照?qǐng)D一所示的數(shù)字頻率計(jì)的框圖,調(diào)用各單元模塊,完成數(shù)字頻率計(jì)的頂層設(shè)計(jì),并進(jìn)行仿真,實(shí)現(xiàn)頻率測(cè)量。
練習(xí)
(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的值變成任意偶分頻,同時(shí)counter的范圍需要相應(yīng)修改
7
8 always @ (posedgeclk)9 begin
10 if (counter == N/2 - 1) //偶分頻數(shù)一半時(shí)反相
11 begin
12 clk_out <= ~clk_out;13 counter <= 0; //置0,從0計(jì)數(shù)
14 end
15 else
16 counter <= counter + 1;17 end
18 endmodule
(2)測(cè)頻控制模塊
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)計(jì)數(shù)器模塊(改正在注釋里)
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//有問(wèn)題,always @(posedge clk_t or posedge rst_count)//異步復(fù)位
8 if (!rst_count) begin//if (rst_count) begin dout = 16'd0; cout = 1'b0; end//先寫復(fù)位,首先考慮復(fù)位信號(hào)
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】二進(jìn)制轉(zhuǎn)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】八段顯示數(shù)碼管
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)頂層模塊
把各個(gè)模塊生成symbol,通過(guò)創(chuàng)建 block diagram/schematic file 手動(dòng)連線生成。
RTL:
仿真波形:
注:各個(gè)小模塊的仿真測(cè)試都要一個(gè)一個(gè)做(在此我省略了)
如有錯(cuò)誤還請(qǐng)指出,如有侵權(quán)還請(qǐng)告知,如需轉(zhuǎn)載請(qǐng)注明出處!
總結(jié)
以上是生活随笔為你收集整理的quartus频率计 时钟设置_Verilog频率计设计的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 成长-技术人员的成长
- 下一篇: 光流的基本概念和原理-Lucas–Kan