【正文】
end m2。 d= a or b 。 end m2。 d= a or b 。 End m1。 Architecture m1 of exam1 is Begin c=a and b。 c,d : out std_logic)。 use 。當(dāng)進(jìn)程結(jié)束時(shí),進(jìn)程內(nèi)的輸出信號(hào)值被更新, 進(jìn)程進(jìn)入等待(睡眠)狀態(tài),直到敏感表中的某一信號(hào)發(fā)生變化,進(jìn)程被再次激活。 進(jìn)程語(yǔ)句( process) Process 語(yǔ)句的格式為: [進(jìn)程標(biāo)號(hào) :] Process [(敏感信號(hào)列表 )] [變量聲明 ] Begin 順序語(yǔ)句; End Process [進(jìn)程標(biāo)號(hào) ]。 例題Whenelse語(yǔ)句和 WithselectWhen語(yǔ)句的差別 兩個(gè)語(yǔ)句的關(guān)鍵不同是:對(duì)于條件的要求程度不同,前者 要求較松,后者要求嚴(yán)格。 ?0? when others。 d2。 例:不允許有重疊現(xiàn)象;必須含蓋所有條件 Architecture m2 of and2 is Signal tmp : std_logic_vector(1 down to 0)。 允許有重疊 三 、 選擇式信號(hào)設(shè)置語(yǔ)句: WithSelectWhen With expression Select 賦值目標(biāo) =表達(dá)式 When constant_value1 表達(dá)式 When constant_value2 … 表達(dá)式 When Others。 Architecture m1 of mux is Begin z= a when p1=?1? else b when p2=?1? else c。 p1,p2 : in bit z : out bit)。 Use 。 End m1。 End and2。 Entity and2 is Port(d1,d2 : in std_logic。 我們?cè)e過(guò)一個(gè)二輸入的與門電路的例子: Library ieee。 名稱關(guān)聯(lián) 結(jié)果: h的值為 1010 二 、 條件式信號(hào)設(shè)置語(yǔ)句 : WhenElse 語(yǔ)法格式為: 賦值目標(biāo) = 表達(dá)式 1 When 賦值條件 Else 表達(dá)式 2 When賦值條件 Else … 表達(dá)式 N。 g := “10”。 e := ?0? 。 Variable g : std_logic_vector(1 to 2)。 (a,b,c,d) = s 。 Signal s : std_logic_vector(1 to 4)。 c(3) =?1?; 注: 一位值用單引號(hào),多位值用雙引號(hào) 2. 段賦值 Signal c : std_logic_vector(1 to 4)。 b: = ?0?。 Signal c : std_logic_vector(1 to 4)。 信號(hào) B的第一位為 1,其它位的值為 0。 信號(hào) A的每一位的值都為 0。 B=”1000000”。 如: Signal A,B: std_logic_vector(7 down to 0)。 注: 信號(hào)和變量賦值 一 、 直接賦值語(yǔ)句: = 賦值運(yùn)算符 作用:直接對(duì)目標(biāo)對(duì)象進(jìn)行賦值操作 。 一、并行語(yǔ)句特點(diǎn) ; ; ,沒(méi)有其它的限制條件 二 、 基本的并行語(yǔ)句 ( 1)直接賦值語(yǔ)句: = 賦值運(yùn)算符 ( 2)進(jìn)程( Process)語(yǔ)句 ( 3)條件式信號(hào)設(shè)置語(yǔ)句: WhenElse ( 4)選擇式信號(hào)設(shè)置語(yǔ)句: WithSelectWhen ( 5)塊( Block)語(yǔ)句 ( 6)元件( Component)例化語(yǔ)句 ( 7) ForGenerate語(yǔ)句 并行信號(hào)賦值語(yǔ)句 簡(jiǎn)單信號(hào)賦值語(yǔ)句 條件信號(hào)賦值語(yǔ)句 選擇信號(hào)賦值語(yǔ)句 2 . 賦值語(yǔ)句 賦值語(yǔ)句包括變量賦值語(yǔ)句和信號(hào)賦值語(yǔ)句,前者的賦值是立刻發(fā)生的, 后者的賦值發(fā)生在一個(gè)進(jìn)程結(jié)束的時(shí)刻,并延時(shí)進(jìn)行。 =1=1c bxy執(zhí)行結(jié)果為: x=c xor b, y=c xor b 執(zhí)行結(jié)果為: x=c xor a, y=c xor b =1=1c axy b VHDL 基本語(yǔ)句 并行語(yǔ)句概述 并行信號(hào)賦值語(yǔ)句 進(jìn)程語(yǔ)句( process) 并行語(yǔ)句概述 并行語(yǔ)句一般處于進(jìn)程( PROCESS)的外部。 (立刻) 三、定義區(qū)域 信號(hào):實(shí)體、結(jié)構(gòu)體、程序包 變量:進(jìn)程、子程序 常數(shù):實(shí)體、結(jié)構(gòu)體、程序包、塊、進(jìn)程、子程序 四、適用范圍 信號(hào):實(shí)體、結(jié)構(gòu)體、程序包 變量:定義了變量的進(jìn)程、子程序的順序語(yǔ)句中 常數(shù):視其定義的位置而定 若常數(shù)定義在實(shí)體中,適用范圍是實(shí)體所對(duì)應(yīng)的 有結(jié)構(gòu)體。 Constant A: integer :=6 。 注意對(duì)象定義的所在位置及適用區(qū)域的對(duì)應(yīng)關(guān)系 234 信號(hào)、變量、 常數(shù)對(duì)比 一、定義 Signal A: std_logic。 (:=) 常量 用于保存靜態(tài)的數(shù)據(jù) (:=)。 在描述中, 信號(hào) 的賦值不會(huì)立即生效,而是要等待一個(gè) delta延 遲后才會(huì)變化,否則該 信號(hào) 的值在 delta延遲之前仍是原來(lái)的值。 信號(hào) 可以是多個(gè)進(jìn)程的全局 信號(hào);而 變量 只在定義它的進(jìn)程中可見(jiàn)。 信號(hào) 除當(dāng)前值外有許多信息(歷史信息,波形值);而 變量 只 有當(dāng)前值。 變量 用于進(jìn)程語(yǔ)句和子程序中中間的數(shù)據(jù)存儲(chǔ)。 前兩例 6分頻器仿真波形圖 time為變量: time為信號(hào): 可看出兩種方法是等價(jià)的。 其中 time為信號(hào) 。 end behav。 end if。039。 time=0。 if time=5 then q=39。 architecture behav of frequencies is signal time:integer range 0 to 5。 q:out std_logic)。 use 。 由于變量賦值是馬上生效的 , 因此從例子中可以看出time置零是在 time為 6時(shí)發(fā)生的 。 此例為 6分頻器 。 end process。 end if。 else q=39。139。 begin if rising_edge(clk) then time:=time+1。 end frequencies。 entity frequencies is port(clk:in std_logic。 library ieee。 格式 : SIGNAL 信號(hào)名 :數(shù)據(jù)類型 :=表達(dá)式 注意: “:= ” 表示對(duì)信號(hào)的賦初值,一般 不產(chǎn)生延時(shí) 。 注意: 變量的賦值是立刻生效的 。 VHDL 數(shù)據(jù)對(duì)象 變量是定義在 進(jìn)程 或 子程序 中的變化量。 數(shù)據(jù)對(duì)象 常量 變量 信號(hào) 要掌握好這三種數(shù)據(jù)對(duì)象的區(qū)別及其應(yīng)用 VHDL 數(shù)據(jù)對(duì)象 常量是指定義在設(shè)計(jì)描述中 不變化 的值,是一個(gè) 全局量 。 1 0 1 1 0 0 0 1A:1= 等于 任何數(shù)據(jù)類型 /= 不等于 任何數(shù)據(jù)類型 小于 枚舉與整數(shù)類型,及對(duì)應(yīng)的一維數(shù)組 大于 枚舉與整數(shù)類型,及對(duì)應(yīng)的一維數(shù)組 = 小于等于 枚舉與整數(shù)類型,及對(duì)應(yīng)的一維數(shù)組 關(guān)系操作符 = 大于等于 枚舉與整數(shù)類型,及對(duì)應(yīng)的一維數(shù)組 AND 與 BIT , BO O L E A N , S T D _ L O G IC O R 或 BIT , BO O L E A N , S T D _ L O G IC NAND 與非 BIT , BO O L E A N , S T D _ L O G IC NOR 或非 BIT , BO O L E A N , S T D _ L O G IC X O R 異或 BIT , BO O L E A N , S T D _ L O G IC X N O R 異或非 BIT , BO O L E A N , S T D _ L O G IC 邏輯操作符 NOT 非 BIT , BO O L E A N , S T D _ L O G IC 表 VHDL操作符列表 運(yùn)算符 VHDL中的運(yùn)算符主要分為 算術(shù)運(yùn)算符 、 邏輯運(yùn)算符 、 關(guān)系運(yùn)算符 和 其他運(yùn)算符 等四類。 1 0 1 1 0 0 0 1A:A SLL 1 。 B2 B1 B0b:C1 C0c:b ? c B2 B1 B0b: C1 C0 :c? B2 B1 B0 C1 C0a = b ? c A4 A3 A2 A1 A0a:a: B2 B1 B0 C1 C0Variable A : std_logic_vector(6 downto 0)。 Signal b : std_logic_vector(2 downto 0)。(整數(shù),枚舉型) 三、算術(shù)運(yùn)算符 求和運(yùn)算符 、求積運(yùn)算符、符號(hào)運(yùn)算符、混合運(yùn)算符、 移位運(yùn)算符 VHDL中的求和運(yùn)算符包括加減運(yùn)算和并置運(yùn)算, 操作數(shù)的數(shù)據(jù)類型 為整型。 。 以上兩程序最終所實(shí)現(xiàn)的硬件電路見(jiàn)課本 P78 END my1 。 ARCHITECTURE a1 of my1 BEGIN m=(a = b) 。 END a1。 END my1 。 。abcde 關(guān)系運(yùn)算符 =(等于), /=(不等于), (小于), (大于), =(小于等于,和信號(hào)的賦值符號(hào)相同), =(大于等于)。 END AA1 。 Signal tmp : std_logic。 END liti 。 PORT(a,b,c,d: IN STD_LOGIC。 Library IEEE USE 。 h=(e nor f) nor g。 d=a xnor b xnor c。 d=a and b and c。 2. 表達(dá)式中有多個(gè)運(yùn)算符時(shí)一般要加括號(hào) 表達(dá)式中有多個(gè)運(yùn)算符時(shí)一般要加括號(hào),但 and、 or、 xnor除外 例 Signal a,b,c,d: std_logic_vector(3 downto 0)。 y=a and b。 A BAN D OR NA ND NO R XO R XN OR輸入輸出 運(yùn)算0 00 11 01 1Y1 Y2 Y3 Y4 Y5 Y6000101111110100001101001二 . 用法 1. 操作數(shù)的數(shù)據(jù)類型必須符合操作符的要求 能進(jìn)行邏輯運(yùn)算的數(shù)據(jù)類型: bit、 bit_vector、 boolean std_logic、 std_logic_vector 例 Signal a,b,y: std_logic。 a1= 0111 3. 其它 略 VHDL操作符:邏輯、算術(shù)、符號(hào)、關(guān)系操作符。 a1= 0110 a1 SLL 2 。 a1 := “1011”。 Signal c : std_logic_vector(1 to 0)。 例 2: Signal a : std_logic_vector(4 to 0)。 a := b + c 。 程序包 函數(shù)名 功能 STD_LOGIC_1164 TO_STDLOGICVECTOR(A) 由 BIT_VECTOR轉(zhuǎn)換為STD_LOGIC_VECTOR TO_BITVECTOR(A) 由 STD_LOGIC_VECTOR轉(zhuǎn)換為BIT_VECTOR TO_STDLOGIC(A)