EDA技術及應用-VHDL版(第三版)(潭會生)第6章_第1頁
EDA技術及應用-VHDL版(第三版)(潭會生)第6章_第2頁
EDA技術及應用-VHDL版(第三版)(潭會生)第6章_第3頁
EDA技術及應用-VHDL版(第三版)(潭會生)第6章_第4頁
EDA技術及應用-VHDL版(第三版)(潭會生)第6章_第5頁
已閱讀5頁,還剩257頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第6章 VHDL設計應用實例第6章 VHDL設計應用實例6.1 8位加法器的設計位加法器的設計6.2 8位乘法器的設計位乘法器的設計6.3 8位除法器的設計位除法器的設計 6.4 PWM信號發(fā)生器的設計信號發(fā)生器的設計 6.5 數(shù)字頻率計的設計數(shù)字頻率計的設計 6.6 數(shù)字秒表的設計數(shù)字秒表的設計6.7 單片機總線接口電路的設計單片機總線接口電路的設計6.8 交通燈信號控制器的設計交通燈信號控制器的設計6.9 高速高速PID控制器的設計控制器的設計6.10 FIR濾波器的設計濾波器的設計6.11 CORDIC算法的應用設計算法的應用設計6.12 鬧鐘系統(tǒng)的設計鬧鐘系統(tǒng)的設計 第6章 VHDL設

2、計應用實例6.1 8位加法器的設計位加法器的設計 1設計思路設計思路 加法器是數(shù)字系統(tǒng)中的基本邏輯器件,減法器和硬件乘法器都可由加法器來構成。多位加法器的構成有兩種方式:并行進位和串行進位方式。并行進位加法器設有進位產(chǎn)生邏輯,運算速度較快;串行進位方式是將全加器級聯(lián)構成多位加法器。并行進位加法器通常比串行級聯(lián)加法器占用更多的資源。隨著位數(shù)的增加,相同位數(shù)的并行加法器與串行加法器的資源占用差距也越來越大。因此,在工程中使用加法器時,要在速度和容量之間尋找平衡點。第6章 VHDL設計應用實例 實踐證明,4位二進制并行加法器和串行級聯(lián)加法器占用幾乎相同的資源。這樣,多位加法器由4位二進制并行加法器級

3、聯(lián)構成是較好的折中選擇。本設計中的8位二進制并行加法器即是由兩個4位二進制并行加法器級聯(lián)而成的,其電路原理圖如圖6.1所示。第6章 VHDL設計應用實例圖6.1 8位加法器電路原理圖第6章 VHDL設計應用實例2VHDL源程序源程序1) 4位二進制并行加法器的源程序ADDER4B.VHD-ADDER4B.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ADDER4B IS -4位二進制并行加法器位二進制并行加法器 PORT(C4: IN STD_LOGIC; -低位來的進位低位

4、來的進位 A4: IN STD_LOGIC_VECTOR(3 DOWNTO 0); -4位加數(shù)位加數(shù) B4: IN STD_LOGIC_VECTOR(3 DOWNTO 0); -4位被加數(shù)位被加數(shù) S4: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -4位和位和 CO4: OUT STD_LOGIC); -進位輸出進位輸出 第6章 VHDL設計應用實例END ENTITY ADDER4B;ARCHITECTURE ART OF ADDER4B IS SIGNAL S5: STD_LOGIC_VECTOR(4 DOWNTO 0); SIGNAL A5, B5: STD_L

5、OGIC_VECTOR(4 DOWNTO 0); BEGIN A5=0& A4; -將4位加數(shù)矢量擴為5位,為進位提供空間 B5=0& B4; -將4位被加數(shù)矢量擴為5位,為進位提供空間 S5=A5+B5+C4; S4=S5(3 DOWNTO 0); CO4C8, A4=A8(3 DOWNTO 0), B4=B8(3 DOWNTO 0), S4=S8(3 DOWNTO 0), CO4=SC); U2:ADDER4B -例化(安裝)一個4位二進制加法器U2 PORT MAP(C4=SC, A4=A8(7 DOWNTO 4), B4=B8(7 DOWNTO 4), S4=S8(7

6、DOWNTO 4), CO4=CO8);END ARCHITECTURE ART; 第6章 VHDL設計應用實例 3仿真結果驗證仿真結果驗證 在程序調試和仿真時,我們要使用自底向上的方法進行,也就是對于含有多個模塊的設計,我們要先從底層模塊進行調試和仿真,再進行更高層次模塊的調試和仿真,最后進行頂層模塊的調試與仿真。圖6.2和圖6.3分別是使用Quartus 8.0對ADDER4B和ADDER8B進行時序仿真的結果。從仿真結果可以看出,從輸入到輸出,有一個時延,時間大概在幾個納秒。同時輸出要經(jīng)過一個大概幾個納秒的不穩(wěn)定狀態(tài)或過渡過程,系統(tǒng)才達到一個穩(wěn)定而正確的結果。并且經(jīng)過對各組輸入與輸出數(shù)據(jù)

7、的分析,仿真結果是正確的。 第6章 VHDL設計應用實例圖圖6.2 ADDER4B的時序仿真結果的時序仿真結果 第6章 VHDL設計應用實例圖圖6.3 ADDER8B的時序仿真結果的時序仿真結果 第6章 VHDL設計應用實例 4邏輯綜合分析邏輯綜合分析 圖6.4是使用Quartus 8.0進行邏輯綜合后ADDER8B的RTL視圖;圖6.5是對ADDER8B的RTL視圖中的ADDER4B進行展開后的視圖;圖6.6是使用Quartus II 8.0對 ADDER8B進行邏輯綜合后的資源使用情況。 第6章 VHDL設計應用實例圖圖6.4 ADDER8B綜合后的綜合后的RTL視圖視圖 第6章 VHDL

