基于verilog的數(shù)字時(shí)鐘設(shè)計(jì)_第1頁(yè)
基于verilog的數(shù)字時(shí)鐘設(shè)計(jì)_第2頁(yè)
基于verilog的數(shù)字時(shí)鐘設(shè)計(jì)_第3頁(yè)
基于verilog的數(shù)字時(shí)鐘設(shè)計(jì)_第4頁(yè)
基于verilog的數(shù)字時(shí)鐘設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、課程設(shè)計(jì)基于Verilog HDL的數(shù)字秒表設(shè)計(jì)系別:物理與電氣工程學(xué)院專(zhuān)業(yè):微電子學(xué)班級(jí):<2>班成員:目錄一、前言3二、實(shí)驗(yàn)?zāi)康?3三、功能設(shè)計(jì)3四、用Verilog描述電路.4 4.1時(shí)鐘調(diào)校及計(jì)時(shí)模塊4 4.2整數(shù)分頻模塊.8 4.3時(shí)鐘信號(hào)選擇模塊8 4.4七段顯示設(shè)置11 4.4.1 BCD碼顯示模塊11 4.4.2 二位七段顯示模塊12 4.4.3一位七段顯示模塊12 4.5頂層模塊實(shí)現(xiàn)14五、模擬與仿真.15六、邏輯綜合.16七、下載到硬件電路16八、總結(jié).18九、心得體會(huì).18十、參考文獻(xiàn).19一、前言隨著微電子技術(shù)的的飛速發(fā)展,大規(guī)??删幊唐骷拿芏群托阅懿粩嗵?/p>

2、高,數(shù)字系統(tǒng)的設(shè)計(jì)方法、設(shè)計(jì)過(guò)程也發(fā)生了重大改變,傳統(tǒng)的設(shè)計(jì)方法已經(jīng)逐漸被電子設(shè)計(jì)自動(dòng)化EDA(Electronic Design Automation)工具所取代??删幊唐骷梢酝ㄟ^(guò)硬件描述語(yǔ)言(如Verilog HDL)的形式根據(jù)實(shí)際設(shè)計(jì)的需要靈活地嵌入規(guī)模化的數(shù)字單元,大大地縮短了產(chǎn)品的設(shè)計(jì)周期。以可編程邏輯器件為核心的設(shè)計(jì)在數(shù)字系統(tǒng)設(shè)計(jì)領(lǐng)域?qū)⒄紦?jù)越來(lái)越重要的作用,因此,作為硬件設(shè)計(jì)者掌握EDA設(shè)計(jì)方法和工具是必須的。二、實(shí)驗(yàn)?zāi)康?1)通過(guò)本次課程設(shè)計(jì)加深對(duì)Verilog語(yǔ)言課程的全面認(rèn)識(shí)、復(fù)習(xí)和掌握。(2) 掌握定時(shí)器、外部中斷的設(shè)置和編程原理。 (3) 

3、通過(guò)此次課程設(shè)計(jì)能夠?qū)④浻布Y(jié)合起來(lái),對(duì)程序進(jìn)行編輯、調(diào)試。使其能夠通過(guò)電腦下載到芯片,正常工作。(4)實(shí)際操作Quartus II軟件,復(fù)習(xí)鞏固以前所學(xué)知識(shí)。三、功能設(shè)計(jì) 數(shù)字鐘是一個(gè)常用的數(shù)字系統(tǒng),其主要功能是計(jì)時(shí)和顯示時(shí)間。這里通過(guò)一個(gè)數(shù)字鐘表的模塊化設(shè)計(jì)方法,說(shuō)明自頂向下的模塊化設(shè)計(jì)方法和實(shí)現(xiàn)一個(gè)項(xiàng)目的設(shè)計(jì)步驟。這里實(shí)現(xiàn)的電子表具有顯示和調(diào)時(shí)的基本功能,可以顯示時(shí)、分 秒和毫秒,并通過(guò)按鍵進(jìn)行工作模式選擇,工作模式有4種,分別是正常計(jì)時(shí)模式、調(diào)時(shí)模式、調(diào)分模式、調(diào)秒模式。 構(gòu)成電子表的基本基本模塊有四個(gè),分別是時(shí)鐘調(diào)校及計(jì)時(shí)模塊myclock、整數(shù)分頻模塊int_div、時(shí)鐘

