

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 摘 要</b></p><p> 本設計為一個多功能的數字時鐘,具有時、分、秒計數顯示功能,以24小時循環(huán)計數;具有校對功能。 本設計采用EDA技術,以硬件描述語言Verilog HDL為系統(tǒng)邏輯描述語言設計文件,在QUARTUSII工具軟件環(huán)境下,采用自頂向下的設計方法,由各個基本模塊共同構建了一個基于FPGA的數字鐘。</p><p&
2、gt; 系統(tǒng)由時鐘模塊、控制模塊、計時模塊、數據譯碼模塊、顯示以及組成。經編譯和仿真所設計的程序,在可編程邏輯器件上下載驗證,本系統(tǒng)能夠完成時、分、秒的分別顯示,按鍵進行校準,整點報時,鬧鐘功能。</p><p> 關鍵詞:數字時鐘,硬件描述語言,Verilog HDL,FPGA</p><p><b> Abstract</b></p><
3、p> The design for a multi-functional digital clock, with hours, minutes and seconds count display to a 24-hour cycle count; have proof functions function. The use of EDA design technology, hardware-description langua
4、ge VHDL description logic means for the system design documents, in QUAETUSII tools environment, a top-down design, by the various modules together build a FPGA-based digital clock. The main system make up of the clock m
5、odule, control module, time module, data decoding module, display a</p><p> Keywords: digital clock,hardware description language,Verilog HDL,FPGA </p><p><b> 目 錄</b></p>&
6、lt;p><b> 摘 要1</b></p><p> Abstract2</p><p><b> 第一章緒論1</b></p><p> 1.1.選題意義與研究現狀1</p><p> 1.2.國內外研究及趨勢1</p><p> 1.
7、3.論文結構2</p><p> 第二章編程軟件及語言介紹3</p><p> 2.1Quarters II編程環(huán)境介紹3</p><p> 2.1.1菜單欄3</p><p> 2.1.2工具欄8</p><p> 2.1.3功能仿真流程9</p><p>
8、 2.2Verilog HDL語言介10</p><p> 2.2.1什么是verilog HDL語言10</p><p> 2.2.2主要功能11</p><p> 第三章數字化時鐘系統(tǒng)硬件設計13</p><p> 3.1系統(tǒng)核心板電路分析13</p><p> 3.2系統(tǒng)主板電路分
9、析15</p><p> 3.2.1時鐘模塊電路15</p><p> 3.2.2顯示電路15</p><p> 3.2.3鍵盤控制電路17</p><p> 3.2.4蜂鳴電路設計17</p><p> 第四章數字化時鐘系統(tǒng)軟件設計18</p><p> 4.
10、1整體方案介紹18</p><p> 4.1.1整體設計描述18</p><p> 4.1.2整體信號定義19</p><p> 4.1.3模塊框圖20</p><p> 4.2分頻模塊實現20</p><p> 4.2.1分頻模塊描述20</p><p>
11、4.2.2分頻模塊設計20</p><p> 4.2.3分頻模塊仿真21</p><p> 4.3計時模塊實現21</p><p> 4.3.1計時模塊描述與實現21</p><p> 4.3.2計時模塊仿真23</p><p> 4.4按鍵處理模塊實現23</p>&l
12、t;p> 4.4.1按鍵處理模塊描述23</p><p> 4.4.2按鍵去抖處理模塊設計24</p><p> 4.4.3按鍵模塊去抖仿真24</p><p> 4.5鬧鐘模塊實現25</p><p> 4.5.1鬧鐘模塊設計25</p><p> 4.5.2鬧鐘設定模塊仿真
13、25</p><p> 4.6蜂鳴器模塊實現25</p><p> 4.6.1蜂鳴器模塊描述25</p><p> 4.6.2蜂鳴器模塊實現26</p><p> 4.6.3蜂鳴器模塊仿真27</p><p> 4.7顯示模塊實現27</p><p> 4.7.1
14、顯示模塊描述27</p><p> 4.7.2顯示模塊實現27</p><p> 4.7.3顯示模塊仿真29</p><p> 第五章系統(tǒng)調試及運行結果分析30</p><p> 5.1硬件調試30</p><p> 5.2軟件調試31</p><p> 5.
15、3調試過程及結果31</p><p> 5.4調試注意事項33</p><p> 第六章總結和展望34</p><p><b> 5.5總結34</b></p><p><b> 5.6展望34</b></p><p><b> 參考文
16、獻35</b></p><p><b> 致 謝36</b></p><p><b> 附 錄37</b></p><p><b> 緒論</b></p><p><b> 選題意義與研究現狀</b></p>
17、;<p> 在這個時間就是金錢的年代里,數字電子鐘已成為人們生活中的必需品。目前應用的數字鐘不僅可以實現對年、月、日、時、分、秒的數字顯示,還能實現對電子鐘所在地點的溫度顯示和智能鬧鐘功能,廣泛應用于車站、醫(yī)院、機場、碼頭、廁所等公共場所的時間顯示。</p><p> 隨著現場可編程門陣列( field program-mable gate array ,FPGA) 的出現,電子系統(tǒng)向集成化、大
18、規(guī)模和高速度等方向發(fā)展的趨勢更加明顯, 作為可編程的集成度較高的ASIC,可在芯片級實現任意數字邏輯電路,從而可以簡化硬件電路,提高系統(tǒng)工作速度,縮短產品研發(fā)周期。故利用 FPGA這一新的技術手段來研究電子鐘有重要的現實意義。設計采用FPGA現場可編程技術,運用自頂向下的設計思想設計電子鐘。避免了硬件電路的焊接與調試,而且由于FPGA的 I /O端口豐富,內部邏輯可隨意更改,使得數字電子鐘的實現較為方便。</p><
19、p> 本課題使用Cyclone EP1C6Q240的FPGA器件,完成實現一個可以計時的數字時鐘。該系統(tǒng)具有顯示時、分、秒,智能鬧鐘,按鍵實現校準時鐘,整點報時等功能。滿足人們得到精確時間以及時間提醒的需求,方便人們生活。</p><p><b> 國內外研究及趨勢</b></p><p> 隨著人們生活水平的提高和生活節(jié)奏的加快,對時間的要求越來越高,精
20、準數字計時的消費需求也是越來越多。</p><p> 二十一世紀的今天,最具代表性的計時產品就是電子時鐘,它是近代世界鐘表業(yè)界的第三次革命。第一次是擺和擺輪游絲的發(fā)明,相對穩(wěn)定的機械振蕩頻率源使鐘表的走時差從分級縮小到秒級,代表性的產品就是帶有擺或擺輪游絲的機械鐘或表。第二次革命是石英晶體振蕩器的應用,發(fā)明了走時精度更高的石英電子鐘表,使鐘表的走時月差從分級縮小到秒級。第三次革命就是單片機數碼計時技術的應用,使
21、計時產品的走時日差從分級縮小到1/600萬秒,從原有傳統(tǒng)指針計時的方式發(fā)展為人們日常更為熟悉的夜光數字顯示方式,直觀明了,并增加了全自動日期、星期的顯示功能,它更符合消費者的生活需求!因此,電子時鐘的出現帶來了鐘表計時業(yè)界跨躍性的進步。</p><p> 我國生產的電子時鐘有很多種,總體上來說以研究多功能電子時鐘為主,使電子時鐘除了原有的顯示時間基本功能外,還具有鬧鈴,報警等功能。商家生產的電子時鐘更從質量,價
22、格,實用上考慮,不斷的改進電子時鐘的設計,使其更加的具有市場。</p><p><b> 論文結構</b></p><p> 第一章詳細論述了近些年來,數字化時鐘系統(tǒng)研究領域的動態(tài)及整個數字化時鐘系統(tǒng)的發(fā)展狀況,同時分析了所面臨的問題與解決方案,從而提出了本論文的研究任務。</p><p> 第二章從研究任務著手,選擇符合設計要求的常用芯
23、片及其它元器件,詳細論述了各接口電路的設計與連接,以模塊化的形式,整合數字化時鐘硬件的設計從小到大,從局部到整體,循序漸進,最終實現一個功能齊全的數字化時鐘系統(tǒng)。</p><p> 第三章根據系統(tǒng)設計要求,著手對數字化時鐘系統(tǒng)軟件進行功能的實現,將各功能模塊有機結合,實現時鐘走時,實現鬧鈴、整點報時附加功能。</p><p> 第四章按照設計思路,在聯機調試過程中,對時鐘系統(tǒng)的不足和缺
24、點進行分析,將調試過程作重點的記錄。</p><p> 第五章對全文的總結,對本系統(tǒng)功能實現以及制作過程中需要注意的方面,及整個系統(tǒng)軟件編寫中所吸取的經驗教訓進行論述,同時,也對整個研究應用進行展望。</p><p><b> 編程軟件及語言介紹</b></p><p> Quarters II編程環(huán)境介紹</p><
25、p> 運行環(huán)境設計采用quartus II軟件實現,因此針對軟件需要用到的一些功能在這里進行描述.</p><p> Quartus II軟件界面簡單易操作,如下圖2.1:</p><p> 圖2.1Quartus II軟件界面圖</p><p><b> 菜單欄</b></p><p><b>
26、 【File】菜單</b></p><p> Quartus II的【 File】菜單除具有文件管理的功能外,還有許多其他選項</p><p> 圖2.2Quartus II菜單欄圖</p><p> (1)【New 】選項:新建工程或文件,其下還有子菜單</p><p> 【New Quartus II Project
27、】選項:新建工程。 </p><p> 【Design File】選項:新建設計文件,常用的有:AHDL文本文件、VHDL文本文件、Verilog HDL文本文件、原理圖文件等。 </p><p> 【Vector Waveform Five】選項:矢量波形文件。 </p><p> ?。?)【Open】選項:打開一個文件。 </p><p&
28、gt; ?。?)【New Project Wizard 】選項:創(chuàng)建新工程。點擊后彈出對話框。單擊對話框最上第一欄右側的“…”按鈕,找到文件夾已存盤的文件,再單擊打開按鈕,既出現如圖所示的設置情況。對話框中第一行表示工程所在的工作庫文件夾,第二行表示此項工程的工程名,第三行表示頂層文件的實體名,一般與工程名相同。</p><p> 圖2.3Quartus II新建工程圖</p><p&
29、gt; (4)【creat /update】選項:生成元件符號。可以將設計的電路封裝成一個元件符號,供以后在原理圖編輯器下進行層次設計時調用。 </p><p> 【 View】菜單:進行全屏顯示或對窗口進行切換,包括層次窗口、狀態(tài)窗口、消息窗口等。</p><p> 圖2.4Quartus II菜單欄全屏切換圖</p><p> 【Assignments
30、】菜單</p><p> (1)【Device】選項:為當前設計選擇器件。 </p><p> ?。?)【Pin】選項:為當前層次樹的一個或多個邏輯功能塊分配芯片引腳或芯片內的位置。</p><p> ?。?)【Timing Ananlysis Setting】選項:為當前設計的 tpd、tco、tsu、fmax等時間參數設定時序要求。 </p>&
31、lt;p> ?。?)【EDA tool setting】選項:EDA 設置工具。使用此工具可以對工程進行綜合、仿真、時序分析,等等。EDA 設置工具屬于第三方工具。 </p><p> ?。?)【Setting】選項:設置控制??梢允褂盟鼘こ?、文件、參數等進行修改,還可以設置編譯器、仿真器、時序分析、功耗分析等。 </p><p> (6)【assignment editor】選
32、項:任務編輯器。 </p><p> ?。?)【pin planner 】選項:可以使用它將所設計電路的 I/O 引腳合理的分配到已設定器件的引腳上。</p><p> 圖2.5Quartus II菜單欄設定引腳下拉圖</p><p> 【processing】菜單</p><p> 【processing】菜單的功能是對所設計的電路
33、進行編譯和檢查設計的正確性。 </p><p> ?。?)【Stop process】選項:停止編譯設計項目。 </p><p> (2)【Start Compilation】選項:開始完全編譯過程,這里包括分析與綜合、適</p><p> 配、裝配文件、定時分析、網表文件提取等過程。 </p><p> ?。?)【analyze cur
34、rent file】選項:分析當前的設計文件,主要是對當前設計文</p><p> 件的語法、語序進行檢查。 </p><p> ?。?)【compilation report】選項:適配信息報告,通過它可以查看詳細的適配信</p><p> 息,包括設置和適配結果等。 </p><p> ?。?)【start simulation】選項
35、:開始功能仿真。 </p><p> ?。?)【simulation report】選項:生成功能仿真報告。 </p><p> ?。?)【compiler tool】選項:它是一個編譯工具,可以有選擇對項目中的各個文</p><p><b> 件進行分別編譯。 </b></p><p> ?。?)【simulatio
36、n tool】選項:對編譯過電路進行功能仿真和時序仿真。 </p><p> ?。?)【classic timing analyzer tool】選項:classic時序仿真工具。 </p><p> ?。?0)【powerplay power analyzer tool】選項:PowerPlay 功耗分析工具。 </p><p> 圖2.6Quartus II菜
37、單欄運行下拉圖</p><p><b> 【tools】菜單</b></p><p> 【tools 】菜單的功能是 </p><p> ?。?)【run EDA simulation tool 】選項:運行EDA仿真工具,EDA是第三方仿真工具。 </p><p> ?。?)【run EDA timing anal
38、yzer tool 】選項:運行EDA時序分析工具,EDA是第三方仿真工具。 </p><p> ?。?)【Programmer 】選項:打開編程器窗口,以便對 Altera 的器件進行下載編程。</p><p> 圖2.7Quartus II仿真菜單下拉圖</p><p><b> 工具欄 </b></p><p>
39、; 工具欄緊鄰菜單欄下方,它其實是各菜單功能的快捷按鈕組合區(qū)。</p><p> 2.8Quartus II菜單欄圖</p><p> 圖2.9Quartus II菜單欄按鍵功能圖</p><p><b> 功能仿真流程</b></p><p><b> 新建仿真文件</b></p&
40、gt;<p> 圖2.10Quartus II菜單欄新建文件夾圖</p><p><b> 功能方正操作</b></p><p> 在菜單上點processing在下拉菜單中,如下圖:</p><p> 圖2.11Quartus II菜單欄processing下拉圖</p><p> Verilo
41、g HDL語言介</p><p> 什么是verilog HDL語言</p><p> Verilog HDL是一種硬件描述語言,用于從算法級、門級到開關級的多種抽象設計層次的數字系統(tǒng)建模。被建模的數字系統(tǒng)對象的復雜性可以介于簡單的門和完整的電子數字系統(tǒng)之間。數字系統(tǒng)能夠按層次描述,并可在相同描述中顯式地進行時序建模。</p><p> Verilog HDL
42、 語言具有下述描述能力:設計的行為特性、設計的數據流特性、設計的結構</p><p> 組成以及包含響應監(jiān)控和設計驗證方面的時延和波形產生機制。所有這些都使用同一種建模語言。此外,Verilog HDL語言提供了編程語言接口,通過該接口可以在模擬、驗證期間從設計外部訪問設計,包括模擬的具體控制和運行。</p><p> Verilog HDL語言不僅定義了語法,而且對每個語法結構都定義
43、了清晰的模擬、仿真語義。因此,用這種語言編寫的模型能夠使用Ve rilog仿真器進行驗證。語言從C編程語言中繼承了多種操作符和結構。</p><p> Verilog HDL提供了擴展的建模能力,其中許多擴展最初很難理解。但是,Verilog HDL語言的核心子集非常易于學習和使用,這對大多數建模應用來說已經足夠。當然,完整的硬件描述語言足以對從最復雜的芯片到完整的電子系統(tǒng)進行描述。</p>&l
44、t;p><b> 主要功能</b></p><p> 下面列出的是Verilog硬件描述語言的主要能力:</p><p> 基本邏輯門,例如and、or和nan d等都內置在語言中。</p><p> 用戶定義原語(UP)創(chuàng)建的靈活性。用戶定義的原語既可以是組合邏輯原語,也可以是時序邏輯原語。</p><p&g
45、t; 開關級基本結構模型,例如pmos和nmos等也被內置在語言中。</p><p> 提供顯式語言結構指定設計中的端口到端口的時延及路徑時延和設計的時序檢查。</p><p> 可采用三種不同方式或混合方式對設計建模。這些方式包括:行為描述方式—使用過程化結構建模;數據流方式—使用連續(xù)賦值語句方式建模;結構化方式—使用門和模塊實例語句描述建模。</p><p&g
46、t; Verilog HDL中有兩類數據類型:線網數據類型和寄存器數據類型。線網類型表示構件間的物理連線,而寄存器類型表示抽象的數據存儲元件。</p><p> 能夠描述層次設計,可使用模塊實例結構描述任何層次。</p><p> 設計的規(guī)模可以是任意的;語言不對設計的規(guī)模(大小)施加任何限制。</p><p> Verilog HDL不再是某些公司的專有語
47、言而是IEEE標準。</p><p> 人和機器都可閱讀Verilog語言,因此它可作為EDA的工具和設計者之間的交互語言。</p><p> Verilog HDL語言的描述能力能夠通過使用編程語言接口(PLI)機制進一步擴展。PLI是允許外部函數訪問Verilog模塊內信息、允許設計者與模擬器交互的例程集合。</p><p> 設計能夠在多個層次上加以描述
48、,從開關級、門級、寄存器傳送級(RTL)到算法級,包括進程和隊列級。</p><p> 能夠使用內置開關級原語在開關級對設計完整建模。</p><p> 同一語言可用于生成模擬激勵和指定測試的驗證約束條件,例如輸入值的指定。</p><p> Verilog HDL能夠監(jiān)控模擬驗證的執(zhí)行,即模擬驗證執(zhí)行過程中設計的值能夠被監(jiān)控和顯示。這些值也能夠用于與期望值比
49、較,在不匹配的情況下,打印報告消息。</p><p> 在行為級描述中,Verilog HDL不僅能夠在RTL級上進行設計描述,而且能夠在體系結構級描述及其算法級行為上進行設計描述。</p><p> 能夠使用門和模塊實例化語句在結構級進行結構描述。</p><p> 如圖顯示了Verilog HDL的混合方式建模能力,即在一個設計中每個模塊均可以在不同設計層
50、次上建模。</p><p> Verilog HDL還具有內置邏輯函數,例如&(按位與)和|(按位或)。</p><p> 對高級編程語言結構,例如條件語句、情況語句和循環(huán)語句,語言中都可以使用。</p><p> 可以顯式地對并發(fā)和定時進行建模。</p><p> 提供強有力的文件讀寫能力。</p><p
51、> 語言在特定情況下是非確定性的,即在不同的模擬器上模型可以產生不同的結果;例如,事件隊列上的事件順序在標準中沒有定義。</p><p> 圖2.12混合設計層次圖</p><p> 數字化時鐘系統(tǒng)硬件設計</p><p><b> 系統(tǒng)核心板電路分析</b></p><p> 本系統(tǒng)采用的開發(fā)平臺標配的
52、核心板是QuickSOPC,可以實現EDA、SOP和DSP的實驗及研發(fā)。本系統(tǒng)采用QuickSOPC標準配置為Altera公司的EP1C6Q240C8芯片。</p><p><b> 核心板的硬件資源</b></p><p> 核心板采用4層板精心設計,采用120針接口。QuickSOPC核心板的硬件原理框圖如圖2-1所示:</p><p>
53、; 圖3.1 QuickSOPC硬件方塊圖</p><p><b> FPGA電路</b></p><p> 核心板QuickSOPC上所用的FPGA為Altera公司Cyclone系列的EP1C6Q240。EP1C6Q240包含有5980個邏輯單元和92Kbit的片上RAM。EP1C6Q240有185個用戶I/O口,封裝為240-Pin PQFP。核心板EP1
54、C6Q240器件特性如表2-1。</p><p> 表3-1 核心EP1C6Q240器件特性:Hb7838電子-技術資料-電子元件-電路圖-技術應用網站-基本知識-原理-維修-作用-參數-電子元器件符號-各種圖紙</p><p><b> 配置電路</b></p><p> Cyclone FPGA的配置方式包括:主動配置模式、被動配置模
55、式以及JTAG配置模式。本系統(tǒng)采用的是JTAG配置模式下載配置數據到FPGA。</p><p> 通過JTAG結果,利用Quartus II軟件可以直接對FPGA進行單獨的硬件重新配置。Quartus II軟件在編譯時會自動生成用于JTAG配置的.sof文件。Cyclone FPGA設計成的JTAG指令比其他任何器件操作模式的優(yōu)先級都高,因此JTAG配置可隨時進行而不用等待其他配置模式完成。JTAG模式使用4個
56、專門的信號引腳:TDI、TDO、TMS以及TCK。JTAG的3個輸入腳TDI、TMS和TCK具有內部弱上拉,上拉電阻大約為25kΩ。在JGTA進行配置的時候,所有用戶I/O扣都為高阻態(tài)。</p><p><b> 時鐘電路</b></p><p> FPGA內部沒振蕩電路,使用有源晶振是比較理想的選擇。EP1C6Q240C8的輸入的時鐘頻率范圍為15.625~38
57、7MHz,經過內部的PLL電路后可輸出15.625~275MHz的系統(tǒng)時鐘。當輸入時鐘頻率較低時,可以使用FPGA的內部PLL調整FPGA所需的系統(tǒng)時鐘,使系統(tǒng)運行速度更快。</p><p> 核心板包含一個48MHz的有源晶振作為系統(tǒng)的時鐘源。如圖2-2所示。為了得到一個穩(wěn)定、精確的時鐘頻率,有源晶振的供電電源經過了LC濾波。</p><p> 本系統(tǒng)硬件整體設計框圖如圖2-3所示:
58、</p><p> 圖3.2數字時鐘系統(tǒng)硬件電路總體框圖</p><p><b> 系統(tǒng)主板電路分析</b></p><p><b> 時鐘模塊電路</b></p><p> FPGA內部沒振蕩電路,使用有源晶振是比較理想的選擇。EP1C6Q240C8的輸入的時鐘頻率范圍為15.625~38
59、7MHz,經過內部的PLL電路后可輸出15.625~275MHz的系統(tǒng)時鐘。當輸入時鐘頻率較低時,可以使用FPGA的內部PLL調整FPGA所需的系統(tǒng)時鐘,使系統(tǒng)運行速度更快。</p><p> 核心板包含一個50MHz的有源晶振作為系統(tǒng)的時鐘源。為了得到一個穩(wěn)定、精確的時鐘頻率,有源晶振的供電電源經過了LC濾波。</p><p> 圖3.3 系統(tǒng)時鐘電路圖</p><
60、;p><b> 顯示電路</b></p><p> 由于本設計需要顯示時間信息包括:時、分、秒,顯所以采用主板上七段數碼管顯示電路與系統(tǒng)連接實現顯示模塊的功能。</p><p> 主板上七段數碼管顯示電路如圖2-4 所示,RP4和 RP6 是段碼上的限流電阻,位碼由于電流較大,采用了三極管驅動。</p><p> 圖3.4七段數碼
61、管顯示電路圖</p><p> 數碼管 LED顯示是工程項目中使用較廣的一種輸出顯示器件。常見的數管有共陰和 共陽 2 種。共陰數碼管是將 8 個發(fā)光二極管的陰極連接在一起作為公共端,而共陽數碼管是將 8 個發(fā)光二極管的陽極連接在一起作為公共端。公共端常被稱作位碼,而將其他的 8 位稱作段碼。如圖 2-5所示為共陽數碼管及其電路,數碼管有 8 個段分別為:h、g、f、e、d、c、b 和a(h 為小數點) ,只要
62、公共端為高電平“1” ,某個段輸出低電平“0”則相應的段就亮。</p><p> 圖3.5七段數碼管顯示電路圖</p><p> 從電路可以看出,數碼管是共陽的,當位碼驅動信號為 0時,對應的數碼管才能操作;當段碼驅動信號為 0 時,對應的段碼點亮。</p><p><b> 鍵盤控制電路</b></p><p>
63、 鍵盤控制電路要實現時鐘系統(tǒng)調時的功能和鬧鈴開關的功能。本設計采用主板上的獨立鍵盤來實現這兩個功能。當鍵盤被按下是為“0”,未被按下是為“1”。電路連接圖如圖2-6所示。電路中為了防止FPGA的I/O設為輸出且為高電平在按鍵下直接對地短路,電阻RP9、RP10對此都能起到保護作用。</p><p> 圖3.6 鍵盤電路圖</p><p><b> 蜂鳴電路設計</b&
64、gt;</p><p> 如圖2-7所示,蜂鳴器使用 PNP三極管進行驅動控制,蜂鳴器使用的是交流蜂鳴器。當在 BEEP輸入一定頻率的脈沖時,蜂鳴器蜂鳴,改變輸入頻率可以改變蜂鳴器的響聲。因此可以利用一個 PWM 來控制 BEEP,通過改變 PWM 的頻率來得到不同的聲響,也可以用來播放音樂。若把 JP7斷開,Q4 截止,蜂鳴器停止蜂鳴。</p><p><b> 圖3.7蜂
65、鳴電路圖</b></p><p> 數字化時鐘系統(tǒng)軟件設計</p><p><b> 整體方案介紹</b></p><p><b> 整體設計描述</b></p><p> 設計中的數字時鐘,帶有按鍵校準,定點報時,數碼管顯示等功能。因此數字時鐘所包含的模塊可分為,分頻模塊,按鍵
66、模塊,計時校準模塊,鬧鐘模塊,LED顯示模塊,模塊之間的關系下圖:</p><p> 圖4.1整體模塊框圖</p><p> 針對框圖流程,設定出各個模塊的需求:</p><p><b> 分頻電路:</b></p><p> 針對計時器模塊與鬧鐘設定模塊的需求,可以知道分頻模塊需要生成一個1Hz的頻率信號,確保
67、計時模塊可以正常計數。</p><p><b> 計時器模塊:</b></p><p> 計數模塊的作用是收到分頻模塊1Hz頻率的信號線,能進行正確計時,并且可以通過按鍵進行時間的修改,且當整點時,給蜂鳴器產生使能信號,進行整點報時,播放音樂。</p><p><b> 鬧鐘設定模塊:</b></p>
68、<p> 可根據按鍵的設定鬧鐘的時間,當計時模塊的時間與鬧鐘設定模塊的時間相等的時候,給蜂鳴器一個使能信號,蜂鳴器鬧鈴。。</p><p><b> 蜂鳴器模塊:</b></p><p> 根據計時模塊,鬧鐘模塊給出的使能信號,判定蜂鳴器是整點報時,還是鬧鐘響鈴。整點報時會播放音樂,鬧鐘時嘀嘀嘀報警。</p><p><b
69、> LED顯示模塊:</b></p><p> 根據實際的需求顯示計時模塊的時間,還是鬧鐘設定模塊的時間,8個七段碼LED數碼管,進行掃描方式顯示數據。</p><p><b> 整體信號定義</b></p><p> 對整個模塊進行信號定義。</p><p><b> 接口及寄存器
70、定義</b></p><p> module clock(clk,key,dig,seg,beep);// 模塊名 clock </p><p> input clk; // 輸入時鐘 </p><p> input [4:0] key; //輸入按鍵 ,key[3:0]分別為秒,分鐘,小時的增加按鍵。Key[4]為鬧鐘設置按鍵,key[
71、5]為校準設置按鍵。</p><p> output [7:0] dig; // 數碼管選擇輸出引腳 a</p><p> output [7:0] seg; // 數碼管段輸出引腳</p><p> output beep;//蜂鳴器輸出端</p><p> reg [7:0] seg_r = 8'h0;
72、//定義數碼管輸出寄存器 </p><p> reg [7:0] dig_r; //定義數碼管選擇輸出寄存器 </p><p> reg [3:0] disp_dat;// 定義顯示數據寄存器 </p><p> reg [8:0] count1; //定義計數寄存器</p><p> reg [14:0] count
73、; //定義計數中間寄存器 </p><p> reg [23:0] hour = 24'h235956; // 定義現在時刻寄存器 </p><p> reg [23:0] clktime = 24'h000000;//定義設定鬧鐘</p><p> reg [1:0] keyen = 2'b11; // 定義
74、標志位 </p><p> reg [4:0] dout1 = 5'b11111;</p><p> reg [4:0] dout2 = 5'b11111;</p><p> reg [4:0] dout3 = 5'b11111;// 寄存器 </p><p> wire [4:0] key_done;
75、 // 按鍵消抖輸出 </p><p> reg [15:0] beep_count = 16'h0;//蜂鳴器寄存器</p><p> reg [15:0] beep_count_end = 16'hffff; //蜂鳴器截止寄存器</p><p> reg clktime_en = 1'b1;//鬧鐘使能寄存器&l
76、t;/p><p> reg sec ;//1秒時鐘</p><p> reg clk1;//1ms時鐘</p><p> reg beep_r;//寄存器 </p><p> wire beepen;//鬧鐘使能信號</p><p><b> 模塊框圖<
77、;/b></p><p> 通過quartus II的creat symble for current file功能生成框圖如下:</p><p> 圖4.2生成的符號圖</p><p> 分頻模塊實現,計數電路所需時鐘信號為1HZ,而系統(tǒng)時鐘為48MHZ,所以要對系統(tǒng)時鐘進行分頻以來滿足電路的需要。</p><p><b&
78、gt; 分頻模塊實現</b></p><p><b> 分頻模塊描述</b></p><p> 對于分頻模塊,關鍵是生成個1Hz的時鐘信號。考慮到仿真的需要,模塊中間生成1個1kHz的時鐘信號。1Hz的信號的產生用來產生時鐘的秒脈沖,框圖如下圖4.2:</p><p><b> 圖4.3分頻模塊圖</b>
79、;</p><p><b> 分頻模塊設計</b></p><p> 本系統(tǒng)程序設計時鐘的準確與否主要取決于秒脈沖的精確度。為了保證計時準確,我們對系統(tǒng)時鐘48MHz進行了48000分頻生成1kHz信號clk1,在通過1kHz信號,生成1Hz信號clk。</p><p> //1ms信號產生部分 </p><p>
80、 always @(posedge clk) // 定義 clock 上升沿觸發(fā) </p><p><b> begin </b></p><p> count = count + 1'b1; </p><p> if(count == 15'd24000) //0.5mS到了嗎? </
81、p><p><b> begin </b></p><p> count = 15'd0; //計數器清零 </p><p> clk1 = ~clk1; //置位秒標志 </p><p><b> end </b></p><p>&l
82、t;b> end</b></p><p> //秒信號產生部分 </p><p> always @(posedge clk1) // 定義 clock 上升沿觸發(fā) </p><p><b> begin </b></p><p> count1 = count1 + 1'
83、b1; </p><p> if(count1 == 9'd500) //0.5S到了嗎? </p><p><b> begin </b></p><p> count1 = 9'd0; //計數器清零 </p><p> sec = ~sec; //置位秒標志
84、 </p><p><b> end</b></p><p><b> End</b></p><p><b> 分頻模塊仿真</b></p><p> 通過設置功能仿真,檢查代碼的正確性</p><p><b> 仿真結果<
85、/b></p><p> 圖4.4 分頻模塊波形仿真圖</p><p> 右上圖可以知道,計數寄存器count累加到23999時,重新變?yōu)?,共計數了24000個值。觸發(fā)clk1跳變,使得count1加一,count1累加到499的時候,下一個數據為0,共技術500個值。所以,sec信號的頻率為1Hz,滿足設計要求。</p><p><b>
86、計時模塊實現</b></p><p><b> 計時模塊描述與實現</b></p><p> 計時模塊是采用16進制來實現的,將hour[23,0]定義為其時分秒,其中hour[3,0]為其秒鐘上的個位數值,hour[4,7]為其秒鐘上的十位數值,以此類推分鐘、時鐘的個位和十位。當clk脈沖過來時,秒個位hour[3,0]便開始加1,當加到9時,秒十位
87、加1,與此同時秒個位清零,繼續(xù)加1。當秒十位hour[7,4]為5秒個位為9時(即59秒),分個位hour[11,8]加1,與此同時秒個位和秒十位都清零。以此類推,當分十位hour[15,12]為5和分個位為9時(即59分),時個位加1,與此同時分個位hour[19,16]和分十位都清零。當時分十位[23,20]為2和分個位為4,全部清零,開始重新計時。從功能上講分別為模60計數器,模60計數器和模24計數器。</p>&
88、lt;p> //時間計算及校準部分</p><p> always @(negedge sec)//計時處理 </p><p><b> begin </b></p><p> hour[3:0] = hour[3:0] + 1'b1; //秒加 1 </p><p> if(ho
89、ur[3:0] >= 4'ha) //加到10,復位</p><p><b> begin </b></p><p> hour[3:0] = 4'h0; </p><p> hour[7:4] = hour[7:4] + 1'b1; // 秒的十位加一 </p>
90、<p> if(hour[7:4] >= 4'h6) //加到6,復位</p><p><b> begin </b></p><p> hour[7:4] = 4'h0; </p><p> hour[11:8] = hour[11:8] + 1'b1;//分個位加一
91、 </p><p> if(hour[11:8] >= 4'ha) //加到10,復位</p><p><b> begin </b></p><p> hour[11:8] = 4'h0; </p><p> hour[15:12] = hour[15:12] + 1'
92、;b1;//分十位加一 </p><p> if(hour[15:12] >= 4'h6) //加到6,復位</p><p><b> begin </b></p><p> hour[15:12] = 4'h0; </p><p> hour[19:16] = hour
93、[19:16] + 1'b1;//時個位加一 </p><p> if(hour[19:16] >= 4'ha) //加到10,復位</p><p><b> begin </b></p><p> hour[19:16] = 4'h0; </p><p> hour
94、[23:20] = hour[23:20] + 1'b1;//時十位加一 </p><p><b> end </b></p><p> if(hour[23:16] >= 8'h24) //加到24,復位</p><p> hour[23:16] = 8'h0; </p><
95、p><b> end </b></p><p><b> end </b></p><p><b> end </b></p><p><b> end </b></p><p><b> end </b></p
96、><p><b> end </b></p><p><b> 計時模塊仿真</b></p><p> 對計時模塊進行仿真,記錄仿真波形</p><p> 圖4.5 計時模塊仿真圖</p><p> 由上圖可見,當sec信號下降沿跳變時,hour寄出去會加1,也就相當于
97、跳了一秒鐘時間。當hour的時間為235959是,下一個計數器的值為000000,hour寄存器歸零,相當于半夜0點的時刻。仿真的結果達到預期,通過。</p><p><b> 按鍵處理模塊實現</b></p><p><b> 按鍵處理模塊描述</b></p><p><b> 框圖如下圖4.4:<
98、/b></p><p> 圖4.6按鍵控制功能圖</p><p> 模塊講計時部分和時間調整部分整合到一起,正常態(tài)的時候,時間正常運行,當key[5]被按下時,進入時間校準,可以通過key[2:0]三個鍵,分別對秒,分,時進行加1操作,從而進行時間校準。當key[3]被按下時,進入鬧鐘設定,可以通過key[2:0]三個鍵,分別對秒,分,時進行加1操作,從而進行鬧鐘的設定。<
99、/p><p> 圖4.7 按鍵模塊仿真圖</p><p> 通過按鍵key進行仿真控制,可以發(fā)現clktime會隨著按鍵的按下,分別有時鐘,分鐘秒鐘加1,仿真結果滿足設計要求。</p><p> 按鍵去抖處理模塊設計</p><p> 按鍵模塊實現去抖處理,及乒乓按鍵設計,確保后面的計時模塊與鬧鐘模塊的功能實現。</p>&
100、lt;p> assign key_done = key|dout3; // 按鍵消抖輸出 </p><p> always @(posedge count1[5]) //按鍵去噪聲</p><p><b> begin </b></p><p> dout1 <= key; </p><p>
101、; dout2 <= dout1;</p><p> dout3 <= dout2;//連續(xù)賦值</p><p><b> end</b></p><p> always @(negedge key_done[4]) </p><p><b> begin </b>
102、</p><p> keyen[1] = ~keyen[1]; //校準按鍵轉換乒乓按鍵</p><p><b> end</b></p><p> always @(negedge key_done[3]) </p><p><b> begin </b></p>
103、<p> keyen[0] = ~keyen[0]; //定時按鍵轉換乒乓按鍵</p><p><b> End</b></p><p><b> 按鍵模塊去抖仿真</b></p><p> 對于按鍵去抖動仿真,同樣才用功能仿真方式,這里不再重復設置與操作,如同上面的分頻模塊進行設置并進行仿真
104、。</p><p> Key寄存器為輸入按鍵,初始化電路為高電平,當有按鍵按下去的時候,變?yōu)榈碗娖?。因此改變key的值,觀察仿真結果是否正確。</p><p> 功能仿真,記錄仿真結果,如下圖:</p><p> 圖4.8 按鍵模塊仿真圖</p><p> 通過上圖可以知道,key_done會隨著key的變化而發(fā)生相應的變化,并有消除
105、噪聲的作用,功能仿真正確,達到設計目的。</p><p><b> 鬧鐘模塊實現</b></p><p><b> 鬧鐘模塊設計</b></p><p> 本設計中,判斷鬧鈴時間到,是通過判定時鐘系統(tǒng)實時時間的時鐘與分鐘是否分別等于設定的鬧鈴時間的時鐘、分鐘、秒鐘。當時間(hour[23:0])等于設定的鬧鐘時間(c
106、lktime[23:0])時,鬧鐘觸發(fā)時,播放嘀嘀嘀報警聲,鬧鐘會響10秒的時間(clktime[23:0]+10 >=hour[23:0])。正常情況下,鬧鈴時間到會進行為時1分鐘的蜂鳴報時,可以通過按下鬧鐘按鍵key[3]使其停止。當鬧鈴設置為整點是,會先進行整點報時,然后進入鬧鈴。</p><p> 圖4.9 鬧鐘控制鍵功能圖</p><p><b> 鬧鐘設定模
107、塊仿真</b></p><p> 圖4.10 鬧鐘模塊仿真圖</p><p> 通過按鍵key進行仿真控制,可以發(fā)現clktime會隨著按鍵的按下,分別有時鐘,分鐘秒鐘加1,仿真結果滿足設計要求。</p><p><b> 蜂鳴器模塊實現</b></p><p><b> 蜂鳴器模塊描述&l
108、t;/b></p><p> 蜂鳴器模塊負責整點報時,和鬧鈴的時候進行出聲的作用。整點報時的時候,播放音樂,10秒音樂播報完后停止整點報時。鬧鐘觸發(fā)時,播放嘀嘀嘀報警聲。當鬧鈴設置為整點是,會先進行整點報時,然后進入鬧鈴。當鬧鐘設定鍵被按下,響起的蜂鳴聲會被屏蔽。模塊框圖如下圖4.9:</p><p><b> 蜂鳴器模塊實現</b></p>
109、<p> //蜂鳴器的計數定時器</p><p> always@(posedge clk) </p><p><b> begin </b></p><p> beep_count = beep_count + 1'b1; //計數器加 1 </p><p> if((
110、beep_count == beep_count_end)&&(!(beep_count_end == 16'hffff))) </p><p><b> begin </b></p><p> beep_count = 16'h0; //計數器清零 </p><p> bee
111、p_r = ~beep_r; //取反輸出信號 </p><p><b> end </b></p><p><b> end </b></p><p> always @(posedge clk) </p><p><b> begin</b&g
112、t;</p><p> if (!beepen)</p><p> case(hour[3:0]) //整點報時音樂內容</p><p> 4'h0:beep_count_end = 16'h6a88; //中音 6 的分頻系數值 </p><p> 4'h1:beep_count_
113、end = 16'h8637; //中音 4 的分頻系數值</p><p> 4'h2:beep_count_end = 16'h7794; //中音 5 的分頻系數值 </p><p> 4'h3:beep_count_end = 16'hb327; //中音 1 的分頻系數值 </p><p
114、> 4'h5:beep_count_end = 16'hb327; //中音 1 的分頻系數值 </p><p> 4'h6:beep_count_end = 16'h7794; //中音 5 的分頻系數值 </p><p> 4'h7:beep_count_end = 16'h6a88; //中音
115、6 的分頻系數值 </p><p> 4'h8:beep_count_end = 16'h8637; //中音 4 的分頻系數值</p><p> default:beep_count_end = 16'hffff; //其他情況無聲</p><p><b> endcase</b></p&
116、gt;<p> else if (!clktime_en)</p><p><b> begin</b></p><p> case(count1[8:5])//鬧鐘嘀嘀嘀聲內容</p><p> 4'h0,4'h2,4'h6,4'h8:beep_count_end = 16
117、'h2f74; //高音 7 的分頻系數值 </p><p> default:beep_count_end = 16'hffff; //其他情況不出聲</p><p><b> endcase</b></p><p><b> end</b></p><p><
118、b> else</b></p><p> beep_count_end = 16'hffff;</p><p><b> end</b></p><p><b> //鬧鈴使能控制</b></p><p> always @(posedge clk) </p
119、><p><b> begin</b></p><p> if (!keyen[0])//判斷鬧鈴是否有取消</p><p> clktime_en = 1'b1;//鬧鈴響起后,需要手動關閉鬧鈴</p><p> else if ((clktime[23:0] <= ho
120、ur[23:0])&(clktime[23:0]+10 >=hour[23:0]))</p><p> //鬧鈴過一點時間,自動關閉。</p><p> clktime_en = 1'b0;</p><p><b> end</b></p><p><b> 蜂鳴器模塊仿真<
121、/b></p><p> 功能仿真,記錄波形圖:</p><p> 圖4.11蜂鳴器模塊仿真圖</p><p> 通過上圖可以看出來,當hour與clktime相等時,鬧鈴被觸發(fā),經過一段時間后,鬧鈴停止工作,設計滿足要求。</p><p><b> 顯示模塊實現</b></p><p&
122、gt;<b> 顯示模塊描述</b></p><p> 此設計中的LED七段數碼管顯示模塊主要顯示時間的時、分、秒信息,數碼管為共陽的。在此設計中占非常重要的地位,它是確保時間能直觀呈現的橋梁。在設計過程中,首先進行程序編寫和調試的應該是顯示模塊。</p><p> 下面輸入的端口為鬧鐘設定鍵被按下,七段數碼管會顯示鬧鐘設定情況下數碼管所對應的數字。正常時間情況
123、、鬧鐘設定以及查看鬧鐘所設定好的時間都是同樣的原理,當他們被按下數碼管會顯示對應的模式相應的數字。</p><p> 圖4.12顯示模塊圖</p><p><b> 顯示模塊實現</b></p><p><b> //數碼管顯示內容</b></p><p> always @(posedge
124、 clk)</p><p><b> begin</b></p><p> case({keyen[0],count1[3:1]}) //選擇掃描顯示數據 </p><p> 4'd0:disp_dat = clktime[3:0];//秒個位 </p><p> 4'd1:disp_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于fpga數字時鐘設計-畢業(yè)論文
- 畢業(yè)設計基于fpga的多功能數字時鐘
- 畢業(yè)設計基于fpga的多功能的數字時鐘設計
- 基于fpga的數字時鐘設計設計
- 基于fpga數字時鐘的設計
- 基于FPGA數字時鐘的設計(論文)定稿.doc
- 基于FPGA數字時鐘的設計(論文)初稿.doc
- 畢業(yè)論文-基于fpga數字時鐘的設計【精校排版】
- 基于fpga的數字時鐘設計
- 基于FPGA數字時鐘的設計(論文)二稿.doc
- 基于fpga的數字時鐘設計部分
- 畢業(yè)設計-數字時鐘設計
- 數字日歷時鐘畢業(yè)設計論文
- 數字時鐘畢業(yè)設計
- 畢業(yè)設計論文基于fpga技術的數字存儲示波器設計
- 基于fpga的數字時鐘課程設計
- 基于fpga的led數顯時鐘畢業(yè)設計
- 基于proteus數字時鐘制作畢業(yè)設計
- 基于fpga的數字電子時鐘設計
- 畢業(yè)設計---電子數字時鐘
評論
0/150
提交評論