基于FPGA的數(shù)字時(shí)鐘設(shè)計(jì)三峽大學(xué)電氣與新能源學(xué)院_第1頁
基于FPGA的數(shù)字時(shí)鐘設(shè)計(jì)三峽大學(xué)電氣與新能源學(xué)院_第2頁
基于FPGA的數(shù)字時(shí)鐘設(shè)計(jì)三峽大學(xué)電氣與新能源學(xué)院_第3頁
基于FPGA的數(shù)字時(shí)鐘設(shè)計(jì)三峽大學(xué)電氣與新能源學(xué)院_第4頁
基于FPGA的數(shù)字時(shí)鐘設(shè)計(jì)三峽大學(xué)電氣與新能源學(xué)院_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、CPLD及電子CAD 同組同學(xué):代磊一 EDA介紹EDA技術(shù)就是以計(jì)算機(jī)為工具,設(shè)計(jì)者在EDA軟件(MAX+plus II 或Quartus II )平臺(tái)上,用硬件描述語言VHDL或相關(guān)類似編程語言完成設(shè)計(jì)文件,然后由計(jì)算機(jī)自動(dòng)地完成邏輯編譯、化簡、分割、綜合、優(yōu)化、布局、布線和仿真,直至對于特定目標(biāo)芯片的適配編譯、邏輯映射和編程下載等工作。EDA技術(shù)的出現(xiàn),極大地提高了電路設(shè)計(jì)的效率和可操作性,減輕了設(shè)計(jì)者的勞動(dòng)強(qiáng)度。二 VHDL語言(1)VHDL語言介紹:VHDL主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu),行為,功能和接口。除了含有許多具有硬件特征的語句外,VHDL的語言形式和描述風(fēng)格與句法是十分類似于一

2、般的計(jì)算機(jī)高級(jí)語言。(2)VHDL語言的基本知識(shí): (a)實(shí)體,構(gòu)造體Entity(實(shí)體)用來說明模型的外部輸入輸出特征; Architecture(構(gòu)造體)用來定義模型的內(nèi)容和功能每一個(gè)構(gòu)造體必須有一個(gè)實(shí)體與它相對應(yīng),所以兩者一般成對出現(xiàn) (b).順序語句和并行語句順序語句只能出現(xiàn)在進(jìn)程(Process)和子程序中,其中子程序包括函數(shù)(Function)和過程(Procedure). 順序語句種類有:進(jìn)程語句,賦值語句,流程控制語句,等待語句,子程序調(diào)用語句,返回語句,空操作語句。(具體例子見后面設(shè)計(jì)的系統(tǒng)示例中)。并行語句是VHDL區(qū)別于傳統(tǒng)軟件描述語言最顯著的一個(gè)方面.各種并行語句在結(jié)構(gòu)

3、體中是同時(shí)并發(fā)執(zhí)行的,也就是說,只要某個(gè)信號(hào)發(fā)生變化,都會(huì)引起相應(yīng)語句被執(zhí)行而產(chǎn)生相應(yīng)的輸出,其執(zhí)行順序與書寫順序沒有任何關(guān)系。但在一個(gè)結(jié)構(gòu)體內(nèi),各進(jìn)程外部的語句是并發(fā)執(zhí)行的,它們之間可以通過信號(hào)進(jìn)行通信,而每個(gè)進(jìn)程內(nèi)部的語句是順序執(zhí)行的。(相關(guān)例子也在后面列的設(shè)計(jì)例子中有)在實(shí)際編程時(shí),應(yīng)將并行語句和順序語句靈活運(yùn)用才符合VHDL的設(shè)計(jì)要求和硬件特點(diǎn)。(c)進(jìn)程兩種進(jìn)程設(shè)計(jì)方式:*【進(jìn)程標(biāo)號(hào):】 process 【(敏感參數(shù)列表)】is 進(jìn)程申明部分; begin 順序語句end process*【進(jìn)程標(biāo)號(hào):】 process is 進(jìn)程申明部分; begin wait 語句; 順序語句en

