使用VHDL設計-多工器/解多工器 通訊一甲 B09622048 楊穎穆
目錄 目的 設計原理 多工器&解多工器 真值表 程式 實驗結果 資料來源
目的 使用VHDL設計一個四組4Bit輸入對一組4Bit輸出之多工器。 使用VHDL設計一個一組4Bit輸入對四組4Bit輸出之解多工器。 a0 A a1 a2 a3 op1 op op2 op3 op4 sel a0 A a1 a2 a3 ip1 ip ip2 ip3 ip4 sel
設計原理 多工器又可以叫做”選擇器” 。 而這次程式主要可以使用if…then和case的方式來寫,而我用的是if…then的方式,在程式中它會依照輸入的條件不同,而將訊號選擇到不同的輸出位置,產生我們想得到的結果。
多工器&解多工器 多 多 少 少 op0 I0 op Ip I1 op1 Sel(選擇) Sel(選擇) 2x1MUX 1x2DEMUX 當sel=‘0’ =>op0=Ip 當sel=‘0’ =>op=I0 ※No-of-sel=[log2ni]=[log22]=1,sel=1
真值表 --多工器 sel Op 00 01 10 11 a(a0,a1,a2,a3) b(b0,b1,b2,b3) c(c0,c1,c2,c3) 11 d(d0,d1,d2,d3)
真值表 --解多工器 sel Op1 op2 op3 op4 00 01 10 11 ip 0 0 0 0 ip 0 0 0 0 ip 0
程式 --多工器 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity MUX4_1 is --ic內部要做的電路名稱 port( --接腳 a,b,c,d : in std_logic_vector(3 downto 0); --a,b,c,d為輸入腳位,且內部各有四個位元數 op : out std_logic_vector(3 downto 0); --op為輸出腳位,內部有四個位元數 sel : in std_logic_vector(1 downto 0) --sel為輸入腳位,內部有兩個位元數 ); end;
architecture Behav of MUX4_1 is --電路內部結構 begin process(a,b,c,d,sel) --處理影響內部的輸入訊號 a,b,c,d,sel if sel="00" then op<=a; --假如輸入sel為"00"時,op會搬入 a elsif sel="01" then op<=b; --假如輸入sel為"01",op會搬入b elsif sel="10" then op<=c; --假如輸入sel為"10",op會搬入c else op<=d; --假如輸入sel為"11",op會搬入d end if; --結束if程式 end process; --結束process程式 end Behav; --程式結束
程式 --解多工器 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity DEMUX1_4 is --ic電路內部要做的電路名稱 port( --接腳 ip : in std_logic_vector(3 downto 0); --ip為輸入腳位,且內部有四個位元數 op1,op2,op3,op4: out std_logic_vector(3 downto 0); --op1,op2,op3,op4為輸出腳位,內部各有四個位元數 sel : in std_logic_vector(1 downto 0) --sel為輸入腳位,內部有兩個位元數 ); end;
architecture Behav of DEMUX1_4 is --電路內部結構 begin process(ip,sel) --處理影響的輸入訊號 ip,sel if sel="00" then op1<= ip; else op1<="0000"; end if; --假如sel輸入為"00",op1會搬入ip,另外op1就會搬入"0000",結束動作 if sel="01" then op2<= ip; else op2<="0000"; end if; --假如sel輸入為"01",op2會搬入ip,另外op2就會搬入"0000",結束動作 if sel="10" then op3<= ip; else op3<="0000"; end if; --假如sel輸入為"10",op3會搬入ip,另外op3就會搬入"0000",結束動作 if sel="11" then op4<= ip; else op4<="0000"; end if; --假如sel輸入為"11",op4會搬入ip,另外op4就會搬入"0000",結束動作 end process; --結束process程式 end Behav; --程式結束
實驗結果(1) --多工器 當sel為“00”時,a0為‘1’時,此時輸出的op0就為‘1’燈亮,若a0,a1,a2皆為‘1’時,輸出的op0,op1,op2皆是‘1’就會三個燈都亮起來。
實驗結果(2) --多工器 當sel為“00”時, a0,a1,a2,a3皆為‘1’時,輸出的op0,op1,op2,op3皆是‘1’就會四個燈都亮起來。 當sel為“01”時, b0,b1,b2,b3皆為‘1’時,輸出的op0,op1,op2,op3皆是‘1’就會四個燈都亮起來。
實驗結果(3) --多工器 當sel為“10”時, c0,c1,c2,c3皆為‘1’時,輸出的op0,op1,op2,op3皆是‘1’就會四個燈都亮起來。 當sel為“11”時, d0,d1,d2,d3皆為‘1’時,輸出的op0,op1,op2,op3皆是‘1’就會四個燈都亮起來。
實驗結果(4) --解多工器 當sel為“00”時, ip0,ip1,ip2,ip3皆為‘1’時,輸出的op10,op20,op30,op40皆是‘1’就會四個燈都亮起來。 當sel為“01”時, ip0,ip1,ip2,ip3皆為‘1’時,輸出的op11,op21,op31,op41皆是‘1’就會四個燈都亮起來。
實驗結果(5) --解多工器 當sel為“10”時, ip0,ip1,ip2,ip3皆為‘1’時,輸出的op13,op23,op33,op43皆是‘1’就會四個燈都亮起來。 當sel為“11”時, ip0,ip1,ip2,ip3皆為‘1’時,輸出的op14,op24,op34,op44皆是‘1’就會四個燈都亮起來。
資料來源 主要的內容都來至王志湖老師上課所教授的內容所做成的筆記及“數位邏輯”這本書。
END