8、設計應用實例圖6.5 ADDER8B綜合后的RTL視圖中將ADDER4B展開后的視圖 第6章 VHDL設計應用實例 圖6.6 ADDER8B邏輯綜合后的資源使用情況 第6章 VHDL設計應用實例 5硬件邏輯驗證硬件邏輯驗證 若使用GW48-CK EDA實驗開發(fā)系統(tǒng)進行硬件邏輯驗證,可選擇實驗電路結構圖NO.1,由5.2的實驗電路結構圖NO.1和圖6.1確定引腳的鎖定。如可取實驗電路結構圖的PIO3PIO0接A83.0,PIO7PIO4接A87.4, PIO11PIO8接B83.0,PIO15PIO12接B87.4,PIO49接C8。此加法器的被加數(shù)A8和加數(shù)B8分別由鍵2與鍵1、鍵4與鍵3輸入

9、,加法器的最低位進位C8由鍵8輸入,計算結果將分別通過PIO23PIO20,PIO19PIO16輸出并顯示于數(shù)碼管6(高4位)和數(shù)碼管5(低4位),溢出進位由PIO39輸出,當有進位時,結果顯示于發(fā)光管D8。 第6章 VHDL設計應用實例 6.2 8位乘法器的設計位乘法器的設計 1系統(tǒng)設計思路系統(tǒng)設計思路 純組合邏輯構成的乘法器雖然工作速度比較快,但占用硬件資源多,難以實現(xiàn)寬位乘法器,而基于PLD器件外接ROM九九表的乘法器則無法構成單片系統(tǒng),也不實用。這里介紹由8位加法器構成的以時序邏輯方式設計的8位乘法器,此乘法器具有一定的實用價值。其乘法原理是:乘法通過逐項位移相加原理來實現(xiàn),從被乘數(shù)的

10、最低位開始,若為1,則乘數(shù)左移后與上一次和相加;若為0,則左移后以全零相加,直至被乘數(shù)的最高位。從圖6.7的邏輯圖上可以清楚地看出此乘法器的工作原理。 第6章 VHDL設計應用實例 圖6.7中,ARICTL是乘法運算控制電路,它的START(可鎖定于引腳I/O 49)信號的上跳沿與高電平有兩個功能,即16位寄存器清零和被乘數(shù)A7.0向移位寄存器SREG8B加載;它的低電平則作為乘法使能信號。乘法時鐘信號從ARICTL的CLK輸入。當被乘數(shù)加載于8位右移寄存器SREG8B后,隨著每一時鐘節(jié)拍,最低位在前,由低位至高位逐位移出。當為1時,與門ANDARITH打開,8位乘數(shù)B7.0在同一節(jié)拍進入8位

11、加法器,與上一次鎖存在16位鎖存器REG16B中的高8位進行相加,其和在下一時鐘節(jié)拍的上升沿被鎖進此鎖存器。而當被乘數(shù)移出位為0時,與門全零輸出。如此往復,直至八個時鐘脈沖后,由ARICTL控制,乘法運算過程自動中止,ARIEND輸出高電平,以此可點亮一發(fā)光管,以示乘法結束。此時,REG16B的輸出值即為最后乘積。 第6章 VHDL設計應用實例圖6.7 88位乘法器電路原理圖 第6章 VHDL設計應用實例此乘法器的優(yōu)點是節(jié)省芯片資源,它的核心元件只是一個8位加法器,其運算速度取決于輸入的時鐘頻率。若時鐘頻率為100 MHz,則每一運算周期僅需80 ns。而若利用備用最高時鐘,即12 MHz晶振

12、的MCS-51單片機的乘法指令進行8位乘法運算,則僅單指令的運算周期就長達4s。因此,可以利用此乘法器或相同原理構成的更高位乘法器完成一些數(shù)字信號處理方面的運算。 第6章 VHDL設計應用實例 2. VHDL源程序源程序 1) 選通與門模塊的源程序ANDARITH.VHD -ANDARITH.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY ANDARITH IS -選通與門模塊 PORT(ABIN: IN STD_LOGIC; -與門開關 DIN: IN STD_LOGIC_VECTOR (7 DOWNTO 0); -8位輸入 DOU

13、T: OUT STD_LOGIC_VECTOR (7 DOWNTO 0); -8位輸出 第6章 VHDL設計應用實例 END ENTITY ANDARITH; ARCHITECTURE ART OF ANDARITH IS BEGIN PROCESS (ABIN, DIN) IS BEGIN FOR I IN 0 TO 7 LOOP -循環(huán),分別完成8位數(shù)據(jù)與一位控制位的與操作 DOUT (I)=DIN (I)AND ABIN; END LOOP; END PROCESS; END ARCHITECTURE ART; 第6章 VHDL設計應用實例 2) 16位鎖存器的源程序REG16B.VHD

