- EDA技術與應用課后習題答案 推薦度:
- 相關推薦
EDA技術與應用課后習題答案
第一章
1-1 EDA技術與ASIC設計和FPGA開發有什么關系? P3~4
答:利用EDA技術進行電子系統設計的最后目標是完成專用集成電路ASIC的設計和實現;FPGA和CPLD是實現這一途徑的主流器件。FPGA和CPLD通常也被稱為可編程專用IC,或可編程ASIC。FPGA和CPLD的應用是EDA技術有機融合軟硬件電子設計技術、SoC(片上系統)和ASIC設計,以及對自動設計與自動實現最典型的詮釋。
1-2與軟件描述語言相比,VHDL有什么特點? P6
答:編譯器將軟件程序翻譯成基于某種特定CPU的機器代碼,這種代碼僅限于這種CPU而不能移植,并且機器代碼不代表硬件結構,更不能改變CPU的硬件結構,只能被動地為其特定的硬件電路結構所利用。綜合器將VHDL程序轉化的目標是底層的電路結構網表文件,這種滿足VHDL設計程序功能描述的電路結構,不依賴于任何特定硬件環境;具有相對獨立性。綜合器在將VHDL(硬件描述語言)表達的電路功能轉化成具體的電路結構網表過程中,具有明顯的能動性和創造性,它不是機械的一一對應式的“翻譯”,而是根據設計庫、工藝庫以及預先設置的各類約束條件,選擇最優的方式完成電路結構的設計。
l-3什么是綜合?有哪些類型?綜合在電子設計自動化中的地位是什么? P5
什么是綜合? 答:在電子設計領域中綜合的概念可以表示為:將用行為和功能層次表達的電子系統轉換為低層次的便于具體實現的模塊組合裝配的過程。
有哪些類型? 答:(1)從自然語言轉換到VHDL語言算法表示,即自然語言綜合。(2)從算法表示轉換到寄存器傳輸級(RegisterTransport Level,RTL),即從行為域到結構域的綜合,即行為綜合。(3)從RTL級表示轉換到邏輯門(包括觸發器)的表示,即邏輯綜合。(4)從邏輯門表示轉換到版圖表示(ASIC設計),或轉換到FPGA的配置網表文件,可稱為版圖綜合或結構綜合。
綜合在電子設計自動化中的地位是什么? 答:是核心地位(見圖1-3)。綜合器具有更復雜的工作環境,綜合器在接受VHDL程序并準備對其綜合前,必須獲得與最終實現設計電路硬件特征相關的工藝庫信息,以及獲得優化綜合的諸多約束條件信息;根據工藝庫和約束條件信息,將VHDL程序轉化成電路實現的相關信息。
1-4在EDA技術中,自頂向下的設計方法的重要意義是什么? P7~10
答:在EDA技術應用中,自頂向下的設計方法,就是在整個設計流程中各設計環節逐步求精的過程。
1-5 IP在EDA技術的應用和發展中的意義是什么? P11~12
答:IP核具有規范的接口協議,良好的可移植與可測試性,為系統開發提供了可靠的保證。
第二章
2-1 敘述EDA的FPGA/CPLD設計流程。 P13~16
答:1.設計輸入(原理圖/HDL文本編輯);2.綜合;3.適配;4.時序仿真與功能仿真;5.編程下載;6.硬件測試。
2-2 IP是什么?IP與EDA技術的關系是什么? P24~26
IP是什么? 答:IP是知識產權核或知識產權模塊,用于ASIC或FPGA/CPLD中的預先設計好的電路功能模塊。
IP與EDA技術的關系是什么? 答:IP在EDA技術開發中具有十分重要的地位;與EDA技術的關系分有軟IP、固IP、硬IP:軟IP是用VHDL等硬件描述語言描述的功能塊,并不涉及用什么具體電路元件實現這些功能;軟IP通常是以硬件描述語言HDL源文件的形式出現。固IP是完成了綜合的功能塊,具有較大的設計深度,以網表文件的形式提交客戶使用。硬IP提供設計的最終階段產品:掩模。
2-3 敘述ASIC的設計方法。 P18~19
答:ASIC設計方法,按版圖結構及制造方法分有半定制(Semi-custom)和全定制(Full-custom)兩種實現方法。
全定制方法是一種基于晶體管級的,手工設計版圖的制造方法。
半定制法是一種約束性設計方式,約束的目的是簡化設計,縮短設計周期,降低設計成本,提高設計正確率。半定制法按邏輯實現的方式不同,可再分為門陣列法、標準單元法和可編程邏輯器件法。
2-4 FPGA/CPLD在ASIC設計中有什么用途? P16,18
答:FPGA/CPLD在ASIC設計中,屬于可編程ASIC的邏輯器件;使設計效率大為提高,上市的時間大為縮短。
2-5 簡述在基于FPGA/CPLD的EDA設計流程中所涉及的EDA工具,及其在整個流程中的作用。 P19~23
答:基于FPGA/CPLD的EDA設計流程中所涉及的EDA工具有:設計輸入編輯器(作用:接受不同的設計輸入表達方式,如原理圖輸入方式、狀態圖輸入方式、波形輸入方式以及HDL的文本輸入方式。);HDL綜合器(作用:HDL綜合器根據工藝庫和約束條件信息,將設計輸入編輯器提供的信息轉化為目標器件硬件結構細節的信息,并在數字電路設計技術、化簡優化算法以及計算機軟件等復雜結體進行優化處理);仿真器(作用:行為模型的表達、電子系統的建模、邏輯電路的驗證及門級系統的測試);適配器(作用:完成目標系統在器件上的布局和布線);下載器(作用:把設計結果信息下載到對應的實際器件,實現硬件設計)。
第三章
3-1 OLMC(輸出邏輯宏單元)有何功能?說明GAL是怎樣實現可編程組合電路與時序電路的。 P34~36
OLMC有何功能? 答:OLMC單元設有多種組態,可配置成專用組合輸出、專用輸入、組合輸出雙向口、寄存器輸出、寄存器輸出雙向口等。
說明GAL是怎樣實現可編程組合電路與時序電路的? 答:GAL(通用陣列邏輯器件)是通過對其中的OLMC(輸出邏輯宏單元)的編程和三種模式配置(寄存器模式、復合模式、簡單模式),實現組合電路與時序電路設計的。
3-2 什么是基于乘積項的可編程邏輯結構? P33~34,40
答:GAL、CPLD之類都是基于乘積項的可編程結構;即包含有可編程與陣列和固定的或陣列的PAL(可編程陣列邏輯)器件構成。
3-3 什么是基于查找表的可編程邏輯結構? P40~41
答:FPGA(現場可編程門陣列)是基于查找表的可編程邏輯結構。
3-4 FPGA系列器件中的LAB有何作用? P43~45
答:FPGA(Cyclone/Cyclone II)系列器件主要由邏輯陣列塊LAB、嵌入式存儲器塊(EAB)、I/O單元、嵌入式硬件乘法器和PLL等模塊構成;其中LAB(邏輯陣列塊)由一系列相鄰的LE(邏輯單元)構成的;FPGA可編程資源主要來自邏輯陣列塊LAB。
3-5 與傳統的測試技術相比,邊界掃描技術有何優點? P47~50
答:使用BST(邊界掃描測試)規范測試,不必使用物理探針,可在器件正常工作時在系統捕獲測量的功能數據。克服傳統的外探針測試法和“針床”夾具測試法來無法對IC內部節點無法測試的難題。
3-6 解釋編程與配置這兩個概念。 P58
答:編程:基于電可擦除存儲單元的EEPROM或Flash技術。CPLD一股使用此技術進行編程。CPLD被編程后改變了電可擦除存儲單元中的信息,掉電后可保存。電可擦除編程工藝的優點是編程后信息不會因掉電而丟失,但編程次數有限,編程的速度不快。
配置:基于SRAM查找表的編程單元。編程信息是保存在SRAM中的,SRAM在掉電后編程信息立即丟失,在下次上電后,還需要重新載入編程信息。大部分FPGA采用該種編程工藝。該類器件的編程一般稱為配置。對于SRAM型FPGA來說,配置次數無限,且速度快;在加電時可隨時更改邏輯;下載信息的保密性也不如電可擦除的編程。
3-7 請參閱相關資料,并回答問題:按本章給出的歸類方式,將基于乘積項的可編程邏輯結構的PLD器件歸類為CPLD;將基于查找表的可編程邏輯結構的PLD器什歸類為FPGA,那么,APEX系列屬于什么類型PLD器件? MAX II系列又屬于什么類型的PLD器件?為什么? P54~56
答:APEX(Advanced Logic Element Matrix)系列屬于FPGA類型PLD器件;編程信息存于SRAM中。MAX II系列屬于CPLD類型的PLD器件;編程信息存于EEPROM中。
第四章
4-1:畫出與下例實體描述對應的原理圖符號元件:
ENTITY buf3s IS -- 實體1:三態緩沖器
PORT (input : IN STD_LOGIC ; -- 輸入端
enable : IN STD_LOGIC ; -- 使能端
output : OUT STD_LOGIC ) ; -- 輸出端
END buf3x ;
ENTITY mux21 IS --實體2: 2選1多路選擇器
PORT (in0, in1, sel : IN STD_LOGIC;
output : OUT STD_LOGIC);
4-1.答案
4-2. 圖3-30所示的是4選1多路選擇器,試分別用IF_THEN語句和CASE語句的表達方式寫出此電路的VHDL程序。選擇控制的信號s1和s0的數據類型為STD_LOGIC_VECTOR;當s1='0',s0='0';s1='0',s0='1';s1='1',s0='0'和 s1='1',s0='1'分別執行y<=a、y<=b、y<=c、y<=d。
4-2.答案
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY MUX41 IS
PORT(s:IN STD_LOGIC_VECTOR(1 DOWNTO 0); --輸入選擇信號
a,b,c,d:IN STD_LOGIC; --輸入信號
y:OUT STD_LOGIC);--輸出端
END ENTITY;
ARCHITECTURE ART OF MUX41 IS
BEGIN
PROCESS(s)
BEGIN
IF (S="00") THEN y<=a;
ELSIF (S="01") TH EN y<=b;
ELSIF (S="10") TH EN y<=c;
ELSIF (S="11") TH EN y<=d;
ELSE y<=NULL;
END IF;
EDN PROCESS;
END ART;
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY MUX41 IS
PORT(s:IN STD_LOGIC_VECTOR(1 DOWNTO 0); --輸入選擇信號
a,b,c,d:IN STD_LOGIC; --輸入信號
y:OUT STD_LOGIC);--輸出端
END MUX41;
ARCHITECTURE ART OF MUX41 IS
BEGIN
PROCESS(s)
BEGIN
CASE s IS
WHEN “00” => y<=a;
WHEN “01” => y<=b;
WHEN “10” => y<=c;
WHEN “11” => y<=d;
WHEN OTHERS =>NULL;
END CASE;
END PROCESS;
END ART;
4-3. 圖3-31所示的是雙2選1多路選擇器構成的電路MUXK,對于其中MUX21A,當s='0'和'1'時,分別有y<='a'和y<='b'。試在一個結構體中用兩個進程來表達此電路,每個進程中用CASE語句描述一個2選1多路選擇器MUX21A。
4-3.答案
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY MUX221 IS
PORT(a1,a2,a3:IN STD_LOGIC_VECTOR(1 DOWNTO 0); --輸入信號
s0,s1:IN STD_LOGIC;
outy:OUT STD_LOGIC);--輸出端
END ENTITY;
ARCHITECTURE ONE OF MUX221 IS
SIGNAL tmp : STD_LOGIC;
BEGIN
PR01:PROCESS(s0)
BEGIN
IF s0=”0” THEN tmp<=a2;
ELSE tmp<=a3;
END IF;
END PROCESS;
PR02:PROCESS(s1)
BEGIN
IF s1=”0” THEN outy<=a1;
ELSE outy<=tmp;
END IF;
END PROCESS;
END ARCHITECTURE ONE;
END CASE;
4-4.下圖是一個含有上升沿觸發的D觸發器的時序電路,試寫出此電路的VHDL設計文件。
4-4.答案
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY MULTI IS
PORT(CL:IN STD_LOGIC; --輸入選擇信號
CLK0:IN STD_LOGIC; --輸入信號
OUT1:OUT STD_LOGIC);--輸出端
END ENTITY;
ARCHITECTURE ONE OF MULTI IS
SIGNAL Q : STD_LOGIC;
BEGIN
PR01: PROCESS(CLK0)
BEGIN
IF CLK ‘EVENT AND CLK=’1’
THEN Q<=NOT(CL OR Q);ELSE
END IF;
END PROCESS;
PR02: PROCESS(CLK0)
BEGIN
OUT1<=Q;
END PROCESS;
END ARCHITECTURE ONE;
END PROCESS;
4-5.給出1位全減器的VHDL描述。要求:
(1) 首先設計1位半減器,然后用例化語句將它們連接起來,圖3-32中h_suber是半減器,diff是輸出差,s_out是借位輸出,sub_in是借位輸入。
(2) 以1位全減器為基本硬件,構成串行借位的8位減法器,要求用例化語句來完成此項設計(減法運算是 x – y - sun_in = diffr)
4-5.答案
底層文件1:or2a.VHD實現或門操作
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY or2a IS
PORT(a,b:IN STD_LOGIC;
c:OUT STD_LOGIC);
END ENTITY or2a;
ARCHITECTURE one OF or2a IS
BEGIN
c <= a OR b;
END ARCHITECTURE one;
底層文件2:h_subber.VHD實現一位半減器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY h_subber IS
PORT(x,y:IN STD_LOGIC;
diff,s_out::OUT STD_LOGIC);
END ENTITY h_subber;
ARCHITECTURE ONE OF h_subber IS
SIGNAL xyz: STD_LOGIC_VECTOR(1 DOWNTO 0);
BEGIN
xyz <= x & y;
PROCESS(xyz)
BEGIN
CASE xyz IS
WHEN "00" => diff<='0';s_out<='0';
WHEN "01" => diff<='1';s_out<='1';
WHEN "10" => diff<='1';s_out<='0';
WHEN "11" => diff<='0';s_out<='0';
WHEN OTHERS => NULL;
END CASE;
END PROCESS;
END ARCHITECTURE ONE;
頂層文件:f_subber.VHD實現一位全減器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY f_subber IS
PORT(x,y,sub_in:IN STD_LOGIC;
diffr,sub_out:OUT STD_LOGIC);
END ENTITY f_subber;
ARCHITECTURE ONE OF f_subber IS
COMPONENT h_subber
PORT(x,y:IN STD_LOGIC;
diff,S_out: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_subber PORT MAP(x=>x,y=>y,diff=>d,s_out=>e);
u2: h_subber PORT MAP(x=>d,y=>sub_in,diff=>diffr,s_out=>f);
u3: or2a PORT MAP(a=>f,b=>e,c=>sub_out);
END ARCHITECTURE ONE;
END ARCHITECTURE ART;
4-6.根據下圖,寫出頂層文件MX3256.VHD的VHDL設計文件。
4-6.答案
MAX3256頂層文件
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY MAX3256 IS
PORT (INA,INB,INCK: IN STD_LOGIC;
INC: IN STD_LOGIC;
E,OUT:OUT STD_LOGIC);
END ENTITY MAX3256;
ARCHITECTURE ONE OF MAX3256 IS
COMPONENT LK35 --調用LK35聲明語句
PORT(A1,A2:IN STD_LOGIC;
CLK:IN STD_LOGIC;
Q1,Q2:OUT STD_LOGIC);
END COMPONENT;
COMPONENT D --調用D觸發器聲明語句
PORT(D,C:IN STD_LOGIC;
CLK:IN STD_LOGIC;
Q:OUT STD_LOGIC);
END COMPONENT;
COMPONENT MUX21--調用二選一選擇器聲明語句
PORT(B,A:IN STD_LOGIC;
S:IN STD_LOGIC;
C:OUT STD_LOGIC);
END COMPONENT;
SIGNAL AA,BB,CC,DD: STD_LOGIC;
BEGIN
u1: LK35 PORT MAP(A1=>INA,A2=>INB,CLK=INCK, Q1=>AA,Q2=>BB);
u2: D PORT MAP(D=>BB;CLK=>INCK,C=>INC,Q=>CC);
u3: LK35 PORT MAP (A1=>BB,A2=>CC,CLK=INCK, Q1=>DD,Q2=>OUT1);
u4: MUX21 PORT MAP (B=>AA,A=>DD,S=>BB,C=>E);
END ARCHITECTURE ONE;
設計含有異步清零和計數使能的16位二進制加減可控計數器。
4-7.答案:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CNT16 IS
PORT(CLK,RST,EN:IN STD_LOGIC;
CHOOSE:IN BIT;
SETDATA:BUFFER INTEGER RANCE 65535 DOWNTO 0;
COUT: BUFFER INTEGER RANCE 65535 DOWNTO 0);
END CNT16;
ARCHITECTURE ONE OF CNT16 IS
BEGIN
PROCESS(CLK,RST,SDATA)
VARIABLE QI:STD_LOGIC_VECTOR(65535 DOWNTO 0);
BEGIN
IF RST='1' THEN --計數器異步復位
QI:=(OTHERS=>'0');
ELSIF SET=’1’ THEN--計數器一步置位
QI:=SETDATA;
ELSIF CLK'EVENT AND CLK='1' THEN --檢測時鐘上升沿
IF EN=’1’ THEN –檢測是否允許計數
IF CHOOSE=’1’ THEN --選擇加法計數
QI:=QI+1; --計數器加一
ELSE QI=QI-1; --計數器加一
END IF;
END IF;
END IF;
COUT<=QI;--將計數值向端口輸出
END PROCESS;
END ONE;
第五章
5-1 歸納利用Quartus II進行VHDL文本輸入設計的流程:從文件輸入一直到SignalTap II測試。P95~P115
答:1 建立工作庫文件夾和編輯設計文件;2 創建工程;3 編譯前設置;4 全程編譯;5 時序仿真;6 引腳鎖定;7 配置文件下載;8 打開SignalTap II編輯窗口;9 調入SignalTap II的待測信號;10 SignalTap II參數設置;11 SignalTap II參數設置文件存盤;12 帶有SignalTap II測試信息的編譯下載;13 啟動SignalTap II進行采樣與分析;14 SignalTap II的其他設置和控制方法。
5.6
5.7
5.8
5.9
5.10
5.12
5.13
5.14
第六章
6-1 什么是固有延時?什么是慣性延時?P150~151
答:固有延時(Inertial Delay)也稱為慣性延時,固有延時的主要物理機制是分布電容效應。
6-2 δ是什么?在VHDL中,δ有什么用處?P152
δ是什么? 答:在VHDL仿真和綜合器中,默認的固有延時量(它在數學上是一個無窮小量),被稱為δ延時。
在VHDL中,δ有什么用處?答:在VHDL信號賦值中未給出固有延時情況下,VHDL仿真器和綜合器將自動為系統中的信號賦值配置一足夠小而又能滿足邏輯排序的延時量δ;使并行語句和順序語句中的并列賦值邏輯得以正確執行。
6-4 說明信號和變量的功能特點,以及應用上的異同點。P128~P129
答:變量:變量是一個局部量,只能在進程和子程序中使用。變量不能將信息帶出對它做出定義的當前結構。變量的賦值是一種理想化的數據傳輸,是立即發生的,不存在任何延時行為。變量的主要作用是在進程中作為臨時的數據存儲單元。
信號:信號是描述硬件系統的基本數據對象,其性質類似于連接線;可作為設計實體中并行語句模塊間的信息交流通道。信號不但可以容納當前值,也可以保持歷史值;與觸發器的記憶功能有很好的對應關系。
6-5 在VHDL設計中,給時序電路清零(復位)有兩種力方法,它們是什么?
解:設Q定義成信號,一種方法:Q<=“000…000”; 其中“000…000”反映出信號Q的位寬度。第二種方法:Q<=(OTHERS=>‘0’);其中OTHERS=>‘0’不需要給出信號Q的位寬度,即可對Q清零。
6-6 哪一種復位方法必須將復位信號放在敏感信號表中?給出這兩種電路的VHDL描述。
解:邊沿觸發復位信號要將復位信號放在進程的敏感信號表中。
(1)邊沿觸發復位信號
…………………….
ARCHITECTURE bhv 0F DFF3 IS
SIGNAL QQ:STD_LOGIC;
BEGIN
PROCESS(RST)
BEGIN
IF RST’EVENT AND RST=‘1' THEN
QQ<=(Others=>‘0’);
END IF;
END PROCESS;
Q1<=QQ;
END;
………………………
(2)電平觸發復位信號
…………………….
ARCHITECTURE bhv 0F DFF3 IS
SIGNAL QQ:STD_LOGIC;
BEGIN
PROCESS(CLK)
BEGIN
IF RST=‘1' THEN
QQ<=(Others=>‘0’);
END IF;
END PROCESS;
Q1<=QQ;
END;
………………………
6-7 什么是重載函數?重載算符有何用處?如何調用重載算符函數?
答:(1)什么是重載函數? 根據操作對象變換處理功能。
(2)重載算符有何用處? 用于兩個不同類型的操作數據自動轉換成同種數據類型,并進行運算處理。
(3)如何調用重載算符函數?采用隱式方式調用,無需事先聲明。
6-8 判斷下面三個程序中是否有錯誤,若有則指出錯誤所在,并給出完整程序。
程序1:
Signal A,EN : std_logic;
…………………
Process(A, EN)
Variable B: std_log ic;
Begin
if EN=l then B<=A; end if; --將“B<=A”改成“B:=A”
end process;
程序2:
Architecture one of sample is
variable a,b,c:integer;
begin
c<=a+b; --將“c<=a+b”改成“c:=a+b”
end;
程序3:
library ieee;
use ieee.std_logic_1164.all;
entity mux21 is
PORT(a,b:in std_logic; sel:in std_loglc;c:out std_logle;); --將“;)”改成“)”
end sam2; --將“sam2”改成“entity mux21”
architecture one of mux2l is
begin
--增加“process(a,b,sel) begin”
if sel= '0' then c:=a; else c:=b; end if; --應改成“if sel= '0' then c<=a; else c<=b; end if;”
--增加“end process;”
end two; --將“two”改成“architecture one”
7-2 LPM_ROM、LPM_RAM、LPM_FIFO等模塊與FPGA中嵌入的EAB、ESB、M4K有怎樣的聯系?
答:ACEXlK系列為EAB;APEX20K系列為ESB;Cyclone系列為M4K
第八章
8-1仿照例8-1,將例8-4單進程用兩個進程,即一個時序進程,一個組合進程表達出來。
--解:【例8-4】的改寫如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY MOORE1 IS
PORT(DATAIN: IN STD_LOGIC_VECTOR(1 DOWNTO 0);
CLK,RST: IN STD_LOGIC;
Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END MOORE1;
ARCHITECTURE behav OF MOORE1 IS
TYPE ST_TYPE IS (ST0,ST1,ST2,ST3,ST4);
SIGNAL C_ST,N_ST: ST_TYPE;
BEGIN
REG: PROCESS(CLK,RST)
BEGIN
IF RST='1' THEN C_ST<=ST0; -- Q<="0000";
ELSIF CLK'EVENT AND CLK='1' THEN
C_ST<=N_ST;
END IF;
END PROCESS REG;
COM: PROCESS(C_ST,DATAIN)
BEGIN
CASE C_ST IS
WHEN ST0=> IF DATAIN="10" THEN N_ST<=ST1;
ELSE N_ST<=ST0; END IF;
Q<="1001";
WHEN ST1=> IF DATAIN="11" THEN N_ST<=ST2;
ELSE N_ST<=ST1 ;END IF;
Q<="0101";
WHEN ST2=> IF DATAIN="01" THEN N_ST<=ST3;
ELSE N_ST<=ST0 ;END IF;
Q<="1100";
WHEN ST3=> IF DATAIN="00" THEN N_ST<=ST4;
ELSE N_ST<=ST2; END IF;
Q<="0010";
WHEN ST4=>IF DATAIN="11" THEN N_ST<=ST0;
ELSE N_ST<=ST3 ;END IF;
Q<="1001" ;
WHEN OTHERS=> N_ST<=ST0;
END CASE;
END PROCESS COM;
END behav;
8-2為確保例8-5(2進程Mealy型狀態機)的狀態機輸出信號沒有毛刺,試用例8-4的方式構成一個單進程狀態,使輸出信號得到可靠鎖存,在相同輸入信號條件下,給出兩程序的仿真波形。
--解:【例8-5】改寫如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY MEALY1 IS
PORT(CLK,DATAIN,RESET: IN STD_LOGIC;
Q:OUT STD_LOGIC_VECTOR(4 DOWNTO 0));
END MEALY1;
ARCHITECTURE behav OF MEALY1 IS
TYPE states IS (st0,st1,st2,st3,st4);
SIGNAL STX: states;
BEGIN
PROCESS(CLK,RESET) --單一進程
BEGIN
IF RESET='1' THEN STX<=ST0;
ELSIF CLK'EVENT AND CLK='1' THEN
CASE STX IS
WHEN st0=> IF DATAIN='1' THEN STX<=st1; END IF;
IF DATAIN='1' THEN Q<="10000";
ELSE Q<="01010" ; END IF;
WHEN st1=> IF DATAIN='0' THEN STX<=st2; END IF;
IF DATAIN='0' THEN Q<="10111";
ELSE Q<="10100" ; END IF;
WHEN st2=> IF DATAIN='1' THEN STX<=st3; END IF;
IF DATAIN='1' THEN Q<="10101";
ELSE Q<="10011" ; END IF;
WHEN st3=> IF DATAIN='0' THEN STX<=st4; END IF;
IF DATAIN='0' THEN Q<="11011";
ELSE Q<="01001"; END IF ;
WHEN st4=> IF DATAIN='1' THEN STX<=st0; END IF;
IF DATAIN='1' THEN Q<="11101";
ELSE Q<="01101"; END IF;
WHEN OTHERS=> STX<=st0; Q<="00000";
END CASE;
END IF;
END PROCESS;
END behav;
圖8-6控制ADC0809采樣狀態圖
-- 【例8-2】根據圖8-6狀態圖,采用Moore型狀態機,設計ADC0809采樣控制器。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY ADCINT IS
PORT(D: IN STD_LOGIC_VECTOR(7 DOWNTO 0); --來自0809轉換好的8位數據
CLK: IN STD_LOGIC; --狀態機工作時鐘
EOC: IN STD_LOGIC; --轉換狀態指示,低電平表示正在轉換
ALE:OUT STD_LOGIC; --8個模擬信號通道地址鎖存信號
START:OUT STD_LOGIC; --轉換開始信號
OE:OUT STD_LOGIC; --數據輸出三態控制信號
ADDA:OUT STD_LOGIC; --信號通道最低位控制信號
LOCK0:OUT STD_LOGIC; --觀察數據鎖存時鐘
Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); --8位數據輸出
END ADCINT;
ARCHITECTURE behav OF ADCINT IS
TYPE states IS(st0,st1,St2,st3,st4); --定義各狀態子類型
SIGNAL current_state,next_state: states:=st0;
SIGNAL REGL: STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL LOCK: STD_LOGIC;--轉換后數據輸出鎖存時鐘信號
BEGIN
ADDA<='1';--當ADDA<='0',模擬信號進入通道IN0;當ADDA<='1',則進入通道INI
Q<=REGL;LOCK0<=LOCK;
COM: PROCESS(current_state,EOC) BEGIN --規定各狀態轉換方式
CASE current_state IS
WHEN st0=> ALE<='0';START<='0';LOCK<='0';OE<='0';
next_state<=st1; --0809初始化
WHEN st1=> ALE<='1';START<='1';LOCK<='0';OE<='0';
next_state<=st2 ;--啟動采樣
WHEN st2=> ALE<='0';START<='0';LOCK<='0'; OE<='0';
IF(EOC='1') THEN next_state<=st3;--EOC=1表明轉換結束
ELSE next_state<=st2; END IF; --轉換未結束,繼續等待
WHEN st3=> ALE<='0';START<='0';LOCK<='0';OE<='1';
next_state<=st4;--開啟OE,輸出轉換好的數據
WHEN st4=> ALE<='0';START<='0';LOCK<='1';OE<='1';next_state<=st0;
WHEN OTHERS=>next_state<=st0;
END CASE;
END PROCESS COM;
REG:PROCESS(CLK)
BEGIN
IF(CLK'EVENT AND CLK='1') THEN current_state<=next_state; END IF;
END PROCESS REG; --由信號current_state將當前狀態值帶出此進程:REG
LATCH1: PROCESS(LOCK) --此進程中,在LOCK的上升沿,將轉換好的數據鎖入
BEGIN
IF LOCK='1' AND LOCK'EVENT THEN REGL<=D; END IF;
END PROCESS LATCH1;
END behav;
8-5在不改變原代碼功能的條件下用兩種方法改寫例8-2,使其輸出的控制信號(ALE、START、OE、LOCK)沒有毛刺。方法1:將輸出信號鎖存后輸出;方法2:使用狀態碼直接輸出型狀態機,并比較這三種狀態機的特點。
-- 解:"【例8-2】根據圖8-6狀態圖,采用Moore型狀態機,設計ADC0809采樣控制器" 方法1(將輸出控制信號鎖存后輸出)的VHDL程序代碼如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY ADCINT IS
PORT(D: IN STD_LOGIC_VECTOR(7 DOWNTO 0); --來自0809轉換好的8位數據
CLK: IN STD_LOGIC; --狀態機工作時鐘
EOC: IN STD_LOGIC; --轉換狀態指示,低電平表示正在轉換
ALE: OUT STD_LOGIC; --8個模擬信號通道地址鎖存信號
START: OUT STD_LOGIC; --轉換開始信號
OE: OUT STD_LOGIC; --數據輸出三態控制信號
ADDA: OUT STD_LOGIC; --信號通道最低位控制信號
LOCK0: OUT STD_LOGIC; --觀察數據鎖存時鐘
Q: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); --8位數據輸出
END ADCINT;
ARCHITECTURE behav OF ADCINT IS
TYPE states IS(st0,st1,St2,st3,st4); --定義各狀態子類型
SIGNAL current_state,next_state: states:=st0;
SIGNAL REGL: STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL LOCK: STD_LOGIC;--轉換后數據輸出鎖存時鐘信號
SIGNAL ALE0: STD_LOGIC; --8個模擬信號通道地址鎖存信號
SIGNAL START0: STD_LOGIC; --轉換開始信號
SIGNAL OE0: STD_LOGIC; --數據輸出三態控制信號
BEGIN
ADDA<='1';--當ADDA<='0',模擬信號進入通道IN0;當ADDA<='1',則進入通道INI
Q<=REGL; --LOCK0<=LOCK;
COM: PROCESS(current_state,EOC,CLK) BEGIN --規定各狀態轉換方式
CASE current_state IS
WHEN st0=> ALE0<='0';START0<='0';LOCK<='0';OE0<='0';
next_state<=st1; --0809初始化
WHEN st1=> ALE0<='1';START0<='1';LOCK<='0';OE0<='0';
next_state<=st2 ;--啟動采樣
WHEN st2=> ALE0<='0';START0<='0';LOCK<='0'; OE0<='0';
IF(EOC='1') THEN next_state<=st3;--EOC=1表明轉換結束
ELSE next_state<=st2; END IF; --轉換未結束,繼續等待
WHEN st3=> ALE0<='0';START0<='0';LOCK<='0';OE0<='1';
next_state<=st4;--開啟OE,輸出轉換好的數據
WHEN st4=> ALE0<='0';START0<='0';LOCK<='1';OE0<='1';next_state<=st0;
WHEN OTHERS=>next_state<=st0;
END CASE;
IF CLK'EVENT AND CLK= '1' THEN
ALE<=ALE0;START<=START0;LOCK0<=LOCK;OE<=OE0;--方法1:信號鎖存后輸出
END IF;
END PROCESS COM;
REG:PROCESS(CLK)
BEGIN
IF(CLK'EVENT AND CLK='1') THEN current_state<=next_state; END IF;
END PROCESS REG; --由信號current_state將當前狀態值帶出此進程:REG
LATCH1: PROCESS(LOCK) --此進程中,在LOCK的上升沿,將轉換好的數據鎖入
BEGIN
IF LOCK='1' AND LOCK'EVENT THEN REGL<=D; END IF;
END PROCESS LATCH1;
END behav;
-- 解:"【例8-2】根據圖8-6狀態圖,采用Moore型狀態機,設計ADC0809采樣控制器" 方法2(使用狀態碼直接輸出型狀態機)的VHDL程序代碼(【例8-7】的根據狀態編碼表8-1給出ADC0809數據采樣的狀態機)如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY AD0809 IS
PORT( D: IN STD_LOGIC_VECTOR(7 DOWNTO 0);
CLK,EOC: IN STD_LOGIC;
ALE,START,OE,ADDA:OUT STD_LOGIC;
c_state:OUT STD_LOGIC_VECTOR(4 DOWNTO 0);
Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END AD0809;
ARCHITECTURE behav OF AD0809 IS
SIGNAL current_state,next_state: STD_LOGIC_VECTOR(4 DOWNTO 0);
CONSTANT st0: STD_LOGIC_VECTOR(4 DOWNTO 0):="00000";
CONSTANT st1: STD_LOGIC_VECTOR(4 DOWNTO 0):="11000";
CONSTANT st2: STD_LOGIC_VECTOR(4 DOWNTO 0):="00001";
CONSTANT st3: STD_LOGIC_VECTOR(4 DOWNTO 0):="00100";
CONSTANT st4: STD_LOGIC_VECTOR(4 DOWNTO 0):="00110";
SIGNAL REGL: STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL LOCK: STD_LOGIC;
BEGIN
ADDA<='1';Q<=REGL;START<=current_state(4);ALE<=current_state(3);
OE<=current_state(2);LOCK<=current_state(1);c_state<=current_state;
COM: PROCESS(current_state,EOC) BEGIN --規定各狀態轉換方式
CASE current_state IS
WHEN st0=> next_state<=st1; --0809初始化
WHEN st1=> next_state<=st2; --啟動采樣
WHEN st2=> IF(EOC='1') THEN next_state<=st3; --EOC=1表明轉換結束
ELSE next_state<=st2; --轉換未結束,繼續等待
END IF;
WHEN st3=> next_state<=st4; --開啟OE,輸出轉換好的數據
WHEN st4=> next_state<=st0;
WHEN OTHERS=> next_state<=st0;
END CASE;
END PROCESS COM;
REG: PROCESS(CLK)
BEGIN
IF (CLK'EVENT AND CLK='1') THEN current_state<=next_state;
END IF;
END PROCESS REG; --由信號current_state將當前狀態值帶出此進程:REG
LATCH1: PROCESS(LOCK)--此進程中,在LOCK的上升沿,將轉換好的數據鎖入
BEGIN
IF LOCK='1' AND LOCK'EVENT THEN REGL<=D;
END IF;
END PROCESS LATCH1;
END behav;
【EDA技術與應用課后習題答案】相關文章:
EDA技術與應用課后習題答案大全01-20
EDA技術與應用03-31
EDA技術的發展與應用03-18
EDA技術應用與發展03-03
關于EDA技術的發展與應用03-27
2016年EDA技術的發展與應用01-20
EDA技術的應用及發展趨勢03-18
eda技術在生活中的應用03-14
IP在EDA技術的應用和發展中的意義03-08