简易计时器的设计与实现-DE2|VHDL|EDA|FPGA/CPLD
基于VHDL的簡易計時器的設計與實現
傳送門:
- 本項目地址:Gitee | GitHub
- 其他相關項目
- DE2-VHDL計時器:Gitee | GitHub
- DE2-VHDL實驗:Gitee | GitHub
前言
該設計是筆者大二時的硬件課實踐作品,如今2年過去了,計算機基礎和邏輯電路的知識已經忘得七七八八了,借著剛畢業還有點空閑時間,簡單整理一下大學期間做過的東西,以記錄自己的學習過程,也是對曾經不重視整理、總結和分享的自己的彌補和再激勵。
設計概述
本設計簡易電子計時器能順序計時和倒計時,數據范圍為1天,即00:00:00 - 23:59:59,同時具有時間設置功能,能從外部設置當前的小時數、分鐘數和秒數。
本設計使用VHDL語言開發,開發與仿真 IDE 為Quartus II 9.0,在DE2-115開發板上測試運行。
設計內容
1)本設計簡易電子計時器具有四種工作模式:正常計時、從外部設置當前的小時數、從外部設置當前的分鐘數、從外部設置當前的秒數,同時具有可逆的計時功能;
2)在設置當前某位時間的時候,顯示該時間的兩個七段數碼管按1Hz的頻率進行閃爍,提醒當前設置的是哪個時間數,其余的數碼管則處于暫停/不變/靜止狀態;
設計說明
本設計共有12個模塊組成,包括:
1) 一個分頻模塊clk_1hz,主要使用DE2-115版的27MHz的晶振脈沖分頻產生一個1Hz的時鐘周期,即每秒/個時鐘周期(f=1Tf=\frac{1}{T}f=T1?);
2) 一個狀態發生器(模式選擇)mode_sel,主要用來產生四種工作模式的控制信號和秒計數模塊的計數使能控制信號;
3) 一個二選一的數據選擇器模塊mux21,用來選擇當前輸入的是手動脈沖還是1Hz的標準秒脈沖,選擇信號由mode_sel進行控制;
4) 兩個60進制的可逆計數模塊counter60_min_sec,并帶有暫停功能,分別用來對秒和分鐘進行計數;
5) 一個24進制的可逆計數模塊counter24_hour,并帶有暫停功能,用來對小時進行計數;
6) 六個帶有閃爍控制端的七段數碼管譯碼驅動模塊fbcd7seg,用來顯示對應時間數的計數值,并在外部輸入時間數的時候對應的數碼管進行頻率為1Hz的閃爍。
頂層設計
頂層設計圖:
描述:
1)SW[0]用于切換計數器是順序計數還是倒計時
2)KEY[0]用于切換模式,可以循環切換正常計時、設置小時數、設置分鐘數和設置秒數四個模式。
3)KEY[1]用于產生一個手動脈沖,用于設置當前時間數。
模塊設計
1)mode_sel 和 mux21
mode_sel內部維護了一個循環計數的4進制計數器(0、1、2、3),其中SEL_EN輸出腳位控制mux21,當計數器為0時選擇A(1Hz脈沖),其他選擇B(手動脈沖)。
2)counter24_min_sec 和 counter60_hour
計時模塊中,輸入腳位CLK_SEL接收是正常模式還是設置模式的信號,輸入腳位UP_DWN接收順序計時還是倒計時的控制信號,腳位CNT_EN、Co為進位輸入、輸出信號。
3)fbcd7seg
輸入腳位FLASH接收閃爍信號,高電平時激活,每個時鐘周期的低電平黑燈,高電平亮燈。
總結
以上是生活随笔為你收集整理的简易计时器的设计与实现-DE2|VHDL|EDA|FPGA/CPLD的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring批处理教程
- 下一篇: 循环结构的数据流分析方法