14、 -REG16B.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY REG16B IS -16位鎖存器 PORT(CLK: IN STD_LOGIC; -鎖存信號 CLR: IN STD_LOGIC; -清零信號 D: IN STD_LOGIC_VECTOR (8 DOWNTO 0); -8位數(shù)據(jù)輸入 Q: OUT STD_LOGIC_VECTOR(15 DOWNTO 0); -16位數(shù)據(jù)輸出 第6章 VHDL設計應用實例 END ENTITY REG16B; ARCHITECTURE ART OF REG16B IS SIGNAL R

15、16S: STD_LOGIC_VECTOR(15 DOWNTO 0); -16位寄存器設置 BEGIN PROCESS (CLK, CLR) IS BEGIN IF CLR = 1 THEN R16S= 0000000000000000;-異步復位信號 ELSIF CLKEVENT AND CLK = 1 THEN-時鐘到來時,鎖存輸入值 R16S(6 DOWNTO 0)=R16S(7 DOWNTO 1); -右移低8位 第6章 VHDL設計應用實例 R16S(15 DOWNTO 7)=D; -將輸入鎖到高能位 END IF; END PROCESS; Q=R16S; END ARCHITEC

16、TURE ART; 第6章 VHDL設計應用實例 3) 8位右移寄存器的源程序SREG8B.VHD -SREG8B.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY SREG8B IS-8位右移寄存器 PORT (CLK: IN STD_LOGIC; LOAD: IN STD_LOGIC; DIN: IN STD_LOGIC_VECTOR(7 DOWNTO 0); QB: OUT STD_LOGIC); END ENTITY SREG8B; ARCHITECTURE ART OF SREG8B IS SIGNAL REG8B: STD_

17、LOGIC_VECTOR(7 DOWNTO 0); 第6章 VHDL設計應用實例 BEGIN PROCESS (CLK, LOAD) IS BEGIN IF CLKEVENT AND CLK= 1 THEN IF LOAD = 1 THEN REG8B=DIN; -裝載新數(shù)據(jù) ELSE REG8B(6 DOWNTO 0)=REG8B(7 DOWNTO 1);-數(shù)據(jù)右移 END IF; END IF; END PROCESS; QB=REG8B(0); -輸出最低位 END ARCHITECTURE ART; 第6章 VHDL設計應用實例 4) 乘法運算控制器的源程序ARICTL.VHD -AR

18、ICTL.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY ARICTL IS -乘法運算控制器 PORT(CLK: IN STD_LOGIC; START: IN STD_LOGIC; CLKOUT: OUT STD_LOGIC; RSTALL: OUT STD_LOGIC; ARIEND: OUT STD_LOGIC); END ENTITY ARICTL; 第6章 VHDL設計應用實例 ARCHITECTURE ART OF ARICTL IS SIGNAL CNT

19、4B: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN RSTALL=START; PROCESS(CLK, START) IS BEGIN IF START = 1 THEN CNT4B= 0000; -高電平清零計數(shù)器 ELSIF CLKEVENT AND CLK = 1 THEN IF CNT4B8 THEN -小于則計數(shù),等于8表明乘法運算已經(jīng)結束 CNT4B=CNT4B+1; END IF; END IF; 第6章 VHDL設計應用實例 END PROCESS; PROCESS (CLK, CNT4B, START) IS BEGIN IF START = 0

20、 THEN IF CNT4B8 THEN -乘法運算正在進行 CLKOUT =CLK; ARIEND= 0; ELSE CLKOUT = 0; ARIEND= 1;-運算已經(jīng)結束 END IF; ELSE CLKOUT =CLK; ARIEND= 0; END IF; END PROCESS; END ARCHITECTURE ART; 第6章 VHDL設計應用實例 5) 8位乘法器的源程序MULTI8X8.VHD -MULTI8X8.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY MULTI8X8 IS -8位乘法器頂層設計 POR

