Đăng ký Đăng nhập

Tài liệu Documents.tips_bai tap vhdl

.DOCX
20
197
52

Mô tả:

Vhdl
Các bài tập VHDL Hiệutú_HY ^_^ Bài 1: mạch so sánh 4 bit: +mô tả: -mạch gồm có 2 đầu vào là a,b và 3 đầu ra là y1,y2,y3. với mỗi đầu vào chứa 4bit. mạch sẽ thực hiện so sánh giá trị của 2 đầu vào a và b và sẽ hiện thì ra tại các đầu ra y. đầu ra y hiện thị giá trị logic 1 và logic 0. +chương trình: library IEEE; use IEEE.STD_LOGIC_1164.ALL; Entity sosanh is Port (a,b: in std_logic_vector (3 downto 0); Y1: out std_logic; Y2:out std_logic; Y3: out std_logic); End sosanh; Architecture Behavioral of sosanh is Begin Process(a,b) Begin If (a>b) then y1<=’1’; Elsif (y1=’0’); End if; If (a Dout <= "1111110"; --0 when "0001" => Dout <= "0110000"; --1 when "0010" => Dout <= "1101101"; --2 when "0011" => Dout <= "1111001"; --3 when "0100" => Dout <= "0111011"; --4 when "0101" => Dout <= "1011011"; --5 when "0110" => Dout <= "1011111"; --6 when "0111" => Dout <= "1110000"; --7 when "1000" => Dout <= "1111111"; --8 when "1001" => Dout <= "1111011"; --9 when others => Dout <= null; End case; End if; End process; End Behavioral; số 0 1 2 3 4 5 6 7 8 9 10->15 Led 7 1111110 0110000 1101101 1111001 0111011 1011011 1011111 1110000 1111111 1111011 0000000 Bài 6: Mạch mã hoá 8:3 sử dụng case: +mô tả hoạt động: -mạch gồm có đầu vào input chứa 8 bit và đầu ra output chứa 3 bit. Khi ta thay đổi giá trị tại đầu vào của mạch thì mạch sẽ mã hoá cho ta các ra giá trị ra tương ứng tại đầu ra. +chương trình: library IEEE; use IEEE.STD_LOGIC_1164.ALL; Entity mahoa_83 is Port(input:in std_logic_vector(7 downto 0); Output : out std_logic_vector(2 downto 0)); End mahoa_83; Architecture Behavioral of mahoa_83 is Begin Process(input) Begin Case input is When “00000001” => output<=”000”; When “00000010” => output<=”001”; When “00000100” => output<=”010”; When “00001000” => output<=”011”; When “00010000” => output<=”100”; When “00100000” => output<=”101”; When “01000000” => output<=”110”; When “10000000” => output<=”111”; When others => output<=null; End case; End process; End behavioral; A 7 0 0 0 0 0 0 0 1 A 6 0 0 0 0 0 0 1 0 A 5 0 0 0 0 0 1 0 0 A 4 0 0 0 0 1 0 0 0 A 3 0 0 0 1 0 0 0 0 A 2 0 0 1 0 0 0 0 0 A 1 0 1 0 0 0 0 0 0 A 0 1 0 0 0 0 0 0 0 Y 2 0 0 0 0 1 1 1 1 Y 1 0 0 1 1 0 0 1 1 Y 0 0 1 0 1 0 1 0 1 Bài 7: Bộ ghép kênh 8:1: +mô tả hoạt động: bộ ghép kênh 8 lối vào 1 lối ra gồm có 8 lối vào từ x0 đến x7,với mỗi lối vào là 8 bít x0(7:0) đến x7(7:0),1 lối ra y(7:0). S(2:0) là các đầu vào điều khiển, để thay đổi lần lượt từ x0(7:0) đến x7(7:0)nphải có đầu vào điều khiển. Vậy đối với mạch ghép kênh 8 lối vào 1 lối ra cần đầu vào điều khiển là s. + các Chương trình: 1.sử dụng if: library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity Mux_81 is Port (s : in std_logic_vector(2 downto 0); X0,x1,x2,x3.x4.x5,x6,x7: in std_logic_vector (7 downto 0); y : out std_logic_vector (7 downto 0)); end Mux_81; architecture Behavioral of Mux_81 is Begin Process(s) If (s=”000”) then y<= x0; Elsif (s=”001”) then y<=x1; Elsif (s=”010”) then y<=x2; Elsif (s=”011”) then y<=x3; Elsif (s=”100”) then y<=x4; Elsif (s=”101”) then y<=x5; Elsif (s=”110”) then y<=x6; Else y<=x7; End if; End process; End Behavioral; bảng chân lý: s 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 y X0 X1 X2 X3 X4 X5 X6 X7 2. sử dụng case library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity Mux_81 is Port (s : in std_logic_vector(2 downto 0); X0,x1,x2,x3.x4.x5,x6,x7: in std_logic_vector (7 downto 0); y : out std_logic_vector (7 downto 0)); end Mux_81; architecture Behavioral of Mux_81 is Begin Process(s) Case input is When “000” => y<=x0; When “001” => y<=x1; When “010” => y<=x2; When “011” => y<=x3; When “100” => y<=x4; When “101” => y<=x5; When “110” => y<=x6; When “111” => y<=x7; End case; End process; End behavioral; Bài 8: thiết kế mạch mã hoá 4 đường sang 2 đường với ngõ vào tích hợp ở mức cao, sử dụng phát biểu case. +mô tả: -mạch gồm có 4 đầu vào từ I0 đến I3 và có 2 đầu ra là Q0 & Q1. với mỗi giá tại đầu vào thì mạch sẽ mã hoá cho ta 1 giá trị tại đầu ra của mạch. +chương trình: library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity mahoa_42 is Port (I : in std_logic_vector(3 downto 0); Q : out std_logic_vector (1 downto 0)); end mahoa_42; architecture Behavioral of mahoa_42 is Begin Process(I) Begin Case I is When “0001” => Q<=”00”; When “0010” => Q<=”01”; When “0100” => Q<=”10”; When “1000” => Q<=”11”; When others => null; End case; End process; End behavioral; bảng chân lý I3 0 0 0 1 Ngõ vào I2 I1 I0 0 0 1 0 1 0 1 0 0 0 0 0 Ngõ ra Q1 Q0 0 0 0 1 1 0 1 1 Bài 9: Mạch mã hoá 8:3 +mô tả hoạt động: Mạch mã hoá dùng để biến đổi dữ liệu rời rạc thành dạng nhị phân. Mạch mã hoá có 2n hoặc ít hơn ngõ vào sẽ mã hoá dữ liệu ngõ vào để cung cấp n ngõ ra được mã hoá. Cần giẩ định chỉ có 1 ngõ vào tích cực (‘1’) ở 1 thời điểm cho trước, nếu ko ngõ ra sẽ ko có giá trị xác định nào & mạch trở nên vô nghĩa. +Các chương trình: 1.sử dụng if: library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity mahoa_83 is Port (A : in std_logic_vector(7 downto 0); y : out std_logic_vector (2 downto 0)); end mahoa_83; architecture Behavioral of mahoa_83 is Begin Process(A) Begin If (A=”00000001”) then y<=”000”; elsIf (A=”00000010”) then y<=”001”; elsIf (A=”00000100”) then y<=”010”; elsIf (A=”00001000”) then y<=”011”; elsIf (A=”00010000”) then y<=”100”; elsIf (A=”00100000”) then y<=”101”; elsIf (A=”01000000”) then y<=”110”; elsIf (A=”10000000”) then y<=”111”; else y<=”xxx”; End if; End process; End behavioral; 2.sử dụng phát biểu case: library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity mahoa_83 is Port (A : in std_logic_vector(7 downto 0); y : out std_logic_vector (2 downto 0)); A A AA A AA A Y Y Y 7 6 5 4 3 2 1 0 2 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 1 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 1 1 1 end mahoa_83; architecture Behavioral of mahoa_83 is Begin Case A is When “00000001” => y<=”000”; When “00000010” => y<=”001”; When “00000100” => y<=”010”; When “00001000” => y<=”011”; When “00010000” => y<=”100”; When “00100000” => y<=”101”; When “01000000” => y<=”110”; When “10000000” => y<=”111”; When others =>y<=null; End case; End process; End behavioral; Bài 10: Mạch mã hoá ưu tiên: +Mô tả hoạt động: nếu có 2 hay nhiều ngõ vào ở mức logic tích cực (‘1’),ngõ vào có mức ưu tiên cao nhất sẽ được ưu tiên hơn và giá trị mã hoá cụ thể của ngõ vào này sẽ xuất hiện ở các ngõ ra. + Các chương trình: 1.sử dụng phát biểu if: library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity 83_uutien is A A A A A A A A Y Y Y valid Port (A : in std_logic_vector(7 downto 0); 7 6 5 4 3 2 1 0 2 1 0 y : out std_logic_vector (2 downto 0)); 0 0 0 0 0 0 0 1 0 0 0 1 end 83_uutien; 0 0 0 0 0 0 1 X 0 0 1 1 architecture logic of 83_uutien is 0 0 0 0 0 1 X X 0 1 0 1 Begin 0 0 0 0 1 XX X 0 1 1 1 Process(A) 0 0 0 1 X XX X 1 0 0 1 Begin 0 0 1 X X XX X 1 0 1 1 If (A(7)=’1’) then y<=”111”; 0 1 XX X XX X 1 1 0 1 elsIf (A(6)=’1’) then y<=”110”; 1 X XX X XX X 1 1 1 1 elsIf (A(5)=’1’) then y<=”101”; 0 0 0 0 0 0 0 0 X Xx 0 elsIf (A(4)=’1’)then y<=”110”; Begin elsIf (A(3)=’1’) then y<=”100”; Process(A) elsIf (A(2)=’1’) then y<=”011”; Begin elsIf (A(1)=’1’) then y<=”001”; elsIf (A(0)=’1’) then y<=”000”; A_int:=to_integer (A); Valid <=’1’; else valid<=’0’; Case (A) is y<=”xxx”; When 128 to 255 => y<=”111”; End if; When 64 to 127 => y<=”110”; End process; When 32 to 63 => y<=”101”; End logic; When 16 to 31 => y<=”100”; 2.Phát biểu case: When 8 to 15 => y<=”011”; library IEEE; use IEEE.STD_LOGIC_1164.ALL; When 4 to 7 => y<=”010”; entity 83_uutien is When 2 to 3 => y<=”001”; Port (A : in std_logic_vector(7 downto 0); When 1 => y<=”000”; y : out std_logic_vector (2 downto 0)); When others =>y<=valid; Y<=”xxx”; end 83_uutien; architecture logic of 83_uutien is End case; End process; End logic; Bài 11: Mạch giải mã 3:8: +mô tả hoạt động: Các mạch giải mã được sử dụng để giải mã dữ sơ đồ: liệu,dữ liệu này đc mã hoá trước đây bằng cách dùng dạng mã hoá nhị phân hoặc có thể 1 dạng mã hoá khác. 1 mã n bit có thể biểu diễn đén 2n bit phân biệt của thông tin mã hoá, do vậy 1 mạch giải mã với n ngõ vào có thể giải mã đến 2n ngõ ra. + Các phương trình: 1.sử dụng if: library IEEE; use IEEE.STD_LOGIC_1164.ALL; bảng chân lý: entity giaima_38 is A A AY Y YY Y Y Y Y Port (A : in std_logic_vector(2 downto 0); 2 1 0 7 6 5 4 3 2 1 0 y : out std_logic_vector (7 downto 0)); end giaima_38; 0 0 0 0 0 0 0 0 0 0 1 architecture logic of giaima_38 is 0 0 1 0 0 0 0 0 0 1 0 Begin 0 1 0 0 0 0 0 0 1 0 0 Process(A) 0 1 1 0 0 0 0 1 0 0 0 Begin 1 0 0 0 0 0 1 0 0 0 0 If (A=”000”) then y<=”00000001”; 1 0 1 0 0 1 0 0 0 0 0 elsIf (A=”001”) then y<=”00000010”; 1 1 0 0 1 0 0 0 0 0 0 elsIf (A=”010”) then y<=”00000100”; 1 1 1 1 0 0 0 0 0 0 0 elsIf (A=”011”) then y<=”00001000”; Begin elsIf (A=”100”) then y<=”00010000”; Case (A) is elsIf (A=”101”) then y<=”00100000”; When ”000” => y<=”00000001”; elsIf (A=”110”) then y<=”01000000”; When ”001” => y<=”00000010”; else y<=”10000000”; When ”010” => y<=”00000100”; End if; End process; When ”011” => y<=”00001000”; End logic; When ”100” => y<=”00010000”; 2.sử dụng case: When ”101” => y<=”00100000”; library IEEE; When ”110” => y<=”01000000”; use IEEE.STD_LOGIC_1164.ALL; When ”111” => y<=”10000000”; entity giaima_38 is When others => y<=null; Port (A : in std_logic_vector(2 downto 0); y : out std_logic_vector (7 downto 0)); end giaima_38; architecture logic of giaima_38 is End case; End process; End logic; Bài 12: Thiết kế mạch đa hợp 4 ngõ vào,1 ngõ ra,2 ngõ lựa chọn: +mô tả hoạt động: -mạch gồm có 4 đầu vào từ I0 đến I3 và 1 đầu ra Q.s0,s1 là các đầu vào điều khiển. để thay đổi lần lượt từ I0 đến I3 thì phải có điều khiển,việc đó đc thực hiện bởi 2 đầu vào điều khiển s0 & s1. +ch ương trình library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity mux_41 is Port (I : in std_logic_vector(3 downto 0); S: in std_logic_vector (1 downto 0); Q : out std_logic); end mux_41; architecture Behavioral of mux_41 is Begin Process(I,s) Begin Case s is When “00” => Q<=I0; When “10” => Q<=I1; When “10” => Q<=I2; When “11” => Q<=I3; When others => Q <=null; End case; End process; End Behavioral; S1 S0 I3 0 0 X 0 1 X 1 0 X 1 1 I3 Bảng chân lí sơ đồ mạch I2 X X I2 X I1 X I1 X X I0 I0 X X X Q I0 I1 I2 I3 Bài 13: Các cách mô tả mạch ghép kênh 4:1, 1 bit: +mô tả hoạt động: bộ ghép kênh 4 lối vào 1 lối ra gồm có 4 lối vào A,B,C,D,với mỗi lối vào là 1 bit và 1 lối ra y. S1,s2 là các đầu vào điều khiển, để thay đổi lần lượt các đầu vào từ A đến D phải có điều khiển, vậy đối với mạch này thì cần có đầu vào điều khiển là s1,s2. + các chương trình: 1.sử dụng phát biểu if: library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity Mux_41 is Port (A,B,C,D,s1,s2: in std_logic; Y: out std_logic); end Mux_41; architecture Behavioral of Mux_41 is Begin Process(A,B,C,D,s1,s2) If (s1s2=”00”) then y<= A; Elsif (s1s2=”01”) then y<=B; Elsif (s=”10”) then y<=C; Else y<=D; End if; End process; End Behavioral; 2.sử dụng phép gán tín hiệu có điều kiện library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity Mux_41 is Port (A,B,C,D,s1,s2: in std_logic; Y: out std_logic); end Mux_41; architecture Behavioral of Mux_41 is Begin Y<=A When s1s2=“00” else Bảng chân lý: S1 0 0 1 1 S2 0 1 0 1 A 1 0 0 0 B 0 1 0 0 C 0 0 1 0 D 0 0 0 1 Y 1 1 1 1 2.sử dụng phát biểu case: library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity Mux_41 is Port (A,B,C,D,s1,s2: in std_logic; Y: out std_logic); end Mux_41; architecture Behavioral of Mux_41 is Begin Process(A,B,C,D,s1,s2) Begin Case s1 s2 is When “00” => y<=A; When “10” => y<=B; When “10” => y<=C; When “11” => y<=D; B When s1s2=“10” else C When s1s2=“10 else Y<=D; End behavioral; End case; End process; End behavioral; Bài 14: Mạch cộng ko đầy đủ 1bit: +mô tả: -mạch gồm có 2 đầu vào là A,B và 2 đầu ra là Cout, sum. với sum là tổng của 2 đầu vào và Cout là bit nhớ. +chương trình library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity HALF_ADD is Port ( A,B : in STD_LOGIC; Sum, Cout : out STD_LOGIC); end HALF_ADD; architecture Behavioral of HALF_ADD is begin Sum <= A xor B; Cout <= A and B; end Behavioral; Sơ đồ: bảng chân lý: A B Cou Sum t 0 0 0 0 0 1 0 1 1 0 0 1 1 1 1 0 Bài 11: Mạch cộng đầy đủ 1bit: library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity FULL_ADD is Port ( A,B,Cin : in STD_LOGIC; Cout,Sum : out STD_LOGIC); end FULL_ADD; architecture Behavioral of FULL_ADD is COMPONENT HALF_ADD PORT(A : IN std_logic; B : IN std_logic; Sum : OUT std_logic; Cout : OUT std_logic); END COMPONENT; signal AplusB,CoutHA1,CoutHA2: STD_LOGIC; begin HA1: HALF_ADD PORT MAP ( A => A, B => B, Sum => APlusB, Cout => CoutHA1); HA2: HALF_ADD PORT MAP( A => AplusB, B => Cin, Sum => Sum, Cout => CoutHA2); Cout <= CoutHA1 or CoutHA2; end Behavioral; +mô tả: -mạch gồm có 3 đầu vào A,B,Cin và 2 đầu ra Cout,sum. -với sum là tổng của 3 đầu vào và Cout là bit nhớ +Bảng chân lý: A B Cin Sum Cout 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1 Bài 15: Mạch ghép kênh 2:1, độ rộng 1 bit: + mô tả hoạt động: mạch ghép kênh có lựa chọn 1,2 hoặc nhiều tín hiệu ngõ vào đến ngõ ra. Một or nhiều tín hiệu điều khiển sẽ điều khiển giá trị của tín hiệu ngõ vào nào được truyền đến ngõ ra. Mỗi tín hiệu ngõ vào và tín hiệu ngõ ra có thể là 1 bít đơn or bus nhiều bit. Các ngõ vào lựa chọn thường được mã hoá nhị phân sap cho n ngõ vào lựa chọn có thể chọn từ 1 đến 2n ngõ vào. + chương trình: library IEEE; use IEEE.STD_LOGIC_1164.ALL; Entity mux_21 is Port (A,B:in std_logic; s: in std_logic; y: out std_logic); End mux_21; Architecture behavioral of mux_21 is Begin Process(A,B) Begin If (s=’0’) then y<=A; Else y<=B; End if; End process; End Behavioral; bảng chân lý: S 0 0 1 1 A 0 1 X X B X X 0 1 Y 0 1 0 1 Bài 16: mạch giải mã địa chỉ 4bit: library IEEE; use IEEE.STD_LOGIC_1164.ALL; Entity giaima_4bit is Port (x:in integer range 0 to 15; A,C,D: out std_logic; B: out std_logic_vector(3 downto 0)); End giaima_4bit; Architecture logic of giaima_4bit is Begin Process(x) Begin A<=’0’; B<=(others=>’0’); C<=’0’; D<=’0’; Case (x) is When 0 to 3 => A<=’1’; When 4 => B(0)<=’1’; When 5 => B(1)<=’1’; When 6 => B(2)<=’1’; When 7 => B(3)<=’1’; When 8 to 11 => C<=’1’; When 12 to 15 => D<=’1’; End case; End process; End logic; Bài 17: Cổng 3 trạng thái: Loại 1: sử dụng when: +mô tả hoạt động: cổng 3 trạng thái có đầu ra output=input khi ena=0 và có bằng trở kháng cao khi ena=1. +chương trình: library IEEE; use IEEE.STD_LOGIC_1164.ALL; Entity 3trangthai is Port (ena:in std_logic; input:in std_logic; output: out std_logic); End 3trangthai; Architecture Behavioral of 3trangthai is Begin Output<=input when (ena=’0’) Else (others => ‘z’); End Behavioral; Loại 2: sử dụng if: library IEEE; use IEEE.STD_LOGIC_1164.ALL; Entity 3trangthai is Port (A,E: out std_logic; y: out std_logic); End 3trangthai; Architecture Behavioral of 3trangthai is Begin If (E=’0’) then y=’A’; Else y=’z’; End Behavioral; sơ đồ: bảng chân lý: En a 0 1 In Out 1 Z 1 z Sơ đồ: bảng chân lý: E 0 1 A y 1 1 Z z
- Xem thêm -

Tài liệu liên quan