4、信號(hào)選擇模塊clkgen和七段顯示模塊disp_dec。四、用Verilog實(shí)現(xiàn)電路4.1時(shí)鐘調(diào)校及計(jì)時(shí)模塊時(shí)鐘調(diào)校及計(jì)時(shí)模塊myclock實(shí)現(xiàn)的功能是根據(jù)當(dāng)前的工作狀態(tài)進(jìn)行時(shí)、分、秒的調(diào)整或正常的計(jì)時(shí)。代碼端口說(shuō)明如下: 輸入信號(hào): RSTn復(fù)位信號(hào) CLK100Hz時(shí)鐘信號(hào) FLAG1:0工作模式控制信號(hào),模式定義為:00表示正常顯示,01表示調(diào)時(shí),10表示調(diào)分,11表示調(diào)秒; UP調(diào)校模式時(shí)以加1方式調(diào)節(jié)信號(hào); DN調(diào)校模式時(shí)以減1方式調(diào)節(jié)信號(hào)。 輸出信號(hào): H7:0“時(shí)”數(shù)據(jù)(十六進(jìn)制); M7:0“分”數(shù)據(jù)(十六進(jìn)制); S7:0“秒”數(shù)據(jù)(十六進(jìn)制); MS7:0“百分秒”數(shù)據(jù)(十

5、六進(jìn)制)。 該模塊的設(shè)計(jì)思路是,當(dāng)復(fù)位信號(hào)RSTn有效時(shí),時(shí)、分、秒信號(hào)清零,否則工作模式控制信號(hào)FLAG的值決定當(dāng)前的工作狀態(tài)。當(dāng)FLAG=2b00時(shí),電子表工作在正常計(jì)時(shí)狀態(tài),對(duì)輸入的100Hz的時(shí)鐘信號(hào)clk進(jìn)行計(jì)數(shù),修改當(dāng)前的百分秒(MS)、秒(S)、分(M)和時(shí)(H)的計(jì)數(shù)值;當(dāng)FLAG信號(hào)=2b01時(shí),電子表工作在“時(shí)”校正狀態(tài),若此時(shí)UP信號(hào)有效則H加1,若此時(shí)DN信號(hào)有效則H減1,;當(dāng)FLAG信號(hào)=1b10時(shí),電子表工作在“分” 校正狀態(tài),若此時(shí)UP信號(hào)有效則M加1,若此時(shí)DN信號(hào)有效則M減1;當(dāng)FLAG=2b11時(shí),電子表工作在“秒”校正狀態(tài),其UP和DN的控制過(guò)程與“時(shí)”、

6、“分”類(lèi)似代碼: module myclock(RSTn,CLK,FLAG,UP,DN,H,M,S,MS); input RSTn,CLK,UP,DN; output 7:0 H,M,S; output 7:0 MS; input1:0 FLAG; reg 5:0 m_H,m_M,m_S; reg 6:0 m_MS; assign H=m_H; assign M=m_M; assign S=m_S; assign MS=m_MS; always (posedge CLK) if(RSTn) /復(fù)位狀態(tài) begin m_H<=8'd23; m_M<=8'd52; m_

7、S<=8'b0; m_MS<=8'b0; end else if(FLAG=2'b01) /調(diào)時(shí)狀態(tài) begin if(UP) begin if(m_H=8'd23) m_H<=8'd0; else m_H=m_H+1'b1; end else if(DN) begin if(m_H=8'h00) m_H<=8'd23; else m_H<=m_H-1'b1; end end else if(FLAG=2'b10) /調(diào)分狀態(tài) begin if(UP) if(m_M=8'd59

8、) m_M<=8'd0; else m_M<=m_M+1'b1; else if(DN) if(m_M=8'h00) m_M<=8'd59; else m_M<=m_M-1'b1; end else if(FLAG=2'b11) /調(diào)秒狀態(tài) begin if(UP) if(m_S=8'd59) m_S<=8'b0; else m_S<=m_S+1'b1; else if(DN) if(m_S=8'h00) m_S<=8'd59; else m_S<=m_S&l

9、t;=m_S-1'b1; end else begin /正常計(jì)時(shí)狀態(tài) if(m_MS=8'd99) begin m_MS<=8'd0; if(m_S=8'd59) begin m_S<=8'd0; if(m_M=8'd59) begin m_M<=8'd0; if(m_H=8'd23) m_H<=0; else m_H<=m_H+1'b1; end else m_M<=m_M+8'd1; end else m_S<=m_S+1'b1; end else m_MS&