21、T(CLK: IN STD_LOGIC; START: IN STD_LOGIC;-乘法啟動信號,高電平復位與加載,低電平運算 A: IN STD_LOGIC_VECTOR(7 DOWNTO 0); -8位被乘數(shù) B: IN STD_LOGIC_VECTOR(7 DOWNTO 0); -8位乘數(shù) ARIEND: OUT STD_LOGIC; -乘法運算結束標志位 DOUT: OUT STD_LOGIC_VECTOR(15 DOWNTO 0); -16位乘積輸出 第6章 VHDL設計應用實例 END ENTITY MULTI8X8; ARCHITECTURE ART OF MULTI8X8 IS

22、 COMPONENT ARICTL IS -待調用的乘法控制器端口定義 PORT(CLK: IN STD_LOGIC; START: IN STD_LOGIC; CLKOUT: OUT STD_LOGIC; RSTALL: OUT STD_LOGIC; ARIEND: OUT STD_LOGIC); END COMPONENT ARICTL; COMPONENT ANDARITH IS -待調用的控制與門端口定義 PORT(ABIN: IN STD_LOGIC; DIN: IN STD_LOGIC_VECTOR(7 DOWNTO 0); DOUT: OUT STD_LOGIC_VECTOR(

23、7 DOWNTO 0); 第6章 VHDL設計應用實例 END COMPONENT ANDARITH; COMPONENT ADDER8B IS -待調用的8位加法器端口定義 COMPONENT SREG8B IS -待調用的8位右移寄存器端口定義 COMPONENT REG16B IS -待調用的16位右移寄存器端口定義 SIGNAL S1, S2, S3, S4: STD_LOGIC; SIGNAL S5: STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL S6: STD_LOGIC_VECTOR(8 DOWNTO 0); SIGNAL S7: STD_LOGIC_

24、VECTOR(15 DOWNTO 0); 第6章 VHDL設計應用實例 BEGIN DOUT=S7; S1CLK, START=START, CLKOUT=S2, RSTALL=S3, ARIEND=ARIEND); U2: SREG8B PORT MAP(CLK=S2, LOAD=S3, DIN=A, QB=S4); U3: ANDARITH PORT MAP(ABIN=S4, DIN=B, DOUT=S5); U4: ADDER8B PORT MAP(C8=S1, A8=S7(15 DOWNTO 8), B8=S5, S8=S6(7 DOWNTO 0), CO8 =S6(8); U5: R

25、EG16B PORT MAP(CLK =S2, CLR=S3, D=S6, Q=S7); END ARCHITECTURE ART; 第6章 VHDL設計應用實例 3仿真結果驗證仿真結果驗證 圖6.8所示是使用Quartus 8.0對MULTI8X8進行時序仿真的結果。從仿真結果可以看出,從啟動乘法運算開始(START=0),要經(jīng)過8個時鐘周期后才能得到一個乘法結果(ARIEND=1),并且當輸入A=106,B=56時,乘積輸出DOUT應為10656=5936,而實際仿真輸出為5936,因此仿真結果是正確的。各個模塊的時序仿真和結果分析,請讀者自己完成。第6章 VHDL設計應用實例圖6.8 M

26、ULTI8X8的時序仿真結果 第6章 VHDL設計應用實例 4邏輯綜合分析邏輯綜合分析 圖6.9所示是使用Quartus 8.0進行邏輯綜合后MULTI8X8的RTL視圖,該系統(tǒng)內部各個模塊的進一步展開后的RTL和門電路請讀者自己分析。圖6.10(a)和(b)所示分別是選用EPF10K10TC144-3和選用EP2C8T144C6芯片,使用Quartus 8.0對 MULTI8X8進行邏輯綜合后的資源使用情況。圖6.11所示是MULTI8X8的時鐘性能分析結果,從結果可以看出,若選用EPF10K10TC144-3芯片,則該系統(tǒng)的最高頻率可達到71.43MHz;若選用EP2C8T144C6芯片,

27、則該系統(tǒng)的最高頻率可達到231.96MHz。從這里可以看出,對于相同的一個VHDL設計,若采用不同的芯片,該系統(tǒng)的最高頻率是不同的。 第6章 VHDL設計應用實例圖6.9 MULTI8X8綜合后的RTL視圖 第6章 VHDL設計應用實例(a) (b) 圖6.10 MULTI8X8邏輯綜合后的資源使用情況 第6章 VHDL設計應用實例(a) 選用EPF10K10TC144-3的時鐘性能 第6章 VHDL設計應用實例(b) 選用EP2C8T144C6的時鐘性能 第6章 VHDL設計應用實例 5硬件邏輯驗證硬件邏輯驗證 若使用GW48-CK EDA實驗開發(fā)系統(tǒng)進行硬件邏輯驗證,可選擇實驗電路結構圖N

28、O.1,由5.2節(jié)的實驗電路結構圖NO.1和圖6.7確定引腳的鎖定。如乘法運算時鐘CLK接CLOCK0,清零及啟動運算信號START由鍵8 (PIO49)控制,被乘數(shù)A7.0接PIO15PIO8(由鍵4、鍵3輸入8位二進制數(shù)),乘數(shù)B7.0接PIO7PIO0(由鍵2、鍵1輸入8位二進制數(shù)),乘積輸出DOUT15.0接PIO31PIO16,乘法運算結束信號ARIEND接PIO39(D8)。 第6章 VHDL設計應用實例 進行硬件驗證的方法: 鍵4和鍵3分別輸入被乘數(shù)的高4位和低4位(輸入值顯示于數(shù)碼4和數(shù)碼3),鍵2和鍵1分別輸入乘數(shù)的高4位和低4位(輸入值顯示于數(shù)碼2和數(shù)碼1); 乘法操作時鐘

29、信號輸入接CLOCK0; 鍵8輸入高電平時,乘積鎖存器清零,乘數(shù)和被乘數(shù)數(shù)值加載,低電平時開始作乘法,8個脈沖后乘法結束,乘積顯示于數(shù)碼管85,高位在左。 第6章 VHDL設計應用實例6.3 8位除法器的設計位除法器的設計 1系統(tǒng)設計思路系統(tǒng)設計思路 在所有的四種基本算術運算中,除法是最復雜的,因此也是最耗時的運算。對于給定的被除數(shù)(或分子)N和除數(shù)(或分母)D,除法得到兩個(與其他基本運算不同)結果:商Q和余數(shù)R,即N/D=Q和R,其中|R| -初始化 STATE -減法運算 R:= R-D; -減去除數(shù)D 第6章 VHDL設計應用實例 STATE -恢復余數(shù) IF R 0 THEN R:=

30、R+D; -恢復以前的余數(shù) Q:=Q*2; -LSB置0并邏輯左移一位 ELSE Q:=2*Q+1; -LSB0置1并邏輯左移一位 END IF; COUNT := COUNT + 1; D:= D/2; IF COUNT=WN THEN - DIVISION READY ? STATE=S3; ELSE STATE -結果輸出 Q_OUT=CONV_STD_LOGIC_VECTOR(Q, WN); R_OUT=CONV_STD_LOGIC_VECTOR(R, WD); STATE=S0; -開始下一步除法 END CASE; END PROCESS STATES; END ARCHITECT

31、URE ART; 第6章 VHDL設計應用實例 3仿真結果驗證仿真結果驗證 圖6.12是使用Quartus 8.0對DIVIDER進行時序仿真的結果。從仿真結果可以看出,從啟動除法運算開始,要經(jīng)過82個時鐘周期后才得到一個除法結果。通過對輸入和輸出數(shù)據(jù)的分析,證明仿真結果是正確的。 第6章 VHDL設計應用實例圖6.12 DIVIDER的時序仿真結果 第6章 VHDL設計應用實例 4邏輯綜合分析邏輯綜合分析 根據(jù)第6.1節(jié)和第6.2節(jié)所述的方法,請讀者自己進行邏輯綜合,查看并分析有關綜合結果。 第6章 VHDL設計應用實例 5硬件邏輯驗證硬件邏輯驗證 若使用GW48-CK EDA實驗開發(fā)系統(tǒng)進

32、行硬件邏輯驗證,可選擇實驗電路結構圖NO.1,由5.2節(jié)的實驗電路結構圖NO.1和DIVIDER.VHD的端口說明確定引腳的鎖定。如除法運算時鐘CLK接CLOCK0,被除數(shù)N_IN7.0接PIO15PIO8(由鍵4、鍵3輸入8位二進制數(shù)),除數(shù)D_IN7.0接PIO7PIO0(由鍵2、鍵1輸入6位二進制數(shù)),商輸出Q_OUT7.0接PIO31PIO24,余數(shù)輸出R_OUT7.0接PIO23PIO16。 進行硬件驗證的方法為: 乘法操作時鐘信號輸入接CLOCK0; 鍵4和鍵3分別輸入被除數(shù)的高4位和低4位(輸入值顯示于數(shù)碼4和數(shù)碼3),鍵2和鍵1分別輸入除數(shù)的高2位和低4位(輸入值顯示于數(shù)碼2和

33、數(shù)碼1); 商顯示于數(shù)碼管8和數(shù)碼管7,余數(shù)顯示于數(shù)碼管6和數(shù)碼管5,高位在左。 第6章 VHDL設計應用實例6.4 PWM信號發(fā)生器的設計信號發(fā)生器的設計 1系統(tǒng)設計思路系統(tǒng)設計思路 PWM即脈沖寬度調制,就是利用微處理器的數(shù)字輸出來對模擬電路進行控制的一種非常有效的技術。PWM從處理器到被控系統(tǒng)信號都是數(shù)字式的,無需進行數(shù)/模轉換。讓信號保持為數(shù)字形式可將噪聲影響降到最小,因此廣泛應用在測量、通信和功率控制與變換的許多領域中。 圖6.13 是一種PWM(脈沖寬度調制)信號發(fā)生器的邏輯圖,此信號發(fā)生器是由兩個完全相同的可自加載加法計數(shù)器LCNT8組成的,它的輸出信號的高、低電平脈寬可分別由兩

34、組8位預置數(shù)進行控制。 第6章 VHDL設計應用實例圖6.13 脈寬數(shù)控調制信號發(fā)生器邏輯圖 第6章 VHDL設計應用實例 如果將初始值可預置的加法計數(shù)器的溢出信號作為本計數(shù)器的初始預置加載信號LD,則可構成計數(shù)初始值自加載方式的加法計數(shù)器,從而構成數(shù)控分頻器。圖6.13中,D觸發(fā)器的一個重要功能就是均勻輸出信號的占空比,提高驅動能力,這對驅動,諸如揚聲器或電動機十分重要。 第6章 VHDL設計應用實例 2VHDL源程序 1) 8位可自加載加法計數(shù)器的源程序LCNT8.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY LCNT8 IS

35、-8位可自加載加法計數(shù)器 PORT(CLK, LD: IN STD_LOGIC; -工作時鐘/預置值加載信號 D: IN INTEGER RANGE 0 TO 255; -8位分頻預置數(shù) CAO: OUT STD_LOGIC); -計數(shù)溢出輸出 END ENTITY LCNT8; ARCHITECTURE ART OF LCNT8 IS SIGNAL COUNT: INTEGER RANGE 0 TO 255; -8位計數(shù)器設置 第6章 VHDL設計應用實例 BEGIN PROCESS(CLK) IS BEGIN IF CLKEVENT AND CLK=1 THEN IF LD=1 THEN

36、COUNT=D; -LD為高電平時加載預置數(shù) ELSE COUNT=COUNT+1; -否則繼續(xù)計數(shù) END IF; END IF; END PROCESS; PROCESS(COUNT) IS BEGIN IF COUNT=255 THEN CAO=1; -計數(shù)滿后,置于溢出位 ELSE CAOCLK, LD=LD1, D=A, CAO=CAO1); U2: LCNT8 PORT MAP(CLK=CLK, LD=LD2, D=B, CAO=CAO2); PROCESS(CAO1,CAO2) IS BEGIN IF CAO1=1 THEN SPWM=0; ELSIF CAO2EVENT AND