4、d process* (d)信號(hào)與變量信號(hào)與變量的區(qū)別見下面圖表: (e)順序語句IF_THEN_ELSE語句只能在進(jìn)程內(nèi)使用,至少應(yīng)有一個(gè)條件句,條件句必須由布爾表達(dá)式構(gòu)成。語句形式:IF 條件句 Then 順序語句 ELSIF 條件句 Then 順序語句 ELSE 順序語句ENDIFCASE_WHEN語句表達(dá)式可以是一個(gè)整數(shù)類型或枚舉類型的值,也可以是由這些數(shù)據(jù)類型的值構(gòu)成的數(shù)組,條件句中的選擇值必在表達(dá)式的取值范圍內(nèi)。除非所有條件句中的選擇值能完整覆蓋CASE語句中表達(dá)式的取值,否則最末一個(gè)條件句中的選擇必須用“OTHERS”表示。CASE語句中每一條件句的選擇值只能出現(xiàn)一次,不能有相同

5、選擇值的條件語句出現(xiàn)。CASE語句執(zhí)行中必須選中,且只能選中所列條件語句中的一條。LOOP語句基本格式:LOOP標(biāo)號(hào):重復(fù)模式 LOOP順序語句;END LOOP LOOP標(biāo)號(hào)FOR IN LOOP順序語句END LOOP;WHILE LOOP順序語句END LOOP;LOOP標(biāo)號(hào): LOOP順序語句EXIT LOOP標(biāo)號(hào) ;END LOOP;NEXT LOOP標(biāo)號(hào) WHEN 語句2、并行語句VHDL語言與傳統(tǒng)軟件描述語言最大的不同,有多種語句格式,包括:并行信號(hào)賦值語句、進(jìn)程語句、塊語句、條件信號(hào)賦值語句、元件例化語句、生成語句、并行過程調(diào)用語句。各種并行語句在結(jié)構(gòu)體中的執(zhí)行是同步進(jìn)行的,或

6、者說是并行運(yùn)行的,其執(zhí)行方式與書寫的順序無關(guān)。在執(zhí)行中,并行語句之間可以有信息往來,也可以是互為獨(dú)立、互不相關(guān)、異步運(yùn)行的(如多時(shí)鐘情況)。每一并行語句內(nèi)部的語句運(yùn)行方式可以有兩種不同的方式,即并行執(zhí)行方式(如塊語句)和順序執(zhí)行方式(如進(jìn)程語句)With_Select_Then選擇信號(hào)語句所有的“WHEN”子句必須是互斥的。一般用 “When Others”來處理未考慮到的情況,只有一個(gè)參考信號(hào)和賦值符 (=),每一子句結(jié)尾是逗號(hào),最后一句是分號(hào)When_Else選擇信號(hào)語句根據(jù)指定條件對信號(hào)賦值,條件可以為任意表達(dá)式;根據(jù)條件的出現(xiàn)的先后次序隱含優(yōu)先權(quán);最后一個(gè) ELSE子句隱含了所有未列出

7、的條件。每一子句的結(jié)尾沒有標(biāo)點(diǎn),只有最后一句有分號(hào)3、進(jìn)程語句進(jìn)程語句是VHDL中最重要的語句,具有并行和順序行為的雙重性。進(jìn)程和進(jìn)程語句之間是并行關(guān)系,進(jìn)程內(nèi)部是一組連續(xù)執(zhí)行的順序語句,進(jìn)程語句與構(gòu)造體中的其余部分進(jìn)行信息交流是靠信號(hào)完成的?;靖袷剑哼M(jìn)程標(biāo)號(hào): PROCESS (信號(hào)敏感表) IS說明區(qū)BEGIN順序語句END PROCESS 進(jìn)程標(biāo)號(hào);信號(hào)敏感表進(jìn)程賴以啟動(dòng)的是敏感表。對于表中列出的任何信號(hào)的改變,都將啟動(dòng)進(jìn)程,執(zhí)行進(jìn)程內(nèi)相應(yīng)順序語句。一些VHDL綜合器,綜合后,對應(yīng)進(jìn)程的硬件系統(tǒng)對進(jìn)程中的所有輸入的信號(hào)都是敏感的,不論在源程序的進(jìn)程中是否把所有的信號(hào)都列人敏感表中。為了

