【文章內(nèi)容簡介】
1,tmp2: BIT。 BEGIN muxB: BLOCK BEGIN tmp1=d1 AND sel 。 tmp2=d0 AND (NOT sel )。 F=tmp1 OR tmp2。 END BLOCK muxB。 END rtl。 總目錄 退出 37 塊結(jié)構(gòu) ARCHITECTURE BEGIN black1: BLOCK BEGIN 并發(fā)語句; : END BLOCK black1; black2: BLOCK BEGIN 并發(fā)語句; : END BLOCK black2; black3: BLOCK BEGIN 并發(fā)語句; : END BLOCK black3; 總目錄 退出 38 進(jìn)程( PROCESS)語句結(jié)構(gòu)描述 2 進(jìn)程( PROCESS)語句的結(jié)構(gòu) [進(jìn)程名 ]: PROCESS(信號 1,信號 2, … ) 敏感量 BEGIN 順序語句; : END PROCESS [進(jìn)程名 ]; ? 進(jìn)程中語句的順序執(zhí)行: ? 進(jìn)程內(nèi)的順序性; ? 進(jìn)程間的并發(fā)性 ? 進(jìn)程的啟動和執(zhí)行:敏感量變化啟動進(jìn)程執(zhí)行 總目錄 退出 39 進(jìn)程間的并發(fā)性 process1 PROCESS(信號 1,信號 2, … ) BEGIN 順序語句; : END PROCESS process1 ; process2 PROCESS(信號 6,信號 7, … ) BEGIN 順序語句; : END PROCESS process2 ; F= a OR b。 總目錄 退出 40 進(jìn)程中定義變量 ARCHITECTURE rtl OF shff1 IS BEGIN PROCESS(clk) VARIABLE z:STD_LOGIC_VECTOR (3 DOWNTO 0)。 BEGIN IF (clk?EVENT AND clk=1)THEN z(0):=a。 z(1):= z(0)。 z(2):= z(1)。 z(3):= z(2)。 q= z(3)。 END IF。 END PROCESS。 END rtl。 總目錄 退出 41 構(gòu)造體中定義信號 ARCHITECTURE rtl OF shff IS SIGNAL z:STD_LOGIC_VECTOR(3 DOWNTO 0)。 BEGIN PROCESS(clk) BEGIN IF(clk39。EVENT AND clk=39。139。)THEN z(0)=a。 z(1)= z(0)。 z(2)= z(1)。 z(3)= z(2)。 q= z(3)。 END IF。 END PROCESS。 END rtl。 總目錄 退出 42 進(jìn)程舉例 ARCHITECTURE rtl OF shff IS SIGNAL z:STD_LOGIC_VECTOR(3 DOWNTO 0)。 BEGIN PROCESS(clk) BEGIN IF(clk39。EVENT AND clk=39。139。)THEN z(0)=a。 z(1)= z(0)。 z(2)= z(1)。 z(3)= z(2)。 q= z(3)。 END IF。 END PROCESS。 END rtl。 ARCHITECTURE rtl OF shff1 IS BEGIN PROCESS(clk) VARIABLE z:STD_LOGIC_VECTOR (3 DOWNTO 0)。 BEGIN IF (clk?EVENT AND clk=1)THEN z(0):=a。 z(1):= z(0)。 z(2):= z(1)。 z(3):= z(2)。 q= z(3)。 END IF。 END PROCESS。 END rtl。 總目錄 退出 43 D觸發(fā)器的設(shè)計(jì) ENTITY dff1 IS PORT (clk ,d ,reset : IN STD_LOGIC。 q : out STD_LOGIC)。 END dff1。 ARCHITECTURE rtl OF dff1 IS BEGIN PROCESS (clk, reset) BEGIN IF(reset=39。039。) THEN q=39。039。 ELSIF (clk39。EVENT AND clk=39。139。)THEN q= d 。 END IF。 END PROCESS。 END rtl。 總目錄 退出 44 序列信號檢測器的設(shè)計(jì) 用 T觸發(fā)器構(gòu)成序列信號檢測器 總目錄 退出 45 ENTITY tff2 IS PORT (clk, x , reset : IN STD_LOGIC。 q , F : OUT STD_LOGIC )。 END tff2。 ARCHITECTURE rtl OF tff2 IS BEGIN PROCESS (clk, reset) BEGIN IF(reset=39。039。) THEN q=39。039。 ELSIF (clk39。EVENT AND clk=39。139。)THEN q= x xor q 。 END IF。 F=q and x。 END rtl。 總目錄 退出 46 小結(jié) VHDL 語言的基本結(jié)構(gòu) 庫說明+包集合+實(shí)體+構(gòu)造體 構(gòu)造體中的子結(jié)構(gòu) BLOCK 塊 PROCESS 進(jìn)程 進(jìn)程的定義及進(jìn)程的執(zhí)行 進(jìn)程間并發(fā) 進(jìn)程內(nèi)順序執(zhí)行 總目錄 退出 47 作業(yè) 用 VHDL語言設(shè)計(jì)一個一位全加器。 電路如圖所示,用 VHDL語言描述該電路。 總目錄 退出 48 信號 (SIGNAL )、 變量 (VARIABLE )、 常數(shù) ( CONSTANT) 在 VHDL語言中信號、變量、常數(shù)都要指定數(shù)據(jù)類型。 VHDL語言定義數(shù)據(jù)類型比較嚴(yán)格,不同數(shù)據(jù)類型長度不同,也不能互相代入。數(shù)據(jù)類型可以自定義,使用相對靈活。 ? 標(biāo)準(zhǔn)的數(shù)據(jù)類型 ? 用戶定義的數(shù)據(jù)類型 總目錄 退出 49 一、標(biāo)準(zhǔn)數(shù)據(jù)類型(自己看書) 1:整數(shù) 2:實(shí)數(shù) 3:位 4:位矢量 5:布爾量 6:字符 7:字符串 8:時(shí)間 9:錯誤等級 10:大于等于零的整數(shù) 總目錄 退出 50 二:用戶定義的數(shù)據(jù)類型 1:格式 TYPE 數(shù)據(jù)類型名 IS 數(shù)據(jù)類型定義 2:定義種類 枚舉類型 整數(shù) 實(shí)數(shù) 數(shù)組 存取 文件 記錄 時(shí)間 總目錄 退出 51 三:數(shù)據(jù)子類型定義 1:格式 SUBTYPE 子類型名 IS 數(shù)據(jù)類型名 約束條件; 2:例子 SUBTYPE digit IS INTEGER 0 TO 9。 SUBTYPE iobus IS STD_LOGIC_VECTOR(7 DOWNTO 0)。 總目錄 退出 52 SINGAL a:STD_LOGIC_VECTOR(3 DOWNTO 0)。 “1010”為 a信號上的值,則 a(3)=?1?。a(2)=?0?。a(1)=?1?。a(0)=?0? SINGAL b:STD_LOGIC_VECTOR(0 TO 3)。 “1101”為 b信號上的值,則 b(3)=?1?。b(2)=?0?。b(1)=?1?。b(0)=?1? 總目錄 退出 53 ENTITY count6 IS PORT(reset,clk:IN STD_LOGIC。 q:OUT STD_LOGIC_VECTOR(2 DOWNTO 0))。 END count6。 ARCHITECTURE rtl OF count6 IS BEGIN PROCESS(clk) VARIABLE q6:INTEGER。 BEGIN IF(reset=39。039。)THEN q6:=0。 ELSIF(clk39。EVENT AND clk=39。139。)THEN IF(q6=5)THEN q6:=0。 ELSE q6:=q6+1。 END IF。 END IF。 q=CONV_STD_LOGIC_VECTOR(q6,3)。 END PROCESS。 END rtl。 總目錄 退出 54 VHDL語言中的運(yùn)算符號 VHDL中的運(yùn)算操作符有: 邏輯運(yùn)算 :與、或、非、與非、或非、異或 關(guān)系運(yùn)算=、 /=、 、 、 =、 = 算術(shù)運(yùn)算 +、-、 *、 /、 MOD、 RME、 **、 ASB、+、- 并置運(yùn)算 amp。 總目錄 退出 55 例: SINGAL a