37、 CAO2=1 THEN SPWM=1; END IF; END PROCESS; LD1=NOT SPWM; LD2=SPWM; PWM=SPWM; END ARCHITECTURE ART; 第6章 VHDL設計應用實例 3仿真結果驗證仿真結果驗證 圖6.14是使用Quartus 8.0對PWM進行時序仿真的結果。從輸入和輸出數(shù)據(jù)的分析可知,仿真結果是正確的。各個模塊的時序仿真和結果分析,請讀者自己完成。第6章 VHDL設計應用實例圖6.14 PWM的時序仿真結果 第6章 VHDL設計應用實例 4邏輯綜合分析邏輯綜合分析 根據(jù)第6.1節(jié)和第6.2節(jié)所述的方法,請讀者自己進行邏輯綜合,查看并

38、分析有關綜合結果。 第6章 VHDL設計應用實例 5硬件邏輯驗證硬件邏輯驗證 若使用GW48-CK EDA實驗開發(fā)系統(tǒng)進行硬件邏輯驗證,可選擇實驗電路結構圖NO.1,由5.2節(jié)的實驗電路結構圖NO.1和圖6.13確定引腳的鎖定。輸入時鐘CLK接CLOCK0(用于發(fā)聲時,接頻率65 536 Hz);8位數(shù)控預置輸入B7.0接PIO15PIO8,由鍵4和鍵3控制輸入,輸入值分別顯示于數(shù)碼管4和數(shù)碼管3;另8位數(shù)控預置輸入A7.0接PIO7PIO0,由鍵1和鍵2控制輸入,輸入值分別顯示于數(shù)碼管2和數(shù)碼管1;輸出PSOUT接SPEAKER (對應1032E的是第5引腳PIN5;對應EPF10K的是第3

39、引腳PIN3)。 第6章 VHDL設計應用實例進行硬件驗證的方法為:通過鍵2和鍵1輸入控制高電平信號脈寬的預置數(shù)(顯示于數(shù)碼管2和數(shù)碼管1);由鍵4和鍵3輸入控制低電平信號脈寬的預置數(shù)(顯示于數(shù)碼管4和數(shù)碼管3);取待分頻率F=12 MHz、6 MHz或3 MHz,通過短路帽輸入CLK9;可利用示波器觀察波形隨預置數(shù)的變化而變化的情況。在沒有示波器時,“CLK”可接低頻率信號,然后接通揚聲器,通過聲音音調的變化來了解輸出頻率的變化。 第6章 VHDL設計應用實例6.5 數(shù)字頻率計的設計數(shù)字頻率計的設計 1. 系統(tǒng)設計思路系統(tǒng)設計思路 圖6.15是8位十進制數(shù)字頻率計的電路邏輯圖,它由1個測頻控