8、使軟件仿真與綜合后的硬件仿真對應(yīng)起來,應(yīng)當(dāng)將進(jìn)程中的所有輸人信號(hào)都列入敏感表中雙向口雙口RAM的輸入和輸出是相互獨(dú)立的吧,他們的工作是分別由(輸入始能,輸入時(shí)鐘,輸入地址)和(輸出始能,輸出時(shí)鐘,輸出地址)控制了,只要注意,同時(shí)不對一個(gè)地址進(jìn)行讀寫操作,就應(yīng)該不會(huì)出問題。以下是課堂上雙向口示例程序:ENTITY ldcnt IS PORT (clk, ld, oe: IN std_logic;count: INOUT std_logic_vector(7 DOWNTO 0);END ldcnt; ARCHITECTURE archldcnt OF ldcnt ISSIGNAL int_coun

9、t: std_logic_vector(7 DOWNTO 0); BEGINcnt: PROCESS (clk)BEGINIF rising_edge(clk) THENIF ld=1 THEN int_count = count; ELSE int_count = int_count + 1;END IF;END IF;END PROCESS cnt ;outen: PROCESS (oe, int_count) BEGINIF oe = 1 THEN count = int_count ; ELSE count Z) ; END IF ;END PROCESS outen;END arch

10、ldcnt; 狀態(tài)機(jī)所謂狀態(tài)機(jī)(FSM有限狀態(tài)機(jī)),簡單來講,就是給個(gè)條件,由這個(gè)狀態(tài)跳到下一個(gè),或者保持不變。在此過程中有可能有某些值得輸出。一個(gè)最簡單的狀態(tài)機(jī)例子:ABCA,每來一個(gè)時(shí)鐘,狀態(tài)改變一下。(a)狀態(tài)機(jī)的優(yōu)勢: 1、狀態(tài)機(jī)克服了純硬件數(shù)字系統(tǒng)順序方式控制不靈活的缺點(diǎn)。2、由于狀態(tài)機(jī)的結(jié)構(gòu)相對簡單,設(shè)計(jì)方案相對固定。3、狀態(tài)機(jī)容易構(gòu)成性能良好的同步時(shí)序邏輯模塊。4、高可靠性。5、在高速運(yùn)算和控制方面,狀態(tài)機(jī)更有其巨大的優(yōu)勢。6、狀態(tài)機(jī)的VHDL表述豐富多樣、有其獨(dú)到的好處。(后面數(shù)字時(shí)鐘設(shè)計(jì)中對數(shù)碼管的顯示切換就是用狀態(tài)機(jī)的設(shè)計(jì)原理完成的)(b)狀態(tài)機(jī)結(jié)構(gòu) 說明部分:定義枚舉型數(shù)

11、據(jù)類型,定義狀態(tài)變量。主控時(shí)序進(jìn)程:主控時(shí)序進(jìn)程主要負(fù)責(zé)狀態(tài)機(jī)運(yùn)轉(zhuǎn)和在時(shí)鐘驅(qū)動(dòng)下負(fù)責(zé)狀態(tài)的轉(zhuǎn)換。:主控組合進(jìn)程: 也稱為狀態(tài)譯碼進(jìn)程,其任務(wù)是根據(jù)外部輸入的控制信號(hào),或和當(dāng)前狀態(tài)的狀態(tài)值確定下一狀態(tài)的取向,以及確定相應(yīng)的輸出。輔助進(jìn)程: 用于配合狀態(tài)機(jī)工作的組合或時(shí)序進(jìn)程。元件例化 元件例化即生成在新圖形文件中能被應(yīng)用到的圖形設(shè)計(jì)文件。此次試驗(yàn)主要涉及到具體操作問題。下面就相關(guān)操作予以說明:1 選擇工具按鈕有效時(shí),在圖形編輯器窗口的空白處單擊鼠標(biāo)左鍵以確定輸入位置,然后選擇Enter Symbol,或雙擊鼠標(biāo)左鍵。2 將出現(xiàn)一個(gè)Enter Symbol 對話框,在symbol Librarie

12、s框中 選擇 “.maxplus2max2libprim” 。3 所有的Altera 圖元以列表方式顯示出來,選擇您想輸入的圖元,然后選擇 OK(后面數(shù)字時(shí)鐘設(shè)計(jì)中的圖形文件的制作主要就是用此法,并連線才構(gòu)成一個(gè)最終的時(shí)鐘系統(tǒng))三.數(shù)字鐘綜合設(shè)計(jì)一 系統(tǒng)總體框圖時(shí)間模塊時(shí)間clk1或整點(diǎn)報(bào)時(shí)蜂鳴器位數(shù)碼管顯示秒表clkM秒表模塊定時(shí)模塊定時(shí)比較和顯示切換個(gè)數(shù)碼管以不同形式不同頻率閃爍分頻蜂鳴器clk分頻鬧鐘分段二 系統(tǒng)文件截圖三 各模塊部分介紹() 時(shí)鐘和調(diào)時(shí)部分,進(jìn)制計(jì)數(shù)()模塊截圖:()程序進(jìn)制:library ieee;use ieee.std_logic_1164.all;use ie

