EDA課程設計數字時鐘_第1頁
EDA課程設計數字時鐘_第2頁
EDA課程設計數字時鐘_第3頁
EDA課程設計數字時鐘_第4頁
EDA課程設計數字時鐘_第5頁
已閱讀5頁,還剩15頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、序號 綜合成績優秀( )良好( )中等( )及格( )不及格( )教師(簽名)批改日期EDA技術課程設計報告 課題: 數字電子鐘邏輯電路設計院系 電子與電氣工程學院 專業 電氣工程及其自動化 班級 學號 姓名 指導教師 楊銀賢、王文杰、葉曉婷、王曉輝 起止日期 2014-12-18至2014-12-19 2014年 12 月 目錄一、課程設計任務及要求11.1實驗目的11.2功能設計1二、整體設計思想12.1性能指標及功能設計12.2總體方框22.3FPGA芯片介紹2三、編譯與調試33.1數字鐘的基本工作原理:33.1.1調時、調分信號的產生33.1.2計數顯示電路43.2設計思路43.3設計

2、步驟53.3.1工程建立及存盤53.3.2工程項目的編譯53.3.3時序仿真63.3.4引腳鎖定63.3.5硬件測試63.3.6實驗結果7四、程序設計8五、實驗電路圖165.1實驗原理圖165.2PCB圖16六、心得體會17七、 參考文獻18一、課程設計任務及要求1.1實驗目的1)掌握VHDL語言的基本運用2)掌握QuartusII的簡單操作并會使用EDA實驗箱3)掌握一個基本EDA課程設計的操作1.2功能設計要求顯示格式為小時分鐘秒鐘,整點報時,報時時間為5 秒,即從整點前5 秒鐘開始進行報時提示,LED 開始閃爍,過整點后,停止閃爍。調整時間的按鍵用按鍵模塊的S1 和S2,S1 調節小時,

3、每按下一次,小時增加一個小時,S2 調整分鐘,每按下一次,分鐘增加一分鐘。另外用S8 按鍵作為系統時鐘復位,復位后全部顯示000000。二、整體設計思想2.1性能指標及功能設計 1)時、分、秒計時器時計時器為一個24進制計數器,分、秒計時器均為60進制計數器。當秒計時器接受到一個秒脈沖時,秒計數器開始從00計數到59,此時秒顯示器將顯示00、01、02、.、59、00;每當秒計數器數到00時,就會產生一個脈沖輸出送至分計時器,此時分計數器數值在原有基礎上加1,其顯示器將顯示00、01、02、.、59、00;每當分計數器數到00時,就會產生一個脈沖輸出送至時計時器,此時時計數器數值在原有基礎上加

4、1,其顯示器將顯示00、01、02、.、23、00。2)校時電路當開關撥至校時檔時,電子鐘秒計時工作,通過時、分校時開關分別對時、分進行校對,開關每按1次,與開關對應的時或分計數器加1,當調至需要的時與分時,撥動reset開關,電子鐘從設置的時間開始往后計時。2.2總體方框2.3FPGA芯片介紹SOPC-NIOSII EDA/SOPC實驗開發系統是根據現代電子發展的方向,集EDA和SOPC系統開發為一體的綜合性實驗開發系統,除了滿足高校專、本科生和研究生的SOPC教學實驗開發之外,也是電子設計和電子項目開發的理想工具。整個開發系統由核心板SOPC-NiosII-EP2C35、系統板和擴展板構成

5、,根據用戶不同的需求配置成不同的開發系統。SOPC-NiosII-EP2C35開發板是在經過長期用戶需求考察后,結合目前市面上以及實際應用需要,同時兼顧入門學生以及資深開發工程師的應用需求而研發的。就資源而言,它已經可以組成一個高性能的嵌入式系統,可以運行目前流行的RTOS,如uC/OS、uClinux等。系統主芯片采用672引腳、BGA封裝的EP2C35 FPGA,它擁有33216個LE,105個M4K片上RAM(共計bits),35個1818硬件乘法器、4個高性能PLL以及多達475個用戶自定義IO。板上提供了大容量的SRAM、SDRAM和Flash ROM等以及常用的RS-232、USB