40、制信號發(fā)生器TESTCTL、8個有時鐘使能的十進制計數(shù)器CNT10、1個32位鎖存器REG32B組成。以下分別敘述頻率計各邏輯模塊的功能與設計方法。 第6章 VHDL設計應用實例圖6.15 8位十進制數(shù)字頻率計邏輯圖第6章 VHDL設計應用實例 1) 測頻控制信號發(fā)生器的設計 頻率測量的基本原理是計算每秒鐘內待測信號的脈沖個數(shù)。這就要求TESTCTL的計數(shù)使能信號TSTEN能產(chǎn)生一個1秒脈寬的周期信號,并對頻率計的每一計數(shù)器CNT10的ENA使能端進行同步控制。當TSTEN高電平時,允許計數(shù);低電平時,停止計數(shù),并保持其所計的數(shù)。在停止計數(shù)期間,首先需要一個鎖存信號LOAD的上跳沿將計數(shù)器在前

41、1秒鐘的計數(shù)值鎖存進32位鎖存器REG32B中,由外部的7段譯碼器譯出并穩(wěn)定顯示。鎖存信號之后,必須有一清零信號CLR_CNT對計數(shù)器進行清零,為下一秒鐘的計數(shù)操作做準備。 第6章 VHDL設計應用實例測頻控制信號發(fā)生器的工作時序如圖6.16所示。為了產(chǎn)生這個時序圖,需首先建立一個由D觸發(fā)器構成的二分頻器,在每次時鐘CLK上沿到來時其值翻轉。其中,控制信號時鐘CLK的頻率取1 Hz,而信號TSTEN的脈寬恰好為1 s,可以用作閘門信號。此時,根據(jù)測頻的時序要求,可得出信號LOAD和CLR_CNT的邏輯描述。由圖6.16可見,在計數(shù)完成后,即計數(shù)使能信號TSTEN在1 s的高電平后,利用其反相值

42、的上跳沿產(chǎn)生一個鎖存信號LOAD,0.5 s后,CLR_CNT產(chǎn)生一個清零信號上跳沿。 第6章 VHDL設計應用實例圖6.16 測頻控制信號發(fā)生器工作時序 第6章 VHDL設計應用實例 2) 寄存器寄存器REG32B的設計的設計 設置鎖存器的好處是,顯示的數(shù)據(jù)穩(wěn)定,不會由于周期性的清零信號而不斷閃爍。若已有32位BCD碼存在于此模塊的輸入口,在信號LOAD的上升沿后即被鎖存到寄存器REG32B的內部,并由REG32B的輸出端輸出,然后由實驗板上的7段譯碼器譯成能在數(shù)碼管上顯示的相對應的數(shù)值。 第6章 VHDL設計應用實例 3) 十進制計數(shù)器CNT10的設計 如圖6.15所示,此十進制計數(shù)器的特

43、殊之處是,有一時鐘使能輸入端ENA,用于鎖定計數(shù)值。當高電平時計數(shù)允許,低電平時計數(shù)禁止。 第6章 VHDL設計應用實例 2. VHDL源程序源程序 1) 有時鐘使能的十進制計數(shù)器的源程序CNT10.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY CNT10 IS PORT(CLK: IN STD_LOGIC; -計數(shù)時鐘信號 CLR: IN STD_LOGIC; -清零信號 ENA: IN STD_LOGIC; -計數(shù)使能信號 CQ: OUT INTEGER RANGE 0 TO 15; -4位計數(shù)結果輸出 CO: OUT STD_

44、LOGIC); -計數(shù)進位 第6章 VHDL設計應用實例 END ENTITY CNT10; ARCHITECTURE ART OF CNT10 IS SIGNAL CQI: INTEGER RANGE 0 TO 15; BEGIN PROCESS(CLK, CLR, ENA) IS BEGIN IF CLR=1 THEN CQI=0; -計數(shù)器異步清零 ELSIF CLKEVENT AND CLK= 1 THEN IF ENA=1 THEN IF CQI9 THEN CQI=CQI+1; ELSE CQI=0; END IF; -等于9, 則計數(shù)器清零 END IF; END IF; 第6章

