【文章內(nèi)容簡介】
使用格式如下: ARCHITECTURE 結(jié)構(gòu)體名 OF 實體名 IS 說明語句 BEGIN 并行語句; END ARCHITECTURE 結(jié)構(gòu)體名; 結(jié)構(gòu)體中的并行語句主要有:進程語句、并行信號賦值語句、塊語句、元件例化語句、生成語句、并行過程調(diào)用語句等 VHDL并行語句 PROCESS語句格式 PROCESS語句的表達格式如下: [進程標號:] PROCESS[(敏感信號參數(shù)表)][ IS] [進程說明部分] BEGIN 順序描述語句 END PROCESS[進程標號 ]; 進程語句 ( 4)進程是重要的建模工具。進程結(jié)構(gòu)不但為綜合器所支持,而且進程的建模方式將直接影響仿真和綜合結(jié)果。 進程的設計需要注意以下幾方面的問題: ( 1)雖然同一結(jié)構(gòu)體中的進程之間是并行運行的,但同一進程中的邏輯描述語句則是順序運行的,因而在進程中只能設放置順序語句。 ( 2)進程的激活必須由敏感信號表中定義的任一敏感信號的變化來啟動,否則必須有一顯式的 WAIT語句來激活。 ( 3)結(jié)構(gòu)體中多個進程之所以能并行同步運行,一個很重要的原因是進程之間的通信是通過傳遞信號和共享變量值來實現(xiàn)的。 【 例 522】 進程的應用 ENTITY mul IS PORT(a,b,c,selx,sely:IN BIT。 data_out:OUT BIT)。 END mul。 ARCHITECTURE ex OF mul IS SIGNAL temp:BIT。 BEGIN p_a:PROCESS(a,b,selx) BEGIN IF(SELX=39。039。)THEN temp=a。 ELSE temp=b。 END IF。 END PROCESS p_a。 p_b:PROCESS(temp,c,sely) BEGIN IF (sely=39。039。) THEN data_out=temp。 ELSE data_out=c。 END IF。 END PROCESS p_b。 END ex。 作為另一種并行賦值語句,條件信號賦值語句的表達方式如下: 賦值目標 =表達式 1 WHEN 賦值條件 1 ELSE 表達式 2 WHEN賦值條件 2 ELSE ... 表達式 n; 并行信號賦值語句 ( 1) 簡單信號賦值語句 簡單信號賦值語句是 VHDL并行語句結(jié)構(gòu)的最基本的單元,它的語句格式如下: 賦值目標 =表達式; ( 2) 條件信號賦值語句 【 例 524】 條件信號賦值 ENTITY mux IS PORT(a,b,c: IN BIT。 p1,p2:IN BIT。 z: OUT BIT)。 END mux。 ARCHITECTURE behave OF mux IS BEGIN z=a WHEN p1=39。139。 ELSE b WHEN p2=39。139。 ELSE c。 END。 選擇信號賦值語句的語句格式如下: WITH 選擇表達式 SELECT 賦值目標信號 =表達式 1 WHEN 選擇值 1, 表達式 2 WHEN 選擇值 2, ... 表達式 n WHEN 選擇值 n; ( 3) 選擇信號賦值語句 【 例 525】 選擇信號賦值 LIBRARY IEEE。 USE 。 USE 。 ENTITY decoder IS PORT(a,b,c:IN STD_LOGIC。 data1,data2:IN STD_LOGIC。 dataout:OUT STD_LOGIC)。 END decoder。 ARCHITECTURE concunt OF decoder IS SIGNAL instruction: STD_LOGIC_VECTOR(2 DOWNTO 0)。 BEGIN instruction=camp。bamp。a。 WITH instruction SELECT dataout=data1 AND data2 WHEN 000, data1 OR data2 WHEN 001, data1 NAND data2 WHEN 010, data1 NOR data2 WHEN 011, data1 XOR data2 WHEN 100, data1 XNOR data2 WHEN 101, 39。Z39。 WHEN OTHERS。 END concunt。 塊標號: BLOCK[(塊保護表達式)] 說明語句 BEGIN 并行語句 END BLOCK 塊標號; 利用 BLOCK語句可以將結(jié)構(gòu)體中的并行語句劃分多個并列方式 BLOCK,每一個 BLOCK都像一個獨立的設計實體,具有自己的類屬參數(shù)說明和界面端口,以及與外部環(huán)境的銜接描述。 塊語句結(jié)構(gòu)( BLOCK) 【 例 526】 塊的應用 ARCHITECTURE behave OF cpu IS SIGNAL ibus,dbus。tw32。 BEGIN alu:BLOCK SIGNAL qbus。tw32。 BEGIN ALU 行為描述 END BLOCK alu。 reg8:BLOCK SIGNAL zbus。tw32。 BEGIN reg1:BLOCK SIGNAL qbus。tw32。 BEGIN REG行為描述 END BLOCK reg1。 其他 REG行為描述語句 END BLOCK reg8。 END behave。 并行過程調(diào)用語句 [過程標號: ]過程名(關聯(lián)參量名); 【 例 527】 并行過程的調(diào)用 LIBRARY IEEE。 USE 。 USE 。 ENTITY mft IS PORT(a,b,c:IN STD_LOGIC。 q:OUT STD_LOGIC)。 END mft。 ARCHITECTURE behave OF mft IS PROCEDURE max(ina,inb:IN STD_LOGIC。 SIGNAL ouc:OUT STD_LOGIC)IS VARIABLE temp:STD_LOGIC 。 BEGIN IF(inainb) THEN temp:=inb。 ELSE temp:=ina。 END IF。 ouc=temp。 end max。 SIGNAL temp1,temp2:STD_LOGIC。 BEGIN max(a,b,temp1)。 max(temp1,c,temp2)。 q=temp2。 END behave。 元件例化語句由兩部分組成,前一部分是把一個現(xiàn)成的設計實體定義為一個元件,第二部分則是此元件與當前設計實體中的連接說明,它們的完整的語句格式如下: COMPONENT 元件名 IS 元件定義語句 GENERIC (類屬表); PORT(端口名表); END COMPONENT 元件名; 例化名:元件名 PORT MAP( 元件例化語句 [端口名 =]連接端口名, ...); 第一部分語句是元件定義語句,相當于對一個現(xiàn)成的設計實體進行封裝,使其只留出對外的接口界面。元件例化的第二部分語句即為元件例化語句,其中的例化名是必須存在的, PORT MAP是端口映射的意思,其中的端口名是在元件定義語句中的端口名表中已定義好的元件端口的名字,連接端口名則是當前系統(tǒng)與準備接入的元件對應端口相連的通信端口,相當于插座上各插針的引腳名。 元件例化語句 【 例 528】 元件例化語句 ENTITY shifter IS PORT(din,clk:IN BIT。 dout:OUT BIT)。 END shifter。 ARCHITECTURE a OF shifter IS COMPONENT dff PORT(d,clk:IN BIT。 q:OUT BIT)。 END COMPONENT。 SIGNAL d:BIT_VECTOR(0 TO 4)。 BEGIN d(0)=din。 并行信號賦值 U0:dff PORT MAP(d(0),clk,d(1))。 位置關聯(lián)方式 U1:dff PORT MAP(d(1),clk,d(2))。 U2:dff PORT MAP(d=d(2),clk=clk,q=d(3))。 名字關聯(lián)方式 U3:dff PORT MAP(d=d(3),clk=clk,q=d(4))。 dout=d(4)。 END a。 D QclkD QclkD QclkD QclkU 0 U 1 U 2 U 3d 0 d 1 d 2 d 3 d 4 doutdinclk( 1) [標號: ]FOR 循環(huán)變量 IN取值范圍 GENERATE 說明 BEGIN 并行語句 END GENERATE [標號 ]; ( 2) [標號: ] IF 條件 GENERATE 說明 BEGIN 并行語句 END GENERATE [標號 ]; 6 、生成語句 【 例 529】 1位鎖存器 LIBRARY IEEE。 USE 。 ENTITY latch IS PORT(d:IN STD_LOGIC。 ena:IN STD_LOGIC。 q:OUT STD_LOGIC)。 END ENTITY latch。 ARCHITECTURE one OF latch IS SIGNAL sig_save STD_LOGIC。 BEGIN PROCESS(d,ena) BEGIN IF ena=?1? THEN sig_save=d。 END IF。 q=sig_save。 END PROCESS。 END one。 【 例 530】 頂層文件 LIBRARY IEEE。 USE 。 ENTITY SN74373 IS … … END ENTITY SN74373。 ARCHITECTURE two OF SN74373 IS … … BEGIN … … END ARCHITECTURE two ARCHITECTURE one OF SN74373 IS ? ? BEGIN ? ? Gelatch:FOR inum IN 1 to 8 GENERATE Latchx:latch PORT MAP(d(inum),g,sig_mid(inum))。 END GENERATE。 ? ? END ARCHITECTURE one。 【 例 531】 D觸發(fā)器 LIBRARY IEEE。 USE 。 ENTITY dff IS PORT(clk,d:IN STD_LOGIC。 q:OUT STD_LOGIC)。 END d_ff。 ARCHITECTURE behave OF d_ff IS SIGNAL q_in: STD_LOGIC。 BEGIN q=q_in。 PROCESS(clk) BEGIN IF(clk?EVENT AND clk=?1?) THEN q_in=d。 END IF。 END PROCESS。 END behave。 【 例 532】 4位移位寄存器 LIBRARY IEEE。 USE 。 ENTITY shift_reg IS PORT(d1:IN STD_LOGIC。 clk:IN STD_