6、2.0、 RJ45接口和標準音頻接口等,除去板上已經固定連接的IO,還有多達260個IO通過不同的接插件引出,供用戶使用。所以,不管從性能上而言,還是從系統靈活性上而言,無論您是初學者,還是資深硬件工程師,它都會成為您的好幫手。如圖2.3所示:圖2.3FPGA系統功能框圖三、編譯與調試3.1數字鐘的基本工作原理:3.1.1調時、調分信號的產生由計數器的計數過程可知,正常計數時,當秒計數器(60進制)計數到59 時,再來一個脈沖,則秒計數器清零,重新開始新一輪的計數,而進位則作為分計數器的計數脈沖,使分計數器計數加1。現在我們把電路稍做變動:把秒計數器的進位脈沖和一個頻率為2Hz的脈沖信號同時接

7、到一個2選1數據選擇器的兩個數據輸入端,而位選信號則接一個脈沖按鍵開關,當按鍵開關不按下去時(即為0),則數據選擇器將秒計數器的進位脈沖送到分計數器,此時,數字鐘正常工作;當按鍵開關按下去時(即為1),則數據選擇器將另外一個2Hz 的信號作為分計數器的計數脈沖,使其計數頻率加快,當達到正確時間時,松開按鍵開關,從而達到調時的目的。調節小時的時間也一樣的實現。3.1.2計數顯示電路由計數部分、數據選擇器、譯碼器組成,是時鐘的關鍵部分。1、計數部分:由兩個60進制計數器和一個24 進制計數器組成,其中60 進制計數器可用6 進制計數器和10 進制計數器構成;24 進制的小時計數同樣可用6 進制計數

8、器和10 進制計數器得到:當計數器計數到24 時,“2”和“4”同時進行清零,則可實現24 進制計數。2、數據選擇器:84 輸入14 輸出的多路數據選擇器,因為本實驗用到了8個數碼管(有兩個用來產生隔離符號)。3、譯碼器:七段譯碼器。譯碼器必須能譯出,由實驗二中譯碼器真值表可得:字母F 的8421BCD 碼為“1111”,譯碼后為“”,現在如果只譯出,即字母F的中間一橫,則譯碼后應為“”,這樣,在數碼管上顯示的就為。3.2設計思路根據系統設計要求,系統設計采用自頂向下設計方法,由時鐘分頻部分、計時部分、按鍵部分調時部分和顯示部分五個部分組成。這些模塊都放在一個頂層文件中。1)時鐘計數:首先下載

9、程序進行復位清零操作,電子鐘從00:00:00計時開始。setshi可以調整時鐘的小時部分, setfen可以調整分鐘,步進為1。用6位數碼管分別顯示“時”、“分”、“秒”,通過OUTPUT( 6 DOWNTO 0 )上的信號來點亮指定的LED七段顯示數碼管。2) 時間設置:手動調節分鐘、小時,可以對所設計的時鐘任意調時間,這樣使數字鐘真正具有使用功能。我們可以通過實驗板上的S2和S1進行任意的調整,因為我們用的時鐘信號均是1HZ的,所以每LED燈變化一次就來一個脈沖,即計數一次。3)清零功能:S8為復位鍵,低電平時實現清零功能,高電平時正常計數。可以根據我們自己任意時間的復位。3.3設計步驟

10、3.3.1工程建立及存盤1打開 Quartus,單擊“File”菜單,選擇 Project Wizard,對話框如下:分別輸入項目的工作路徑、項目名和實體名,單擊Finish。2.單擊“File”菜單,選擇New,彈出小對話框,雙擊“VHDL File,即選中了文本編輯方式。在出現的“Vhdl1.vhd”文本編輯窗中鍵入VHDL程序,輸入完畢后,選擇 As,即出現“Save As”對話框。選擇自己建立好的存放本文件的目錄,然后在文件名框中鍵入文件名,按“Save”按鈕。3. 建立工程項目,在保存VHDL文件時會彈出是否建立項目的小窗口,點擊“Yes”確定。即出現建立工程項目的導航窗口,點擊“N

11、ext”,最后在出現的屏幕中分別鍵入新項目的工作路徑、項目名和實體名。注意,原理圖輸入設計方法中,存盤的原理圖文件名可以是任意的,但VHDL程序文本存盤的文件名必須與文件的實體名一致,輸入后,單擊“Finish”按鈕。3.3.2工程項目的編譯單擊工具條上的編譯符號開始編譯,并隨著進度不斷變化屏幕,編譯完成后的屏幕如圖所示:3.3.3時序仿真建立波形文件:選擇 ,在New窗中選中“Other File”標簽。在出現的屏幕中選擇“Vector Waveform File”項出現一新的屏幕。在出現的新屏幕中,雙擊“Name”下方的空白處,彈出“Insert Nod or Bus”對話框,單擊該對話框