45、 VHDL設計應用實例 END PROCESS; PROCESS(CQI) IS BEGIN IF CQI=9 THEN CO= 1; -進位輸出 ELSE CO= 0; END IF; END PROCESS; CQ=CQI; END ARCHITECTURE ART; 第6章 VHDL設計應用實例 2) 32位鎖存器的源程序REG32B.VHD 參照第3.9.2節(jié)寄存器的有關程序,請作者自行完成。 3) 測頻控制信號發(fā)生器的源程序TESTCTL.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNE

46、D.ALL; ENTITY TESTCTL IS PORT(CLK: IN STD_LOGIC; -1 Hz測頻控制時鐘 TSTEN: OUT STD_LOGIC; -計數(shù)器時鐘使能 CLR_CNT: OUT STD_LOGIC; -計數(shù)器清零 LOAD: OUT STD_LOGIC); -輸出鎖存信號 END ENTITY TESTCTL; ARCHITECTURE ART OF TESTCTL IS 第6章 VHDL設計應用實例 SIGNAL DIV2CLK: STD_LOGIC; BEGIN PROCESS(CLK) IS BEGIN IF CLKEVENT AND CLK=1 THEN

47、 -1 Hz時鐘二分頻 DIV2CLK=NOT DIV2CLK; END IF ; END PROCESS; PROCESS (CLK, DIV2CLK ) IS BEGIN IF CLK=0 AND DIV2CLK =0 THEN -產(chǎn)生計數(shù)器清零信號 CLR_CNT=1; ELSE CLR_CNT=0 ; END IF; END PROCESS; LOAD=NOT DIV2CLK; TSTENCLK, TSTEN=SE, CLR_CNT=SC, LOAD=SL); U1: CNT10 PORT MAP(CLK=FSIN, CLR=SC, ENA=SE, CQ=SD(3 DOWNTO 0),

48、 CO=S1); -名字關聯(lián) 第6章 VHDL設計應用實例 U2: CNT10 PORT MAP(CLK=S1, CLR=SC, ENA=SE, CQ=SD(7 DOWNTO 4), CO=S2); U3: CNT10 PORT MAP(S2, SC, SE, SD(11 DOWNTO 8 ),S3); -位置關聯(lián) U4: CNT10 PORT MAP(S3, SC, SE, SD(15 DOWNTO 12),S4); U5: CNT10 PORT MAP(S4, SC, SE, SD(19 DOWNTO 16),S5); U6: CNT10 PORT MAP(S5, SC, SE, SD(2

49、3 DOWNTO 20),S6); U7: CNT10 PORT MAP(S6, SC, SE, SD(27 DOWNTO 24),S7); U8: CNT10 PORT MAP(S7, SC, SE, SD(31 DOWNTO 28),S8); U9: REG32B PORT MAP(LOAD=SL, DIN=SD(31 DOWNTO 0), DOUT=DOUT); END ARCHITECTURE ART; 第6章 VHDL設計應用實例 3仿真結果驗證仿真結果驗證 圖6.17和圖6.18是使用Quartus 8.0對CNT10和FREQ進行時序仿真的結果。從輸入和輸出數(shù)據(jù)的分析可知,仿真結

50、果是正確的。其余模塊的時序仿真和結果分析,請讀者自己完成。 第6章 VHDL設計應用實例圖6.17 CNT10的時序仿真結果 圖6.18 FREQ的時序仿真結果 第6章 VHDL設計應用實例 4邏輯綜合分析邏輯綜合分析 根據(jù)第6.1節(jié)和第6.2節(jié)所述的方法,請讀者自己進行邏輯綜合,查看并分析有關綜合結果。 第6章 VHDL設計應用實例 5硬件邏輯驗證硬件邏輯驗證 若使用GW48-CK EDA實驗開發(fā)系統(tǒng)進行硬件邏輯驗證,可選擇實驗電路結構圖NO.0,由5.2節(jié)的實驗電路結構圖NO.0和圖6.15確定引腳的鎖定,測頻控制器時鐘信號CLK可通過低頻組中的CLOCK2將來自信號源的1 Hz信號接入,

51、待測頻率輸入端FSIN可接全頻信號CLOCK0,8位數(shù)碼顯示輸出DOUT31.0接PIO47PIO16。 進行硬件驗證的方法為:選擇實驗模式0,測頻控制器時鐘信號CLK可通過CLOCK2將1 Hz的信號接入,待測頻率輸入端FSIN與CLOCK0中的某個頻率信號相接,數(shù)碼管應顯示來自CLOCK0的頻率。 第6章 VHDL設計應用實例6.6 數(shù)字秒表的設計數(shù)字秒表的設計 1系統(tǒng)設計思路系統(tǒng)設計思路 今需設計一個計時范圍為0.01s1h的數(shù)字秒表,首先需要獲得一個比較精確的計時基準信號,這里是周期為1/100s的計時脈沖。其次,除了對每一計數(shù)器需設置清零信號輸入外,還需為六個計數(shù)器設置時鐘使能信號,

52、即計時允許信號,以便作為秒表的計時起、??刂崎_關。因此數(shù)字秒表可由一個分頻器、四個十進制計數(shù)器(1/100s、1/10s、1s、1min)以及兩個六進制計數(shù)器(10s、10min)組成,如圖6.19所示。 第6章 VHDL設計應用實例圖6.19 數(shù)字秒表電路邏輯圖 第6章 VHDL設計應用實例 6個計數(shù)器中的每一計數(shù)器的4位輸出,通過外設的BCD譯碼器輸出顯示。圖6.19中,6個4位二進制計數(shù)器輸出的最小顯示值分別為:DOUT3.01/100s、DOUT7.41/10s、DOUT11.81s、DOUT15.1210s、DOUT19.161min、DOUT23.2010min等。 第6章 VHD