10、lt;=m_MS+1'b1; endendmodule 4.2整數(shù)分頻模塊 由于數(shù)字系統(tǒng)提供的基準(zhǔn)時(shí)鐘信號(hào)頻率往往較高,因此需要分頻模塊產(chǎn)生所需頻率的失蹤信號(hào),例如上面時(shí)鐘校正及計(jì)時(shí)模塊所需的100Hz的時(shí)鐘信號(hào)。整數(shù)分頻模塊int_div可以實(shí)現(xiàn)對(duì)輸入時(shí)鐘clock進(jìn)行F_DIV分頻后輸出clk_out。F_DIV分頻系數(shù)范圍為12n(n=F_DIV_WIDTH),若要改變分頻系數(shù),改變參數(shù)F_DIV或F_DIV_WIDTH到相應(yīng)范圍即可。若分頻系數(shù)為偶數(shù),則輸出時(shí)鐘占空比為50%;若分頻系數(shù)為奇數(shù),則輸出的時(shí)鐘占空比取決于輸入的時(shí)鐘占空比和分頻系數(shù)(當(dāng)輸入為50%時(shí),輸出也是50%

11、)。 代碼:module int_div(clock,clk_out); parameter F_DIV=48000000; /分頻系數(shù) parameter F_DIV_WIDTH=32; /分頻計(jì)數(shù)器寬度 input clock; /輸入時(shí)鐘 output clk_out; /輸出時(shí)鐘 reg clk_p_r; reg clk_n_r; regF_DIV_WIDTH-1:0 count_p; regF_DIV_WIDTH-1:0 count_n; wire full_div_p; /上升沿計(jì)數(shù)滿(mǎn)標(biāo)志 wire half_div_p; /上升沿計(jì)數(shù)半滿(mǎn)標(biāo)志 wire full_div_n; /

12、下降沿計(jì)數(shù)滿(mǎn)標(biāo)志 wire half_div_n; /下降沿計(jì)數(shù)半滿(mǎn)標(biāo)志 /判斷計(jì)數(shù)標(biāo)志位置位與否 assign full_div_p=(count_p<F_DIV-1); assign half_div_p=(count_p<(F_DIV>>1)-1); assign full_div_n=(count_n<F_DIV-1); assign half_div_n=(count_n<(F_DIV>>1)-1); /時(shí)鐘輸出 assign clk_out=(F_DIV=1)?clock:(F_DIV0?(clk_p_r&clk_n_r):c

13、lk_p_r); always (posedge clock) /上升沿脈沖計(jì)數(shù) begin if(full_div_p) begin count_p<=count_p+1'b1; if(half_div_p) clk_p_r<=1'b0; else clk_p_r<=1'b1; end else begin count_p<=0; clk_p_r<=1'b0; end end always (negedge clock) /下降沿脈沖計(jì)數(shù) begin if(full_div_n) begin count_n<=count_n

14、+1'b1; if(half_div_n) clk_n_r<=1'b0; else clk_n_r=1'b1; end else begin count_n<=0; clk_n_r<=1'b0; end endendmodule4.3時(shí)鐘信號(hào)選擇模塊 時(shí)鐘信號(hào)選擇模塊clkgen實(shí)際上時(shí)一個(gè)二選一電路,用于提供時(shí)鐘調(diào)校及計(jì)時(shí)時(shí)模塊所需的時(shí)鐘脈沖。當(dāng)電子表工作在正常計(jì)時(shí)狀態(tài)時(shí)選擇100Hz時(shí)鐘信號(hào);當(dāng)電子表工作在調(diào)時(shí)、調(diào)分、調(diào)秒是那種設(shè)置模式時(shí),如果采用100Hz時(shí)鐘信號(hào),那么手動(dòng)一次按鍵可能引起設(shè)置數(shù)據(jù)的一串跳變,因此為了方便按鍵時(shí)動(dòng)作對(duì)時(shí)間的