12、的“Node Finder”。在屏幕中的 Filter 中選擇 Pins,單擊“List”。而后,單擊“”,所有輸入/輸出都被拷貝到右邊的一側,這些正是我們希望的各個引腳,也可以只選其中的的一部分,根據實際情況決定。然后單擊屏幕右上腳的 “OK”。在出現的小屏幕上單擊“OK”。 設定仿真時間寬度。選擇 Edit End time選項,在End time選擇窗中選擇適當的仿真時間域,以便有足夠長的觀察時間。波形文件存盤。選擇 as 選項,直接存盤即可。運行仿真器。在菜單中選擇項,直到出現,仿真結束。3.3.4引腳鎖定將設計編程下載進選定的目標器件中,如EPF10K10,作進一步的硬件測試,將設計

13、的所有輸入輸出引腳分別與目標器件的EPF10K10的部分引腳相接,操作如下:1選擇 Assignments Assignments Editor ,即進入 Assignments Editor編輯器。在Category 欄選擇 Pin,或直接單擊右上側的 Pin 按鈕。2雙擊 TO 欄的new,在出現的的下拉欄中選擇對應的端口信號名(如 D0);然后雙擊對應的欄的new,在出現的下拉欄中選擇對應的端口信號名的期間引腳號。3最后存儲這些引腳鎖定信息后,必須再編譯(啟動 )一次,才能將引腳鎖定信息編譯進編程下載文件中。此后就可以準備將編譯好的 SOF 文件下載到試驗系統的FPGA中去了。3.3.5

14、硬件測試1.首先將下載線把計算機的打印機口與目標板(如開發板或實驗板)連接好,打開電源。2.打開編輯窗和配置文件。選擇,彈出一個編輯窗。在Mode欄中選擇JTAG,并在選項下的小方框打勾。注意核對下載文件路徑與文件名。如果文件沒有出現或者出錯,單擊左Add file側按鈕,手動選擇配置文件 clocksof。 3.最后單擊下載標符Start,即進入對目標器件 FPGA 的配置下載操作。當 Progress 顯示100%,以及在底部的處理欄中出現 Configuration Succeeded 時,表示編程成功,如圖所示。注意,如果必要時,可再次單擊 Start ,直至編程成功。4下載完成后,通

15、過硬件測試進一步確定設計是否達到所有的技術指標,如未達到,可逐步檢查,哪部分出現問題。如果是代碼出現問題,須修改代碼;若是時序波形圖有問題,須重新設置。3.3.6實驗結果鍵s8為復位按鍵,鍵s1設置小時,鍵s2設置分鐘。下載成功后,按下鍵s8,即使六個LED復位清零,顯示數秒的自動計時。當秒數滿59則進一位,分鐘數滿59進一位,當顯示為xx:59:55時,外接的LED小燈開始閃爍,過整點以后停止閃爍。調試實物圖如圖3.3.6所示: 圖3.3.6調試實物圖四、程序設計1. (1)秒計數器(miao)VHDL 程序描述library ieee; use ieee.std_logic_1164.al

16、l; use ieee.std_logic_unsigned.all; entity miao is port( clk,reset,setfen:in std_logic; enfen:out std_logic; countmiao:out std_logic_vector(7 downto 0) ); end miao; architecture fun of miao is signal count:std_logic_vector(7 downto 0); signal enfen_1,enfen_2:std_logic; begin countmiao=count; enfen_2

