第一篇:EDA分頻器實(shí)驗(yàn)教案
實(shí)驗(yàn)三:整數(shù)分頻器的設(shè)計(jì)
一 實(shí)驗(yàn)?zāi)康?/p>
了解利用類屬設(shè)計(jì)可配置的重用設(shè)計(jì)技術(shù)。二 實(shí)驗(yàn)原理
利用類屬n 可以改變分頻器的分頻系數(shù),輸出q的頻率是輸入信號(hào)clk頻率的1/n。通過(guò)給n賦不同的值,就可以得到需要的頻率。三 實(shí)驗(yàn)器材 EDA實(shí)驗(yàn)箱 四 實(shí)驗(yàn)內(nèi)容
1.參考教材第5章中5.3.1,完成整數(shù)分頻器的設(shè)計(jì)。
2.修改5.3.1中的分頻系數(shù)n,觀察仿真波形和實(shí)驗(yàn)箱輸入/輸出信號(hào)的變化。3.在試驗(yàn)系統(tǒng)上硬件驗(yàn)證分頻器的功能。
在實(shí)驗(yàn)三中,建議將實(shí)驗(yàn)箱的實(shí)驗(yàn)電路結(jié)構(gòu)模式設(shè)定為模式7。輸入信號(hào)clk由鍵7的輸出來(lái)模擬,輸入信號(hào)reset_n由鍵8模擬,輸出信號(hào)q接至LED:D14。當(dāng)然,也可以由實(shí)驗(yàn)者設(shè)定到其它功能相似的鍵或者LED。
代碼:(參考教材第5章中5.3.1)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity div is
generic(n:integer:=8);
port(clk,reset_n:in std_logic;
q: out std_logic);end div;architecture behavl_div of div is
signal count:integer range n-1 downto 0;begin
process(reset_n,clk)
begin
if reset_n='0' then q<='0';count<=n-1;
elsif(clk'event and clk='1' and clk'last_value='0')then
count<=count-1;
if count>=(n/2)then q<='0';
else q<='1';
end if;
if count<=0 then count<=n-1;
end if;
end if;end process;end behavl_div;
五 實(shí)驗(yàn)注意事項(xiàng)
1.編寫(xiě)代碼時(shí)一定要書(shū)寫(xiě)規(guī)范
2模式的選擇和引腳的配置一定要合理 六 實(shí)驗(yàn)報(bào)告
簡(jiǎn)述實(shí)驗(yàn)過(guò)程,將實(shí)驗(yàn)項(xiàng)目分析設(shè)計(jì),仿真和測(cè)試寫(xiě)入實(shí)驗(yàn)報(bào)告。
第二篇:EDA技術(shù)實(shí)驗(yàn)教案
一、課程名稱:
EDA技術(shù)實(shí)驗(yàn)
二、教材名稱: 《EDA技術(shù)使用教程》,潘松等編著。
三、本課程教學(xué)目的、要求:
介紹EDA的基本知識(shí)、常用的EDA工具的使用方法和目標(biāo)器件的結(jié)構(gòu)原理、VHDL設(shè)計(jì)輸入方法(圖形和文本)、VHDL仿真、VHDL的設(shè)計(jì)優(yōu)化等。
EDA技術(shù)作為重要的專業(yè)課程,其實(shí)踐性強(qiáng)。在教學(xué)時(shí)要注重理論和實(shí)踐的緊密結(jié)合,通過(guò)大量上機(jī)操作,使學(xué)生掌握VHDL的基本結(jié)構(gòu)和編程思想。實(shí)驗(yàn)1 原理圖輸入方法及8位全加器設(shè)計(jì)(4課時(shí))
1)實(shí)驗(yàn)?zāi)康模?/p>
熟悉利用MAX+plusⅡ的原理圖輸入方法設(shè)計(jì)簡(jiǎn)單組合電路,掌握層次化設(shè)計(jì)的方法,并通過(guò)一個(gè)8位全加器的設(shè)計(jì)把握利用EDA軟件進(jìn)行電子電路設(shè)計(jì)的詳細(xì)流程。2)實(shí)驗(yàn)報(bào)告要求:
詳細(xì)敘述8位加法器的設(shè)計(jì)流程;給出各層次的原理圖及其對(duì)應(yīng)的仿真波形圖;給出加法器的延時(shí)情況。
3)實(shí)驗(yàn)步驟:
(1)設(shè)計(jì)一個(gè)一位半加器。
步驟1:輸入設(shè)計(jì)項(xiàng)目和存盤(pán) 步驟2:輸入半加器元件: 步驟3:將項(xiàng)目設(shè)置為工程文件 步驟4:選擇目標(biāo)器件并編譯 步驟5:時(shí)序仿真 步驟6:包裝元件入庫(kù)
選擇菜單“File”→“Open”,在“Open”對(duì)話框中選擇原理圖編輯文件選項(xiàng)“Graphic Editor Files”,然后選擇h_adder.gdf,重新打開(kāi)半加器設(shè)計(jì)文件,然后選擇如圖4-5中“File”菜單的“Create Default Symbol”項(xiàng),將當(dāng)前文件變成了一個(gè)包裝好的單一元件(Symbol),并被放置在工程路徑指定的目錄中以備后用。
(2)利用半加器組成一個(gè)一位全加器,并記錄仿真結(jié)果。(3)利用全加器組成一個(gè)八位全加器,并記錄仿真結(jié)果。
實(shí)驗(yàn)二
簡(jiǎn)單組合電路和時(shí)序電路設(shè)計(jì)(4課時(shí))
一、實(shí)驗(yàn)?zāi)康模?/p>
熟悉Max+plusⅡ的VHDL文本設(shè)計(jì)流程全過(guò)程,學(xué)習(xí)簡(jiǎn)單組合電路和時(shí)序電路的設(shè)計(jì)和仿真方法。
二、實(shí)驗(yàn)內(nèi)容
1:首先利用MAX+plusⅡ完成2選1多路選擇器和一位全加器的文本編輯輸入和仿真測(cè)試等步驟,給出仿真波形,驗(yàn)證本項(xiàng)設(shè)計(jì)的功能。
2:設(shè)計(jì)觸發(fā)器(J-K),給出程序設(shè)計(jì)、軟件編譯、仿真分析、硬件測(cè)試及詳細(xì)實(shí)驗(yàn)過(guò)程。
3:先設(shè)計(jì)或門(mén)和一位半加器的VHDL描述文件,并進(jìn)行仿真調(diào)試,再用元件例化的方法實(shí)現(xiàn)一位全加器,并仿真調(diào)試。要求記錄VHDL文件內(nèi)容和仿真波形結(jié)果。
4:用一位全加器設(shè)計(jì)8為全加器。要求記錄VHDL文件內(nèi)容和仿真波形結(jié)果。(選作)參考程序 ENTITY mux21a IS PORT(a, b : IN BIT;s : IN BIT;y : OUT BIT);END ENTITY mux21a;ARCHITECTURE one OF mux21a IS SIGNAL d,e : BIT;BEGIN d <= a AND(NOT S);e <= b AND s;y <= d OR e;END ARCHITECTURE one;
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY or2a IS PORT(a, b :IN STD_LOGIC;c : OUT STD_LOGIC);END ENTITY or2a;
ARCHITECTURE fu1 OF or2a IS BEGIN c <= a OR b;END ARCHITECTURE fu1;
半加器描述(1)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY adder IS PORT(a, b : IN STD_LOGIC;co, so : OUT STD_LOGIC);END ENTITY adder;ARCHITECTURE fh1 OF adder is BEGIN so <= NOT(a XOR(NOT b));co <= a AND b;END ARCHITECTURE fh1;
1位二進(jìn)制全加器頂層設(shè)計(jì)描述 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY f_adder IS PORT(ain,bin,cin : IN STD_LOGIC;cout,sum : OUT STD_LOGIC);END ENTITY f_adder;ARCHITECTURE fd1 OF f_adder IS COMPONENT h_adder PORT(a,b : IN STD_LOGIC;co,so : OUT STD_LOGIC);END COMPONENT ; COMPONENT or2a PORT(a,b : IN STD_LOGIC;c : OUT STD_LOGIC);END COMPONENT;
SIGNAL d,e,f : STD_LOGIC;BEGIN u1 : h_adder PORT MAP(a=>ain,b=>bin,co=>d,so=>e);u2 : h_adder PORT MAP(a=>e,b=>cin,co=>f,so=>sum);u3 : or2a PORT MAP(a=>d,b=>f,c=>cout);END ARCHITECTURE fd1;二選一多路選擇器仿真結(jié)果:
實(shí)驗(yàn)三
含異步清0和同步時(shí)鐘使能的4位加法計(jì)數(shù)器(4課時(shí))
一、實(shí)驗(yàn)?zāi)康模?/p>
學(xué)習(xí)計(jì)數(shù)器的設(shè)計(jì)、仿真,進(jìn)一步熟悉VHDL設(shè)計(jì)技術(shù)。
二、實(shí)驗(yàn)內(nèi)容:
設(shè)計(jì)一含計(jì)數(shù)使能、異步復(fù)位和能進(jìn)行計(jì)數(shù)值并行預(yù)置功能的4位加法計(jì)數(shù)器。RST是異步清零信號(hào),高電平有效;clk是時(shí)鐘輸入信號(hào);D0、D1、D2、D3是4位數(shù)據(jù)輸入端(數(shù)據(jù)預(yù)置輸入端)。Q0、Q1、Q2、Q3為計(jì)數(shù)器輸出端。COUT為進(jìn)位輸出端。ENA為使能端,為?1?時(shí),計(jì)數(shù)器實(shí)現(xiàn)對(duì)CLK時(shí)鐘脈沖信號(hào)的加1計(jì)數(shù),為0時(shí)停止計(jì)數(shù)。
參考程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT4B IS PORT(CLK : IN STD_LOGIC;RST : IN STD_LOGIC;ENA : IN STD_LOGIC;OUTY : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT : OUT STD_LOGIC);END CNT4B;ARCHITECTURE behav OF CNT4B IS SIGNAL CQI : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN P_REG: PROCESS(CLK, RST, ENA)BEGIN IF RST = '1' THEN CQI <= “0000”;ELSIF CLK'EVENT AND CLK = '1' THEN IF ENA = '1' THEN CQI <= CQI + 1;ELSE CQI <= “0000”;END IF;END IF;OUTY <= CQI;END PROCESS P_REG;COUT <= CQI(0)AND CQI(1)AND CQI(2)AND CQI(3);--進(jìn)位輸出 END behav;
實(shí)驗(yàn)四
7段數(shù)碼顯示譯碼器設(shè)計(jì)(2課時(shí))
一、實(shí)驗(yàn)?zāi)康模?/p>
1、學(xué)習(xí)7段數(shù)碼顯示譯碼器設(shè)計(jì);
2、學(xué)習(xí)VHDL的多層次設(shè)計(jì)方法。
二、實(shí)驗(yàn)原理:
7段數(shù)碼是純組合電路,通常的小規(guī)模專用IC,如74或4000系列的器件只能作十進(jìn)制BCD碼譯碼,然而數(shù)字系統(tǒng)中的數(shù)據(jù)處理和運(yùn)算都是2進(jìn)制的,所以輸出表達(dá)都是16進(jìn)制的,為了滿足16進(jìn)制數(shù)的譯碼顯示,最方便的方法就是利用譯碼程序在FPGA/CPLD中來(lái)實(shí)現(xiàn)。但為了簡(jiǎn)化過(guò)程,首先完成7段BCD碼譯碼器的設(shè)計(jì)。例如輸出為“1101101”時(shí),數(shù)碼管的7個(gè)段:g、f、e、d、c、b、a分別接1、1、0、1、1、0、1;接有高電平的段發(fā)亮,于是數(shù)碼管顯示“5”。
圖6-21 共陰數(shù)碼管及其電路
三、實(shí)驗(yàn)內(nèi)容
1、編程實(shí)現(xiàn)7段數(shù)碼顯示譯碼器設(shè)計(jì);
2、對(duì)7段數(shù)碼顯示譯碼器設(shè)計(jì)進(jìn)行編輯、仿真,給出其所有信號(hào)的時(shí)序仿真波形; 參考程序: LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DECL7S IS PORT(A : IN STD_LOGIC_VECTOR(3 DOWNTO 0);LED7S : OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END;ARCHITECTURE one OF DECL7S IS BEGIN PROCESS(A)BEGIN CASE A IS WHEN “0000” => LED7S <= “0111111”;WHEN “0001” => LED7S <= “0000110”;WHEN “0010” => LED7S <= “1011011”;WHEN “0011” => LED7S <= “1001111”;WHEN “0100” => LED7S <= “1100110”;WHEN “0101” => LED7S <= “1101101”;WHEN “0110” => LED7S <= “1111101”;WHEN “0111” => LED7S <= “0000111”;WHEN “1000” => LED7S <= “1111111”;WHEN “1001” => LED7S <= “1101111”;WHEN OTHERS => NULL;END CASE;END PROCESS;END;仿真結(jié)果:
綜合后的計(jì)數(shù)器和譯碼器連接電路的頂層文件原理圖:
實(shí)驗(yàn)五
用狀態(tài)機(jī)實(shí)現(xiàn)序列檢測(cè)器的設(shè)計(jì)(4課時(shí))
一、實(shí)驗(yàn)?zāi)康模?/p>
1、掌握狀態(tài)機(jī)的編程方法和步驟;
2、掌握用狀態(tài)機(jī)設(shè)計(jì)序列檢測(cè)器的方法和步驟;
二、實(shí)驗(yàn)內(nèi)容
用狀態(tài)機(jī)編程實(shí)現(xiàn)對(duì)系列數(shù)“11100101”的檢測(cè),當(dāng)某一系列串(以左移方式)進(jìn)入檢測(cè)器后,若該串與預(yù)置的系列數(shù)相同,則輸出“A”,否則輸出“B”。
三、實(shí)驗(yàn)步驟:
1、編輯系列檢測(cè)器的VHDL程序;
2、仿真測(cè)試并給出仿真波形,了解控制信號(hào)的時(shí)序;
3、將上述方案改為系列檢測(cè)密碼為可預(yù)置(外部輸入)情況,重新編寫(xiě)程序、編譯和仿真,并記錄仿真結(jié)果。參考程序:
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SCHK IS PORT(DIN,CLK,CLR : IN STD_LOGIC;AB : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END SCHK;ARCHITECTURE behv OF SCHK IS SIGNAL Q:INTEGER RANGE 0 TO 8;SIGNAL D:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN D<=“11100101”;PROCESS(CLK,CLR)BEGIN IF CLR= '1' THEN Q <= 0;ELSIF clk='1' AND clk'EVENT THEN CASE Q IS WHEN 0 => IF DIN = D(7)THEN Q<=1;ELSE Q<=0;END IF;WHEN 1 => IF DIN = D(6)THEN Q<=2;ELSE Q<=0;END IF;WHEN 2 => IF DIN = D(5)THEN Q<=3;ELSE Q<=0;END IF;WHEN 3 => IF DIN = D(4)THEN Q<=4;ELSE Q<=0;END IF;WHEN 4 => IF DIN = D(3)THEN Q<=5;ELSE Q<=0;END IF;WHEN 5 => IF DIN = D(2)THEN Q<=6;ELSE Q<=0;END IF;WHEN 6 => IF DIN = D(1)THEN Q<=7;ELSE Q<=0;END IF;WHEN 7 => IF DIN = D(0)THEN Q<=8;ELSE Q<=0;END IF;WHEN OTHERS=> Q<=0;END CASE;END IF;END PROCESS;PROCESS(Q)BEGIN IF Q=8 THEN AB<=“1010”;ELSE AB<=“1011”;END IF;END PROCESS;END behv;仿真結(jié)果:
提高型實(shí)驗(yàn):
實(shí)驗(yàn)六
用VHDL實(shí)現(xiàn)數(shù)字鐘及校園打鈴系統(tǒng)(6課時(shí))
一、實(shí)驗(yàn)?zāi)康募耙螅?/p>
1、掌握VHDL語(yǔ)言的基本結(jié)構(gòu)及編程思想。
2、掌握VHDL語(yǔ)言的進(jìn)行系統(tǒng)設(shè)計(jì)的方法和步驟。
3、提高學(xué)生綜合應(yīng)用能力。
二、實(shí)驗(yàn)內(nèi)容:
1、用VHDL實(shí)現(xiàn)數(shù)字鐘及校園打鈴系統(tǒng)的軟件編輯。
2、用VHDL實(shí)現(xiàn)數(shù)字鐘及校園打鈴系統(tǒng)的軟件仿真。
三、實(shí)驗(yàn)步驟
1、用VHDL編輯60進(jìn)制計(jì)數(shù)器,并進(jìn)行軟件仿真。
2、用VHDL編輯24進(jìn)制計(jì)數(shù)器,并進(jìn)行軟件仿真。
3、用VHDL編輯30進(jìn)制計(jì)數(shù)器,并進(jìn)行軟件仿真。
4、用元件例化的方法實(shí)現(xiàn)數(shù)字鐘的軟件編輯及軟件仿真。
5、實(shí)現(xiàn)數(shù)字鐘的校時(shí)功能。
6、實(shí)現(xiàn)數(shù)字鐘的打鈴功能。
7、完成數(shù)字鐘及校園打鈴系統(tǒng)的實(shí)驗(yàn)報(bào)告。
實(shí)驗(yàn)七
A/D采樣控制器設(shè)計(jì)
一、實(shí)驗(yàn)?zāi)康募耙螅?/p>
1、掌握VHDL語(yǔ)言的基本結(jié)構(gòu)及編程思想。
2、掌握A/D采樣控制器的工作原理。
3、掌握A/D采樣控制器的VHDL語(yǔ)言編程方法。
二、實(shí)驗(yàn)內(nèi)容:
1、設(shè)計(jì)一A/D0809模數(shù)轉(zhuǎn)換器控制器。
2、將轉(zhuǎn)換結(jié)果送數(shù)碼管顯示器顯示(2位)。
3、模擬輸入通道為IN0。
三、實(shí)驗(yàn)步驟:
1、ADC0809特點(diǎn)介紹
(1)、單極性輸入,8位A/D轉(zhuǎn)換精度。(2)、逐次逼近式,每次采樣時(shí)間約為100US(3)、8通道模擬輸入
2、A/D轉(zhuǎn)換器外部引腳功能結(jié)構(gòu)圖
3、A/D轉(zhuǎn)換器時(shí)序圖
4、AD轉(zhuǎn)換控制器與AD轉(zhuǎn)換器的接口電路框圖
5、狀態(tài)控制
S0狀態(tài):初始狀態(tài)。ADDC=‘1’,選擇1通道模擬信號(hào)輸入。
ALE=START=OE=LOCK=‘0’;
S1狀態(tài):通道鎖存。ALE=‘1’, START=OE=LOCK=‘0’;
S2狀態(tài):?jiǎn)?dòng)A/D轉(zhuǎn)換。ALE=‘1’,START=‘1’,OE=LOCK=‘0’; S3狀態(tài):A/D轉(zhuǎn)換等待狀態(tài)。
ALE=START=‘0’,OE=LOCK=‘0’;
IF EOC=‘0’
保持當(dāng)前狀態(tài)不變,繼續(xù)等待A/D轉(zhuǎn)換。
ELSE
轉(zhuǎn)換結(jié)束,進(jìn)入下一狀態(tài)。
S4狀態(tài):數(shù)據(jù)輸出允許狀態(tài)。A/D轉(zhuǎn)換完畢,開(kāi)啟數(shù)據(jù)輸出允許信號(hào)。
ALE=‘0’,START=‘0’,OE=‘1’,LOCK=‘0’;
S5狀態(tài):數(shù)據(jù)鎖存狀態(tài)。開(kāi)啟數(shù)據(jù)鎖存信號(hào),將轉(zhuǎn)換結(jié)果送鎖存器鎖存。
ALE=‘0’,START=‘0’,OE=‘1’,LOCK=‘1’; S6狀態(tài):延時(shí)狀態(tài)。為了保證數(shù)據(jù)可靠鎖存,延時(shí)一個(gè)時(shí)鐘狀態(tài)周期。
ALE=‘0’,START=‘0’,OE=‘1’,LOCK=‘1’; 其它狀態(tài):返回到初始狀態(tài)。ALE=START=OE=LOCK=‘0’;
6、參考程序: LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY AD0809 IS
PORT(D :IN STD_LOGIC_VECTOR(7 DOWNTO 0);
CLK0,EOC : IN STD_LOGIC;
ADDA,OE : OUT STD_LOGIC;
ALE,START : OUT STD_LOGIC;
Q : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
QQ : OUT INTEGER RANGE 15 DOWNTO 0);END AD0809;ARCHITECTURE behav OF AD0809 IS
TYPE ST_TYPE IS(S0, S1, S2, S3,S4,S5,S6,S7);
SIGNAL CURRENT_STATE,NEXT_STATE : ST_TYPE;
SIGNAL REGL:STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL LOCK :STD_LOGIC;
BEGIN
ADDA<='1';
PRO: PROCESS(CURRENT_STATE,EOC)
BEGIN
CASE CURRENT_STATE IS
WHEN S0 => QQ<=0;ALE<='0';START<='0';OE<='0';LOCK<='0';NEXT_STATE <= S1;
WHEN S1 => QQ<=1;ALE<='0';START<='0';OE<='0';LOCK<='0';NEXT_STATE <= S2;
WHEN S2 => QQ<=2;ALE<='1';START<='1';OE<='0';LOCK<='0';NEXT_STATE <= S3;
WHEN S3 => QQ<=3;ALE<='1';START<='1';OE<='0';LOCK<='0';
IF EOC='0' THEN NEXT_STATE <= S4;
ELSE NEXT_STATE <= S3;
END IF;
WHEN S4 => QQ<=4;ALE<='0';START<='0';OE<='0';LOCK<='0';
IF EOC='1' THEN NEXT_STATE <= S5;
ELSE NEXT_STATE <= S4;
END IF;
WHEN S5 => QQ<=5;ALE<='0';START<='1';OE<='1';LOCK<='0';NEXT_STATE <= S6;
WHEN S6 => QQ<=6;ALE<='0';START<='0';OE<='1';LOCK<='1';NEXT_STATE <= S7;
WHEN S7 => QQ<=7;ALE<='0';START<='0';OE<='1';LOCK<='1';NEXT_STATE <= S0;
WHEN OTHERS => NEXT_STATE <= S0;
END CASE;
END PROCESS PRO;REG:PROCESS(CLK0)
BEGIN
IF CLK0'EVENT AND CLK0='1' THEN
CURRENT_STATE<=NEXT_STATE;
END IF;
END PROCESS REG;
COM:PROCESS(LOCK)
BEGIN
IF LOCK'EVENT AND LOCK='1' THEN
REGL<=D;
END IF;
END PROCESS COM;
Q<=REGL;END behav;
實(shí)驗(yàn)八
數(shù)字頻率計(jì)設(shè)計(jì)
一、實(shí)驗(yàn)?zāi)康募耙螅?/p>
1、掌握VHDL語(yǔ)言的基本結(jié)構(gòu)及編程思想。
2、掌握數(shù)字頻率計(jì)的工作原理。
3、掌握數(shù)字頻率計(jì)的VHDL語(yǔ)言編程方法。
二、實(shí)驗(yàn)內(nèi)容:
1、設(shè)計(jì)8位十進(jìn)制數(shù)字頻率計(jì)。
2、測(cè)量頻率范圍為1Hz-50MHz
三、實(shí)驗(yàn)原理: 測(cè)頻原理框圖
四、實(shí)驗(yàn)步驟 1、8位十進(jìn)制計(jì)數(shù)器設(shè)計(jì)
(1)用VHDL設(shè)計(jì)十進(jìn)制計(jì)數(shù)器,并進(jìn)行軟件和硬件仿真 參考程序如下: LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT10 IS
PORT(CLK,RST,EN : IN STD_LOGIC;
CQ : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
COUT : OUT STD_LOGIC);
END CNT10;ARCHITECTURE behav OF CNT10 IS BEGIN
PROCESS(CLK, RST, EN)
VARIABLE CQI : STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
IF RST = '1' THEN
CQI :=(OTHERS =>'0');--計(jì)數(shù)器復(fù)位
ELSIF CLK'EVENT AND CLK='1' THEN
--檢測(cè)時(shí)鐘上升沿
IF EN = '1' THEN
--檢測(cè)是否允許計(jì)數(shù)
IF CQI < “1001” THEN
CQI := CQI + 1;--允許計(jì)數(shù)
ELSE
CQI :=(OTHERS =>'0');--大于9,計(jì)數(shù)值清零
END IF;
END IF;
END IF;
IF CQI = “1001” THEN COUT <= '1';--計(jì)數(shù)大于9,輸出進(jìn)位信號(hào)
ELSE
COUT <= '0';
END IF;
CQ <= CQI;
--將計(jì)數(shù)值向端口輸出
END PROCESS;END behav;(2)8位十進(jìn)制頻率計(jì)電路圖 2、32位鎖存器設(shè)計(jì) 參考程序
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY reg32b IS
PORT(load : IN STD_LOGIC;
din: in STD_LOGIC_VECTOR(31 DOWNTO 0);
DOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0));
END reg32b;ARCHITECTURE behav OF reg32b IS BEGIN
PROCESS(load,din)
BEGIN
IF load'EVENT AND load='1' THEN
dout<=din;
END PROCESS;END behav;3控制器設(shè)計(jì)
(1)控制器時(shí)序圖
(2)參考程序 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY testctl IS
PORT(clk : IN STD_LOGIC;
tsten:out
STD_LOGIC;
clr_cnt: out
STD_LOGIC;
load:out
STD_LOGIC);
END testctl;ARCHITECTURE behav OF testctl IS
signal div2clk:std_logic;BEGIN
PROCESS(clk)
BEGIN
IF clk'EVENT AND clk='1' THEN
div2clk<=not div2clk;
END PROCESS;
process(clk,div2clk)
begin
if clk='0' and div2clk='0'
then
clr_cnt<='1';
else clr_cnt<='0';
end if;
end process;
load<=not div2clk;
tsten<=div2clk;END behav;
END IF;END IF;
實(shí)驗(yàn)九
DAC接口電路與波形發(fā)生器設(shè)計(jì)
一、實(shí)驗(yàn)?zāi)康募耙螅?/p>
1、掌握VHDL語(yǔ)言的基本結(jié)構(gòu)及編程思想。
2、掌握DA轉(zhuǎn)換器接口方法。
3、掌握DA轉(zhuǎn)換器的VHDL語(yǔ)言編程方法。
二、實(shí)驗(yàn)內(nèi)容:
1、設(shè)計(jì)一DAC0832數(shù)模轉(zhuǎn)換器控制器。
2、要求使用DAC轉(zhuǎn)換器輸出一正弦波,最大值為5V。(使用單緩沖方式)
3、要求正弦波頻率能步進(jìn)可調(diào),步進(jìn)間隔為100Hz。(使用2個(gè)按鍵控制,一個(gè)步進(jìn)為加,另一個(gè)為步進(jìn)減)
三、實(shí)驗(yàn)原理
1、DAC0832特點(diǎn)(1)、8位電流DAC轉(zhuǎn)換,輸出為電流信號(hào),因此要轉(zhuǎn)換為電壓輸出,必須外接集成運(yùn)算放大器。(2)、轉(zhuǎn)換時(shí)間約為50---500ns,轉(zhuǎn)換速度比電壓型DAC轉(zhuǎn)換器快,電壓型一般為1---10us(3)、20腳雙列直插式封裝的CMOS型器件。(4)、內(nèi)部具有兩極數(shù)據(jù)寄存器,可采用單或雙緩沖方式。
2、D/A轉(zhuǎn)換器外部引腳功能及內(nèi)部結(jié)構(gòu)圖
3、工作方式
方式一:直通工作方式(本實(shí)驗(yàn)采用此種方式)
一般用于只有一路輸出信號(hào)的情況。
接線情況:ILE=1,CS=WR1=WR2
=XFER=0 方式
二、雙緩沖器工作方式
采用兩步操作完成,可使DA轉(zhuǎn)換輸出前一數(shù)據(jù)的同時(shí),將采集下一個(gè)數(shù)據(jù)送到8位輸入寄存器,以提高轉(zhuǎn)換速度。
一般用于多路DA輸出。
4、DA轉(zhuǎn)換器與控制器接口電路設(shè)計(jì)
5、實(shí)驗(yàn)儀實(shí)際接口電路圖
6、DA轉(zhuǎn)換器輸出波形步進(jìn)可調(diào)控制電路設(shè)計(jì) 設(shè)計(jì)思想:
設(shè)輸入控制器的時(shí)鐘頻率為50MHz。
1、DA轉(zhuǎn)換一次,需要一個(gè)時(shí)鐘周期。若采用64點(diǎn)輸出,則需要64個(gè)時(shí)鐘周期。如果控制器時(shí)鐘頻率為64Hz,則輸出的正弦波頻率為1Hz。
2、因此,只需要控制DA轉(zhuǎn)換控制器的時(shí)鐘頻率,則就可以控制正弦波頻率,正弦波頻率與時(shí)鐘頻率的 關(guān)系為1:64。
3、題目要求正弦波步進(jìn)頻率為100Hz,則時(shí)鐘頻率步進(jìn)應(yīng)為6400Hz。按“加”鍵,則時(shí)鐘頻率增加6400Hz,按“減”減,時(shí)鐘頻率減小6400Hz。
7、帶按鍵控制DA轉(zhuǎn)換器與控制器接口電路設(shè)計(jì)
四、實(shí)驗(yàn)程序 參考程序:
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DAC0832 IS
PORT(CLK :IN STD_LOGIC;
DD : OUT INTEGER RANGE 255 DOWNTO 0);END DAC0832;ARCHITECTURE behav OF DAC0832 IS SIGNAL Q:INTEGER RANGE 63 DOWNTO 0;SIGNAL D : INTEGER RANGE 255 DOWNTO 0;BEGIN
PROCESS(CLK)
BEGIN
IF CLK'EVENT AND CLK='1' THEN Q<=Q+1;
END IF;
END PROCESS;PROCESS(Q)
BEGIN
CASE Q
IS
WHEN 00=>D<=254;WHEN 01=>D<=252;WHEN 02=>D<=249;WHEN 03=> D<=245;
WHEN 04=>D<=239;WHEN 05=>D<=233;WHEN
06=> D<=225;WHEN
07=> D<=217;
WHEN 08=>D<=207;WHEN 09=>D<=197;WHEN
10=> D<=186;WHEN
11=> D<=174;
WHEN 12=>D<=162;WHEN 13=>D<=150;WHEN 14=> D<=137;WHEN
15=> D<=124;
WHEN 16=>D<=112;WHEN 17=>D<=99;WHEN 18=> D<=87;
WHEN
19=> D<=75;
WHEN 20=>D<=64;WHEN
21=>D<=53;WHEN 22=>D<=43;
WHEN 23=> D<=34;
WHEN 24=>D<=26;WHEN 25=>D<=19;WHEN
26=> D<=13;
WHEN
27=> D<=8;
WHEN 28=>D<=4;
WHEN
29=>D<=1;
WHEN 30=>D<=0;
WHEN
31=> D<=0;
WHEN 32=>D<=1;WHEN 33=>D<=4;
WHEN 34=> D<=8;
WHEN 35=> D<=13;WHEN 36=>D<=19;WHEN 37=>D<=26;
WHEN 38=> D<=34;
WHEN
39=> D<=43;
WHEN 40=>D<=53;WHEN
41=>D<=64;WHEN 42=> D<=75;
WHEN
43=> D<=87;
WHEN 44=>D<=99;WHEN 45=>D<=112;WHEN 46=>D<=124;WHEN
47=> D<=137;
WHEN 48=>D<=150;WHEN 49=>D<=162;WHEN 50=> D<=255;WHEN 51=> D<=174;
WHEN 52=>D<=186;WHEN 53=>D<=197;WHEN 54=>D<=207;WHEN 55=> D<=217;
WHEN 56=>D<=225;WHEN 57=>D<=233;WHEN 58=> D<=239;WHEN
59=> D<=245;
WHEN 60=>D<=249;WHEN 61=> D<=252;WHEN 62=> D<=254;WHEN 63=>D<=255;WHEN OTHERS=>NULL;END CASE;END PROCESS;
DD<=D;
END;
實(shí)驗(yàn)十
七段顯示器動(dòng)態(tài)掃描電路設(shè)計(jì)(提高型)
實(shí)驗(yàn)?zāi)康募耙螅?/p>
1、掌握VHDL語(yǔ)言的基本結(jié)構(gòu)及編程思想。
2、掌握七段顯示器動(dòng)態(tài)掃描電路設(shè)計(jì)方法。設(shè)計(jì)要求:
1、設(shè)計(jì)一個(gè)七段數(shù)碼管動(dòng)態(tài)掃描電路。
2、數(shù)碼管個(gè)數(shù)為8個(gè),共陰極接法。
3、設(shè)計(jì)BCD碼--七段字符碼的轉(zhuǎn)換電路;
4、設(shè)計(jì)一電路,控制上述電路實(shí)現(xiàn)“12345678”八個(gè)數(shù)字的顯示,要求顯示方式為:
(1)自左至右逐個(gè)點(diǎn)亮數(shù)碼管,最后全亮;再重復(fù)以上動(dòng)作,每次變化時(shí)間間隔為1秒。
(2)自左至右點(diǎn)亮數(shù)碼管,每次只點(diǎn)亮一個(gè),最后全息滅,再重復(fù)以上動(dòng)作,每次變化時(shí)間間隔為1秒。
(3)先中間兩個(gè)點(diǎn)亮,再依次向外點(diǎn)亮;全亮后,再依次向中間熄滅;重復(fù)上述步驟,每次變化時(shí)間間隔為1秒。一、七段顯示器動(dòng)態(tài)掃描電路設(shè)計(jì)框圖
二、存儲(chǔ)器設(shè)計(jì)(8位8字節(jié)靜態(tài)隨機(jī)存儲(chǔ)器SRAM)LIBRARY ieee;
USE ieee.std_logic_1164.all;ENTITY MEMO_RD_WR IS PORT(WR,RD: IN STD_LOGIC;
A : IN STD_LOGIC_VECTOR(2 DOWNTO 0);
B : IN STD_LOGIC_VECTOR(2 DOWNTO 0);
D : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
Q : OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END MEMO_RD_WR;ARCHITECTURE a OF MEMO_RD_WR IS
SIGNAL Q0,Q1,Q2,Q3: STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL Q4,Q5,Q6,Q7: STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN PROCESS(WR,A)
BEGIN
IF WR='1' THEN
CASE
A
IS
WHEN “000”=>Q0<=D;
WHEN “001”=> Q1<=D;
WHEN “010”=>Q2<=D;
WHEN “011”=> Q3<=D;
WHEN “100”=>Q4<=D;
WHEN “101”=> Q5<=D;
WHEN “110”=>Q6<=D;
WHEN “111”=> Q7<=D;
WHEN OTHERS=>NULL;
END CASE;
END IF;
END PROCESS;PROCESS(RD,B)
BEGIN
IF RD='1' THEN
CASE
B
IS
WHEN “000”=>Q<=Q0;
WHEN “001”=> Q<=Q1;
WHEN “010”=>Q<=Q2;
WHEN “011”=> Q<=Q3;
WHEN “100”=>Q<=Q4;
WHEN “101”=> Q<=Q5;
WHEN “110”=>Q<=Q6;
WHEN “111”=> Q<=Q7;
WHEN OTHERS=>NULL;
END CASE;
END IF;
END PROCESS;END a;
四、循環(huán)取數(shù)電路設(shè)計(jì) LIBRARY ieee;
USE ieee.std_logic_1164.all;ENTITY GET_CODE IS PORT(CLK1: IN STD_LOGIC;
D : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
RD:OUT STD_LOGIC;
A : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);
DOUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END GET_CODE;ARCHITECTURE a OF GET_CODE
IS
SIGNAL LOAD: STD_LOGIC;
SIGNAL QQ : STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL NUM: INTEGER RANGE 7 DOWNTO 0;BEGIN
RD<=?1?;
LOAD<=CLK1;PROCESS(CLK1)
BEGIN
IF CLK1'EVENT AND CLK1='1' THEN
IF NUM<=7
THEN
NUM<=NUM+1;
ELSE NUM<=0;
END IF;
END IF;END PROCESS;PROCESS(NUM)
BEGIN
CASE NUM IS
WHEN 0 =>A<=“000”;
WHEN 1 =>A<=“001”;
WHEN 2 =>A<=“010”;
WHEN 3 =>A<=“011”;
WHEN 4 =>A<=“100”;
WHEN 5 =>A<=“101”;
WHEN 6 =>A<=“110”;
WHEN 7 =>A<=“111”;
WHEN OTHERS =>NULL;
END CASE;
END PROCESS;PROCESS(LOAD)
BEGIN
IF LOAD?EVENT AND LOAD=?1?
THEN-------上升沿鎖存
QQ<=D;
END IF;END PROCESS;DOUT(7 DOWNTO 0)<=QQ(7 DOWNTO 0);END a;
五、掃描控制器設(shè)計(jì) LIBRARY ieee;
USE ieee.std_logic_1164.all;ENTITY SCAN_8 IS PORT(CLK2: IN STD_LOGIC;
C : OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END SCAN_8;ARCHITECTURE a OF SCAN_8
IS
SIGNAL NUM: INTEGER RANGE 7 DOWNTO 0;BEGIN PROCESS(CLK2)
BEGIN
IF CLK2'EVENT AND CLK2=‘1' THEN
IF NUM<=7
THEN
NUM<=NUM+1;
ELSE NUM<=0;
END IF;
END IF;END PROCESS;Process(num)
begin
CASE
NUM
IS
WHEN 1=>C<=“11111110”;WHEN 2=> C<=“11111101”;
WHEN 3=>C<=“11111011”;WHEN 4=> C<=“11110111”;
WHEN 5=>C<=“11101111”;WHEN 6=> C<=“11011111”;
WHEN 7=>C<=“10111111”;WHEN 0=> C<=“01111111”;
WHEN
OTHERS=>NULL;
END CASE;END PROCESS;END A;
應(yīng)用實(shí)例一:顯示“01234567”八個(gè)數(shù)字
LIBRARY ieee;
USE ieee.std_logic_1164.all;ENTITY disp_data IS PORT(CLK: IN STD_LOGIC;
WR:OUT STD_LOGIC;
A:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);
Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END disp_data;ARCHITECTURE a OF disp_data
IS
--SIGNAL QQ : STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL NUM: INTEGER RANGE 7 DOWNTO 0;BEGIN
WR<=?1?;PROCESS(CLK)
BEGIN
IF CLK'EVENT AND CLK='1' THEN
IF NUM<=7
THEN
NUM<=NUM+1;
ELSE NUM<=0;
END IF;
END IF;END PROCESS;PROCESS(NUM)
BEGIN
CASE NUM IS
WHEN 0 =>Q<=“00111111”;A<=“000”;
WHEN 1 =>Q<=“00000110”;A<=“001”;
WHEN 2 =>Q<=“01011011”;A<=“010”;
WHEN 3 =>Q<=“01001111”;A<=“011”;
WHEN 4 =>Q<=“01100110”;A<=“100”;
WHEN 5 =>Q<=“01101101”;A<=“101”;
WHEN 6 =>Q<=“01111101”;A<=“110”;
WHEN 7 =>Q<=“01111111”;A<=“111”;
WHEN OTHERS =>NULL;
END CASE;END PROCESS;END a;實(shí)驗(yàn)十一
彩燈控制器設(shè)計(jì)(提高型實(shí)驗(yàn))
實(shí)驗(yàn)?zāi)康募耙螅?/p>
1、掌握VHDL語(yǔ)言的基本結(jié)構(gòu)及編程思想。
2、掌握VHDL語(yǔ)言的進(jìn)行系統(tǒng)設(shè)計(jì)的方法和步驟。
3、培養(yǎng)學(xué)生綜合應(yīng)用能力。實(shí)驗(yàn)內(nèi)容:
1、了解各類節(jié)日彩燈的顯示方式(主要是動(dòng)態(tài)方式)(上街觀察);
2、將你所了解的情況,畫(huà)出你的設(shè)計(jì)思想框圖;
3、根據(jù)框圖畫(huà)出電路框圖(用EDA技術(shù));
4、用VHDL語(yǔ)言編程實(shí)現(xiàn);
5、完成課程設(shè)計(jì)報(bào)告(約2000字)
實(shí)驗(yàn)
十二、紅綠交通燈控制系統(tǒng)
實(shí)驗(yàn)?zāi)康募耙螅?/p>
1、掌握VHDL語(yǔ)言的基本結(jié)構(gòu)及編程思想。
2、掌握VHDL語(yǔ)言的進(jìn)行系統(tǒng)設(shè)計(jì)的方法和步驟。
3、培養(yǎng)學(xué)生綜合應(yīng)用能力。實(shí)驗(yàn)內(nèi)容:
設(shè)計(jì)一個(gè)簡(jiǎn)易十字路口交通燈控制器。要求:
1、每個(gè)路口有紅、綠、黃三個(gè)指示燈指示交通運(yùn)行情況。紅燈亮,禁止車(chē)輛通行;綠燈亮,車(chē)輛正常通行。
2、利用兩位數(shù)碼管顯示通行到計(jì)時(shí)時(shí)間。
3、用VHDL語(yǔ)言編程實(shí)現(xiàn);
4、完成課程設(shè)計(jì)報(bào)告 實(shí)驗(yàn)步驟:
1、紅綠黃燈秒計(jì)數(shù)選擇控制電路(traffic_mux)SING_STATE:
00
綠燈20秒(橫向路口);
01
黃燈5秒(橫向路口)
綠燈20秒(直向路口)
黃燈5秒(直向路口)
RECOUNT:重新計(jì)數(shù)信號(hào)。=?1?,發(fā)送倒計(jì)時(shí)時(shí)間數(shù)據(jù); =?0?,正常倒計(jì)時(shí); LIBRARY IEEE;
USE IEEE.std_logic_1164.all;USE IEEE.std_logic_unsigned.all;
USE IEEE.std_logic_arith.all;entity traffic_mux is
port(reset,clk_1Hz,recount: in std_logic;
sign_state: in std_logic_vector(1 downto 0);
load: out integer range 255 downto 0);end;
begin
process(reset,clk_1s)
begin
if reset='1' then
load<=“00000000”;
elsif(clk_1Hz'event and clk_1Hz='1')
then
if
recount = '1‘
then
CASE sign_state IS
WHEN “00” => load <= 20;
WHEN “01” => load <= 5;
WHEN “10” => load <= 20;
WHEN “01” => load <= 5;
WHEN OTHERS =>null;
END CASE;
end if;
end if;end process;end BEHAVIOR;
2、倒計(jì)時(shí)控制電路(count_down)library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_arith.all;use IEEE.std_logic_unsigned.all;entity count_down is port(reset,clk_1Hz: in std_logic;recount:in std_logic;load: in integer range 255 downto 0;seg7:out std_logic_vector(15 downto 0);next_state: out std_logic);end;architecture BEHAVIOR of count_down is signal cnt_ff: integer range 255 downto 0;begin process(clk_1Hz,reset)begin if(reset='1')then cnt_ff<=“00000000”;seg7<=“***0”;elsif(clk_1Hz'event and clk_1Hz='1')then if recount='1‘ then cnt_ff<=load-1;else cnt_ff<=cnt_ff-1;end if;end if;end process;process(cnt_ff)begin case cnt_ff is when 0=>seg7<=“***1”;when 1=>seg7<=“***0”;when 2=> seg7<=“***1”;when 3=> seg7<=“***1”;when 4=> seg7<=“***0”;when 5=> seg7<=“***1”;when 6=> seg7<=“***1”;when 7=> seg7<=“***1”;when 8=> seg7<=“***1”;when 9=> seg7<=“***1”;when 10=> seg7<=“***1”;when 11=> seg7<=“***0”;when 12=> seg7<=“***1”;when 13=> seg7<=“***1”;when 14=> seg7<=“***0”;when 15=> seg7<=“***1”;when 16=> seg7<=“***1”;when 17=> seg7<=“***1”;when 18=> seg7<=“***1”;when 19=> seg7<=“***1”;when 20=> seg7<=“***1”;when 21=> seg7<=“***0”;when 22=> seg7<=“***1”;when 23=> seg7<=“***1”;when 24=> seg7<=“***0”;when 25=> seg7<=“***1”;when 26=> seg7<=“***1”;when 27=> seg7<=“***1”;when 28=> seg7<=“***1”;when 29=> seg7<=“***1”;when others=> seg7<=“***1”;end case;end process;next_state <= '1' when cnt_ff=1 else '0';end BEHAVIOR;
3、紅綠燈信號(hào)控制電路(traffic_fsm)LIBRARY IEEE;USE IEEE.std_logic_1164.all;USE IEEE.std_logic_arith.all;USE IEEE.std_logic_unsigned.all;entity traffic_FSM is port(reset,clk,clk_1Hz,flash_1Hz: in std_logic;a_m:in std_logic;next_state: in std_logic;recount: out std_logic;sign_state: out std_logic_vector(1 downto 0);red: out std_logic_vector(1 downto 0);green: out std_logic_vector(1 downto 0);yellow: out std_logic_vector(1 downto 0));end;architecture BEHAVIOR of traffic_FSM is type Sreg0_type is(r0g1, r0y1, g0r1, y0r1, y0y1, y0g1, g0y1, r0r1);signal state : Sreg0_type;signal light: std_logic_vector(5 downto 0);begin if(reset='1')then state<=r0g1;
----設(shè)定當(dāng)前為橫向紅燈亮,豎向綠燈亮 sign_state<=“01”;------選擇20秒倒計(jì)時(shí)
recount<=‘1’;------裝入計(jì)數(shù)初值并啟動(dòng)倒計(jì)時(shí) else if(clk'event and clk='1')then case STATE is when r0g1 => if(a_m='1' and clk_1Hz='1')then if(next_state = ‘1’)then--當(dāng)前計(jì)數(shù)完畢,轉(zhuǎn)入下一種計(jì)時(shí)
recount<='1';state<=r0y1;sign_state <= “01”;else recount<=‘0’;state<=r0g1;----否則,繼續(xù)倒計(jì)時(shí) end if;when r0y1 =>--now state: red0 on yellow1 flash if(a_m='1' and clk_1Hz='1')then if(next_state = '1')then recount<='1';state<=g0r1;sign_state <= “10”;else recount<='0';state<=r0y1;end if;when g0r1 =>--now state: green0 on red1 on if(a_m='1' and ena_1Hz='1')then if(next_state = '1')then recount<='1';state<=y0r1;sign_state <= “11”;else recount<='0';state<=g0r1;end if;when y0r1 =>--now state: green0 on red1 on if(a_m='1' and ena_1Hz='1')then if(next_state = '1')then recount<='1';state<=r0g1;sign_state <= “00”;else recount<='0';state<=y0r1;--red=2'b10;green=2'b00;yellow=2'b01;end if;when others => state<=r0g1;recount<='0';sign_state <= “00”;end case;end if;end if;end process;--light: r(10)y(10)g(10)light <= “010010” when(state=r0g1)else “011000” when(state=r0y1)else “100001” when(state=g0r1)else “100100” when(state=y0r1)else “110000”;red <= light(5 downto 4);yellow <= light(3 downto 2)and(flash_1Hz & flash_1Hz);green <= light(1 downto 0);end BEHAVIOR;
第三篇:EDA技術(shù)基礎(chǔ)實(shí)驗(yàn)教案
實(shí)驗(yàn)一 2選1多路選擇器VHDL設(shè)計(jì)
一、實(shí)驗(yàn)?zāi)康模?/p>
熟悉利用MAX+plusⅡ的VHDL文本設(shè)計(jì)流程全過(guò)程,學(xué)習(xí)簡(jiǎn)單組合邏輯電路的設(shè)計(jì)、多層次電路的設(shè)計(jì)、仿真和硬件測(cè)試。
二、實(shí)驗(yàn)內(nèi)容:
按照MAX+plusⅡ的文本輸入設(shè)計(jì)方法與流程完成2選1多路選擇器的輸入(mux21a.vhd)和仿真測(cè)試等步驟,給出仿真波形圖。最后在實(shí)驗(yàn)系統(tǒng)上進(jìn)行硬件測(cè)試,實(shí)際驗(yàn)證本項(xiàng)設(shè)計(jì)的功能。
三、實(shí)驗(yàn)步驟:
1、根據(jù)2選1多路選擇器的工作原理,編寫(xiě)2選1的VHDL源程序,并輸入計(jì)算機(jī),mux21a.vhd文件名將源程序存盤(pán)。2選1多路選擇器的參考程序如下:
【例1-1】
ENTITY mux21a IS PORT(a, b : IN BIT;s : IN BIT;y : OUT BIT);END ENTITY mux21a;ARCHITECTURE one OF mux21a IS SIGNAL d,e : BIT;BEGIN d <= a AND(NOT S);e <= b AND s;y <= d OR e;END ARCHITECTURE one;
【例1-2】
ENTITY mux21a IS PORT(a, b : IN BIT;s : IN BIT;y : OUT BIT);END ENTITY mux21a;ARCHITECTURE one OF mux21a IS BEGIN y <=(a AND(NOT s))OR(b AND s);END ARCHITECTURE one;
【例1-3】 ENTITY mux21a IS PORT(a, b, s: IN BIT;y : OUT BIT);END ENTITY mux21a;ARCHITECTURE one OF mux21a IS BEGIN PROCESS(a,b,s)BEGIN IF s = '0' THEN y <= a;ELSE y <= b;END IF;END PROCESS;END ARCHITECTURE one;
2、對(duì)mux21a.vhd文件編譯后,再進(jìn)行波形仿真,完成輸入信號(hào)a、b、s 輸入電平的設(shè)置,啟動(dòng)仿真器Simulator,觀察輸出波形的情況。
3、鎖定引腳、編譯并編程下載。參選實(shí)驗(yàn)電路模式5和附表一,鍵
1、鍵
2、鍵3為輸入信號(hào)a、b、s分別鎖定在EP1K30/50144-PIN TQFP 目標(biāo)芯片的8、9、10引腳,輸出信號(hào)y鎖定在目標(biāo)芯片的20引腳。
4、硬件實(shí)測(cè)2選1多路選擇器的邏輯功能。按動(dòng)GW48實(shí)驗(yàn)板上的高低電平輸入鍵
1、鍵
2、鍵3,得到不同的s、b、a輸入組合;觀察輸出發(fā)光二極管D1的亮滅,檢查2選1多路選擇器的設(shè)計(jì)結(jié)果是否正確。
思考題
用以上同樣的方法設(shè)計(jì)4選1數(shù)據(jù)選擇器mux41a.vhd,并仿真設(shè)計(jì)結(jié)果。
實(shí)驗(yàn)報(bào)告要求:
寫(xiě)出實(shí)驗(yàn)源程序,畫(huà)出仿真波形。分析實(shí)驗(yàn)結(jié)果,以及它們的硬件測(cè)試實(shí)驗(yàn)結(jié)果寫(xiě)進(jìn)實(shí)驗(yàn)報(bào)告。寫(xiě)出心得體會(huì)。
實(shí)驗(yàn)二 D觸發(fā)器的VHDL設(shè)計(jì)
一、實(shí)驗(yàn)?zāi)康模?/p>
熟悉利用MAX+plusⅡ的VHDL文本設(shè)計(jì)流程全過(guò)程,學(xué)習(xí)簡(jiǎn)單時(shí)序電路的設(shè)計(jì)、仿真和硬件測(cè)試。
二、實(shí)驗(yàn)內(nèi)容:
按MAX+plusⅡ的文本輸入設(shè)計(jì)方法與流程完成D觸發(fā)器的VHDL設(shè)計(jì)、軟件編譯、仿真分析、硬件測(cè)試及詳細(xì)實(shí)驗(yàn)過(guò)程。
D觸發(fā)器的VHDL設(shè)計(jì)的參考程序如下:
【例2-1】
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DFF1 IS PORT(CLK : IN STD_LOGIC;D : IN STD_LOGIC;Q : OUT STD_LOGIC);END;ARCHITECTURE bhv OF DFF1 IS BEGIN SIGNAL Q1 : STD_LOGIC;--類似于在芯片內(nèi)部定義一個(gè)數(shù)據(jù)的暫存節(jié)點(diǎn) BEGIN PROCESS(CLK)BEGIN IF CLK'EVENT AND CLK = '1' THEN Q1 <= D;END IF;Q <= Q1;--將內(nèi)部的暫存數(shù)據(jù)向端口輸出 END PROCESS;END bhv;
三、實(shí)驗(yàn)步驟:
1、打開(kāi)文本編輯器,輸入D觸發(fā)器的VHDL源程序,并用D_ff.vhd文件名將源程序存盤(pán)。
2、選擇目標(biāo)器件EP1K30/50144-PIN TQFP。
3、對(duì)D_ff.vhd文件編譯后,再進(jìn)行波形仿真,完成輸入信號(hào)d、clk輸入電平的設(shè)置,啟動(dòng)仿真器Simulator,觀察輸出波形的情況。
4、鎖定引腳、編譯并編程下載。參選實(shí)驗(yàn)電路模式5和附表一,鍵1為輸入信號(hào)d鎖定在EP1K30/50144-PIN TQFP 目標(biāo)芯片的8引腳,輸出信號(hào)q和nq鎖定在目標(biāo)芯片的20和21引腳。
實(shí)驗(yàn)報(bào)告要求:
寫(xiě)出實(shí)驗(yàn)源程序,畫(huà)出仿真波形。分析實(shí)驗(yàn)結(jié)果,以及它們的硬件測(cè)試實(shí)驗(yàn)結(jié)果寫(xiě)進(jìn)實(shí)驗(yàn)報(bào)告。寫(xiě)出心得體會(huì)。
實(shí)驗(yàn)三 含異步清0同步時(shí)鐘使能的4位加法計(jì)數(shù)器設(shè)計(jì)
一、實(shí)驗(yàn)?zāi)康模?/p>
學(xué)習(xí)時(shí)序電路的設(shè)計(jì)、仿真和硬件測(cè)試,進(jìn)一步熟悉VHDL設(shè)計(jì)技術(shù)。
二、實(shí)驗(yàn)原理:
圖4-1 含計(jì)數(shù)使能、異步復(fù)位和計(jì)數(shù)值并行預(yù)置功能4位加法計(jì)數(shù)器
圖4-1是一含計(jì)數(shù)使能、異步復(fù)位和計(jì)數(shù)值并行預(yù)置功能4位加法計(jì)數(shù)器,例4-1是其VHDL描述。由圖4-1所示,圖中間是4位鎖存器;rst是異步清信號(hào),高電平有效;clk是鎖存信號(hào);D[3..0]是4位數(shù)據(jù)輸入端。當(dāng)ENA為'1'時(shí),多路選擇器將加1器的輸出值加載于鎖存器的數(shù)據(jù)端;當(dāng)ENA為'0'時(shí)將“0000”加載于鎖存器。
三、實(shí)驗(yàn)內(nèi)容:
1、按照VHDL文本輸入設(shè)計(jì)方法和步驟,在MAX+plusII上對(duì)例4-1 進(jìn)行編輯、編譯、綜合、適配、仿真。說(shuō)明例4-1中各語(yǔ)句的作用,詳細(xì)描述示例的功能特點(diǎn),給出其所有信號(hào)的時(shí)序仿真波形。
[例4-1] LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT4B IS PORT(CLK : IN STD_LOGIC;RST : IN STD_LOGIC;ENA : IN STD_LOGIC;OUTY : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT : OUT STD_LOGIC);END CNT4B;ARCHITECTURE behav OF CNT4B IS SIGNAL CQI : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN P_REG: PROCESS(CLK, RST, ENA)BEGIN IF RST = '1' THEN CQI <= “0000”;ELSIF CLK'EVENT AND CLK = '1' THEN IF ENA = '1' THEN CQI <= CQI + 1;END IF;END IF;
OUTY <= CQI;END PROCESS P_REG;--進(jìn)位輸出
COUT<=CQI(0)AND CQI(1)AND CQI(2)AND CQI(3);END behav;
2、引腳鎖定以及硬件下載測(cè)試。
建議選實(shí)驗(yàn)電路模式5,用鍵8(PIO7)控制RST;用鍵7(PIO6)控制ENA;計(jì)數(shù)溢出COUT接發(fā)光管D8(PIO15);OUTY是計(jì)數(shù)輸出,接數(shù)碼1(PIO19-PIO16,低位靠右);時(shí)鐘CLK接clock0(引腳號(hào)為54),通過(guò)短路帽選擇4Hz信號(hào)。引腳鎖定窗后進(jìn)行編譯、下載和硬件測(cè)試實(shí)驗(yàn)。將實(shí)驗(yàn)過(guò)程和實(shí)驗(yàn)結(jié)果寫(xiě)進(jìn)實(shí)驗(yàn)報(bào)告。
結(jié)合第五章例題使學(xué)生能夠提高對(duì)具有計(jì)數(shù)使能、異步復(fù)位和計(jì)數(shù)值并行預(yù)置功能功能的計(jì)數(shù)器中各功能的實(shí)現(xiàn)的認(rèn)識(shí)、并能完成設(shè)計(jì)。
思考題1:
在例4-1 中是否可以不定義信號(hào) CQI,而直接用輸出端口信號(hào)完成加法運(yùn)算,即 : OUTY <= OUTY + 1 ?
思考題2:
修改例4-1,用進(jìn)程語(yǔ)句和IF語(yǔ)句實(shí)現(xiàn)進(jìn)位信號(hào)的檢出。
實(shí)驗(yàn)報(bào)告要求:
寫(xiě)出實(shí)驗(yàn)源程序,畫(huà)出仿真波形。分析實(shí)驗(yàn)結(jié)果,以及它們的硬件測(cè)試實(shí)驗(yàn)結(jié)果和附加內(nèi)容實(shí)驗(yàn)情況寫(xiě)進(jìn)實(shí)驗(yàn)報(bào)告。寫(xiě)出心得體會(huì)。
實(shí)驗(yàn)四 7段數(shù)碼顯示譯碼器設(shè)計(jì)
一、實(shí)驗(yàn)?zāi)康模?/p>
學(xué)習(xí)7段數(shù)碼顯示譯碼器設(shè)計(jì);學(xué)習(xí)多層次設(shè)計(jì)方法。
二、實(shí)驗(yàn)原理:
7段數(shù)碼是純組合電路,通常的小規(guī)模專用IC,如74或4000系列的器件只能作十進(jìn)制BCD碼譯碼,然而數(shù)字系統(tǒng)中的數(shù)據(jù)處理和運(yùn)算都是2進(jìn)制的,所以輸出表達(dá)都是16進(jìn)制的,為了滿足16進(jìn)制數(shù)的譯碼顯示,最方便的方法就是利用VHDL譯碼程序在FPGA或CPLD中實(shí)現(xiàn)。本項(xiàng)實(shí)驗(yàn)很容易實(shí)現(xiàn)這一目的。例5-1作為7段BCD碼譯碼器的設(shè)計(jì),輸出信號(hào)LED7S的7位分別接如圖5-1數(shù)碼管的7個(gè)段,高位在左,低位在右。例如當(dāng)LED7S輸出為 “1101101” 時(shí),數(shù)碼管的7個(gè)段:g、f、e、d、c、b、a分別接1、1、0、1、1、0、1,接有高電平的段發(fā)亮,于是數(shù)碼管顯示“5”。
三、實(shí)驗(yàn)內(nèi)容:
1、說(shuō)明例5-1中各語(yǔ)句的含義,以及該例的整體功能。在MAX+plusII上對(duì)以下該例進(jìn)行編輯、編譯、綜合、適配、仿真,給出其所有信號(hào)的時(shí)序仿真波形(提示:用輸入總線的方式給出輸入信號(hào)仿真數(shù)據(jù))。
[例5-1] LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DecL7S IS PORT(A : IN STD_LOGIC_VECTOR(3 DOWNTO 0);LED7S : OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END;ARCHITECTURE one OF DecL7S IS BEGIN PROCESS(A)BEGIN CASE A(3 DOWNTO 0)IS WHEN “0000” => LED7S <= “0111111”;--X“3F”?0 WHEN “0001” => LED7S <= “0000110”;--X“06”?1 WHEN “0010” => LED7S <= “1011011”;--X“5B”?2 WHEN “0011” => LED7S <= “1001111”;--X“4F”?3 WHEN “0100” => LED7S <= “1100110”;--X“66”?4 WHEN “0101” => LED7S <= “1101101”;--X“6D”?5 WHEN “0110” => LED7S <= “1111101”;--X“7D”?6 WHEN “0111” => LED7S <= “0000111”;--X“07”?7 WHEN “1000” => LED7S <= “1111111”;--X“7F”?8 WHEN “1001” => LED7S <= “1101111”;--X“6F”?9 WHEN “1010” => LED7S <= “1110111”;--X“77”?10 WHEN “1011” => LED7S <= “1111100”;--X“7C”?11 WHEN “1100” => LED7S <= “0111001”;--X“39”?12 WHEN “1101” => LED7S <= “1011110”;--X“5E”?13 WHEN “1110” => LED7S <= “1111001”;--X“79”?14 WHEN “1111” => LED7S <= “1110001”;--X“71”?15 WHEN OTHERS => NULL;END CASE;END PROCESS;END;
2、引腳鎖定以及硬件下載測(cè)試。建議選實(shí)驗(yàn)電路模式6,用數(shù)碼8顯示譯碼輸出(PIO46--PIO40),鍵
8、鍵
7、鍵
6、鍵5四位控制輸入,硬件驗(yàn)證譯碼器的工作性能。
3、用VHDL例化語(yǔ)句(參考實(shí)驗(yàn)1中的1位全加VHDL文本輸入設(shè)計(jì))按圖5-2 的方式,以例4-1和例5-1為底層元件,完成頂層文件設(shè)計(jì),并重復(fù)以上實(shí)驗(yàn)過(guò)程。注意圖5-2中的tmp是4位總線,led是7位總線。對(duì)于引腳鎖定和實(shí)驗(yàn),建議仍選實(shí)驗(yàn)電路模式6,用數(shù)碼8顯示譯碼輸出,用鍵3作為時(shí)鐘輸入(每按2次鍵為1個(gè)時(shí)鐘脈沖),或直接時(shí)鐘信號(hào)clock0。
實(shí)驗(yàn)報(bào)告要求:
寫(xiě)出實(shí)驗(yàn)源程序,畫(huà)出仿真波形。分析實(shí)驗(yàn)結(jié)果,以及它們的硬件測(cè)試實(shí)驗(yàn)結(jié)果寫(xiě)進(jìn)實(shí)驗(yàn)報(bào)告。寫(xiě)出心得體會(huì)。
實(shí)驗(yàn)五 2位數(shù)的十進(jìn)制計(jì)數(shù)器的設(shè)計(jì)
一、實(shí)驗(yàn)?zāi)康模?/p>
通過(guò)實(shí)驗(yàn)讓讀者掌握復(fù)雜時(shí)序邏輯電路的EDA原理圖輸入設(shè)計(jì)法和文本輸入設(shè)計(jì)法,通過(guò)電路仿真,進(jìn)一步了解有時(shí)鐘使能的2位十進(jìn)制計(jì)數(shù)器的功能和特性。
二、實(shí)驗(yàn)原理:
有時(shí)鐘使能的2位十進(jìn)制計(jì)數(shù)器是頻率計(jì)的核心元件之一,這里用2個(gè)74162來(lái)設(shè)計(jì)完成。
三、實(shí)驗(yàn)內(nèi)容:
1.用文本輸入設(shè)計(jì)方法編寫(xiě)2位十進(jìn)制計(jì)數(shù)器的VHDL源程序,并用twin10_g.vhd文件名存盤(pán),參考程序如下: LIBRARY ieee;
USE ieee.std_logic_1164.all;USE ieee.std_logic_unsigned.all;ENTITY twin10_v IS PORT(Clrn,Ent1,Enp,Clk : IN STD_LOGIC;
Qa,Qb
: OUT STD_LOGIC_VECTOR(3 downto 0);
Co
: OUT STD_LOGIC);END twin10_v;ARCHITECTURE a OF twin10_v IS SIGNAL Ent2 : STD_LOGIC;BEGIN
PROCESS(Clk)
VARIABLE tmpa,tmpb :STD_LOGIC_VECTOR(3 downto 0);
BEGIN IF(Clk'event AND Clk='1')THEN
IF Clrn='0' THEN tmpa := “0000”;tmpb := “0000”;
ELSIF(Ent1 AND Enp)='1' THEN
IF tmpa=“1001” THEN
tmpa:=“0000”;
IF tmpb=“1001” THEN tmpb:=“0000”;
ELSE tmpb:= tmpb+1;
END IF;
ELSE tmpa := tmpa+1;
END IF;
END IF;
END IF;
Qa <= tmpa;Ent2<=tmpa(0)AND tmpa(3)AND Ent1;
Qb <= tmpb;Co<= tmpb(0)AND tmpb(3)AND Ent2;END PROCESS;END a;2.同樣編譯后再進(jìn)行波形仿真
按照波形仿真的操作步驟,對(duì)2位十進(jìn)制計(jì)數(shù)器進(jìn)行波形仿真。
3.鎖定引腳、編譯并編程下載。參選實(shí)驗(yàn)電路模式5和附表一,引腳鎖定目標(biāo)芯片為EP1K30/50144-PIN TQFP 實(shí)驗(yàn)報(bào)告要求:
寫(xiě)出實(shí)驗(yàn)源程序,畫(huà)出仿真波形。對(duì)設(shè)計(jì)的2位十進(jìn)制計(jì)數(shù)器進(jìn)行實(shí)驗(yàn)結(jié)果的分析,以及硬件測(cè)試實(shí)驗(yàn)結(jié)果寫(xiě)進(jìn)實(shí)驗(yàn)報(bào)告。寫(xiě)出心得體會(huì)。
第四篇:EDA實(shí)驗(yàn)4lxm
實(shí)驗(yàn)四 計(jì)數(shù)器與七段譯碼器及顯示的設(shè)計(jì)
一 實(shí)驗(yàn)?zāi)康?/p>
1、掌握七段譯碼器的工作原理;
2、學(xué)會(huì)用VHDL硬件描述語(yǔ)言進(jìn)行數(shù)字系統(tǒng)設(shè)計(jì);
3、學(xué)會(huì)運(yùn)用波形仿真測(cè)試檢驗(yàn)程序的正確性;
4、用QuartusII完成基本組合電路的設(shè)計(jì)。
二 實(shí)驗(yàn)儀器
PC機(jī)、Quartus II 6.0軟件、康芯EDA實(shí)驗(yàn)箱
三 實(shí)驗(yàn)內(nèi)容
選GW48系統(tǒng)的實(shí)驗(yàn)電路模式6,用數(shù)碼8顯示譯碼輸出(PIO46-PIO40),鍵3到鍵8作為控制輸入端。完成計(jì)數(shù)器的數(shù)碼管顯示設(shè)計(jì)。
四 實(shí)驗(yàn)原理及步驟
7段數(shù)碼是純組合電路,通常的小規(guī)模專用IC,如74或4000系列的器件只能作十進(jìn)制BCD碼譯碼,然而數(shù)字系統(tǒng)中的數(shù)據(jù)處理和運(yùn)算都是2進(jìn)制的,所以輸出表達(dá)都是16進(jìn)制的,為了滿足16進(jìn)制數(shù)的譯碼顯示,最方便的方法就是利用譯碼程序在FPGA/CPLD中來(lái)實(shí)現(xiàn)。例6-18作為7段譯碼器,輸出信號(hào)LED7S的7位分別接如圖6-2數(shù)碼管的7個(gè)段,高位在左,低位在右。例如當(dāng)LED7S輸出為“1101101”時(shí),數(shù)碼管的7個(gè)段:g、f、e、d、c、b、a分別接1、1、0、1、1、0、1;接有高電平的段發(fā)亮,于是數(shù)碼管顯示“5”。注意,這里沒(méi)有考慮表示小數(shù)點(diǎn)的發(fā)光管,如果要考慮,需要增加段h,例6-18中的LED7S:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)應(yīng)改為...(7 DOWNTO 0)。
1、根據(jù)譯碼器真值表寫(xiě)出原程序。
譯碼器真值表:
數(shù)
輸入
輸出
值 A
B C D a b c d e f g 0 0 0 0 0 1 1 1 1 1 1 0 1 0 0 0 1 0 1 1 0 0 0 0 2 0 0 1 0 1 1 0 1 1 0 1 3 0 0 1 1 1 1 1 1 0 0 1 4 0 1 0 0 0 1 1 0 0 1 1 5 0 1 0 1 1 0 1 1 0 1 1 6 0 1 1 0 1 0 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 8 1 0 0 0 1 1 1 1 1 1 1 9 1 0 0 1 1 1 1 1 0 1 1 A 0 1 0 1 1 1 0 1 1 1 B 1 0 1 1 0 0 1 1 1 1 1 C 1 1 0 0 1 0 0 1 1 1 0 D 1 1 0 1 0 1 1 1 1 0 1 E 1 1 1 0 1 0 0 1 1 1 1 F 1 1 1 1 1 0 0 0 1 1 1
三、實(shí)驗(yàn)內(nèi)容:
1、說(shuō)明下列程序中各語(yǔ)句的含義,以及該例的整體功能。在Quartus II 6.0上對(duì)以下該例進(jìn)行編輯、編譯、綜合、適配、仿真,給出其所有信號(hào)的時(shí)序仿真波形(提示:用輸入總線的方式給出輸入信號(hào)仿真數(shù)據(jù))。
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DecL7S IS PORT(A : IN STD_LOGIC_VECTOR(3 DOWNTO 0);LED7S : OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END;ARCHITECTURE one OF DecL7S IS BEGIN PROCESS(A)BEGIN CASE A(3 DOWNTO 0)IS WHEN “0000” => LED7S <= “0111111”;--X“3F”?0 WHEN “0001” => LED7S <= “0000110”;--X“06”?1 WHEN “0010” => LED7S <= “1011011”;--X“5B”?2 WHEN “0011” => LED7S <= “1001111”;--X“4F”?3 WHEN “0100” => LED7S <= “1100110”;--X“66”?4 WHEN “0101” => LED7S <= “1101101”;--X“6D”?5 WHEN “0110” => LED7S <= “1111101”;--X“7D”?6 WHEN “0111” => LED7S <= “0000111”;--X“07”?7 WHEN “1000” => LED7S <= “1111111”;--X“7F”?8 WHEN “1001” => LED7S <= “1101111”;--X“6F”?9 WHEN “1010” => LED7S <= “1110111”;--X“77”?10 WHEN “1011” => LED7S <= “1111100”;--X“7C”?11 WHEN “1100” => LED7S <= “0111001”;--X“39”?12 WHEN “1101” => LED7S <= “1011110”;--X“5E”?13 WHEN “1110” => LED7S <= “1111001”;--X“79”?14 WHEN “1111” => LED7S <= “1110001”;--X“71”?15 WHEN OTHERS => NULL;END CASE;END PROCESS;END;
圖3-1 共陰數(shù)碼管及其電路
2、引腳鎖定以及硬件下載測(cè)試。建議選實(shí)驗(yàn)電路模式6,用數(shù)碼8顯示譯碼輸出(PIO46--PIO40),鍵
8、鍵
7、鍵
6、鍵5四位控制輸入,硬件驗(yàn)證譯碼器的工作性能。
3、用VHDL完成四位二進(jìn)制加法計(jì)數(shù)器設(shè)計(jì),命名為CNT4B.4、用VHDL例化語(yǔ)句(參考實(shí)驗(yàn)1中的1位全加VHDL文本輸入設(shè)計(jì))按圖3-2 的方式,完成頂層文件設(shè)計(jì),并重復(fù)以上實(shí)驗(yàn)過(guò)程。注意圖3-2中的tmp是4位總線,led是7位總線。對(duì)于引腳鎖定和實(shí)驗(yàn),建議仍選實(shí)驗(yàn)電路模式6,用數(shù)碼8顯示譯碼輸出,用鍵3作為時(shí)鐘輸入(每按2次鍵為1個(gè)時(shí)鐘脈沖),或直接時(shí)鐘信號(hào)clock0。
圖3-2 計(jì)數(shù)器和譯碼器連接電路的頂層文件原理圖
(提示:
1、將教材P89頁(yè)程序和P154頁(yè)程序讀懂,分別建立工程、生成各自原理圖。
2、將上述兩個(gè)原理圖按教材P155頁(yè)圖6-19連接起來(lái)建立新的原理圖設(shè)計(jì)文件。
3、將上述原理圖文件編譯、仿真、引腳綁定,下載到實(shí)驗(yàn)箱驗(yàn)證。)
四、實(shí)驗(yàn)報(bào)告要求
1、總結(jié)Quartus II 6.0 VHDL 中CASE語(yǔ)句應(yīng)用及多層次設(shè)計(jì)方法
2、根據(jù)以上的實(shí)驗(yàn)內(nèi)容寫(xiě)出實(shí)驗(yàn)報(bào)告,包括程序設(shè)計(jì)、軟件編譯、仿真分析、硬件測(cè)試和實(shí)驗(yàn)過(guò)程;設(shè)計(jì)程序、程序分析報(bào)告、仿真波形圖及其分析報(bào)告;
3、心得體會(huì)――本次實(shí)驗(yàn)中你的感受;你從實(shí)驗(yàn)中獲得了哪些收益;本次實(shí)驗(yàn)?zāi)愕某晒χ?;本次?shí)驗(yàn)中還有待改進(jìn)的地方;下次實(shí)驗(yàn)應(yīng)該從哪些地方進(jìn)行改進(jìn);怎樣提高自的實(shí)驗(yàn)效率和實(shí)驗(yàn)水平等等。
五、問(wèn)題與思考:
只要求譯出數(shù)字0~9和“-”,怎樣修改程序?
第五篇:EDA實(shí)驗(yàn)總結(jié)報(bào)告
數(shù)字EDA實(shí)驗(yàn)報(bào)告--------------薛蕾0941903207
數(shù)字EDA實(shí)驗(yàn) 實(shí)驗(yàn)報(bào)告
學(xué)院: 計(jì)算機(jī)科學(xué)與工程學(xué)院 專業(yè): 通信工程 學(xué)號(hào): 0941903207 姓名: 薛蕾 指導(dǎo)老師: 錢(qián)強(qiáng)
數(shù)字EDA實(shí)驗(yàn)報(bào)告--------------薛蕾0941903207 實(shí)驗(yàn)一 四選一數(shù)據(jù)選擇器的設(shè)計(jì)
一、實(shí)驗(yàn)?zāi)康?/p>
1、熟悉Quartus II軟件的使用。
2、了解數(shù)據(jù)選擇器的工作原理。
3、熟悉EDA開(kāi)發(fā)的基本流程。
二、實(shí)驗(yàn)原理及內(nèi)容
實(shí)驗(yàn)原理
數(shù)據(jù)選擇器在實(shí)際中得到了廣泛的應(yīng)用,尤其是在通信中為了利用多路信號(hào)中的一路,可以采用數(shù)據(jù)選擇器進(jìn)行選擇再對(duì)該路信號(hào)加以利用。從多路輸入信號(hào)中選擇其中一路進(jìn)行輸出的電路稱為數(shù)據(jù)選擇器?;颍涸诘刂沸盘?hào)控制下,從多路輸入信息中選擇其中的某一路信息作為輸出的電路稱為數(shù)據(jù)選擇器。數(shù)據(jù)選擇器又叫多路選擇器,簡(jiǎn)稱MUX。4選1數(shù)據(jù)選擇器:
(1)原理框圖:如右圖。
D0、D1、D2、D3
:輸入數(shù)據(jù) A1、A0
:地址變量
由地址碼決定從4路輸入中選擇哪1路輸出。
(2)真值表如下圖:(3)邏輯圖
數(shù)據(jù)選擇器的原理比較簡(jiǎn)單,首先必須設(shè)置一個(gè)選擇標(biāo)志信號(hào),目的就是為了從多路信號(hào)中選擇所需要的一路信號(hào),選擇標(biāo)志信號(hào)的一種狀態(tài)對(duì)應(yīng)著一路信號(hào)。在應(yīng)用中,設(shè)置一定的選擇標(biāo)志信號(hào)狀態(tài)即可得到相應(yīng)的某一路信號(hào)。這就是數(shù)據(jù)選擇器的實(shí)現(xiàn)原理。
三.實(shí)驗(yàn)內(nèi)容
1、分別采用原理圖和VHDL語(yǔ)言的形式設(shè)計(jì)4選1數(shù)據(jù)選擇器
2、對(duì)所涉及的電路進(jìn)行編譯及正確的仿真。電路圖:
四、實(shí)驗(yàn)程序
library ieee;use ieee.std_Logic_1164.all;
ENTITY mux4 IS
PORT(a0, a1, a2, a3 :IN STD_LOGIC;
s :IN STD_LOGIC_VECTOR(1 DOWNTO 0);
y :OUT STD_LOGIC);END mux4;ARCHITECTURE archmux OF mux4 IS
BEGIN y <= a0 WHEN s = “00” else
--當(dāng)s=00時(shí),y=a0 a1 WHEN s = “01” else
--當(dāng)s=01時(shí),y=a1 a2 WHEN s = “10” else
--當(dāng)s=10時(shí),y=a2 a3;
--當(dāng)s取其它值時(shí),y=a2 END archmux;
五、運(yùn)行結(jié)果
六.實(shí)驗(yàn)總結(jié)
真值表分析:
當(dāng)js=0時(shí),a1,a0取00,01,10,11時(shí),分別可取d0,d1,d2,d3.實(shí)驗(yàn)二 血型配對(duì)器的設(shè)計(jì)
一、實(shí)驗(yàn)?zāi)康?/p>
1、進(jìn)一步熟悉Quartus II軟件的使用。
2、掌握簡(jiǎn)單組合邏輯電路的設(shè)計(jì)方法與功能仿真技巧。
3、進(jìn)一步學(xué)習(xí)Quartus II中基于原理圖設(shè)計(jì)的流程。
二、實(shí)驗(yàn)原理及內(nèi)容
實(shí)驗(yàn)原理
人類有O、A、B、AB 4種基本血型,輸血者與受血者的血型必須符合圖示原則。設(shè)計(jì)一血型配對(duì)電路,用以檢測(cè)輸血者與受血者之間的血型關(guān)系是否符合,如果符合,輸出為1,否則為0。
已知: AB血型是萬(wàn)能受血者,O血型是萬(wàn)能獻(xiàn)血者!如果要輸血給O型血,那么可以的血型是O型!如果要輸血給A型血,那么可以的血型是A,O型!如果要輸血給B型血,那么可以的血型是B,O型!
如果要輸血給AB型血,那么可以的血型是A,B,AB,O型!
輸血者
受血者
O A
O A B AB
B AB
三.實(shí)驗(yàn)內(nèi)容
1、用VHDL語(yǔ)言編寫(xiě)程序?qū)崿F(xiàn)血型配對(duì)器的功能 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY Vxuexing IS PORT(P,Q,R,S:IN STD_LOGIC;F:OUT STD_LOGIC);END Vxuexing;ARCHITECTURE A OF Vxuexing IS BEGIN
F<=((NOT P)AND(NOT Q))OR(R AND S)OR((NOT P)AND S)OR((NOT Q)AND R);END A;
2、對(duì)所編寫(xiě)的電路進(jìn)行編譯及正確的仿真。
實(shí)驗(yàn)分析 真值表
PQRSF***************11111
P,Q表示輸血者的血型;R,S,表示受血者的血型。當(dāng)兩者符合血型配合原則時(shí),F(xiàn)=1,否則為0.四、運(yùn)行結(jié)果
五、實(shí)驗(yàn)總結(jié)
本實(shí)驗(yàn)給出了四種不同的血型編碼,PQ(1,1),RS(1,1)表示AB型血,P,Q(1,0),RS(1,0)表示B型血,PQ(0,1),RS(0,1)表示A型血,PQ(0,0),RS(0,0)表示O型血。根據(jù)真值表,并根據(jù)實(shí)驗(yàn)的原理圖,畫(huà)出電路圖并進(jìn)行連接。
實(shí)驗(yàn)三 簡(jiǎn)單數(shù)字鐘的設(shè)計(jì)
一、實(shí)驗(yàn)?zāi)康?/p>
1、了解數(shù)字鐘的工作原理。
2、進(jìn)一步學(xué)習(xí)Quartus II中基于VHDL設(shè)計(jì)的流程。
3、掌握VHDL編寫(xiě)中的一些小技巧。
4、掌握簡(jiǎn)單時(shí)序邏輯電路的設(shè)計(jì)方法與功能仿真技巧。
二、實(shí)驗(yàn)原理及內(nèi)容
實(shí)驗(yàn)原理
簡(jiǎn)單數(shù)字鐘應(yīng)該具有顯示時(shí)-分-秒的功能。首先要知道鐘表的工作機(jī)理,整個(gè)鐘表的工作應(yīng)該是在1Hz信號(hào)的作用下進(jìn)行,這樣每來(lái)一個(gè)時(shí)鐘信號(hào),秒增加1秒,當(dāng)秒從59秒跳轉(zhuǎn)到00秒時(shí),分鐘增加1分,同時(shí)當(dāng)分鐘從59分跳轉(zhuǎn)
三.實(shí)驗(yàn)內(nèi)容
1、用原理圖的方式編寫(xiě)一個(gè)12/24進(jìn)制的計(jì)數(shù)器,并創(chuàng)建為SYMBOL文件。
2、用VHDL的方式編寫(xiě)一個(gè)60進(jìn)制的計(jì)數(shù)器,并創(chuàng)建為SYMBOL文件。
3、創(chuàng)建頂層文件。調(diào)用已編寫(xiě)的SYMBOL文件,設(shè)計(jì)簡(jiǎn)單的數(shù)字鐘電路。
2、對(duì)所編寫(xiě)的電路進(jìn)行編譯及正確的仿真。
二十四進(jìn)制VHDL LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT24 IS PORT(CP, EN, Rd, LD :IN STD_LOGIC;
D
:IN STD_LOGIC_VECTOR(5 DOWNTO 0);
Co
:OUT STD_LOGIC;Q
:OUT STD_LOGIC_VECTOR(5 DOWNTO 0));END CNT24;ARCHITECTURE STR OF CNT24 IS
SIGNAL QN : STD_LOGIC_VECTOR(5 DOWNTO 0);
BEGIN Co<= '1'WHEN(QN = “010111”AND EN='1')
ELSE '0';PROCESS(CP, RD)
BEGIN IF(Rd ='0')THEN
QN<= “000000”;ELSIF(CP'EVENT AND CP='1')THEN IF(LD='0')THEN QN <= D;
ELSIF(EN='1')THEN QN <= QN+1;END IF;END IF;END PROCESS;Q <= QN;END STR;
六十進(jìn)制VHDL LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY jsq60 IS PORT(en,rd,cp :IN STD_LOGIC;
qh:buffer STD_LOGIC_VECTOR(3 DOWNTO 0);
ql :buffer STD_LOGIC_VECTOR(3 DOWNTO 0);
Co :OUT STD_LOGIC);END jsq60;ARCHITECTURE b OF jsq60 IS BEGIN Co<='1'when(qh=“0101”and ql=“1001” and en='1')else'0';PROCESS(cp,rd)
BEGIN IF(rd='0')THEN qh<=“0000”;ql<=“0000”;ELSIF(cp'EVENT AND cp='1')THEN
IF(en='1')THEN
IF(ql=9)THEN
ql<=“0000”;
IF(qh=5)THEN
qh<=“0000”;
ELSE qh<=qh+1;
end if;
else
ql<=ql+1;
end if;
end if;
END IF;END PROCESS;END b;
原理圖
四、運(yùn)行結(jié)果
24進(jìn)制
60進(jìn)制
時(shí)鐘仿真結(jié)果
五、實(shí)驗(yàn)總結(jié)
此設(shè)計(jì)問(wèn)題可分為主控電路,計(jì)數(shù)器模塊和掃描顯示三大部分,計(jì)數(shù)器在之前的學(xué)習(xí)中已經(jīng)非常熟悉,只要掌握60,12進(jìn)制的技術(shù)規(guī)律,用同步或異步計(jì)數(shù)器都可以實(shí)現(xiàn)。二掃描電路我們學(xué)過(guò)兩種驅(qū)動(dòng)方式:BCD碼驅(qū)動(dòng)方式和直接驅(qū)動(dòng)方式。
實(shí)驗(yàn)四 簡(jiǎn)單交通燈的設(shè)計(jì)
一、實(shí)驗(yàn)?zāi)康?/p>
1、了解交通燈的亮滅規(guī)律。
2、了解交通燈控制器的工作原理。
3、進(jìn)一步熟悉VHDL語(yǔ)言編程,了解實(shí)際設(shè)計(jì)中的優(yōu)化方案。
二、實(shí)驗(yàn)原理及內(nèi)容
實(shí)驗(yàn)原理
交通燈的顯示有很多方式,如十字路口、丁字路口等,而對(duì)于同一個(gè)路口又有很多不同的顯示要求,比如十字路口,車(chē)子如果只要東西和南北方向通行就很簡(jiǎn)單,而如果車(chē)子可以左右轉(zhuǎn)彎的通行就比較復(fù)雜,本實(shí)驗(yàn)僅針對(duì)最簡(jiǎn)單的南北和東西直行的情況。
要完成本實(shí)驗(yàn),首先必須了解交通路燈的亮滅規(guī)律。依人們的交通常規(guī),“紅燈停,綠燈行,黃燈提醒”。其交通燈的亮滅規(guī)律為:初始態(tài)是兩個(gè)路口的紅燈全亮,之后東西路口的綠燈亮,南北路口的紅燈亮,東西方向通車(chē),延時(shí)一段時(shí)間后,東西路口綠燈滅,黃燈開(kāi)始閃爍。閃爍若干次后,東西路口紅燈亮,而同時(shí)南北路口的綠燈亮,南北方向開(kāi)始通車(chē),延時(shí)一段時(shí)間后,南北路口的綠燈滅,黃燈開(kāi)始閃爍。閃爍若干次后,再切換到東西路口方向,重復(fù)上述過(guò)程。
三.實(shí)驗(yàn)內(nèi)容
1、用VHDL的方式編寫(xiě)一個(gè)簡(jiǎn)單的交通控制燈電路
2、對(duì)所編寫(xiě)的電路進(jìn)行編譯及正確的仿真。
程序: library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;
entity traffic is port(clk,enb : in std_logic;
ared,agreen,ayellow,bred,bgreen,byellow : buffer std_logic;
acounth,acountl,bcounth,bcountl : buffer std_logic_vector(3 downto 0));end traffic;
architecture one of traffic is begin process(clk,enb)variable lightstatus : std_logic_vector(5 downto 0);begin
if(clk'event and clk='1')then lightstatus := ared&agreen&ayellow&bred&bgreen&byellow;if((acounth=“0000” and acountl=“0000”)or(bcounth=“0000” and bcountl=“0000”))then Case lightstatus is When “010100”=> lightstatus:=“001100”;acountl<=“0101”;acounth<=“0000”;bcountl<=“0101”;bcounth<=“0000”;When “001100”=> if(enb='1')then lightstatus:=“100010”;acountl<=“0000”;acounth<=“0011”;bcountl<=“0101”;bcounth<=“0010”;
else lightstatus:=“010100”;acountl<=“0101”;acounth<=“0100”;bcountl<=“0000”;bcounth<=“0101”;end if;
when “100010”=>
lightstatus:=“100001”;acountl<=“0101”;acounth<=“0000”;bcountl<=“0101”;bcounth<=“0000”;
when “100001”=>
lightstatus:=“010100”;acountl<=“0101”;acounth<=“0100”;bcountl<=“0000”;bcounth<=“0101”;
when others=> lightstatus:=“010100”;acountl<=“0101”;acounth<=“0100”;bcountl<=“0000”;bcounth<=“0101”;
end case;else if(acountl=“0000”)then acounth<=acounth-1;acountl<=“1001”;
else acountl<=acountl-1;
end if;
if(bcountl=“0000”)then bcounth<=bcounth-1;bcountl<=“1001”;
else bcountl<=bcountl-1;end if;end if;end if;
ared<=lightstatus(5);agreen<=lightstatus(4);ayellow<=lightstatus(3);
bred<=lightstatus(2);bgreen<=lightstatus(1);byellow<=lightstatus(0);end process;end one;
四、運(yùn)行結(jié)果
分析:
這里a代表東西方向,b代表南北方向,acounth是表示東西方向五進(jìn)制計(jì)數(shù)acountl是東西方向六進(jìn)制計(jì)數(shù),bcounth則表示南北方向五進(jìn)制,bounthl則是南北方向六進(jìn)制計(jì)數(shù) 東西方向?yàn)?時(shí),東西方向紅燈亮(ared=1)
東西方向在1~4之間,東西方向綠燈亮(即agreen=1)南北方向 的紅燈亮起(即bred=1)
五、實(shí)驗(yàn)總結(jié)
此設(shè)計(jì)問(wèn)題可分為主控電路,譯碼驅(qū)動(dòng)電路和掃描顯示部分。
但是,這遠(yuǎn)遠(yuǎn)不能滿足實(shí)際生活的需要,還應(yīng)設(shè)置倒計(jì)時(shí)秒數(shù),因此可在此電路基礎(chǔ)上外加一個(gè)定時(shí)模塊。
實(shí)驗(yàn)五 流水燈的設(shè)計(jì)
一、實(shí)驗(yàn)?zāi)康?/p>
1、了解流水燈的工作原理。
二、實(shí)驗(yàn)原理及內(nèi)容
實(shí)驗(yàn)原理
要完成本實(shí)驗(yàn),首先必須了解流水燈的原理。所謂的流水燈實(shí)際上就是由多個(gè)LED發(fā)光二極管構(gòu)成的電路,當(dāng)發(fā)光二極管可以依次點(diǎn)亮?xí)r,即能呈現(xiàn)流水的效果。實(shí)驗(yàn)內(nèi)容
1、設(shè)計(jì)能帶8個(gè)LED發(fā)光管發(fā)光,并按照要求輪流發(fā)光,產(chǎn)生流水燈的流動(dòng)效果。
2、應(yīng)具有兩種以上不同風(fēng)格的流動(dòng)閃亮效果。比如依次點(diǎn)亮或者依次熄滅。(選作)
3、有起動(dòng)、停止控制鍵。(選作)
4、有流動(dòng)閃亮效果選擇設(shè)置鍵。(選作)
5、對(duì)所編寫(xiě)的電路進(jìn)行編譯及正確的仿真。
三、實(shí)驗(yàn)程序
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY yiweijicun1 IS PORT(CP,R,DSR,DSL:IN STD_LOGIC;
S:STD_LOGIC_VECTOR(2 DOWNTO 0);
D:STD_LOGIC_VECTOR(7 DOWNTO 0);
Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END yiweijicun1;ARCHITECTURE yiweijicun_arch OF yiweijicun1 IS
SIGNAL IQ: STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN PROCESS(CP,R,IQ)BEGIN IF(R='1')THEN IQ <=(OTHERS =>'0');ELSIF(CP'EVENT AND CP ='1')THEN CASE CONV_INTEGER(S)IS WHEN 0=>NULL;WHEN 1=> IQ <= D;WHEN 2=> IQ <= DSR & IQ(7 DOWNTO 1);WHEN 3=> IQ <=IQ(6 DOWNTO 0)& DSL;WHEN 4=> IQ <= IQ(0)& IQ(7 DOWNTO 1);WHEN 5=> IQ <=IQ(6 DOWNTO 0)& IQ(7);WHEN 6=> IQ <= IQ(7)& IQ(7 DOWNTO 1);WHEN 7=> IQ <= IQ(6 DOWNTO 0)& IQ(0);WHEN OTHERS => NULL;END CASE;END IF;Q <= IQ;END PROCESS;END yiweijicun_arch;
四、運(yùn)行結(jié)果
結(jié)果分析:
d[0]~d[7]為八個(gè)輸入端,s[0]和s[1]控制流水燈得輸出,s=1保持,s=2實(shí)現(xiàn)左移功能,s=3實(shí)現(xiàn)右移功能,因?yàn)檠舆t的原因,在s=2時(shí),需要經(jīng)過(guò)一段時(shí)間才能實(shí)現(xiàn)循環(huán)右移的功能,流水燈的實(shí)現(xiàn)其實(shí)是運(yùn)用了8位移位寄存器,它只是運(yùn)用了其中的保持左移與右移的功能,8LO位移位寄存器還有循環(huán)右移,循環(huán)左移,算數(shù)右移,算數(shù)左移等功能。
五、實(shí)驗(yàn)總結(jié)
了解了移位寄存器的功能和原理
通過(guò)這次實(shí)驗(yàn),加深了VHDL語(yǔ)言的運(yùn)用能力,更進(jìn)一步了解了8位移位寄存器的功能。
實(shí)驗(yàn)六 乘法器的設(shè)計(jì)
一、實(shí)驗(yàn)?zāi)康?/p>
1、了解乘法器的工作原理。
2、了解復(fù)雜時(shí)序電路的設(shè)計(jì)流程。
二、實(shí)驗(yàn)原理及內(nèi)容
實(shí)驗(yàn)原理
具體設(shè)計(jì)原理參見(jiàn)教材188頁(yè)。實(shí)驗(yàn)內(nèi)容
1、設(shè)計(jì)一個(gè)能進(jìn)行兩個(gè)十進(jìn)制數(shù)相乘的乘法器,乘數(shù)和被乘數(shù)均小于100。(可以參考教材231頁(yè)的VHDL代碼來(lái)設(shè)計(jì))
2、對(duì)所編寫(xiě)的電路進(jìn)行編譯及正確的仿真。
三、實(shí)驗(yàn)程序
library IEEE;use IEEE.std_logic_1164.all;
entity one_bit_adder is port(A: in STD_LOGIC;B: in STD_LOGIC;C_in: in STD_LOGIC;S: out STD_LOGIC;C_out: out STD_LOGIC);end one_bit_adder;
architecture one_bit_adder of one_bit_adder is begin
S <= A xor B xor C_in;C_out <=(A and B)or(C_in and(A xor B));
end one_bit_adder;library IEEE;use IEEE.std_logic_1164.all;
entity sichen is port(A: in STD_LOGIC_VECTOR(3 downto 0);B: in STD_LOGIC_VECTOR(3 downto 0);data_out: out STD_LOGIC_VECTOR(6 downto 0));end sichen;
architecture multi_arch of sichen is signal A_MULT_B0: STD_LOGIC_VECTOR(2 downto 0);signal A_MULT_B1: STD_LOGIC_VECTOR(2 downto 0);signal A_MULT_B2: STD_LOGIC_VECTOR(2 downto 0);
signal S_TEMP1: STD_LOGIC_VECTOR(1 downto 0);signal S_TEMP2: STD_LOGIC_VECTOR(1 downto 0);
signal C_TEMP : STD_LOGIC_VECTOR(6 downto 0);
signal C0_out_B0, C1_out_B0, C2_out_B0 : STD_LOGIC;signal C0_out_B1, C1_out_B1, C2_out_B1 : STD_LOGIC;
signal ZERO: STD_LOGIC;
component one_bit_adder port(A: in STD_LOGIC;B: in STD_LOGIC;C_in: in STD_LOGIC;S: out STD_LOGIC;C_out: out STD_LOGIC);end component;begin U_0_0 : one_bit_adder port map(A => A_MULT_B0(1), B => A_MULT_B1(0), C_in => ZERO, S => C_TEMP(1), C_out => C0_out_B0);U_0_1 : one_bit_adder port map(A => A_MULT_B0(2), B => A_MULT_B1(1), C_in => C0_out_B0, S => S_TEMP1(0), C_out => C1_out_B0);U_0_2 : one_bit_adder port map(A => ZERO, B => A_MULT_B1(2), C_in => C1_out_B0, S => S_TEMP1(1), C_out => C2_out_B0);
U_1_0 : one_bit_adder port map(A => A_MULT_B2(0), B => S_TEMP1(0), C_in => ZERO, S => C_TEMP(2), C_out => C0_out_B1);U_1_1 : one_bit_adder port map(A => A_MULT_B2(1), B => S_TEMP1(1), C_in => C0_out_B1, S => S_TEMP2(0), C_out => C1_out_B1);U_1_2 : one_bit_adder port map(A => A_MULT_B2(2), B => C2_out_B0, C_in => C1_out_B1, S => S_TEMP2(1), C_out => C2_out_B1);
A_MULT_B0(0)<= A(0)and B(0);A_MULT_B0(1)<= A(1)and B(0);A_MULT_B0(2)<= A(2)and B(0);
A_MULT_B1(0)<= A(0)and B(1);A_MULT_B1(1)<= A(1)and B(1);A_MULT_B1(2)<= A(2)and B(1);
A_MULT_B2(0)<= A(0)and B(2);A_MULT_B2(1)<= A(1)and B(2);A_MULT_B2(2)<= A(2)and B(2);
ZERO <= '0';C_TEMP(0)<= A_MULT_B0(0);C_TEMP(4 downto 3)<= S_TEMP2(1 downto 0);C_TEMP(5)<= C2_out_B1;
C_TEMP(6)<= A(3)xor B(3);
data_out <= C_TEMP;
end multi_arch;
四、運(yùn)行結(jié)果
乘法器實(shí)現(xiàn)A,B兩數(shù)的相乘。A[0]~A[3]以及B[0]~B[3]是實(shí)現(xiàn)輸入端的控制。由圖看出,輸出上產(chǎn)生了延遲是因?yàn)楫?dāng)A[3]輸入1,對(duì)應(yīng)了十進(jìn)制的8,B[0]輸入1,對(duì)應(yīng)了十進(jìn)制的1,兩者相乘得8,即在data_out端應(yīng)輸出8,此處因仍存在競(jìng)爭(zhēng)冒險(xiǎn)。
五、實(shí)驗(yàn)總結(jié)
乘法器的設(shè)計(jì)的問(wèn)題可以分為乘數(shù)和被乘數(shù)控制模塊,寄存模塊,乘法模塊和掃描顯示模塊幾個(gè)部分。
兩數(shù)相乘的方法很多,可以用移位相加的方法,也可以將乘法器看成計(jì)數(shù)器,乘積的初始值為零,每一個(gè)時(shí)鐘周期將被乘數(shù)的值加到積上,同時(shí)乘數(shù)減一,這樣反復(fù)執(zhí)行,直到乘數(shù)為零。