【正文】
0 0 1 0 0 0 例: 8線 3線優(yōu)先編碼器的設(shè)計。 LIBRARY IEEE。 USE 。 ENTITY coder IS PORT( a:IN STD_LOGIC_VECTOR(7 DOWNTO 0)。 y:OUT STD_LOGIC_VECTOR(2 DOWNTO 0))。 END coder。 ARCHITECTURE example6 OF coder IS BEGIN PROCESS(a) BEGIN IF (a(7)=?0?) THEN y=“111”。 ELSEIF (a(7)=?0?) THEN y=“111”。 ELSEIF (a(6)=?0?) THEN y=“110”。 ELSEIF (a(5)=?0?) THEN y=“101”。 ELSEIF (a(4)=?0?) THEN y=“100”。 ELSEIF (a(3)=?0?) THEN y=“011”。 ELSEIF (a(2)=?0?) THEN y=“010”。 ELSEIF (a(1)=?0?) THEN y=“001”。 ELSEIF (a(0)=?0?) THEN y=“000”。 ELSE y=“000”。 END IF。 END PROCESS。 END example6。 用 CASE語句描述 4選 1數(shù)據(jù)選擇器 LIBRARY IEEE。 USE 。 ENTITY mux41 IS PORT( s1,s2:IN STD_LOGIC。 a,b,c,d:IN STD_LOGIC。 z:OUT STD_LOGIC)。 END mux41。 ARCHITECTURE example7 OF mux41 IS SIGNAL s: STD_LOGIC_VECTOR(1 DOWNTO 0)。 BEGIN s=s1amp。s2。 將 s1和 s2合并為 s PROCESS(s1,s2,a,b,c,d) BEGIN CASE s IS WHEN”00”=z=a。 WHEN”01”=z=b。 WHEN”10”=z=c。 WHEN”11”=z=d。 條件句中的” =”不是操作符,起到“ THEN”的作用。 WHEN OTHERS=z=?X?。 當(dāng) s的值不是選擇值時, z做未知處理 END CASE。 END PROCESS。 END example7。 s1 s2 z 0 0 0 1 1 0 1 1 a b c d LOOP是循環(huán)語句,可以使一組順序語句重復(fù)執(zhí)行,執(zhí)行的次數(shù)由設(shè)定的循環(huán)參數(shù)確定。 LOOP語句有 3種格式,每種格式都可以用“標(biāo)號”來給語句定位,但也可以不使用,用方括號將“標(biāo)號”括起來,表示它為任選項。 ( 1) FOR_LOOP語句 例: 8位奇偶校驗器的描述 LIBRARY IEEE。 USE 。 ENTITY p_check IS PORT( a:IN STD_LOGIC_VECTOR(7 DOWNTO 0)。 y:OUT STD_LOGIC)。 END p_check 。 ARCHITECTURE example8 OF p_check IS BEGIN PROCESS(a) VARIABLE temp:STD_LOGIC。 BEGIN temp:=?0?。 FOR n IN 0 TO 7 LOOP temp:=temp XOR a(n)。 END LOOP。 y=temp。 END PROCESS。 END example8。 (2)WHILE_LOOP語句 LIBRARY IEEE。 USE 。 ENTITY p_check_1 IS PORT( a:IN STD_LOGIC_VECTOR(7 DOWNTO 0)。 y:OUT STD_LOGIC)。 END p_check_1 。 ARCHITECTURE example8 OF p_check IS BEGIN PROCESS(a) VARIABLE temp:STD_LOGIC。 VARIABLE n:INTEGER。 BEGIN temp:=?0?。 n:=0。 WHILE n8 LOOP temp:=temp XOR a(n)。 n:=n+1。 END LOOP。 y=temp。 END PROCESS。 END example8。 ? 1.時鐘信號的 VHDL描述 ? 時鐘信號的描述如圖 ,時鐘上升沿和下降沿的到來表示發(fā)生了一個事件,用 cp?EVENT表示,時鐘的邊沿變化可以用條件語句描述。例如: ? 時鐘上升沿的到來可以寫為“ IF CLK39。EVENT AND CLK=39。139。THEN”; ? 時鐘下降沿的到來可以寫為“ IF CLK39。EVENT AND CLK=39。039。THEN”。 ? 也可以寫做: ? 時鐘上升沿“ IF CLK=?1?AND CLK?LAST_VALUE=?0? AND CLK?EVENT”; ? 時鐘下降沿“ IF CLK=?0?AND CLK?LAST_VALUE=?1? AND CLK?EVENT”。 ? 圖 時鐘脈沖的 VHDL描述 ? 2.時序邏輯電路的 VHDL描述 ? 例 帶有異步復(fù)位、置位端的上升沿觸發(fā)的 D觸發(fā)器。 ? LIBRARY IEEE。 ? USE 。 ? ENTITY DFF IS ? PORT( CLK,D,SET,RESET: IN BIT。 ? Q: OUT BIT)。 ? END DFF。 ? ARCHITECTURE ONE OF DFF IS ? BEGIN ? PROCESS(CLK,SET,RESET) ? BEGIN ? IF SET=39。039。 THEN Q=39。139。 ? ELSIF RESET=39。039。 THEN Q=39。039。 ? ELSIF CLK39。EVENT AND CLK=39。139。THEN ? Q=D。 ? END IF。 ? END PROCESS。 ? END ARCHITECTURE ONE。 ? 例 4位雙向移位寄存器的 VHDL程序,具有 4種工作方式:數(shù)據(jù)保持、左移、右移和并行輸入。 ? LIBRARY IEEE。 ? USE 。 ? ENTITY reg4 IS ? PORT( clk: IN BIT。 ? din:IN BIT_VECTOR(3 DOWNTO 0)。 并行輸入數(shù)據(jù) ? sin: IN BIT。 串行輸入數(shù)據(jù) ? mode:IN INTEGER RANGE 0 TO 3。 ? 工作模式為 0保持, 1右移, 2左移, 3并入 ? Q: OUT BIT_VECTOR(3 DOWNTO 0))。 ? 寄存器并行輸出 ? END reg4。 ? ARCHITECTURE ONE OF reg4 IS ? SIGNAL FF:BIT_VECTOR(3 DOWNTO 0)。 ? BEGIN ? PROCESS(CLK) ? BEGIN ? IF clk39。EVENT AND clk=39。139。THEN ? CASE mode IS ? WHEN 0=FF=FF。 保持?jǐn)?shù)據(jù) ? WHEN 1=FF(2 DOWNTO 0)=FF(3 DOWNTO 1)。 右移 ? FF(3)=sin。 ? WHEN 2=FF(3 DOWNTO 1)=FF(2 DOWNTO 0)。 左移 ? FF(0)=sin。 ? WHEN OTHERS=FF=din。 并行輸入 ? END CASE。 ? END IF。 ? END PROCESS。 ? Q=FF。 寄存器輸出更新 ? END ARCHITECTURE ONE。 互動搶答 VHDL程序應(yīng)包括三個基本組成部分,哪三個?說出名稱和意義。 19頁 COMPONENT h_adder 這個語句是什么含意?作用? 14頁 實體 (ENTITY)是什么?由哪兩部分組成? 22頁 實體聲明包含哪兩部分?哪一個在前面? 23頁 結(jié)構(gòu)體由幾部分組成?功能是什么?在同一個實體中可以包含多個結(jié)構(gòu)體嗎? 2 29頁 互動搶答 打開 bpac1程序包的語句是什么?放在程序的什么位置? 變量一個全局量,正確嗎?能夠在哪里聲明和使用? 48頁 信號描述的是什么?類似于 Verilog HDL語言中哪個量?信號與變量區(qū)別是什么? 49頁 BIT數(shù)據(jù)類型和 BIT_VECTOR區(qū)別是什么? 50頁 算術(shù)操作符、關(guān)系操作符和邏輯操作符對數(shù)據(jù)類型的要求有什么不同? VHDL的順序語句 只能出現(xiàn)在什么 中?順序語句可以描述數(shù)字邏輯系統(tǒng)中 邏輯電路? VHDL的順序語句有哪六類? 56頁 VHDL設(shè)計流程