53、L設計應用實例 2. VHDL源程序 1) 3 MHz100 Hz分頻器的源程序CLKGEN.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY CLKGEN IS PORT(CLK: IN STD_LOGIC; -3 MHz信號輸入 NEWCLK: OUT STD_LOGIC); -100 Hz計時時鐘信號輸出 END ENTITY CLKGEN; ARCHITECTURE ART OF CLKGEN IS SIGNAL CNT: INTEGER RANGE 0 TO 10#29999#; -十進制計數(shù)預制數(shù) BEGIN PROCESS

54、(CLK) IS -分頻計數(shù)器, 由3 MHz時鐘產(chǎn)生100 Hz信號 第6章 VHDL設計應用實例 BEGIN IF CLKEVENT AND CLK=1 THEN IF CNT=10#29999# THEN CNT=0; -分頻常數(shù)為30000 ELSE CNT=CNT+1; END IF; END IF; END PROCESS; PROCESS(CNT) IS -計數(shù)溢出信號控制 BEGIN IF CNT=10#29999# THEN NEWCLK=1; ELSE NEWCLK=0; END IF; END PROCESS; END ARCHITECTURE ART; 第6章 VHDL

55、設計應用實例 2) 六進制計數(shù)器的源程序CNT6.VHD(十進制計數(shù)器CNT10.VHD與此類似) LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNT6 IS PORT(CLK: IN STD_LOGIC; CLR: IN STD_LOGIC; ENA: IN STD_LOGIC; CQ: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); CO: OUT STD_LOGIC ); 第6章 VHDL設計應用實例 END ENTITY CNT6; ARCHIT

56、ECTURE ART OF CNT6 IS SIGNAL CQI: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN PROCESS(CLK, CLR, ENA) IS BEGIN IF CLR=1 THEN CQI=0000; ELSIF CLKEVENT AND CLK=1 THEN IF ENA=1 THEN IF CQI=0101 THEN CQI=0000; ELSE CQI=CQI+1; END IF; END IF; END IF;第6章 VHDL設計應用實例 END PROCESS; PROCESS(CQI) IS BEGIN IF CQI=0000 TH

57、EN CO=1; ELSE CO=0; END IF; END PROCESS; CQCLK, NEWCLK=S0); -名字關聯(lián) U1: CNT10 PORT MAP(S0, CLR, ENA, DOUT(3 DOWNTO 0), S1); -位置關聯(lián) U2: CNT10 PORT MAP(S1, CLR, ENA, DOUT(7 DOWNTO 4), S2); U3: CNT10 PORT MAP(S2, CLR, ENA, DOUT(11 DOWNTO 8), S3); U4: CNT6 PORT MAP(S3, CLR, ENA, DOUT(15 DOWNTO 12), S4); U5

58、: CNT10 PORT MAP(S4, CLR, ENA, DOUT(19 DOWNTO 16), S5); U6: CNT6 PORT MAP(S5, CLR, ENA, DOUT(23 DOWNTO 20); END ARCHITECTURE ART; 第6章 VHDL設計應用實例3仿真結果驗證仿真結果驗證 在程序的調試和仿真中,由于程序中有關參數(shù)的原因,要觀察有關輸出的變化,需要運行較長的時間,或在一個給定的時間內,可能看不到有關輸出的變化。這時我們可采取調整有關參數(shù)的方法進行仿真,待仿真證明程序正確后再復原到原程序。調整參數(shù)的具體方法是:先將需修改的內容用“-”注釋掉并添加新的內容,

59、而調試好后復原的方法就是將修改后的內容注釋掉,而將原內容去掉注釋。比如本設計中的分頻電路程序,分頻常數(shù)為30000,其輸出需要計數(shù)30000次才發(fā)生一次變化,因此在我們設定的時間間隔內,根本看不到輸出的變化,也無法判斷該程序的正確與錯誤。這時我們若將分頻常數(shù)修改為30,參數(shù)的修改方法如圖6.20所示,這時就能很容易地觀察有關仿真結果,仿真結果如圖6.21所示。圖6.21和圖6.22分別是使用Quartus8.0對CLKGEN和TIMES進行時序仿真的結果,從輸入和輸出數(shù)據(jù)的分析可知,仿真結果是正確的。其余模塊的時序仿真和結果分析,請讀者自己完成。 第6章 VHDL設計應用實例圖6.20 使用注

60、釋的方法進行程序有關仿真參數(shù)的調整 第6章 VHDL設計應用實例圖6.21 CLKGEN的時序仿真結果(分頻常數(shù)修改為30) 圖6.22 TIMES的時序仿真結果 第6章 VHDL設計應用實例 4邏輯綜合分析邏輯綜合分析 根據(jù)第6.1節(jié)和第6.2節(jié)所述的方法,請讀者自己進行邏輯綜合,查看并分析有關綜合結果。 第6章 VHDL設計應用實例 5硬件邏輯驗證硬件邏輯驗證 若使用GW48-CK EDA實驗開發(fā)系統(tǒng)進行硬件邏輯驗證,可選擇實驗電路結構圖NO.0,由5.2節(jié)的實驗電路結構圖NO.0和圖6.19確定引腳的鎖定。時鐘信號CLK可接CLOCK0,計數(shù)清零信號接鍵3,計數(shù)使能信號接鍵4,數(shù)碼管1數(shù)碼管6分別顯示以

溫馨提示

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

評論

0/150

提交評論