13、ee.std_logic_unsigned.all; entity ershisi_33_34 is port(clk,clr,en:in std_logic; carry :out std_logic; ge :out std_logic_vector( 3 downto 0); shi :out std_logic_vector( 3 downto 0); end ;architecture one of ershisi_33_34 issignal g,s :std_logic_vector(3 downto 0); beginprocess(clk,clr,en,g,s) begin

14、if clr=1then g=0000; s=0000; elsif clkevent and clk=1 then if en=0 then if g=0011 and s=0010 then g=0000; s=0000;carry=1; elsif g=1001 then g=0000;s=s+1; else g=g+1;carry=0; end if; end if; end if;end process;ge=g;shi=s;end;進(jìn)制:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;

15、 entity liushijinzhi_33_34 is port(clk,clr,en:in std_logic; carry :out std_logic; ge :out std_logic_vector( 3 downto 0); shi :out std_logic_vector( 3 downto 0); end ;architecture one of liushijinzhi_33_34 issignal g,s :std_logic_vector(3 downto 0); beginprocess(clk,clr,en,g,s) begin if clr=1then g=0

16、000; s=0000; elsif clkevent and clk=1 then if en=0 then if g=1001 and s=0101 then g=0000; s=0000;carry=1;elsif g=1001 then g=0000;s=s+1; else g=g+1;carry=0; end if; end if; end if;我們在秒表前面多加了兩位進(jìn)制,這樣秒表更實(shí)用end process;ge=g;shi=s;end;() 秒表部分,進(jìn)制計(jì)數(shù)()模塊截圖:()100進(jìn)制計(jì)數(shù)程序部分和60進(jìn)制的差不多,就不列舉程序了鬧鐘分段模塊:前低沉,中間較清脆急促,最后急

17、促() 定時(shí)比較和顯示切換及鬧鐘分段基于狀態(tài)機(jī)編程設(shè)計(jì)()模塊截圖:()程序定時(shí)比較和顯示切換:LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY bijiaohexianshi IS PORT ( clk, clr: IN std_logic; turn: IN std_logic_vector(1 downto 0); mg,ms,fg,fs,sg,ss :in std_logic_vector(3 downto 0); ms_1g, ms_1s, ms_2g, ms_2s,ms_mg, ms_ms,ms_fg, ms_fs:in std_log

18、ic_vector(3 downto 0); d_fg,d_fs,d_sg,d_ss :in std_logic_vector(3 downto 0); g1,g2,g3,g4,g5,g6,g7,g8: out std_logic_vector(3 downto 0); speaker_dtime: out std_logic);END bijiaohexianshi;ARCHITECTURE arch_1 OF bijiaohexianshi ISTYPE clock_states IS (time, dtime,mtime,light); SIGNAL sm: clock_states;B

19、EGINfsm: PROCESS (clk, clr)BEGIN IF clr = 1 THEN sm IF turn=00 THEN sm IF turn=01 THEN sm IF turn=10 THEN sm sm = time; END CASE; END IF; END PROCESS fsm;g1= mg WHEN (sm = time) else ms_2g when (sm=mtime) ELSE d_fg when (sm=dtime);g2= ms WHEN (sm = time) else ms_2s when (sm=mtime) ELSE d_fs when (sm

20、=dtime);g3= fg WHEN (sm = time) else ms_1g when (sm=mtime) ELSE d_sg when (sm=dtime);g4= fs WHEN (sm = time) else ms_1s when (sm=mtime) ELSE d_ss when (sm=dtime); g5= sg WHEN (sm = time) else ms_mg when (sm=mtime) ELSE 0000;g6= ss WHEN (sm = time) else ms_ms when (sm=mtime) ELSE 0000; g7= 0000 WHEN

21、(sm = time) else ms_fg when (sm=mtime) ELSE 0000; g8= 0000 WHEN (sm = time) else ms_fg when (sm=mtime) ELSE 0000; speaker_dtime=1 when (ss=d_ss and sg=d_sg and fs=d_fs and fg=d_fg ) else 0;END arch_1;報(bào)時(shí)分段:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity baoshifenduan is port( clk1,clk2,clk3,speaker_dtime:in std_logic; ms:in std_logic_vector(3 downto 0); speaker :out std_logic);end ;architecture one of

溫馨提示

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

評(píng)論

0/150

提交評(píng)論