17、=(setfen and clk); enfen=(enfen_1 or enfen_2); process(clk,reset,setfen) begin if(reset=0) then count=; enfen_1=0; elsif(clkevent and clk=1) then if(count(3 downto 0)=1001) then if(count16#60#) then if(count=) then count=; enfen_1=1; else count=count+7; end if; else count=;enfen_1=0; end if; elsif(c

18、ount16#60#) then count=count+1; enfen_1=0; else count=; enfen_1=1; end if; end if; end process; end fun;(2)秒計數器(miao)仿真波形圖(3)秒計數器(miao)仿真分析 1、隨著 clk 脈沖信號的不斷到來,countmiao 記錄出 clk 的脈沖個數,計數 到 59 時,在下一個 clk 脈沖信號到來時,輸出端 enfen 輸出高定平,即向分進 位,同時 countmiao 清零。 2、 reset 為清零端, reset 低電平時, 當 countmiao 計數從零重新開始計數。

19、 3、setfen 為分的手動進位端,當 setfen 高定平時且 clk 脈沖到來時,輸出 enfen 高電平,向分進位。2. (1)分計數器(fen)VHDL 程序描述 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity fen is port( imiao,clk,reset,setshi:in std_logic; enshi:out std_logic; countfen:out std_logic_vector(7 downto 0) ); end fen; archi

20、tecture fun of fen is signal enshi_1,enshi_2:std_logic; signal count:std_logic_vector(7 downto 0); begin countfen=count; enshi_2=(setshi and clk); enshi=(enshi_1 or enshi_2); process(imiao,reset,setshi) begin if(reset=0) then count=; elsif(imiaoevent and imiao=1) then if(count(3 downto 0)=1001) then

21、 if(count16#60#) then if(count=) then count=; enshi_1=1; else count=count+7; end if; else count=; end if; elsif(count16#60#) then count=count+1; enshi_1=0; else count=; end if; end if; end process; end fun;(2)分計數器(fen)仿真波形圖(3)分計數器(fen)仿真分析 1、imiao 為秒計數器的 enfen 進位輸出端,當 enfen(imiao)高電平到來 時, clk 高電平時,

22、且 countfen 開始計數。 countfen 計數到 59 時, 下一個 enfen (imiao)、clk 到來時,enshi 高電平,即向時進位,同時 countfen 清零。 2、reset 為清零端,當 reset 低電平時,countfen 計數從零重新開始計數。 3、setshi 為時的手動進位端,當 setshi 高定平時且 clk 脈沖到來時,輸出 en 時高電平,向時進位。3.(1)時計數器(shi)VHDL 程序描述library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; e

23、ntity shi is port( ifen,reset:in std_logic; countshi:out std_logic_vector(7 downto 0) ); end shi; architecture fun of shi is signal count:std_logic_vector(7 downto 0); begin countshi=count; process(ifen,reset) begin if(reset=0) then count=; elsif(ifenevent and ifen=1) then if(count(3 downto 0)=1001)

24、 then if(count16#23#) then count=count+7; else count=; end if; elsif(count16#23#) then count=count+1; else count=; end if; end if; end process; end fun;(2)時計數器(shi)仿真掃描顯示譯碼器(saomiao)仿真(3)時計數器(shi)仿真分析 1、ifen 為分計數器的 enshi 進位輸出端,當 enshi(ifen)為高電平時, countshi 計數。countshi 計數到 23 時,當下一個 enshi(ifen)、clk 到來

25、時, countshi 會自動清零。 2、reset 為清零端,當 reset 低電平時,countfen 計數從零重新開始計數。4.整點報時(1)整點報時器(baoshi)VHDL 程序描述 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; Entity baoshi is port( clk:in std_logic; inputmiao,inputfen:in std_logic_vector(6 downto 0); output:out std_logic_vector(1 down

26、to 0) ); end baoshi; architecture fun of baoshi is signal temp:std_logic_vector(1 downto 0); signal nummiao,numfen:std_logic_vector(7 downto 0); begin nummiao=inputmiao; numfen=inputfen; outputtemptemptemptemptemp=00; end case; end if; end if; end process; end fun; 11(2)整點報時器(baoshi)仿真波形圖(3)整點報時器(ba

27、oshi)仿真分析 input 為分計數器的輸出端,當輸出 58、59 和 00(十六進制)時,整點報 時器(baoshi)的輸出端 output 為高電平,點亮 LED 燈。當 intput 為 58、59 時,點亮一個 LED 燈,當 input 為 00 時,點亮兩個 LED 燈。其他情況時,LED 燈均不發光。4. (1)分頻器(fenpin)設計 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity fenpin is port( clk_5M:in std_logic;

28、clk:out std_logic ); end fenpin; architecture fun of fenpin is signal count:std_logic_vector(22 downto 0); begin process(clk_5M) begin if (clk_5Mevent and clk_5M=1) then if(count=1) then count=0; clk=1; else count= count+1; clk=0; end if;end if;end process; end fun;5. (1)掃描顯示譯碼器(saomiao)VHDL 程序描述掃描顯示譯碼器是用來顯示時鐘數值的裝置,將數字時鐘的高低電平信號用 數碼管的數值顯示出來。八個數碼管中,用六個數碼管顯示時、分和秒,另外兩 個可做為時和分、分和秒之間的間隔,始終不顯示。 首先對八個數碼管進行掃描,每一時刻都只有一個數碼管處于掃描狀態,并 將此時的數字時鐘的高低電平通過十六進制的 BCD 碼轉換為數碼管顯示數值。library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entit

溫馨提示

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

評論

0/150

提交評論