電子科技大學實驗文檔
名稱數字邏輯電路實驗 實驗名稱基于一般模型的計數器設計 指導教師鄭* 學生姓名鄭* 學生學號17011737 學生班級 17040324 學生專業電子信息類 實驗日期 2018年6月 (1)熟悉計數器的一般模型 (2)掌握在QuartusII中實現計數器一般模型的方法。 (3)掌握自頂向下的電路設計方法。 (4)掌握使用FPGA實現時序電路的方法。 如果把計數器看作是輸出狀態隨時鐘信號不斷變化的狀態機,可以把它抽象成如圖5.2.1所示的一般結構模型。在這個模型里,包含一個根據現態求得次態的狀態譯碼器,和一個由時鐘信號同步控制的n位寄存器組。
如果把計數器看作是輸出狀態隨時鐘信號不斷變化的狀態機,可以把它抽象成如圖5.2.1所示的一般結構模型。在這個模型里,包含一個根據現態求得次態的狀態譯碼器,和一個由時鐘信號同步控制的n位寄存器組。 圖5.2.1 計數器的一般模型 在QuartusII中,無論是實現寄存器組模塊,還是實現譯碼器模塊,都是比較容易的。例如實現一個模16計數器,根據第四章實驗4.4廣義譯碼器的設計方法,可以寫Verilog HDL代碼實現。
首先創建新工程counter16,為新工程建立新文件夾counter16,命名工程和頂層文件名為counter16。點擊New|Verilog HDL File,新建文本文件,打開文本編輯窗口,鍵入Verilog HDL代碼,如圖5.2.2所示,生成CNT16元件。
圖5.2.2 狀態譯碼器
在這里,由于輸出狀態有4位,需要4個寄存器保存數據,所以寄存器組模塊的電路圖如圖5.2.3所示。點擊New|Block Diagram/Schematic File,新建一個原理圖文件,命名為DFF4。在打開的圖形編輯窗口,放置4個dff元件,以及相應的輸入輸出端口,連線。將所有的時鐘信號用統一的時鐘輸入信號CLK來控制,所有的清零信號,用RST來統一控制。命名好輸入輸出端口,4位寄存器組模塊就繪制好了,生成一個DFF4的元件。當然也可以調用元件庫中的74175等集成的寄存器宏模塊實現電路。
然后再新建一個原理圖文件,命名為counter16,為頂層文件,和工程同名。調用CNT16和DFF4元件,按照計數器一般結構模型連接兩個元件。注意模塊間傳輸多位數據時,點擊工具欄上的  符號,用總線進行連接。加上相應的輸入和輸出端口,繪制頂層電路,如圖5.2.4所示。
圖5.2.3 DFF4寄存器組
圖5.2.4 計數器一般模型原理圖
設計計數器時,有時需要設計進位輸出或者借位輸出信號,因此增加一個進位信號,如下圖5.2.5所示。
圖5.2.5 進位輸出電路
電路原理圖繪制完成后,接下來是編譯、仿真和下載。仿真時,盡可能測試所有的輸入情況。例如在RST信號初期,用鼠標左鍵拖曳的方式選中一段,置為低電平(有效,清零),后面置為高電平(無效,正常計數),如圖5.2.6所示,以觀察清零信號對輸出的影響。
圖5.2.6 對RST賦值
圖5.2.7是16進制計數器的仿真結果。由圖可見,在計數狀態到達1110時,進位輸出有一個毛刺。這是因為在輸出狀態從1011到1110變化時,變化時間不一致,導致有1111的信號短暫發生,因而出現了進位輸出端的毛刺。
圖5.2.7 16進制計數器仿真結果
在這個一般模型電路的基礎上,增加一個比較器模塊,可以實現反饋清零型的一般模型電路。例如實現一個模12計數器,電路模型圖如圖5.2.8所示。
圖5.2.8 基于一般模型的反饋清零型電路模塊圖
在QuartusII中畫出原理圖,如圖5.2.9所示。其中,譯碼器模塊和寄存器組和之前電路一模一樣。比較器模塊,用來比較現態CS和反饋清零預置數A,如果兩者相等,則清零;不相等,正常計數。
圖5.2.9 反饋清零的一般模型電路原理圖
比較器具體實現如下:
module comP(CS,A,R); //定義模塊名,及輸入輸出端口
input [3:0]CS,A;// 定義輸入端口,CS為現態輸出,A為預置清零狀態
output R;// 定義輸出端口,R為清零標志數
reg R;// 輸出端口定義為reg類型
always@(CS,A,R)// always過程語句,當CS、A、R發生變化,執行后面的塊語句
case(CS) // case條件語句,這里也可以用if語句實現同樣的功能
A:R<=1'b1; // 當CS等于A,R被賦值為1,這時反饋回寄存器,使輸出清零
default:R<=1'b0;// 當CS不等于A,R被賦值為0,這時計數器正常計數;
endcase // case語句結束
endmodule // 模塊結束
這個電路,可以通過修改清零預置數A,方便的更改計數模值,仿真結果如圖5.2.10所示。
圖5.2.10 反饋清零型一般模型電路的仿真結果 - 基于一般結構模型,設計一個10進制加法計數器。使用QuartusII 完成創建工程、編輯電路圖、編譯,編輯波形文件仿真,記錄波形并說明仿真結果,最后在FPGA上進行硬件測試。
(2)根據計數器設計的一般模型,設計一個12進制加減法可逆計數器。使用QuartusII 完成創建工程、編輯電路圖、編譯,編輯波形文件仿真,記錄波形并說明仿真結果,最 FPGA上進行硬件測試  - 根據計數器設計的一般模型,設計初值可預置的計數器,變換預置數可使計數模值在2-20之間變化。使用QuartusII 完成創建工程、編輯電路圖、編譯,編輯波形文件仿真,記錄波形并說明仿真結果,最后在FPGA上進行硬件測試。
-
五.實驗總結 本次實驗先從最基本的一般模型設計計數器,按照一般模型的原理圖,先設計譯碼器對輸入信號進行編碼輸出譯碼后的信號給寄存器存儲數據。再根據要求,設計出正確的進位輸出。本次實驗在預習的電路原理圖設計與用語言設計譯碼器中出現不少問題。后不斷查閱資料,理解完畢,且在設計初值可預調的計數器實驗中,由于采取電路圖的方式難以成功實現,故在此次實驗設計中采取了以HDL語言的形式進行編譯及仿真,并成功實現。而在實現引腳導入時未進行分頻,但在仿真中已成功實現,且在位數上與理論設想相同。經過這次實驗,我熟悉計數器的一般模型掌握在QuartusII中實現計數器一般模型的方法。掌握自頂向下的電路設計方法。掌握使用FPGA實現時序電路的方法。 六.思考題 在verilog設計中,給時序電路清0有兩種不同方法,它們是什么?如何實現? 同步復位和異步復位。同步復位是指與時鐘同步,當復位信號有效之后,出現時鐘有效邊沿時才對電路模塊進行復位操作;而異步復位與時鐘信號無關,只要復位信號有效,無論這時時鐘信號是什么樣,都對電路模塊進行復位操作。
以上圖文的Word格式文檔下載(內容和本網頁上的一模一樣,方便大家保存):
|