15、設(shè)置,這里采用2Hz的時(shí)鐘信號(hào)。其端口說(shuō)明如下: flag時(shí)鐘選擇輸入信號(hào); clk_100Hz輸入100Hz的時(shí)鐘信號(hào); clk_2Hz輸入2Hz的時(shí)鐘信號(hào); Clkout輸出時(shí)鐘信號(hào)。 代碼:module clkgen(flag,clk_100hz,clk_2hz,clkout); input1:0 flag; /若flag=0則clkout=100Hz,否則clkout=2Hz input clk_100hz,clk_2hz; output clkout; assign clkout=(flag=2'b00)?clk_100hz:clk_2hz;endmodule4.4七段顯示設(shè)

16、置 為了對(duì)時(shí)鐘時(shí)、分、秒和毫秒數(shù)據(jù)輸出顯示,需要將時(shí)、分、秒和毫秒的二進(jìn)制轉(zhuǎn)換為十進(jìn)制數(shù)。由于時(shí)、分、秒最大到60,毫秒最大到99,所以十進(jìn)制數(shù)選擇2位就能滿(mǎn)足要求。為了在七段數(shù)碼管輸出時(shí)間數(shù)據(jù),還需要將顯示的十進(jìn)制數(shù)轉(zhuǎn)化為七段段碼。以上功能分別由BCD碼顯示模塊和七段譯碼管模塊來(lái)實(shí)現(xiàn)。4.4.1 BCD碼顯示模塊BCD碼顯示模塊的功能是將8位二進(jìn)制數(shù)轉(zhuǎn)化為2位十進(jìn)制數(shù)后,進(jìn)行七段段譯碼顯示。為了實(shí)現(xiàn)顯示功能,在其內(nèi)部調(diào)用了dual_hex 2位七段顯示模塊。其端口說(shuō)明如下:輸入信號(hào):hex2位8421BCD碼輸入。輸出信號(hào):dispout2位8421碼對(duì)應(yīng)的七段數(shù)碼管段碼。代碼:module

17、 disp_dec(hex,dispout); input7:0 hex; /八位二進(jìn)制輸入數(shù)據(jù) output15:0 dispout; /2位十進(jìn)制的七段段碼顯示數(shù)據(jù) reg7:0 dec; always (hex) begin /8位二進(jìn)制數(shù)轉(zhuǎn)化為2位BCD碼 dec7:4=hex/4'd10; dec3:0=hex%4'd10; end dual_hex u1(1'b0,dec,dispout); /調(diào)用2位共陽(yáng)極七段顯示模塊endmodule4.4.2 二位七段顯示模塊 二位七段顯示模塊的功能是將2進(jìn)制或十六進(jìn)制數(shù)轉(zhuǎn)化為對(duì)應(yīng)的七段段碼,內(nèi)部調(diào)用了一位七段譯碼模塊

18、seg_decoder。代碼:module dual_hex(iflag,datain,dispout); input iflag; /共陰或共陽(yáng)輸出選擇 input7:0 datain; /2位的十進(jìn)制或十六進(jìn)制數(shù)據(jù) output15:0 dispout; /2個(gè)七段段碼數(shù)據(jù) seg_decoder u1(iflag,datain7:4,dispout15:8); seg_decoder u2(iflag,datain3:0,dispout7:0);endmodule4.4.3 一位七段譯碼模塊 一位七段譯碼模塊的功能是將4位二進(jìn)制數(shù)轉(zhuǎn)化為對(duì)應(yīng)的共陰或共陽(yáng)七段段碼。代碼:module seg

19、_decoder(iflag,iA,oY); input iflag; /共陰或共陽(yáng)輸出選擇 input3:0 iA; /4位二進(jìn)制數(shù)據(jù) output reg7:0 oY; /七段段碼顯示數(shù)據(jù) always (iflag,iA) begin case(iA) /共陰級(jí)七段輸出 4'b0000:oY=8'h3f; 4'b0001:oY=8'h06; 4'b0010:oY=8'h5b; 4'b0011:oY=8'h4f; 4'b0100:oY=8'h66; 4'b0101:oY=8'h6d; 4'

20、;b0110:oY=8'h7d; 4'b0111:oY=8'h27; 4'b1000:oY=8'h7f; 4'b1001:oY=8'h6f; 4'b1010:oY=8'h77; 4'b1011:oY=8'h7c; 4'b1100:oY=8'h58; 4'b1101:oY=8'h5e; 4'b1110:oY=8'h79; 4'b1111:oY=8'h71; endcase if(!iflag) oY=oY; /共陽(yáng)極七段輸出 endendmodu

21、le4.5、頂層模塊的實(shí)現(xiàn) 頂層模塊是將各功能模塊連接起來(lái),實(shí)現(xiàn)電子表的完整功能。其端口信號(hào)說(shuō)明如下: 輸入信號(hào): iCLK5050MHz時(shí)鐘信號(hào); RSTn復(fù)位信號(hào); FLAG工作模式控制信號(hào),模式定義為:00表示正常顯示,01表示調(diào)時(shí),10表示調(diào)分,11表示調(diào)秒; UP調(diào)校模式時(shí)以加1方式調(diào)節(jié)信號(hào); DN調(diào)校模式時(shí)以減1方式調(diào)節(jié)信號(hào)。 輸出信號(hào): H_dis“小時(shí)”數(shù)據(jù)的七段數(shù)碼管數(shù)據(jù); M_dis“分鐘”數(shù)據(jù)的七段數(shù)碼管數(shù)據(jù); S_dis“秒”數(shù)據(jù)的七段譯碼管數(shù)據(jù); MS_dis“百分秒”數(shù)據(jù)的七段譯碼管數(shù)據(jù);Mode工作模式輸出;H“時(shí)”數(shù)據(jù)(十六進(jìn)制); M“分”數(shù)據(jù)(十六進(jìn)制);

22、S“秒”數(shù)據(jù)(十六進(jìn)制); MS“百分秒”數(shù)據(jù)(十六進(jìn)制)。 代碼:module clock(iCLK_50,RSTn,FLAG,UP,DN,H_dis,M_dis,S_dis,MS_dis,Mode,H,M,S); input iCLK_50; input RSTn,UP,DN; input 1:0 FLAG; output 1:0 Mode; output 15:0 H_dis,M_dis,S_dis,MS_dis; output 7:0 H,M,S; wire 7:0 MS; wire clk_100hz,clk_2hz; wire clk; assign Mode=FLAG; int_

23、div #(500000,32) nclk100(iCLK_50,clk_100hz); int_div #(50000000,32) nclk2(iCLK_50,clk_2hz); clkgen u0(FLAG,clk_100ha,clk_2hz,clk); myclock u1(RSTn,clk,FLAG,UP,DN,H,M,S,MS); disp_dec Hour(H,H_dis); disp_dec Minute(M,M_dis); disp_dec Second(S,S_dis); disp_dec hour(MS,MS_dis);endmodule 五、模擬與仿真在Quartus

24、II中利用仿真波形進(jìn)行功能或時(shí)序仿真的基本步驟如下:(1)創(chuàng)建新的矢量波形文件(*.vwf).(2)添加輸入、輸出節(jié)點(diǎn)。(3)編譯輸入節(jié)點(diǎn)的波形。(4)完成矢量波形文件的創(chuàng)建之后,用戶(hù)即可以對(duì)設(shè)計(jì)進(jìn)行功能或時(shí)序仿真。(5)仿真啟動(dòng)后,狀態(tài)窗口會(huì)同時(shí)自動(dòng)打開(kāi),在狀態(tài)窗口中顯示仿真進(jìn)度及所用時(shí)間。(6)默認(rèn)情況下,仿真器報(bào)告窗口內(nèi)在仿真過(guò)程中會(huì)顯示仿真波形部分,其中還包括當(dāng)前仿真器的設(shè)置信息和仿真信息等。計(jì)時(shí)狀態(tài)仿真波形六、邏輯綜合 完成項(xiàng)目創(chuàng)建和設(shè)計(jì)輸入后,用Quartus II的編譯器(compiler)對(duì)設(shè)計(jì)進(jìn)行檢查和邏輯綜合,并生成用于配置可編程邏輯器件的下載文件。Quartus II編譯

25、器中的Analysis & Synthesis模塊將分析設(shè)計(jì)文件并建立工程數(shù)據(jù)庫(kù)。該模塊使用Quartus II內(nèi)置綜合器,綜合Verilog HDL設(shè)計(jì)文件(.v)。(1) 編譯器件選項(xiàng)設(shè)置。(2) 引腳分配。(3) 編譯設(shè)計(jì)。(4) 查看適配結(jié)果。七、下載到硬件電路在設(shè)計(jì)(工程)編譯成功后,便可以對(duì)所選的(Altera)目標(biāo)器件進(jìn)行編程和配置。Quartus II編譯器的Assembler 模塊將會(huì)對(duì)工程的各個(gè)組件轉(zhuǎn)換成編程文件,包括編譯器對(duì)象文件(*.pof)和SRAM對(duì)象文件(.sof)。Quartus II編譯器(Progrsmmer)可以使用這些編程文件與Altera編程硬件配合,對(duì)Quartus II軟件所支持的Altera器件進(jìn)行編程和配置。秒顯示分顯示八、總結(jié) 在QuartusII開(kāi)發(fā)環(huán)境下,采用自頂向下的設(shè)計(jì)方法有利于在早期發(fā)現(xiàn)結(jié)構(gòu)設(shè)計(jì)中的錯(cuò)誤,避免不必要的重復(fù)設(shè)計(jì)。再結(jié)合基于FPGA 的“在系統(tǒng)”可編程實(shí)驗(yàn)板,輕輕松松就能實(shí)現(xiàn)各種電子產(chǎn)品的設(shè)計(jì),現(xiàn)場(chǎng)觀

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論