




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、課程設計基于Verilog HDL的數字秒表設計系別:物理與電氣工程學院專業:微電子學班級:<2>班成員:目錄一、前言3二、實驗目的.3三、功能設計3四、用Verilog描述電路.4 4.1時鐘調校及計時模塊4 4.2整數分頻模塊.8 4.3時鐘信號選擇模塊8 4.4七段顯示設置11 4.4.1 BCD碼顯示模塊11 4.4.2 二位七段顯示模塊12 4.4.3一位七段顯示模塊12 4.5頂層模塊實現14五、模擬與仿真.15六、邏輯綜合.16七、下載到硬件電路16八、總結.18九、心得體會.18十、參考文獻.19一、前言隨著微電子技術的的飛速發展,大規模可編程器件的密度和性能不斷提
2、高,數字系統的設計方法、設計過程也發生了重大改變,傳統的設計方法已經逐漸被電子設計自動化EDA(Electronic Design Automation)工具所取代。可編程器件可以通過硬件描述語言(如Verilog HDL)的形式根據實際設計的需要靈活地嵌入規模化的數字單元,大大地縮短了產品的設計周期。以可編程邏輯器件為核心的設計在數字系統設計領域將占據越來越重要的作用,因此,作為硬件設計者掌握EDA設計方法和工具是必須的。二、實驗目的(1)通過本次課程設計加深對Verilog語言課程的全面認識、復習和掌握。(2) 掌握定時器、外部中斷的設置和編程原理。 (3)
3、通過此次課程設計能夠將軟硬件結合起來,對程序進行編輯、調試。使其能夠通過電腦下載到芯片,正常工作。(4)實際操作Quartus II軟件,復習鞏固以前所學知識。三、功能設計 數字鐘是一個常用的數字系統,其主要功能是計時和顯示時間。這里通過一個數字鐘表的模塊化設計方法,說明自頂向下的模塊化設計方法和實現一個項目的設計步驟。這里實現的電子表具有顯示和調時的基本功能,可以顯示時、分 秒和毫秒,并通過按鍵進行工作模式選擇,工作模式有4種,分別是正常計時模式、調時模式、調分模式、調秒模式。 構成電子表的基本基本模塊有四個,分別是時鐘調校及計時模塊myclock、整數分頻模塊int_div、時鐘
4、信號選擇模塊clkgen和七段顯示模塊disp_dec。四、用Verilog實現電路4.1時鐘調校及計時模塊時鐘調校及計時模塊myclock實現的功能是根據當前的工作狀態進行時、分、秒的調整或正常的計時。代碼端口說明如下: 輸入信號: RSTn復位信號 CLK100Hz時鐘信號 FLAG1:0工作模式控制信號,模式定義為:00表示正常顯示,01表示調時,10表示調分,11表示調秒; UP調校模式時以加1方式調節信號; DN調校模式時以減1方式調節信號。 輸出信號: H7:0“時”數據(十六進制); M7:0“分”數據(十六進制); S7:0“秒”數據(十六進制); MS7:0“百分秒”數據(十
5、六進制)。 該模塊的設計思路是,當復位信號RSTn有效時,時、分、秒信號清零,否則工作模式控制信號FLAG的值決定當前的工作狀態。當FLAG=2b00時,電子表工作在正常計時狀態,對輸入的100Hz的時鐘信號clk進行計數,修改當前的百分秒(MS)、秒(S)、分(M)和時(H)的計數值;當FLAG信號=2b01時,電子表工作在“時”校正狀態,若此時UP信號有效則H加1,若此時DN信號有效則H減1,;當FLAG信號=1b10時,電子表工作在“分” 校正狀態,若此時UP信號有效則M加1,若此時DN信號有效則M減1;當FLAG=2b11時,電子表工作在“秒”校正狀態,其UP和DN的控制過程與“時”、
6、“分”類似代碼: 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) /復位狀態 begin m_H<=8'd23; m_M<=8'd52; m_
7、S<=8'b0; m_MS<=8'b0; end else if(FLAG=2'b01) /調時狀態 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) /調分狀態 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) /調秒狀態 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 /正常計時狀態 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整數分頻模塊 由于數字系統提供的基準時鐘信號頻率往往較高,因此需要分頻模塊產生所需頻率的失蹤信號,例如上面時鐘校正及計時模塊所需的100Hz的時鐘信號。整數分頻模塊int_div可以實現對輸入時鐘clock進行F_DIV分頻后輸出clk_out。F_DIV分頻系數范圍為12n(n=F_DIV_WIDTH),若要改變分頻系數,改變參數F_DIV或F_DIV_WIDTH到相應范圍即可。若分頻系數為偶數,則輸出時鐘占空比為50%;若分頻系數為奇數,則輸出的時鐘占空比取決于輸入的時鐘占空比和分頻系數(當輸入為50%時,輸出也是50%
11、)。 代碼:module int_div(clock,clk_out); parameter F_DIV=48000000; /分頻系數 parameter F_DIV_WIDTH=32; /分頻計數器寬度 input clock; /輸入時鐘 output clk_out; /輸出時鐘 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; /上升沿計數滿標志 wire half_div_p; /上升沿計數半滿標志 wire full_div_n; /
12、下降沿計數滿標志 wire half_div_n; /下降沿計數半滿標志 /判斷計數標志位置位與否 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); /時鐘輸出 assign clk_out=(F_DIV=1)?clock:(F_DIV0?(clk_p_r&clk_n_r):c
13、lk_p_r); always (posedge clock) /上升沿脈沖計數 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) /下降沿脈沖計數 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時鐘信號選擇模塊 時鐘信號選擇模塊clkgen實際上時一個二選一電路,用于提供時鐘調校及計時時模塊所需的時鐘脈沖。當電子表工作在正常計時狀態時選擇100Hz時鐘信號;當電子表工作在調時、調分、調秒是那種設置模式時,如果采用100Hz時鐘信號,那么手動一次按鍵可能引起設置數據的一串跳變,因此為了方便按鍵時動作對時間的
15、設置,這里采用2Hz的時鐘信號。其端口說明如下: flag時鐘選擇輸入信號; clk_100Hz輸入100Hz的時鐘信號; clk_2Hz輸入2Hz的時鐘信號; Clkout輸出時鐘信號。 代碼: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七段顯示設
16、置 為了對時鐘時、分、秒和毫秒數據輸出顯示,需要將時、分、秒和毫秒的二進制轉換為十進制數。由于時、分、秒最大到60,毫秒最大到99,所以十進制數選擇2位就能滿足要求。為了在七段數碼管輸出時間數據,還需要將顯示的十進制數轉化為七段段碼。以上功能分別由BCD碼顯示模塊和七段譯碼管模塊來實現。4.4.1 BCD碼顯示模塊BCD碼顯示模塊的功能是將8位二進制數轉化為2位十進制數后,進行七段段譯碼顯示。為了實現顯示功能,在其內部調用了dual_hex 2位七段顯示模塊。其端口說明如下:輸入信號:hex2位8421BCD碼輸入。輸出信號:dispout2位8421碼對應的七段數碼管段碼。代碼:module
17、 disp_dec(hex,dispout); input7:0 hex; /八位二進制輸入數據 output15:0 dispout; /2位十進制的七段段碼顯示數據 reg7:0 dec; always (hex) begin /8位二進制數轉化為2位BCD碼 dec7:4=hex/4'd10; dec3:0=hex%4'd10; end dual_hex u1(1'b0,dec,dispout); /調用2位共陽極七段顯示模塊endmodule4.4.2 二位七段顯示模塊 二位七段顯示模塊的功能是將2進制或十六進制數轉化為對應的七段段碼,內部調用了一位七段譯碼模塊
18、seg_decoder。代碼:module dual_hex(iflag,datain,dispout); input iflag; /共陰或共陽輸出選擇 input7:0 datain; /2位的十進制或十六進制數據 output15:0 dispout; /2個七段段碼數據 seg_decoder u1(iflag,datain7:4,dispout15:8); seg_decoder u2(iflag,datain3:0,dispout7:0);endmodule4.4.3 一位七段譯碼模塊 一位七段譯碼模塊的功能是將4位二進制數轉化為對應的共陰或共陽七段段碼。代碼:module seg
19、_decoder(iflag,iA,oY); input iflag; /共陰或共陽輸出選擇 input3:0 iA; /4位二進制數據 output reg7:0 oY; /七段段碼顯示數據 always (iflag,iA) begin case(iA) /共陰級七段輸出 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; /共陽極七段輸出 endendmodu
21、le4.5、頂層模塊的實現 頂層模塊是將各功能模塊連接起來,實現電子表的完整功能。其端口信號說明如下: 輸入信號: iCLK5050MHz時鐘信號; RSTn復位信號; FLAG工作模式控制信號,模式定義為:00表示正常顯示,01表示調時,10表示調分,11表示調秒; UP調校模式時以加1方式調節信號; DN調校模式時以減1方式調節信號。 輸出信號: H_dis“小時”數據的七段數碼管數據; M_dis“分鐘”數據的七段數碼管數據; S_dis“秒”數據的七段譯碼管數據; MS_dis“百分秒”數據的七段譯碼管數據;Mode工作模式輸出;H“時”數據(十六進制); M“分”數據(十六進制);
22、S“秒”數據(十六進制); MS“百分秒”數據(十六進制)。 代碼: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中利用仿真波形進行功能或時序仿真的基本步驟如下:(1)創建新的矢量波形文件(*.vwf).(2)添加輸入、輸出節點。(3)編譯輸入節點的波形。(4)完成矢量波形文件的創建之后,用戶即可以對設計進行功能或時序仿真。(5)仿真啟動后,狀態窗口會同時自動打開,在狀態窗口中顯示仿真進度及所用時間。(6)默認情況下,仿真器報告窗口內在仿真過程中會顯示仿真波形部分,其中還包括當前仿真器的設置信息和仿真信息等。計時狀態仿真波形六、邏輯綜合 完成項目創建和設計輸入后,用Quartus II的編譯器(compiler)對設計進行檢查和邏輯綜合,并生成用于配置可編程邏輯器件的下載文件。Quartus II編譯
25、器中的Analysis & Synthesis模塊將分析設計文件并建立工程數據庫。該模塊使用Quartus II內置綜合器,綜合Verilog HDL設計文件(.v)。(1) 編譯器件選項設置。(2) 引腳分配。(3) 編譯設計。(4) 查看適配結果。七、下載到硬件電路在設計(工程)編譯成功后,便可以對所選的(Altera)目標器件進行編程和配置。Quartus II編譯器的Assembler 模塊將會對工程的各個組件轉換成編程文件,包括編譯器對象文件(*.pof)和SRAM對象文件(.sof)。Quartus II編譯器(Progrsmmer)可以使用這些編程文件與Altera編程硬件配合,對Quartus II軟件所支持的Altera器件進行編程和配置。秒顯示分顯示八、總結 在QuartusII開發環境下,采用自頂向下的設計方法有利于在早期發現結構設計中的錯誤,避免不必要的重復設計。再結合基于FPGA 的“在系統”可編程實驗板,輕輕松松就能實現各種電子產品的設計,現
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫學英語培訓課件
- 2025年成都貨運從業資格實操模擬試題
- 2025年合肥道路危險貨物運輸從業資格證考試
- 2025年欽州出租車從業資格考什么
- 煙草培訓 課件
- 腹瀉培訓課件
- 2025年湖南省中考數學真題(原卷版)
- 物理知識培訓課件
- 區塊鏈包未來發展方向
- 甲醇改裝培訓課件
- 山東省濟南市長清區2024屆數學高一下期末達標檢測試題含解析
- 煤礦進風井地面用燃煤熱風爐安全技術條件
- 大蒜項目可行性報告
- 學生實習家長知情同意書(完美版)
- 《白夜行》名著導讀讀書分享
- 藍莓可行性研究報告
- 山東省汽車維修工時定額(T-SDAMTIA 0001-2023)
- 綜合布線設計與施工 第4版 課件全套 第1-13章 網絡綜合布線概述-網絡綜合布線實訓
- 小學語文-“實用性閱讀與交流”學習任務群設計與實施例談
- 移動破碎施工方案
- 國開(山東)地域文化(本)形成性考核1-3答案
評論
0/150
提交評論