第一篇:EDA期末總結7
1章 PORT DOWNTO 0);(D:INSTD_LOGIC_VECTOR(11DOWNTO 0);
Q : OUT STD_LOGIC_VECTOR(11 DOWNTO 0));
1、常用的硬件描述語言有VHDL、Verilog、ABEL
CLK ,STATUS : IN STD_LOGIC;END AD574A;
2、VHDL自頂向下的設計流程:
LOCK0 : OUT STD_LOGIC;ARCHITECTURE behav OF AD574A IS 1.設計說明書2.建立VHDL行為模型3.VHDL行為仿真4.VHDL-RTL
CS,A0,RC,K12X8 : OUT STD_LOGIC;SIGNAL current_state, next_state: STD_LOGIC_VECTOR(4 DOWNTO 0);級建模 Q:OUTSTD_LOGIC_VECTOR(11DOWNTO 0));
CONSTANT st0 : STD_LOGIC_VECTOR(4 DOWNTO 0):= “11100”;5.前端功能仿真6.邏輯綜合7.測試向量生成8.功能仿真9.結END AD574;
CONSTANT st1 : STD_LOGIC_VECTOR(4 DOWNTO 0):= “00001”;構綜合10.門級時序仿真11.硬件測試12.設計完成 ARCHITECTURE behav OF AD574 IS
CONSTANT st2 : STD_LOGIC_VECTOR(4 DOWNTO 0):= “00000”;2章 TYPE states IS(st0, st1, st2, st3,st4);
CONSTANT st3 : STD_LOGIC_VECTOR(4 DOWNTO 0):= “00100”;SIGNALcurrent_state,next_state:states :=st0;
CONSTANT st4 : STD_LOGIC_VECTOR(4 DOWNTO 0):= “00110”;1.一般ASIC設計的流程: SIGNAL REGL:STD_LOGIC_VECTOR(11DOWNTO 0);
SIGNAL REGL : STD_LOGIC_VECTOR(11 DOWNTO 0);系統規格說明:系統劃分:邏輯設計與綜合:綜合后仿真:版圖設SIGNAL LOCK : STD_LOGIC;
SIGNAL LK
: STD_LOGIC;計:版圖驗證:參數提取與后仿真:制版、流片:芯片測試 BEGIN BEGIN
2、常用EDA工具:
K12X8 <= '1';
LOCK0 <= LOCK;
COM1: PROCESS(current_state,STATUS)設計輸入編輯器:HDL綜合器:仿真器:適配器(或布局布線器):COM1: PROCESS(current_state,STATUS)
BEGIN 下載器 BEGIN
CASE current_state IS
3、IP核:軟IP硬IP固IP
CASE current_state IS
WHEN st0 => next_state <= st1;3章
WHEN st0 => next_state <= st1;
WHEN st1 => next_state <= st2;
WHEN st1 => next_state <= st2;
WHEN st2 => IF(STATUS='1')THEN next_state <= st2;
1、CPLD和FPGA的主要區別:
WHEN st2 =>IF(STATUS='1')THENnext state <= st2;
ELSE next_state <= st3;
結構上的不同:集成度的不同:CPLD:500~50000門;FPGA:1K~
ELSE next_state <= st3;
END IF;10M門:應用范圍不同:CPLD邏輯能力強而寄存器少(1K左右),END IF;
WHEN st3=> next_state <= st4;
適用于控制密集型系統;FPGA邏輯能力較弱但寄存器多(100多K),WHEN st3 => next_state <= st4;
WHEN st4=> next_state <= st0;適用于數據密集型系統。
WHEN st4 => next_state <= st0;
WHEN OTHERS => next_state <= st0;
使用方法不同
2、FPGA和CPLD的選用(1)CPLD的選用: 邏輯密集型:中小規模(1000~50000):免費軟件支持;編程數據不丟失,電路簡單;ISP特性,編程加密;布線延遲固定,時序特性穩定;(2)FPGA選用: 數據密集型;大規模設計(5000~數百萬門);SOC設計:ASIC的設計仿真:布線靈活,但時序特性不穩定;需用專用的ROM進行數據配置 4章
1、EDA綜合工具提供的數據類型為布爾型(Boolean)、位型(Bit)、位矢量型(Bit-Vector)和整數型(Interger)。
2、VHDL語言描述結構體功能有3種方法:行為描述法:數據流描述法;結構描述法
3、VHDL的庫:STD庫和WORK庫:IEEE庫
4、clock’EVENT and clock=‘1檢測上升沿;clock’EVENT and clock=‘0’檢測下降沿。
5、簡述實體、端口概念,端口種類及INPUT與BUFFER的異同。以關鍵詞ENTITY引導,END ENTITY....結束的語句部分成為實體。端口種類4種:IN、OUT、INOUT、BUFFER。INOUT定義的通道確定為輸入輸出雙向端口;、BUFFER在需要輸入數據是時,只允許內不回讀輸出的信號。
6、結構體 以關鍵詞ARCHITECTURE引導,END 結束的語句部分成為結構體。
7、端口: INOUT定義的通道為輸入輸出雙向端口,可以由外向內或由內向外傳輸數據,而BUFFER定義的通道雖然也是輸入輸出端口,但它回讀的信號不能從外部輸入,而是由內部產生,向外輸出的信號。IN定義的通道為單向只讀模式,規定數據只能通過此端口被讀入實體中 OUT定義的通道為單向輸出模式,規定數據只能通過此端口從實體向外流出,或者說可以將實體中的數據向此端口賦值。INOUT定義的通道確定為輸入輸出雙向端口,可以由外向內或由內向外傳輸數據。6章
1、說明用原理圖輸入方法設計電路的詳細流程 1.為一項工程設計建立文件夾 2.輸入設計項目和存盤 3.將設計項目設置成工程文件 4.選擇目標器件并編譯 5時序仿真和包裝入庫 6.設計頂層文件 7章
1、為什么要使用狀態機 有限狀態機克服了純硬件數字系統順序方式控制不靈活的缺點。狀態機的結構模式相對簡單。狀態機容易構成性能良好的同步時序邏輯模塊。狀態機的VHDL表述豐富多樣。在高速運算和控制方面,狀態機更有其巨大的優勢。就可靠性而言,狀態機的優勢也是十分明顯的。
2、時序進程將次態信號送到現態信號
3、Moore型輸出僅與當前狀態有關,Mealy型輸出是當前狀態與所有輸入信號 FSM:s_machine current_state clkPROCESSPROCESSREGCOMcomb_outputsreset next_statestate_inputs LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY s_machine IS
PORT(clk,reset
: IN STD_LOGIC;
state_inputs : IN STD_LOGIC_VECTOR(0 TO 1);
comb_outputs : OUT INTEGER RANGE 0 TO 15);END s_machine;ARCHITECTURE behv OF s_machine IS
TYPE FSM_ST IS(s0, s1, s2, s3);
SIGNAL current_state, next_state: FSM_ST;BEGIN REG: PROCESS(reset,clk)
BEGIN
IF reset = '1' THEN
current_state <= s0;
ELSIF clk='1' AND clk'EVENT THEN
current_state <= next_state;
END IF;
END PROCESS;
COM:PROCESS(current_state, state_Inputs)BEGIN
CASE current_state IS
WHEN s0 => comb_outputs<= 5;
IF state_inputs = “00” THEN next_state<=s0;
ELSE next_state<=s1;
END IF;
WHEN s1 => comb_outputs<= 8;
IF state_inputs = “00” THEN next_state<=s1;
ELSE next_state<=s2;
END IF;
WHEN s2 =>
comb_outputs<= 12;
IF state_inputs = “11” THEN next_state <= s0;
ELSE next_state <= s3;
END IF;
WHEN s3 => comb_outputs <= 14;
IF state_inputs = “11” THEN next_state <= s3;
ELSE next_state <= s0;
END IF;
END case;
END PROCESS;
END behv;三進程有限狀態機 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY AD574 IS
WHEN OTHERS => next_state <= st0;
END CASE;END PROCESS COM1;COM2: PROCESS(current_state)BEGIN
CASE current_state IS
WHEN st0=>CS<='1';A0<='1';RC<='1';LOCK<='0';WHEN st1=>CS<='0';A0<='0';RC<='0';LOCK<='0';
WHEN st2=>CS<='0';A0<='0';RC<='0';LOCK<='0';WHEN st3=>CS<='0';A0<='0';RC<='1';LOCK<='0';
WHEN st4=>CS<='0';A0<='0';RC<='1';LOCK<='1';
WHEN OTHERS=>CS<='1';A0<='1';RC<='1';LOCK<='0';
END CASE;END PROCESS COM2;REG: PROCESS(CLK)
BEGIN IF(CLK'EVENT AND CLK='1')THEN current_state <= next_state;END IF;END PROCESS REG;LATCH1 : PROCESS(LOCK)BEGIN IF LOCK='1' AND LOCK'EVENT THEN REGL <= D;END IF;END PROCESS;
Q <= REGL;
END behav;單進程Moore型有限狀態機 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MOORE1 IS PORT(DATAIN:INSTD_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 : ST_TYPE;
BEGIN
PROCESS(CLK,RST)
BEGIN
IF RST ='1' THEN C_ST <= ST0;Q<= “0000”;
ELSIF CLK'EVENT AND CLK='1' THEN
CASE C_ST IS
WHEN ST0 => IF DATAIN =“10” THEN C_ST <= ST1;
ELSE C_ST <= ST0;END IF;
Q <= “1001”;WHEN ST1 => IF DATAIN =“11” THEN C_ST <= ST2;
ELSE C_ST <= ST1;END IF;
Q <= “0101”;WHEN ST2 => IF DATAIN =“01” THEN C_ST <= ST3;
ELSE C_ST <= ST0;END IF;
Q <= “1100”;WHEN ST3 => IF DATAIN =“00” THEN C_ST <= ST4;
ELSE C_ST <= ST2;END IF;
Q <= “0010”;WHEN ST4 => IF DATAIN =“11” THEN C_ST <= ST0;
ELSE C_ST <= ST3;END IF;
Q <= “1001”;WHEN OTHERS => C_ST <= ST0;
END CASE;
END IF;
END PROCESS;END behav;2進程Mealy型有限狀態機的設計
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;ENTITY MEALY1 IS PORT(CLK,DATAIN,RESET:IN STD_LOGIC;
Q:OUTSTD_LOGIC_VECTOR(4DOWNTO 0));END MEALY1;ARCHITECTURE behav OF MEALY1 IS
TYPE states IS(st0, st1, st2, st3,st4);
SIGNAL STX : states;
BEGIN
COMREG : 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;
WHEN st1 => IF DATAIN = '0' THEN STX <= st2;END IF;
WHEN st2 => IF DATAIN = '1' THEN STX <= st3;END IF;
WHEN st3 => IF DATAIN = '0' THEN STX <= st4;END IF;
WHEN st4 => IF DATAIN = '1' THEN STX <= st0;END IF;
WHEN OTHERS => STX <= st0;
END CASE;
END IF;END PROCESS COMREG;COM1: PROCESS(STX,DATAIN)BEGIN
CASE STX IS
WHEN st0 => IF DATAIN = '1' THEN Q <= “10000”;
ELSE Q<=“01010”;END IF;
WHEN st1 => IF DATAIN = '0' THEN Q <= “10111”;
ELSE Q<=“10100”;END IF;
WHEN st2 => IF DATAIN = '1' THEN Q <= “10101”;
ELSE Q<=“10011”;END IF;
WHEN st3 => IF DATAIN = '0' THEN Q <= “11011”;
ELSE Q<=“01001”;END IF;
WHEN st4 => IF DATAIN = '1' THEN Q <= “11101”;
ELSE Q<=“01101”;END IF;
WHEN OTHERS => Q<=“00000”;
END CASE;END PROCESS COM1;END behav;狀態編碼
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY AD574A IS
PORT(D : IN STD_LOGIC_VECTOR(11 DOWNTO 0);
CLK ,STATUS : IN STD_LOGIC;
OUT4 : OUT STD_LOGIC_VECTOR(3
END CASE;
OUT4 <= current_state(4 DOWNTO 1);END PROCESS COM1;
REG: PROCESS(CLK)
BEGIN
IF(CLK'EVENT AND CLK='1')THEN current_state <= next_state;
END IF;
END PROCESS REG;
LK <= current_state(1);
LATCH1 : PROCESS(LK)
BEGIN
IF LK='1' AND LK'EVENT THEN
REGL <= D;
END IF;
END PROCESS;
Q <= REGL;
END behav;
9章
1、VHDL有那幾種基本的順序語句? 賦值語句;流程控制語句;等待語句;子程序調用語句;返回語句;空操作語句。
2、什么叫順序語句,它的適用范圍是什么?
執行順序與它們的書寫順序基本一致的語句叫順序語句,順序語句只能出現在進程和子程序中,子程序包括函數和過程。3、VHDL并行語句幾種? 并行信號賦值語句;進程語句;塊語句;條件信號賦值語句;元件例化語句;生成語句;并行過程調用語句。
4、什么叫并行語句? 在結構體的執行是同步進行的,或者說是并行運行的,其執行方式與書寫的順序無關。
5、VHDL中具有屬性的項目: 類型、子類型、過程、函數、信號、變量、常量、實體、結構體、配置、程序包、元件和語句標號等。
6、綜合器支持的屬性有: LEFT、RIGHT、HIGH、LOW、RANGE、REVERS RANGE、LENGTH、EVENT及STABLE。
端口模式:IN單向只讀
OUT單向輸出
INOUT輸入輸出雙向
BUFFER內部回讀輸出信號,反饋 數據類型:INTEGER整數數據
BOOLEAN布爾數據
STD_LOGIC標準邏輯位數據
BIT位數據 邏輯操作符:AND與
OR或
NAND與非
NOR或非
XOR異或
XNOR同或
NOT非 數據對象:SIGNAL信號
VARIABLE變量
CONSTANT常量
7、for_loop語句實現一個16位的串行并出移位寄存器
Library IEEE;Use IEEE.std_logic_1164.all;Use IEEE.std_logic_unsigned.all;Use IEEE.std_logic_arith.all;Entity chuan_bing is port(load : in std_logic;
d_in : in std_logic;
d_out:buffer std_logic_vector(15 downto 0);clk :in std_logic);
end chuan_bing;architecture arch of chuan_bing is signal l: std_logic_vector(15 downto 0);
begin process(clk)begin
if(clk'event and clk='1')then
l(0)<=d_in;
if(load='0')then
for i in 14 downto 0 loop
l(i+1)<=l(i);
end loop;
else
d_out<=l;
end if;end if;end process;end arch;
第二篇:EDA期末復習總結1
面向FPGA的開發流程
綜合:由高層次描述自動轉換為低層次描述的過程。是EDA技術的核心。
綜合器:能夠自動將一種設計表示形式向另一種設計表示形式轉換的計算機程序。Xilinx公司推出FPGA;Altera公司推出EPLD,Lattice公司提出CPLD和ISP。
VHDL程序的基本結構:庫、程序包,實體,結構體,進程,配置。VHDL的本質:并行語句。
不完整IF語句形成時序邏輯電路,完整IF語句形成組合邏輯電路。
常用邏輯門符號與現有國標符號的對照:
第三章VHDL的基礎
3.1 VHDL基本語法
實體:描述器件的端口構成及信號端口的基本性質。表達式:entity e_name is port(p_name:port_m data_type;
??
p_namei:port_mi data_type); end entity e_name;
結構體:描述電路器件的內部邏輯功能和電路結構。
表達式:architecture arch_name of e_name is [說明語句] ??定義或說明數據對象、數據類型、元件調用聲明 begin(功能表述語句)end architecture arch_name;
一個可綜合的、完整的VHDL程序結構必須包含實體和結構體兩個最基本的語言結構。把一個完整的可綜合的VHDL程序設計稱為設計實體,而其程序代碼常被稱為VHDL的RTL描述。
4種端口模式:IN,OUT,INOUT,BUFFER。
4種數據類型:integer(整數),boolean(邏輯),std_logic,bit。bit的取值范圍是‘1’和‘0’,可以參與邏輯運算或算術運算,其結果仍是位的數據類型。
賦值符號“<=”:
例如y<=a,表示輸入端口a的數據向輸出端口y傳輸,或信號a向信號y賦值。賦值操作并非立即發生,而要經歷一個模擬器的最小分辨時間δ,δ可以看作實際電路存在的固有延時量。“<=”兩邊的信號的數據類型必須一致。
數據比較符號“=”:
例如s=‘0’,“=”沒有賦值的含義,只是一種數據比較符號。S=‘0’輸出結果的數據類型是布爾數據類型BOOLEAN,BOOLEAN數據類型取值是TRUE(真)和FALSE(偽),VHDL仿真器和綜合器分別用‘1’和‘0’表達TRUE和FALSE,布爾數據不是數值,只能用于邏輯操作或條件判斷。
7種邏輯操作符:and與、or或、not非、nand與非、nor或非、xor異或、xnor同或。
邏輯操作符所要求的操作數的數據類型有3種,即bit、boolean和std_logic。
條件語句:用IF_THEN_ELSE表示VHDL順序語句。
IF語句表達式:if 條件句 then 順序語句 else 順序語句 end if
WHEN_ELSE 條件信號賦值語句:一種并行賦值語句
表達式:賦值目標<=表達式 WHEN 賦值條件 ELSE 例:z<= a when p1=’1’ else
表達式 WHEN 賦值條件 ELSE b when p2=’1’ else
? c;
表達式; 條件信號賦值語句的第一句具有最高賦值優先。
進程語句:由Process引導的語句: 表達式:Process(a,b,s)
在VHDL中,所有合法的順序語句都必須放入進程語句中。在結構體中,可以有很多進程語句,所有的進程語句都是并行語句,而由任一進程Process引導的語句結構屬于順序語句。進程語句定義的是變量。描述數字電路時,推薦使用Process語句。
文件取名和存盤
文件名可以由設計者任意給定,但文件后綴擴展名必須是“.vhd”,建議程序的文件名盡可能與該程序的實體名一致,文件名原則上不分大小寫,但推薦用小寫。
3.2 時序電路描述
VHDL主要通過對時序器件功能和邏輯行為的描述,而非結構上的描述使得計算機綜合出符合要求的時序電路。
標準邏輯位數據類型STD_LOGIC:
STD_LOGIC定義:TYPE STD_LOGIC IS(‘U’,‘X’,‘0’,‘1’,‘Z’,‘W’,‘L’,‘H’,‘-’)
使用庫和程序包的一般定義表達式: LIBRARY <設計庫名>;
USE <設計庫名>.<程序包名>.ALL;
信號定義:signal q1:std_logic 數據對象:信號(signal)、變量(variable)、常量(constant)
信號屬性函數:EVENT。所謂信號屬性函數是用來獲得信號行為信息的函數。測定信號的跳變情況:<信號名>’EVENT 上升沿檢測表式為:<信號名>’EVENT AND <信號名>=’1’ 時鐘上升沿檢測表式為:clk’event and clk=‘1’ 確保clk的變化是一次上升沿的變化:
if clk'event and(clk='1')and(clk'last_value='0')if clk='1' and clk'last_value='0' 3.3
※CASE語句:
case語句屬于順序語句,因此必須放在進程語句中使用。
一般表達式:case <表達式> is when <選擇值或標識符>=><順序語句>;?;<順序語句>;when <選擇值或標識符>=><順序語句>;?;<順序語句>;?
when others=><順序語句>;--一般用null,表示不作任何操作。end case;
并置操作符&:表示將操作數或是數組合并起來形成新的數組。如abc<=a&b。
例化語句:
第一部分是對一個現成的設計實體定義為一個元件,語句的功能是對待調用的元件作出調用聲明,其表達式為:component 元件名
port(端口名表);
end component 第二部分則是此元件與當前設計實體中元件間及端口的連接說明,語句的表達式為:
例化名:元件名port map([端口名=>]連接端口名,?);
相關語法說明:
1、變量
variable cqi:std_logic_vector(3 downto 0);變量與信號的區別: 信號:全局量
用于architecture、package、entity中 賦值符號為<= 變量:局部量
用于process、function、procedure中 賦值符號為:=
2、省略賦值操作符(others=>x)
全加器的VHDL描述(書P55)
3.6 數據對象
數據對象: 常量(constant):代表數字電路中電源、地和恒定的邏輯值。
常數定義語句:
變量(variable):代表暫存某些值的載體,常用于描述算法。
變量定義語句:
信號(signal):代表物理設計中的某硬件連接線,包括輸入輸出端口。
信號定義語句:
信號賦值語句:
變量與信號的差異(總結): 1)賦值方式的不同:
變量:= 表達式;
信號 < = 表達式;
2)硬件實現的功能不同:
信號代表電路單元、功能模塊間的互聯,代表實際的硬件連線;
變量代表電路單元內部的操作,代表暫存的臨時數據。
3)有效范圍的不同:
信號:程序包、實體、結構體;全局量。
變量:進程、子程序;局部量。4)賦值行為的不同:
信號賦值延遲更新數值、時序電路;
變量賦值立即更新數值、組合電路。
3.7 IF語句概述
※IF語句:
3.8 進程語句歸納
Process語句結構的一般表達格式如下:
[進程標號:] process [(敏感信號參數表)] [is] [進程說明部分](定義該進程所需的局部數據環境)begin 順序描述語句(描述該進程的行為)end process [進程標號];
第四章QuartusⅡ的使用
建立工作庫文件夾和編輯設計文件,創建工程,編譯前設置,全程編譯,時序仿真,應用RTL電路圖觀察器,引腳鎖定,配置文件下載,編程配置器件,Signal TapⅡ實時測試。(文本編輯,功能仿真,邏輯綜合,布局布線,時序仿真,編程下載)
第五章VHDL狀態機
用戶自定義數據類型是用類型定義語句TYPE和子類型定義語句SUBTYOPE實現的
5.1 狀態機設計相關語句
TYPE類型定義語句:
VHDL中的枚舉數據類型是一種特殊的數據類型,它們是用文字符號來表示一組實際的二進制數。設計者在狀態機的設計中,為了利于閱讀、編譯和VHDL綜合器的優化,往往將表征狀態的二進制數組用文字符號來代替,即所謂的狀態符號化。
枚舉類型也可以直接用數值來定義,但必須使用單引號。枚舉數據,在綜合過程中,都將轉化為二進制代碼。編碼順序是默認的。編碼數值:一般將第一個枚舉量編碼為‘0’或“0000”,以后依次加1。編碼的位矢量長度根據實際情況決定。
子類型subtype是由type所定義的原數據類型的一個子集,它滿足原數據類型的所有約束條件,原數據類型稱為基本數據類型。子類型并沒有定義新的數據類型。
子類型subtype的語句格式:
5.1.3
狀態機的結構
最一般最常用的狀態機通常包括:說明部分,主控時序進程,主控組合進程,輔助進程。
現態信號current_state,次態信號next_state。
真值表:
5.2 Moore狀態機設計
從狀態機的信號輸出方式上分,有Moore型和Mealy型兩類狀態機。
Moore型狀態機的輸出僅為當前狀態的函數,這類狀態機在輸入發生變化時還必須等待時鐘的到來,時鐘使狀態變化時才導致輸出的變化,所以比Mealy機要多等待一個時鐘周期。
Mealy型狀態機的輸出是當前狀態和所有輸入信號的函數,它的輸出是在輸入變化后立即發生的,不依賴時鐘的同步。
從輸出時序上看,Moore屬于同步輸出狀態機,而Mealy屬于異步輸出狀態機。
摩爾(Moore)型狀態機的輸出僅與當前狀態有關:
異步復位:目的在加電時建立一個初始狀態,并避免非法狀態;
摩爾(Moore)型狀態機真值表:
多進程Moore狀態機的輸出信號是由組合電路發出的,所以在一些特定情況下難免出現毛刺現象。如果這些輸出信號用作時鐘信號,極易產生錯誤的操作,需盡力避免。單進程Moore狀態機較容易構成能避免出現毛刺現象的狀態機。
5.3 Mealy 狀態機
Mealy狀態機的輸出不僅是當前狀態的函數,也是輸入信號的函數。
Mealy 狀態機真值表:
第七章VHDL語句
7.1 VHDL順序語句(Sequential)
硬件執行:并行執行(VHDL本質)仿真執行:順序執行、并行執行
分為兩大類:順序(Sequential)描述語句、并行(Concurrent)描述語句
順序語句只能用在進程與子程序中。可描述組合邏輯、時序邏輯。常用的順序描述語句:賦值語句; if語句;case語句;loop語句; next語句;exit語句;子程序調用語句; return語句;wait語句;null語句。
7.1.4 LOOP語句
LOOP語句就是循環語句,它可以使所包含的一組順序語句被循環執行,其執行次數可由設定的循環參數決定。
LOOP語句的常用表達方式有兩種。
(1)單個LOOP語句,其語法格式如下:
[LOOP標號:] LOOP
順序語句
END LOOP [LOOP標號:];
該語句形式的循環方式需引入其它控制語句(如EXIT語句)才能確定。
(2)FOR_LOOP語句,其語法格式如下:
[LOOP標號:] FOR 循環變量,IN 循環次數范圍 LOOP 順序語句
END LOOP [LOOP標號:];
7.1.5 NEXT 語句
NEXT語句主要用在LOOP語句執行中進 行有條件的或無條件的轉向控制,它的語句格式有3種。
(1)第一種語句格式:NEXT;
當LOOP內的順序語句執行到NEXT語句時,即刻無條件終止當前的循環,跳回到本次循環LOOP語句處,開始下一次循環。
(2)第二種語句格式:NEXT LOOP標號;
在當有多重LOOP語句嵌套時,可以跳轉到指定標號的LOOP語句處,重新開始執行循環操作。
(3)第三種語句格式:NEXT LOOP標號 WHEN 條件表達式 ;
分句“WHEN 條件表達式”是執行NEXT語句的條件,如果條件表達式的值為TRUE,則執行NEXT語句,進入跳轉操作,否則繼續向下執行。但當只有單層LOOP循環語句時,關鍵詞NEXT和WHEN之間的“LOOP標號”可以省去。
7.1.6 EXIT語句
EXIT 語句為LOOP語句的內部循環控制語句,將結束循環狀態。
EXIT;--第一種語句格式 EXIT LOOP標號;--第二種語句格式
EXIT LOOP標號 WHEN 條件表達式 ;--第三種語句格式
NEXT語句與EXIT語句的格式與操作功能非常相似,區別是: NEXT語句是跳向LOOP語句的起始點,而EXIT語句則是跳向LOOP語句的終點。
7.1.7 WAIT語句
在進程中,當執行到WAIT(等待)語句時,運行程序將被掛起,直到滿足此語句設置的結束掛起條件之后,才重新開始執行進程中的程序。
wait--無限等待
wait on 信號表--敏感信號等待語句 wait until 條件表達式--條件滿足(可綜合)wait for 時間表達式--時間到,超時等待語句
1、wait on 語句
格式:wait on 信號[,信號];
2、wait until 語句(可綜合)
格式:wait until 表達式;
當表達式的值為“真”時,進程被啟動,否則進程被掛起。
三種表達方式:
wait until 信號 = value;wait until 信號’event and 信號 = value;wait until not(信號’stable)and 信號 = value;時鐘信號 clk 的上升沿的描述:
wait until clk = ‘1’;
wait until rising_edge(clk);wait until clk’event and clk = ‘1’;
wait until not(clk’stable)and clk = ‘1’;
7.1.9
return 語句
return 語句只能用于子程序中,并用來終止一個子程序的執行。
格式:return [表達式];
分為:1)return ;
用于過程,只是結束過程,不返回任何值。2)return 表達式;
用于函數,并且必須返回一個值。
7.1.9
空操作語句
空操作語句不完成任何操作,它唯一的功能就是使邏輯運行流程跨入下一步語句的執行。NULL常用于CASE語句中,為滿足所有可能的條件,利用NULL來表示剩余條件下的操作行為。
格式: NULL;
7.2
并行語句(Concurrent Statements)
結構體中可綜合的并行描述語句有:
并行信號賦值語句,條件信號賦值語句,選擇信號賦值語句,進程語句,塊語句,元件例化語句,生成語句,參數傳遞映射語句,過程調用語句,端口說明語句。
使用格式: ARCHITECTURE 結構體名 OF 實體名 IS 說明語句
BEGIN 并行語句
END ARCHITECTURE 結構體名
名詞解釋
EDA--------電子設計自動化(Electronic Design Automation)VHDL------超高速集成電路硬件描述語言
(Very-High-Speed Integrated Circuit HardwareDescription Language)CPLD------復雜可編程邏輯器件(Complex Programmable Logic Device)EPLD--------電可編程邏輯器件(Electrically Programmable Logic Device)FPGA------現場可編程門陣列(Field-Programmable Gate Array)
ASIC-------專用集成電路(Application Specific Integrated Circuit)LUT---------顯示查找表(Look-Up-Table)ISP----------在系統可編程技術(In_System Programmability Programming)
第三篇:EDA(解答題)EDA期末總結8
1章
ENTITY AD574 IS STD_LOGIC;并行信號賦值語句;進程語句;塊語句;條件信號賦值語句;元件例化語
PORT(D :IN STD_LOGIC_VECTOR(11
Q : OUT
1、常用的硬件描述語言有VHDL、Verilog、ABEL 句;生成語句;并行過程調用語句。DOWNTO 0);
STD_LOGIC_VECTOR(4 DOWNTO 0));
2、VHDL自頂向下的設計流程:
4、什么叫并行語句?
CLK ,STATUS : IN STD_LOGIC;--狀END MEALY1;1.設計說明書2.建立VHDL行為模型3.VHDL行為仿真4.VHDL-RTL在結構體的執行是同步進行的,或者說是并行運行的,其執行方式
ARCHITECTURE behav OF MEALY1 IS 態機時鐘CLK,AD574狀態信號STATUS 級建模 與書寫的順序無關。
TYPE states IS(st0, st1, st2, st3,st4);
LOCK0
: OUT STD_LOGIC;5.前端功能仿真6.邏輯綜合7.測試向量生成8.功能仿真9.結
5、VHDL中具有屬性的項目:
SIGNAL STX : states;
--內部鎖存信號LOCK的測試信號 構綜合10.門級時序仿真11.硬件測試12.設計完成 類型、子類型、過程、函數、信號、變量、常量、實體、結構體、BEGIN
CS,A0,RC,K12X8 : OUT STD_LOGIC;2章 配置、程序包、元件和語句標號等。
COMREG : PROCESS(CLK,RESET)--AD574控制信號
BEGIN--決定轉換狀態的進程 1.一般ASIC設計的流程:
6、綜合器支持的屬性有:
Q : OUT STD_LOGIC_VECTOR(11
IF RESET ='1' THEN 系統規格說明:系統劃分:邏輯設計與綜合:綜合后仿真:版圖設LEFT、RIGHT、HIGH、LOW、RANGE、REVERS RANGE、LENGTH、DOWNTO 0));--鎖存數據輸出
STX <= ST0;計:版圖驗證:參數提取與后仿真:制版、流片:芯片測試 EVENT及STABLE。END AD574;
ELSIF CLK'EVENT AND CLK = '1'
2、常用EDA工具: ARCHITECTURE behav OF AD574 IS
THEN 設計輸入編輯器:HDL綜合器:仿真器:適配器(或布局布線器):TYPE states IS(st0, st1, st2, st3,st4);
CASE STX IS
SIGNAL current_state, next_state: 下載器
WHEN st0 => IF DATAIN = '1' states :=st0;
3、IP核:軟IP硬IP固IP THEN STX <= st1;END IF;
SIGNAL REGL : 3章
WHEN st1 => IF DATAIN = '0' STD_LOGIC_VECTOR(11 DOWNTO 0);
1、CPLD和FPGA的主要區別: THEN STX <= st2;END IF;
SIGNAL LOCK : STD_LOGIC;
WHEN st2 => IF DATAIN = '1' 結構上的不同:集成度的不同:CPLD:500~50000門;FPGA:1K~10M門:應用范圍不同:CPLD邏輯能力強而寄存器少(1K左右),適用于控制密集型系統;FPGA邏輯能力較弱但寄存器多(100多K),適用于數據密集型系統。使用方法不同
2、FPGA和CPLD的選用(1)CPLD的選用: 邏輯密集型:中小規模(1000~50000):免費軟件支持;編程數據不丟失,電路簡單;ISP特性,編程加密;布線延遲固定,時序特性穩定;(2)FPGA選用: 數據密集型;大規模設計(5000~數百萬門);SOC設計:ASIC的設計仿真:布線靈活,但時序特性不穩定;需用專用的ROM進行數據配置 4章
1、EDA綜合工具提供的數據類型為布爾型(Boolean)、位型(Bit)、位矢量型(Bit-Vector)和整數型(Interger)。
2、VHDL語言描述結構體功能有3種方法:行為描述法:數據流描述法;結構描述法
3、VHDL的庫:STD庫和WORK庫:IEEE庫
4、clock’EVENT and clock=‘1檢測上升沿;clock’EVENT and clock=‘0’檢測下降沿。
5、簡述實體、端口概念,端口種類及INPUT與BUFFER的異同。以關鍵詞ENTITY引導,END ENTITY....結束的語句部分成為實體。端口種類4種:IN、OUT、INOUT、BUFFER。INOUT定義的通道確定為輸入輸出雙向端口;、BUFFER在需要輸入數據是時,只允許內不回讀輸出的信號。
6、結構體 以關鍵詞ARCHITECTURE引導,END 結束的語句部分成為結構體。
7、端口: INOUT定義的通道為輸入輸出雙向端口,可以由外向內或由內向外傳輸數據,而BUFFER定義的通道雖然也是輸入輸出端口,但它回讀的信號不能從外部輸入,而是由內部產生,向外輸出的信號。IN定義的通道為單向只讀模式,規定數據只能通過此端口被讀入實體中 OUT定義的通道為單向輸出模式,規定數據只能通過此端口從實體向外流出,或者說可以將實體中的數據向此端口賦值。INOUT定義的通道確定為輸入輸出雙向端口,可以由外向內或由內向外傳輸數據。6章
1、說明用原理圖輸入方法設計電路的詳細流程 1.為一項工程設計建立文件夾 2.輸入設計項目和存盤 3.將設計項目設置成工程文件 4.選擇目標器件并編譯 5時序仿真和包裝入庫 6.設計頂層文件 7章
1、為什么要使用狀態機 有限狀態機克服了純硬件數字系統順序方式控制不靈活的缺點。狀態機的結構模式相對簡單。狀態機容易構成性能良好的同步時序邏輯模塊。狀態機的VHDL表述豐富多樣。在高速運算和控制方面,狀態機更有其巨大的優勢。就可靠性而言,狀態機的優勢也是十分明顯的。
2、時序進程將次態信號送到現態信號
3、Moore型輸出僅與當前狀態有關,Mealy型輸出是當前狀態與所有輸入信號
FSM:s_machine current_state clkPROCESSPROCESSREGCOMreset next_statecomb_outputsstate_inputs
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY s_machine IS
PORT(clk,reset
: IN STD_LOGIC;
state_inputs : IN STD_LOGIC_VECTOR(0 TO 1);
comb_outputs : OUT INTEGER RANGE 0 TO 15);END s_machine;ARCHITECTURE behv OF s_machine IS
TYPE FSM_ST IS(s0, s1, s2, s3);
SIGNAL current_state, next_state: FSM_ST;BEGIN REG: PROCESS(reset,clk)
BEGIN
IF reset = '1' THEN
current_state <= s0;
ELSIF clk='1' AND clk'EVENT THEN
current_state <= next_state;
END IF;
END PROCESS;
COM:PROCESS(current_state, state_Inputs)BEGIN
CASE current_state IS
WHEN s0 => comb_outputs<= 5;
IF state_inputs = “00” THEN next_state<=s0;
ELSE next_state<=s1;
END IF;
WHEN s1 => comb_outputs<= 8;
IF state_inputs = “00” THEN next_state<=s1;
ELSE next_state<=s2;
END IF;
WHEN s2 =>
comb_outputs<= 12;
IF state_inputs = “11” THEN next_state <= s0;
ELSE next_state <= s3;
END IF;
WHEN s3 => comb_outputs <= 14;
IF state_inputs = “11” THEN next_state <= s3;
ELSE next_state <= s0;
END IF;
END case;
END PROCESS;
END behv;
3、三進程有限狀態機 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;BEGIN
K12X8 <= '1';
LOCK0 <= LOCK;
COM1: PROCESS(current_state,STATUS)--決定轉換狀態的進程 BEGIN
CASE current_state IS
WHEN st0 => next_state <= st1;
WHEN st1 => next_state <= st2;
WHEN st2 => IF(STATUS='1')THEN next_state <= st2;
ELSE
next_state <= st3;
END IF;
WHEN st3=>
next_state <= st4;
WHEN st4=>
next_state <= st0;
WHEN OTHERS => next_state <= st0;
END CASE;
END PROCESS COM1;COM2: PROCESS(current_state)--輸出控制信號的進程
BEGIN
CASE current_state IS
WHEN st0=> CS<='1';A0<='1';RC<='1';LOCK<='0';--初始化
WHEN st1=> CS<='0';A0<='0';RC<='0';LOCK<='0';--啟動12位轉換
WHEN st2=> CS<='0';A0<='0';RC<='0';LOCK<='0';--等待轉換 WHEN st3=> CS<='0';A0<='0';RC<='1';LOCK<='0';--12位并行輸出有效
WHEN st4=> CS<='0';A0<='0';RC<='1';LOCK<='1';--鎖存數據
WHEN OTHERS=>CS<='1';A0<='1';RC<='1';LOCK<='0';--其它情況返回初始態
END CASE;
END PROCESS COM2;
REG: PROCESS(CLK)--時序進程
BEGIN
IF(CLK'EVENT AND CLK='1')THEN current_state <= next_state;
END IF;
END PROCESS REG;
LATCH1 : PROCESS(LOCK)--數據鎖存器進程
BEGIN
IF LOCK='1' AND LOCK'EVENT THEN
REGL <= D;
END IF;
END PROCESS;
Q <= REGL;END behav;
5、單進程有限狀態機 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 : ST_TYPE;
BEGIN
PROCESS(CLK,RST)
BEGIN
IF RST ='1' THEN C_ST <= ST0;Q<= “0000”;
ELSIF CLK'EVENT AND CLK='1' THEN
CASE C_ST IS
WHEN ST0 => IF DATAIN =“10” THEN C_ST <= ST1;
ELSE C_ST <= ST0;END IF;
Q <= “1001”;
WHEN ST1 => IF DATAIN =“11” THEN C_ST <= ST2;
ELSE C_ST <= ST1;END IF;
Q <= “0101”;
WHEN ST2 => IF DATAIN =“01” THEN C_ST <= ST3;
ELSE C_ST <= ST0;END IF;
Q <= “1100”;
WHEN ST3 => IF DATAIN =“00” THEN C_ST <= ST4;
ELSE C_ST <= ST2;END IF;
Q <= “0010”;
WHEN ST4 => IF DATAIN =“11” THEN C_ST <= ST0;
ELSE C_ST <= ST3;END IF;
Q <= “1001”;
WHEN OTHERS => C_ST <= ST0;
END CASE;
END IF;
END PROCESS;END behav;
6、Mealy型有限狀態機的設計
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;ENTITY MEALY1 IS PORT(CLK ,DATAIN,RESET : IN THEN STX <= st3;END IF;
WHEN st3=> IF DATAIN = '0' THEN STX <= st4;END IF;
WHEN st4=> IF DATAIN = '1'
THEN STX <= st0;END IF;
WHEN OTHERS => STX <= st0;
END CASE;
END IF;
END PROCESS COMREG;COM1: PROCESS(STX,DATAIN)BEGIN--輸出控制信號的進程
CASE STX IS
WHEN st0 => IF DATAIN = '1' THEN
Q <= “10000”;
ELSE Q<=“01010”;
END IF;
WHEN st1 => IF DATAIN = '0' THEN Q <= “10111”;
ELSE Q<=“10100”;
END IF;
WHEN st2 => IF DATAIN = '1' THEN Q <= “10101”;
ELSE Q<=“10011”;
END IF;
WHEN st3=> IF DATAIN = '0' THEN Q <= “11011”;
ELSE Q<=“01001”;
END IF;
WHEN st4=> IF DATAIN = '1' THEN Q <= “11101”;
ELSE Q<=“01101”;
END IF;
WHEN OTHERS => Q<=“00000”;
END CASE;
END PROCESS COM1;
END behav;
7、狀態編碼
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY AD574A IS
PORT(D : IN
STD_LOGIC_VECTOR(11 DOWNTO 0);
CLK ,STATUS : IN STD_LOGIC;
OUT4 : OUT
STD_LOGIC_VECTOR(3 DOWNTO 0);
Q : OUT STD_LOGIC_VECTOR(11 DOWNTO 0));END AD574A;ARCHITECTURE behav OF AD574A IS SIGNAL current_state, next_state: STD_LOGIC_VECTOR(4 DOWNTO 0);
CONSTANT st0 : STD_LOGIC_VECTOR(4 DOWNTO 0):= “11100”;
CONSTANT st1 : STD_LOGIC_VECTOR(4 DOWNTO 0):= “00001”;
CONSTANT st2 : STD_LOGIC_VECTOR(4 DOWNTO 0):= “00000”;
CONSTANT st3 : STD_LOGIC_VECTOR(4 DOWNTO 0):= “00100”;
CONSTANT st4 : STD_LOGIC_VECTOR(4 DOWNTO 0):= “00110”;
SIGNAL REGL
: STD_LOGIC_VECTOR(11 DOWNTO 0);
SIGNAL LK
: STD_LOGIC;
BEGIN
COM1: PROCESS(current_state,STATUS)
--決定轉換狀態的進程 BEGIN
CASE current_state IS
WHEN st0 => next_state <= st1;
WHEN st1 => next_state <= st2;
WHEN st2 => IF(STATUS='1')THEN next_state <= st2;
ELSE
next_state <= st3;
END IF;
WHEN st3=> next_state <= st4;
WHEN st4=> next_state <= st0;
WHEN OTHERS => next_state <= st0;
END CASE;
OUT4 <= current_state(4 DOWNTO 1);END PROCESS COM1;
REG: PROCESS(CLK)--時序進程
BEGIN
IF(CLK'EVENT AND CLK='1')THEN
current_state <= next_state;
END IF;
END PROCESS REG;
LK <= current_state(1);
LATCH1 : PROCESS(LK)--數據鎖存器進程
BEGIN
IF LK='1' AND LK'EVENT THEN
REGL <= D;
END IF;
END PROCESS;
Q <= REGL;
END behav;9章
1、VHDL有那幾種基本的順序語句? 賦值語句;流程控制語句;等待語句;子程序調用語句;返回語句;空操作語句。
2、什么叫順序語句,它的適用范圍是什么? 執行順序與它們的書寫順序基本一致的語句叫順序語句,順序語句只能出現在進程和子程序中,子程序包括函數和過程。3、VHDL并行語句幾種?
第四篇:EDA總結
一、有關概念
1.ASIC全稱:專用集成電路; 2.FPGA:現場可編程門陣列 3.CPLD:復雜可編程邏輯器件; 4.VHDL全稱:硬件描述語言; 5.全定制; 6.半定制;
7.IP核;IP就是知識產權核或知識產權模塊的意思
8.綜合(器);綜合就是將電路的高級語言(如行為描述)轉換為低級的,可與FPGA/CPLD的基本結構相映射的網表文件或程序。
9.適配(器);適配器也稱結構綜合器,它的功能是將綜合器產生的網表文件配置于指定的目標器件中,使之產生最終的下載文件。
10.功能仿真;是直接對VHDL、原理圖描述或其他描述形式的邏輯功能進行測試模擬,以了解其實現的功能是否滿足原設計的要求
11.時序仿真;就是接近真實器件運行特性的仿真,仿真文件中已包含了器件硬件特性參數,因而,仿真精度高。
12.編程下載;把適配后生成的下載或配置文件,通過編程器或編程電纜向FPGA或CPLD下載,以便進行硬件測試和驗證 13.PROM;可編程只讀存儲器 14.PLA;可編程邏輯陣列 15.PAL;可編程陣列邏輯 16.查找表; 17.乘積項;
18.實體;VHDL實體作為一個設計實體(獨立的電路功能結構)的組成部分,其功能是對這個設計實體與外部電路進行接口描述。
19.結構體;結構體是實體所定義實體中的一個組成部分。結構體描述設計實體的內部結構和外部設計實體端口間的邏輯關系。
20.元件例化;元件例化意味著在當前結構體內定義了一個新的設計層次,這個設計層次的總稱叫元件,但它可以以不同的形式出現。?? 21.時鐘進程; 22.三態; 23.線與; 24.數據對象;
25.變量;變量是一個局部量,只能在進程和子程序中使用,變量的賦值是立即發生的,不存在任何延時行為。
26.信號;信號是硬件系統的基本數據對象,它的性質類似于連接線。信號可以作為設計實體中并行語句模塊間的信息交流通道
27.Moore型狀態機;異步輸出狀態機,輸出僅為當前狀態的函數,在輸入發生變化時還必須等待時鐘的到來。
28.Mealy型狀態機;同步輸出狀態機,輸出是當前狀態和所有輸入信號的函數,它的輸出是在輸入變化后立即發生的。不依賴于時鐘的同步。
注意:
1.<= 對信號SIGNAL的賦值 := 是對變量variable的賦值
2.程序的實體名必須和文件名一致,例1中二輸入與門的文件名必須為yumen
一、有關概念
ASIC全稱;FPGA和CPLD全稱;VHDL全稱;全定制;半定制; IP核;綜合(器);適配(器);功能仿真;時序仿真;編程下載;PROM;PLA;PAL;查找表;乘積項;實體;結構體;元件例化;時鐘進程;三態;線與; 數據對象;變量;信號; Moore型狀態機;Mealy型狀態機。
二、程序分析及設計
1、二輸入與門的VHDL語言設計。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY yumen IS
PORT(a, b : IN BIT;
y : OUT BIT);END ENTITY yumen;ARCHITECTURE one OF yumen IS BEGIN y <= a AND b;END ARCHITECTURE one;
2、帶有異步復位和同步時鐘使能的6進制計數器VHDL語言設計。
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY jinzhi IS PORT(CLK,RST,EN : IN STD_LOGIC;CQ : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);COUT : OUT STD_LOGIC);END jinzhi;ARCHITECTURE behav OF jinzhi IS BEGIN PROCESS(CLK, RST, EN)VARIABLE CQI : STD_LOGIC_VECTOR(2 DOWNTO 0);BEGIN IF RST = '1' THEN CQI :=(OTHERS =>'0');--計數器復位 ELSIF CLK'EVENT AND CLK='1' THEN--檢測時鐘上升沿 IF EN = '1' THEN--檢測是否允許計數 IF CQI < 5 THEN CQI := CQI + 1;--允許計數
ELSE CQI :=(OTHERS =>'0');--大于5,計數值清零 END IF;END IF;END IF;IF CQI = 5 THEN COUT <= '1';--計數大于5,輸出進位信號 ELSE COUT <= '0';END IF;CQ <= CQI;--將計數值向端口輸出 end PROCESS;END behav;
3、用VHDL語言設計2選1數據選擇器。
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY erxuanyi IS PORT(a, b, s: IN BIT;y : OUT BIT);END erxuanyi;ARCHITECTURE one OF erxuanyi IS BEGIN PROCESS(a,b,s)BEGIN IF s = '0' THEN y <= a;ELSE y <= b;END IF;END PROCESS;END;
4、邊沿型T、D觸發器VHDL語言設計。--D觸發器
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DFF IS PORT(CLK : IN STD_LOGIC;D : IN STD_LOGIC;Q : OUT STD_LOGIC);END;ARCHITECTURE bhv OF DFF IS SIGNAL Q1 : STD_LOGIC;BEGIN PROCESS(CLK)BEGIN IF CLK'EVENT AND CLK = '1' THEN Q1 <= D;END IF;END PROCESS;Q <= Q1;END bhv;
--T觸發器
有clk且為1的時候,T與當前狀態異或
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY tff IS PORT(CLK : IN STD_LOGIC;T : IN STD_LOGIC;Q : OUT STD_LOGIC);END;ARCHITECTURE bhv OF tff IS SIGNAL Q1 : STD_LOGIC;BEGIN PROCESS(CLK)BEGIN IF CLK'EVENT AND CLK = '1' THEN Q1 <= Q1 XOR T;END IF;END PROCESS;Q <= Q1;END bhv;
5、帶并行置數的8位右移移位寄存器VHDL語言設計。
library ieee;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SHFRT IS PORT(CLK,LOAD: IN STD_LOGIC;
DIN: IN STD_LOGIC_VECTOR(7 DOWNTO 0);
QB:OUT STD_LOGIC);END SHFRT;
ARCHITECTURE BEHAV OF SHFRT IS BEGIN PROCESS(CLK,LOAD)
VARIABLE REG8: STD_LOGIC_VECTOR(7 TO 0);BEGIN
IF CLK'EVENT AND CLK='1' THEN
IF LOAD='1' THEN REG8:=DIN;
ELSE REG8(6 DOWNTO 0):=REG8(7 DOWNTO 1);
END IF;
END IF;
QB<=REG8(0);END PROCESS;END BEHAV;--說明:當clk有上升沿,而且load為1的時候把din的值賦給REG8,如果clk有上升沿,而且load為0的時候把REG8的高7為賦給低7位(注意此時最高位不變)6、1位半加器VHDL語言設計。(布爾邏輯描述)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY banjia IS PORT(a,b : IN STD_LOGIC;co,so : OUT STD_LOGIC);END ENTITY banjia;ARCHITECTURE fh1 OF banjia IS BEGIN so <= not(a xor(not b));co <= a and b;END ARCHITECTURE fh1;
7、用VHDL語言設計實現四選一數據選擇器。
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY sixuan IS PORT(a, b, c , d: IN BIT;
s: IN STD_LOGIC_VECTOR(1 DOWNTO 0);y : OUT BIT);END sixuan;ARCHITECTURE one OF sixuan IS BEGIN PROCESS(a,b,c,d,s)BEGIN case s(1 DOWNTO 0)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;
8、用VHDL語言實現三態門設計。
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY santai IS port(enable : IN STD_LOGIC;datain : IN STD_LOGIC_VECTOR(7 DOWNTO 0);dataout : OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END santai;ARCHITECTURE bhv OF santai IS BEGIN PROCESS(enable,datain)BEGIN IF enable = '1' THEN dataout <= datain;ELSE dataout <=“ZZZZZZZZ”;END IF;END PROCESS;END bhv;
9、設有VHDL描述的半加器h_adder和或門or2,試通過層次化設計思想設計由半加器和或門構成的一位二進制全加器的VHDL程序。全加器f_adder電路結構組成圖如下所示。
半加器h_adder LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY h_adder IS PORT(a,b : IN STD_LOGIC;co,so : OUT STD_LOGIC);END ENTITY h_adder;ARCHITECTURE fh1 OF h_adder IS BEGIN so <=(a OR b)AND(a NAND b);co <= NOT(a NAND b);END ARCHITECTURE fh1;
或門 or2a 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 one OF or2a IS BEGIN c <= a OR b;END ARCHITECTURE one;
元件例化adder library ieee;use ieee.std_logic_1164.all;entity adder is port(ain,bin,cin:in std_logic;
cout,sum :out std_logic);end entity adder;architecture fd1 of 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;
第五篇:EDA期末考試題
附帶: 一.問答題
1信號賦值語句在什么情況下作為并行語句?在什么情況下作順序語句?信號賦值和變量賦值符號分別是什么?兩種賦值符號有什么區別?
? 信號賦值語句在進程外作并行語句,并發執行,與語句所處的位置無關。信號賦值語句在進程內或子程序內做順序語句,按順序執行,與語句所處的位置有關。
?
信號賦值符號為“<=”變量賦值用“:=”。信號賦值符號用于信號賦值動作,不立即生效。變量,賦值符號用于變量賦值動作,立即生效。
2進程的敏感信號表指的是什么?簡述敏感信號表在進程中的作用?
?
進程的“敏感信號表”也稱敏感表,是進程的激活條件,可由一個或多個信號組成,各信號間以“,”號分隔。當敏感信號表中的任一個信號有事件發生,即發生任意變化,此時,進程被激活,進程中的語句將從上到下逐句執行一遍,當最后一條語句執行完畢之后,進程即進入等待掛起狀態,直到下一次敏感表中的信號有事件發生,進程再次被激活,如此循環往復。
3什么是庫、程序包、子程序、過程調用和函數調用?
? 庫和程序包用來描述和保存元件、類型說明和子程序等,以便在其它設計中通過其目錄可查詢、調用。子程序由過程和函數組成。在子程序調用過程中,過程能返回多個變量,函數只能返回一個變量。若子程序調用的是一個過程,就稱為過程調用,若子程序調用的是一個函數,則稱為函數調用。過程調用、函數調用都是子程序調用。
二.改錯題
1.已知sel為STD_LOGIC_VECTOR(1 DOWNTO 0)類型的信號,而a、b、c、d、q均為STD_LOGIC類型的信號,請判斷下面給出的CASE語句程序片段:
? CASE sel IS ? WHEN“00”=>q<=a; ? WHEN“01”=>q<=b; ? WHEN“10”=>q<=c; ? WHEN“11”=>q<=d; ? END CASE; 2.? 答案:CASE語句缺“WHEN OTHERS”語句。
已知data_in1, data_in2為STD_LOGIC_VECTOR(15 DOWNTO 0)類型的輸入端口,data_out為 STD_LOGIC_VECTOR(15 DOWNTO 0)類型的輸出端口,add_sub為STD_LOGIC類型的輸入端口,請判斷下面給出的程序片段:
? LIBRARY IEEE;
? USE IEEE.STD_LOGIC_1164.ALL; ? ENTITY add IS ? PORT(data_in1, data_in2:IN INTEGER; ? data_out:OUT INTEGER); ? END add;
? ARCHTECTURE add_arch OF add IS ? CONSTANT a:INTEGER<=2; ? BEGIN ? data_out<=(data_in1+ data_in2)* a; ? END addsub_arch; 3.答案:常量聲明時賦初值的“<=”符號應改用“:=”符號。已知Q為STD_LOGIC類型的輸出端口,請判斷下面的程序片段: ? ARCHITECTURE test_arch OF test IS ? BEGIN ? SIGNAL B:STD_LOGIC; ? Q<= B;
END test_arch 答案:信號SIGNAL的聲明語句應該放在BEGIN語句之前。
4.已知A和Q均為BIT類型的信號,請判斷下面的程序片段: ? ARCHITECTURE archtest OF test IS ? BEGIN ? CASE A IS ? WHEN ‘0’=>Q<=‘1’; ? WHEN ‘1’=>Q<=‘0’; ? END CASE; ? END archtest;
答案:CASE語句應該存在于進程PROCESS內。
三.程序設計
1@4位二進制并行加法器的源程序ADDER4B.VHD LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY ADDER4B IS--4位二進制并行加法器 PORT(CIN:IN STD_LOGIC;--低位進位
A: IN STD_LOGIC_VECTOR(3 DOWNTO 0);--4位加數 B: IN STD_LOGIC_VECTOR(3 DOWNTO 0);--4位被加數 S: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--4位和 CONT: OUT STD_LOGIC); END ADDER4B;
ARCHITECTURE ART OF ADDER4B IS SIGNAL SINT:STD_LOGIC_VECTOR(4 DOWNTO 0); SIGNAL AA,BB: STD_LOGIC_VECTOR(4 DOWNTO 0); BEGIN AA<='0'& A;--將4位加數矢量擴為5位,為進位提供空間 BB<='0'& B;--將4位被加數矢量擴為5位,為進位提供空間 SINT<=AA+BB+CIN ; S<=SINT(3 DOWNTO 0); CONT<=SINT(4); END ART;
2@ 8位二進制加法器的源程序ADDER8B.VHD LIBRARY IEEE;
USE IEEE_STD.LOGIC_1164.ALL; USE IEEE_STD.LOGIC_UNSIGNED.ALL: ENTITY ADDER8B IS--由4位二進制并行加法器級聯而成的8位二進制加法器 PORT(CIN:IN STD_LOGIC;
A:IN STD_LOGIC_VECTOR(7 DOWNTO 0); B:IN STD_LOGIC_VECTOR(7 DOWNTO 0); S:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); COUT:OUT STD_LOGIC); END ADDER8B;
ARCHICTURE ART OF ADDER8B IS COMPONENET ADDER4B--對要調用的元件ADDER4B的界面端口進行定義 PORT(CIN:IN STD_LOGIC;
A:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
B:IN STD_LOGIC_VECTOR(3 DOWNTO 0); S:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); CONT:OUT STD_LOGIC);
END COMPONENT ;
SIGNAL CARRY_OUT:STD_LOGIC;--4位加法器的進位標志 BEGIN U1:ADDER4B--例化(安裝)一個4位二進制加法器U1 PORT MAP(CIN=>CIN,A=>A(3 DOWNTO 0),B=>B(3 DOWNTO0),S=>S(3 DOWNTO 0),COUT=>CARRY_OUT);
U2:ADDER4B--例化(安裝)一個4位二進制加法器U2 PORT MAP(CIN=>CARRY_OUT,A=>A(7 DOWNTO 4),B=>B(7 DOWNTO 4),S=>S(7 DOWNTO 4);CONT=>CONT); END ART;
3.@觸發器和緩沖器
D觸發器:Process(clk)begin if(clk’event and clk=‘1’)then q <= d;end if;end process;緩沖器:Process(clk)begin if(clk=‘1’)then q <= d;end if;
end process;
T觸發器:Process(clk)begin
if(clk’event and clk=‘1’)then
if(t = ‘1’)then q <= not(q);else
q <= q;end if;end if;end process;4.@16位鎖存器的源程序
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位數據輸入 Q:OUT STD_LOGIC_VECTOR(15 DOWNTO 0));--16位數據輸出 END REG16B;
ARCHITECTURE ART OF REG16B IS SIGNAL R16S:STD_LOGIC_VECTOR(15 DOWNTO 0);--16位寄存器設置 BEGIN PROCESS(CLK,CLR)BEGIN IF CLR = '1' THEN R16S<= “***0”;--異步復位信號
ELSIF CLK'EVENT AND CLK = '1' THEN--時鐘到來時,鎖存輸入值
R16S(6 DOWNTO 0)<=R16S(7 DOWNTO 1);--右移低8位
R16S(15 DOWNTO 7)<=D;--將輸入鎖到高能位 END IF;
END PROCESS; Q<=R16S; END ART;
5@8位右移寄存器的源程序SREG8B.VHD LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY SREG8B IS PORT(CLK:IN STD_LOGIC; LOAD :IN STD _LOGIC; BIN:IN STD_LOGIC_VECTOR(7DOWNTO 0); QB:OUT STD_LOGIC); END SREG8B;
ARCHITECTURE ART OF SREG8B IS SIGNAL REG8B:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN PROCESS(CLK,LOAD)BEGIN IF CLK'EVENT AND CLK= '1' THEN IF LOAD = '1' THEN REG8<=DIN;
END IF; END IF; END PROCESS; QB<= REG8(0); END ART;
--輸出最低位
--裝載新數據
ELSE REG8(6 DOWNTO0)<=REG8(7 DOWNTO 1);--數據右移
--8位右移寄存器
6@8位乘法器的源程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;--8位乘法器頂層設計 ENTITY MULTI8X8 IS PORT(CLK:IN STD_LOGIC; START:IN STD_LOGIC;
--乘法啟動信號,高電平復位與加載,低電平運算
A:IN STD_LOGIC_VECTOR(7 DOWNTO 0);--8位被乘數 B:IN STD_LOGIC_VECTOR(7 DOWNTO 0);--8位乘數 ARIEND:OUT STD_LOGIC;--乘法運算結束標志位
DOUT:OUT STD_LOGIC_VECTOR(15 DOWNTO 0));--16位乘積輸出 END MULTI8X8;
ARCHITECTURE ART OF MULTI8X8 IS COMPONENT ARICTL--待調用的乘法控制器端口定義 PORT(CLK:IN STD_LOGIC;START:IN STD_LOGIC; CLKOUT:OUT STD_LOGIC;RSTALL:OUT STD_LOGIC;
ARIEND:OUT STD_LOGIC); END COMPONENT;
COMPONENT ANDARITH--待調用的控制與門端口定義 PORT(ABIN:IN STD_LOGIC;
DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); DOUT:OUT_STD_LOGIC_VECTOR(7 DOWNTO 0)); END COMPONENT;
COMPONENT ADDER8B--待調用的8位加法器端口定義 COMPONENT SREG8B ... COMPONENT REG16B ...
SIGNAL GNDINT:STD_LOGIC; SIGNAL INTCLK:STD_LOGIC; SIGNAL RSTALL:STD_LOGIC; SIGNAL QB:STD_LOGIC;
SIGNAL ANDSD:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL DTBIN:STD_LOGIC_VECTOR(8 DOWNTO 0); SIGNAL DTBOUT:STD_LOGIC_VECTOR(15 DOWNTO 0); BEGIN DOUT<=DTBOUT;GNDINT<= '0';
U1:ARICTL PORT MAP(CLK=>CLK,START=>START,CLKOUT=>INTCLK,RSTALL=>RSTALL,ARIEND=>ARIEND); U2:SREG8B PORT MAP(CLK=>INTCLK,LOAD=>RSTALL.DIN=>B,QB=>QB);
U3:ANDARITH PORT MAP(ABIN=>QB,DIN=>A,DOUT=>ANDSD); U4:ADDER8B PORT MAP(CIN=>GNDINT,A=>DTBOUT(15 DOWNTO 8),B=>ANDSD,S=>DTBIN(7 DOWNTO 0),COUT =>DTBIN(8)); U5:REG16B PORT MAP(CLK =>INTCLK,CLR=>RSTALL,D=>DTBIN,Q=>DTBOUT); END ART;--待調用的16右移寄存器端口定義--待調用的8位右移寄存器端口定義
7@有時鐘使能的十進制計數器的源程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY CNT10 IS PORT(CLK:IN STD_LOGIC;
--計數時鐘信號
--清零信號--計數使能信號 CLR:IN STD_LOGIC; END:IN STD_LOGIC;
--有時鐘使能的十進制計數器
CQ:OUT INTEGER RANGE 0 TO 15;--4位計數結果輸出 CARRY_OUT:OUT STD_LOGIC);--計數進位 END CNT10;
ARCHITECTURE ART OF CNT10 IS
SIGNAL CQI :INTEGER RANGE 0 TO 15; BEGIN BEGIN
--計數器異步清零 PROCESS(CLK,CLR,ENA)
IF CLR= '1' THEN CQI<= 0;
IF ENA= '1' THEN IF CQI<9 THEN CQI<=CQI+1; ELSE CQI<=0;END IF; END IF; END IF; END PROCESS; PROCESS(CQI)BEGIN IF CQI=9 THEN CARRY_OUT<= '1';--進位輸出 ELSE CARRY_OUT<= '0';END IF; END PROCESS; CQ<=CQI; END ART;
--等于9,則計數器清零 ELSIF CLK'EVENT AND CLK= '1' THEN 8@)六進制計數器的源程序CNT6.VHD(十進制計數器的源程序
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); CARRY_OUT: OUT STD_LOGIC); END CNT6;
ARCHITECTURE ART OF CNT6 IS SIGNAL CQI:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN PROCESS(CLK,CLR,ENA)BEGIN IF CLR='1' THEN CQI<=“0000”; ELSIF CLK'EVENT AND CLK='1' THEN IF ENA='1' THEN IF CQI=“0101” THEN CQI<=“0000”; ELSE CQI<=CQI+'1';END IF; END IF; END IF;
END PROCESS; PROCESS(CQI)BEGIN IF CQI=“0000” THEN CARRY_OUT<='1'; ELSE CARRY_OUT<='0';END IF; END PROCESS; CQ<=CQI; END ART;
9@十進制計數器
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;ENTITY count10 IS PORT(clk: IN STD_LOGIC;
seg: OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END count10;
ARCHITECTURE a1 OF count10 IS signal sec: STD_LOGIC;
signal q : STD_LOGIC_VECTOR(21 DOWNTO 0);signal num: STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN
process(clk)----get 1 hz clock pulse begin
if clk'event and clk='1' then q<=q+1;end if;sec<=q(21);--get 1 hz clock pulse end process;
timing: process(sec)begin if sec'event and sec='1' then
if num<9 then num<=num+1;else num<=“0000”;end if;end if;end process;
B1: block--bcd-7segs Begin--gfedcba
seg<= “0111111” when num=0 else “0000110” when num=1 else “1011011” when num=2 else “1001111” when num=3 else “1100110” when num=4 else “1101101” when num=5 else “1111101” when num=6 else “0000111” when num=7 else “1111111” when num=8 else “1101111” when num=9 else
“0000000”;end block;END a1;
10@4MHz到1Hz的分頻器
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;ENTITY count IS
PORT(clk: in STD_LOGIC;q: out STD_LOGIC;END count;
ARCHITECTURE a OF count IS
signal tmp: STD_LOGIC_vector(21 downto 0);Begin
process(clk)begin
if clk'event and clk='1' then tmp<=tmp+1;end if;end process;q<=tmp(21);END a;
11@與門
ENTITY shili2 is port(input1 : in std_logic;inptu2 : in std_logic;output1 : out std_logic);
end entity;
architecture one of shili2 is begin
output1<=input1 and input2;end entity;
12@.四輸入與門電路
library ieee;use ieee.std_logic_1164.all;
entity and4 is port(a,b,c,d:in std_logic;y:out std_logic;end and4;
architecture and4_1 of and4 is begin y<= a and b and c and d;end nand4_1;
法二(與非門):
library ieee;
use ieee.std_logic_1164.all entity nand4 is
port(a.b,c,d:in std_logic;y:out std_logic);end nand4;
architecture nand4_2 of nand4 si begin
p1:process(a,b,c,d)variable
tmp:std_logic_vector(3 downto 0);begin tmp:=a&b&c&d;case tmp is when“0000”=>y<='1';when“0001”=>y<='1';when“0010”=>y<='1';when“0011”=>y<='1';when“0100”=>y<='1';when“0101”=>y<='1';when“0110”=>y<='1';when“0111”=>y<='1';when“1000”=>y<='1';when“1001”=>y<='1';when“1010”=>y<='1';when“1011”=>y<='1';when“1100”=>y<='1';when“1101”=>y<='1';when“1110”=>y<='1';when“1111”=>y<='1';when others=>y<='x';end case;end process;end nand4_2;
13@四位全加器
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity add is port(a,b:in std_logic_vector(3 downto 0);cin:in std_logic;s:out std_logic_vector(3 downto 0);cout:out std_logic);end add;
architecture beh of add is begin process(a,b,cin)ariable x:std_logic_vector(3 downto 0);variable m,n,l:integer;begin m:=conv_integer(a);n:=conv_integer(b);l:=m+n+conv_integer(cin);x:=conv_std_logic_vector(l,4);s<=x(3 downto 0);cout<=x(3);end process;end beh;14@N位移位寄存器:page70 15@8位通用寄存器:page137 16@串入串出移位寄存器:page138 17@10位計數器
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CNT10 IS PORT(CLK ,clr : IN STD_LOGIC;CQ : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END ENTITY CNT10;ARCHITECTURE ONE OF CNT10 IS BEGIN PROCESS(CLK , clr)VARIABLE LCQ : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN IF RST = ‘1’ THEN LCQ := “0000”;ELSIF CLK’EVENT AND CLK = ‘1’ THEN IF LCQ < 9 THEN LCQ := LCQ + 1;ELSE LCQ := “0000”;END IF;END IF;CQ <= LCQ;END PROCESS;END ARCHITECTURE ONE;18@八位串行二進制全加器
use ieee.std_logic_1164.all;entity product_adder_subtracter is port(a,b:in std_logic_vector(7 downto 0);s:out std_logic_vector(8 downto 0));end;architecture behavioral of product_adder_subtracter is begin behavior:process(a,b)is variable carry_in:std_logic;variable carry_out:std_logic;variable op2:std_logic_vector(b'range);begin op2:=b;end if;for index in 0 to 7 loop carry_in:=carry_out;s(index)<=a(index)xor op2(index)xor carry_in;carry_out:=(a(index)and op2(index))or(carry_in and(a(index)xor op2(index)));end loop;s(8)<=a(7)xor op2(7)xor carry_out;end process;end;
EDA知識要點:1、2、3、4、5、目前流行的HDL語言有那些?; 什么是ASIC。
VHDL是由什么機構制定并公布的。VHDL的兩大類基本描述語句是什么。
MAX+PLUSⅡ平臺上,原理圖、仿真波形文件、VHDL文件的擴展名 是什么?6、7、8、9、結構體常見的功能語句有那些? 子程序分為那兩類,其結構為什么。信號與變量的賦值有何區別?。可編程器件分為哪些類?
10、VHDL中常見的庫有那些?。
11、不完整的條件語句與完整的條件語句生成的電路有何區別
12、VHDL的標識符由什么構成。
13、VHDL中預定義數據類型有那些?。
14、CASE語句使用當中的注意事項。
15、目前國際上較大的PLD器件制造公司有那幾家公司。
16、VHDL數據對象有什么
17、賦值語句分哪些類,分別寫出一句賦值語句。
18、實現時序電路和邏輯組合電路分別用什么語句實現,分別寫出他們的一般表式。
19、簡述元件例化語句組成及語句格式。
20、數據對象有哪些種,分別寫出定義這些數據對象的一般表述格式。
21、簡述進程語句的使用要點?
22、寫出VHDL常用的順序語句的名稱。
23、簡述VHDL邏輯操作符的種類及所允許的操作數的數據類型。
24、EDA技術的含義。
25、VHDL語言中的邏輯操作符有那些?
26、目前較流行的集成EDA開發環境(軟件)有那些?
27、簡述EDA技術的CPLD/FPGA的設計流程。
28、寫出實體中的PORT語句結構并說明其作用。
29、簡述EDA技術經歷了那幾個發展階段。30、寫出元件例化語句語句格式,并說明其作用。
31、試比較圖形輸入法和文本輸入法有何優缺點?
32、結構體的語言格式與作用。
33、寫出PROCESS語句結構的一般表達格式?
34、EDA技術常用的輸入方法有?
35、什么是實體和結構體,其功能是什么?,36、MAX+pulsⅡ的編輯窗口有那幾種,分別是什么?
37、MAX+pulsⅡ的原理圖輸入法、文本輸入法、波形輸入法生成的文件擴展名為?
38、VHDL的操作符有那幾大類?每一類的操作符分別是什么?每一類操作符可以對那些數據進行操作(運算)?
39、VHDL中如沒有特別的說明算術操作符‘ + ’號對應的操作數為什么類型
40、可編程器件(PLD)分為哪兩類
41、標準邏輯位數據類型常用的數值有哪幾種?
42、在VHDL語言中常見的的數據類型有那些?
43、完整的條件語句將產生什么電路,不完整的條件語句將產生什么電路。
44、信號和變量有什么區別?
45、VHDL作為工業標準,是由那個機構制定并公布的。
46、實體部分的端口模式有四個類型。
47、從執行方式看VHDL的基本描述語句包括哪兩大基本描述語句?
48、VHDL文件存盤時,其主文件名應與實體名一致,擴展名應為什呢
49、硬件描述語言(HDL)的種類很多?
50、簡述元件例化語句的語句格式及關聯方法。
EDA綜合設計設計題
1、用兩種以上的按照下圖設計一個四選一多路選擇器
2、使用元件例化語句編寫下圖所示的頂層文件,其中adder_1為一個由原理圖輸入法設計的完整的設計實體。
3、已知4位全加器電路原理圖如下,請用元件例化語句編寫其程序。
4、用VHDL語言編寫下圖所示的七段顯示譯碼器。
D0D1D2D3七段譯碼器a(X6)b(X5)c(X4)d(X3)e(X2)f(X1)g(X0)七段數碼管afedgbc5、用VHDL設計一個三位十進制的,帶有使能控制端口enable、異步清零端口rst、同步預置控制端口load和預置數據輸入端口date的計數器。
6、編寫一個D觸發器的硬件描述語言程序,要求實現上升沿觸發。
7、使用IF語句設計一個帶有異步復位和置位、同步預置的4位2
進制加法計數器。
U0dind0DclkclkQd1DU1Qclkd2DU2Qclkd3DU3Qclkd4dout