Tổng hợp các bài tập mẫu hay viết bằng ngôn ngữ mô tả phần cứng VHDL

32 2.2K 4
Tổng hợp các bài tập mẫu hay viết bằng ngôn ngữ mô tả phần cứng VHDL

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Tổng hợp các bài tập mẫu hay viết bằng ngôn ngữ mô tả phần cứng VHDL

Các BT giải sẵn về VHDL 2011 – trang 1 ĐHBK Tp HCM–Khoa ĐĐT–BMĐT Môn học: Kỹ thuật số GVPT: Hồ Trung Mỹ Bài tập giải sẵn về VHDL (AY1112-S1) (Các mã VHDL đã được chạy thử trên Altera MaxplusII v10.2) 1. ViếtVHDL để đếm số bit 1 của số nhị phân 3 bit A với các cách sau: a) Dùng hình hành vi b) Dùng hình luồng dữ liệu c) Lệnh case-when d) Dùng hình cấu trúc Bài giải. Với yêu cầu của đề bài, ta có được bảng chân trị sau: Ngõ vào Ngõ ra A2 A1 A0 C1 C0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 1 1 0 1 0 0 0 1 1 0 1 1 0 1 1 0 1 0 1 1 1 1 1 Phần đầu dùng thư viện IEEE và khai báo entity thì giống nhau cho các cách: TD: Với khai báo của cách 1: library ieee; use ieee.std_logic_1164.all; entity ONES_CNT_EX1 is port ( A : in std_logic_vector(2 downto 0); C : out std_logic_vector(1 downto 0)); end ONES_CNT_EX1; a) hình hành vi: architecture Algorithmic of ONES_CNT_EX1 is begin Process(A) Sensitivity List Contains only Vector A Variable num: INTEGER range 0 to 3; begin num :=0; For i in 0 to 2 Các BT giải sẵn về VHDL 2011 – trang 2 Loop IF A(i) = '1' then num := num+1; end if; end Loop; Transfer "num" Variable Value to a SIGNAL CASE num is WHEN 0 => C <= "00"; WHEN 1 => C <= "01"; WHEN 2 => C <= "10"; WHEN 3 => C <= "11"; end CASE; end process; end Algorithmic; Dạng sóng phỏng hoạt động: Chú ý: Có cách giải khác trong thí dụ của MaxplusII: MAX+plus II VHDL Example Combinatorial Process Statement Copyright (c) 1994 Altera Corporation ENTITY proc IS PORT ( d : IN BIT_VECTOR (2 DOWNTO 0); q : OUT INTEGER RANGE 0 TO 3 ); END proc; ARCHITECTURE maxpld OF proc IS BEGIN count the number of bits with the value 1 in word d PROCESS (d) VARIABLE num_bits : INTEGER; BEGIN Các BT giải sẵn về VHDL 2011 – trang 3 num_bits := 0; FOR i IN d'RANGE LOOP IF d(i) = '1' THEN num_bits := num_bits + 1; END IF; END LOOP; q <= num_bits; END PROCESS; END maxpld; b) hình luồng dữ liệu architecture Two_Level of ONES_CNT_EX2 is begin C(1) <= (A(1) and A(0)) or (A(2) and A(0)) or (A(2) and A(1)); C(0) <= (A(2) and not A(1) and not A(0)) or (not A(2) and not A(1) and A(0)) or (A(2) and A(1) and A(0)) or (not A(2) and A(1) and not A(0)); end Two_Level; Dạng sóng phỏng hoạt động: c) Lệnh case-when Process(A) Sensitivity List Contains only Vector A begin CASE A is WHEN "000" => C <= "00"; WHEN "001" => C <= "01"; WHEN "010" => C <= "01"; WHEN "011" => C <= "10"; WHEN "100" => C <= "01"; WHEN "101" => C <= "10"; WHEN "110" => C <= "10"; Các BT giải sẵn về VHDL 2011 – trang 4 WHEN "111" => C <= "11"; WHEN OTHERS => C <="ZZ"; end CASE; end process; end Truth_Table; d) Dùng hình cấu trúc Có nhiều cách giải cho phần này. Từ bảng chân trị ta có biểu thức Boole cho các ngõ ra: C1 = A1A0 + A0A2 + A1A2 + A0A1A2 C1 = A1A0 + A0A2 + A1A2 => cần AND 2 ngõ vào và OR 3 ngõ vào và C0 = A2’A1’A0 + A2’A1A0’ + A2A1’A0’ + A2A1A0 C0 = ((A2’A1’A0)’.( A2’A1A0’)’ .(A2A1’A0’)’.(A2A1A0)’)’ => Cần NAND 3 ngõ vào, NAND 4 ngõ vào và cổng NOT Mạch cho C1 được đặt tên là MAJ3 và mạch cho C0 được đặt tên là OPAR3. Từ đó có bài giải sau: NOT gate LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY notgate IS PORT( i: IN STD_LOGIC; o: OUT STD_LOGIC); END notgate; ARCHITECTURE Dataflow OF notgate IS BEGIN o <= NOT i; END Dataflow; 3-input NAND gate LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY nand3gate IS PORT( i1, i2, i3: IN STD_LOGIC; o: OUT STD_LOGIC); END nand3gate; ARCHITECTURE Dataflow OF nand3gate IS BEGIN o <= NOT(i1 AND i2 AND i3); END Dataflow; 4-input NAND gate LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY nand4gate IS Các BT giải sẵn về VHDL 2011 – trang 5 PORT( i1, i2, i3, i4: IN STD_LOGIC; o: OUT STD_LOGIC); END nand4gate; ARCHITECTURE Dataflow OF nand4gate IS BEGIN o <= NOT(i1 AND i2 AND i3 AND i4); END Dataflow; 2-input AND gate LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY and2gate IS PORT( i1, i2: IN STD_LOGIC; o: OUT STD_LOGIC); END and2gate; ARCHITECTURE Dataflow OF and2gate IS BEGIN o <= i1 AND i2; END Dataflow; 3-input OR gate LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY or3gate IS PORT( i1, i2, i3: IN STD_LOGIC; o: OUT STD_LOGIC); END or3gate; ARCHITECTURE Dataflow OF or3gate IS BEGIN o <= i1 OR i2 OR i3; END Dataflow; Majority of 3 bit number LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; entity MAJ3 is PORT( X: in STD_LOGIC_VECTOR(2 downto 0); Z: out STD_LOGIC); end MAJ3; architecture Structural_M of MAJ3 is COMPONENT and2gate PORT( I1, I2: in STD_LOGIC; Declare Components O: out STD_LOGIC); To Be Instantiated Các BT giải sẵn về VHDL 2011 – trang 6 END COMPONENT; COMPONENT or3gate PORT(I1, I2, I3: in STD_LOGIC; O: out STD_LOGIC); END COMPONENT; SIGNAL A1, A2, A3: STD_LOGIC; Declare Maj3 Local Signals begin Instantiate Gates g1: and2gate PORT MAP (X(0), X(1), A1); g2: and2gate PORT MAP (X(0), X(2), A2); Wiring of g3: and2gate PORT MAP (X(1), X(2), A3); Maj3 g4: or3gate PORT MAP (A1, A2, A3, Z); Compts. end Structural_M; OPAR3 Circuit LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; entity OPAR3 is PORT( X: in STD_LOGIC_VECTOR(2 downto 0); Z: out STD_LOGIC); end OPAR3; architecture Structural_O of OPAR3 is COMPONENT notgate PORT( i: in STD_LOGIC; O: out STD_LOGIC); END COMPONENT; COMPONENT nand3gate PORT( I1, I2, I3: in STD_LOGIC; O: out STD_LOGIC); END COMPONENT; COMPONENT nand4gate PORT( I1, I2, I3, I4: in STD_LOGIC; O: out STD_LOGIC); END COMPONENT; SIGNAL A1B, A2B, A0B, Z1, Z2, Z3, Z4: STD_LOGIC; begin Instantiate Gates g1: notgate PORT MAP (X(0), A0B); g2: notgate PORT MAP (X(1), A1B); g3: notgate PORT MAP (X(2), A2B); g4: nand3gate PORT MAP (X(2), A1B, A0B, Z1); g5: nand3gate PORT MAP (X(0), A1B, A2B, Z2); g6: nand3gate PORT MAP (X(0), X(1), X(2), Z3); g7: nand3gate PORT MAP (X(1), A2B, A0B, Z4); Các BT giải sẵn về VHDL 2011 – trang 7 g8: nand4gate PORT MAP (Z1, Z2, Z3, Z4, Z); end Structural_O; ONES_CNT_EX4: Main Circuit LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; entity ONES_CNT_EX4 is port ( A : in STD_LOGIC_VECTOR(2 downto 0); C : out STD_LOGIC_VECTOR(1 downto 0)); end ONES_CNT_EX4; architecture Structural of ONES_CNT_EX4 is COMPONENT MAJ3 PORT( X: in STD_LOGIC_VECTOR(2 downto 0); Z: out STD_LOGIC); END COMPONENT; COMPONENT OPAR3 PORT( X: in STD_LOGIC_VECTOR(2 downto 0); Z: out STD_LOGIC); END COMPONENT; begin Instantiate Components c1: MAJ3 PORT MAP (A, C(1)); c2: OPAR3 PORT MAP (A, C(0)); end Structural; Dạng sóng ra phỏng: Chú ý: Ta có thể sử dụng luôn các component có sẵn của Altera MaxplusII. Tuy nhiên lưu ý phải khai báo component đúng với khai báo của Altera MaxplusII! Các cổng logic của Maxplus II có các khai báo sau: 1) Cổng NOT với tên là A_NOT có khai báo sau: COMPONENT a_not PORT( a_in: in STD_LOGIC; a_out: out STD_LOGIC); END COMPONENT; Các BT giải sẵn về VHDL 2011 – trang 8 2) Cổng AND có thể có n ngõ vào (ANDn) với n=2, 3, 4, 6, 8 và 12. TD: Khai báo sau cho cổng AND có 2 ngõ vào: COMPONENT and2 PORT( IN1, IN2: in STD_LOGIC; a_out: out STD_LOGIC); END COMPONENT; 3) Cổng OR có thể có n ngõ vào (ORn) với n=2, 3, 4, 6, 8 và 12. TD: Khai báo sau cho cổng OR có 2 ngõ vào: COMPONENT or3 PORT(IN1, IN2, IN3: in STD_LOGIC; a_out: out STD_LOGIC); END COMPONENT; 4) Cổng NAND có thể có n ngõ vào (NANDn) với n=2, 3, 4, 6, 8 và 12. 5) Cổng NOR có thể có n ngõ vào (NANDn) với n=2, 3, 4, 6, 8 và 12. 6) Cổng XOR 2 ngõ vào có tên là a_XOR với khai báo sau: COMPONENT a_xor PORT(IN1, IN2: in STD_LOGIC; a_out: out STD_LOGIC); END COMPONENT; 7) Cổng XNOR 2 ngõ vào có tên là a_XNOR Như vậy ta có lời giải khác ngắn hơn nếu sử dụng các component có sẵn của Maxplus II: Use built-in components of MaxplusII Majority of 3 bit number LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; entity MAJ3 is PORT( X: in STD_LOGIC_VECTOR(2 downto 0); Z: out STD_LOGIC); end MAJ3; architecture Structural_M of MAJ3 is COMPONENT and2 PORT( IN1, IN2: in STD_LOGIC; Declare Components a_out: out STD_LOGIC); To Be Instantiated END COMPONENT; COMPONENT or3 PORT(IN1, IN2, IN3: in STD_LOGIC; a_out: out STD_LOGIC); END COMPONENT; SIGNAL A1,A2,A3: STD_LOGIC; Declare Maj3 Local Signals begin Instantiate Gates g1: and2 PORT MAP (X(0), X(1), A1); g2: and2 PORT MAP (X(0), X(2), A2); Wiring of g3: and2 PORT MAP (X(1), X(2), A3); Maj3 Các BT giải sẵn về VHDL 2011 – trang 9 g4: or3 PORT MAP (A1, A2, A3, Z); Compts. end Structural_M; OPAR3 Circuit LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; entity OPAR3 is PORT( X: in STD_LOGIC_VECTOR(2 downto 0); Z: out STD_LOGIC); end OPAR3; architecture Structural_O of OPAR3 is COMPONENT a_not PORT( a_in: in STD_LOGIC; a_out: out STD_LOGIC); END COMPONENT; COMPONENT nand3 PORT( IN1, IN2, IN3: in STD_LOGIC; a_out: out STD_LOGIC); END COMPONENT; COMPONENT nand4 PORT( IN1, IN2, IN3, IN4: in STD_LOGIC; a_out: out STD_LOGIC); END COMPONENT; SIGNAL A1B, A2B, A0B, Z1, Z2, Z3, Z4: STD_LOGIC; begin Instantiate Gates g1: a_not PORT MAP (X(0), A0B); g2: a_not PORT MAP (X(1), A1B); g3: a_not PORT MAP (X(2), A2B); g4: nand3 PORT MAP (X(2), A1B, A0B, Z1); g5: nand3 PORT MAP (X(0), A1B, A2B, Z2); g6: nand3 PORT MAP (X(0), X(1), X(2), Z3); g7: nand3 PORT MAP (X(1), A2B, A0B, Z4); g8: nand4 PORT MAP (Z1, Z2, Z3, Z4, Z); end Structural_O; ONES_CNT_EX4: Main Circuit LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; entity ONES_CNT_EX4B is port ( A : in STD_LOGIC_VECTOR(2 downto 0); C : out STD_LOGIC_VECTOR(1 downto 0)); end ONES_CNT_EX4B; architecture Structural of ONES_CNT_EX4B is Các BT giải sẵn về VHDL 2011 – trang 10 COMPONENT MAJ3 PORT( X: in STD_LOGIC_VECTOR(2 downto 0); Z: out STD_LOGIC); END COMPONENT; COMPONENT OPAR3 PORT( X: in STD_LOGIC_VECTOR(2 downto 0); Z: out STD_LOGIC); END COMPONENT; begin Instantiate Components c1: MAJ3 PORT MAP (A, C(1)); c2: OPAR3 PORT MAP (A, C(0)); end Structural; 2. Với mạch tổ hợp sau: Hãy viếtVHDL với các cách sau (không thiết kế riêng mạch giải mã, mà chỉ cài đặt hàm F): 1) Lệnh đồng thời với phép gán dùng các toán tử logic 2) Lệnh đồng thời WHEN-ELSE 3) Lệnh đồng thời WITH-SELECT-WHEN 4) Lệnh tuần tự IF-THEN-ELSE 5) Lệnh tuần tự CASE-WHEN Bài giải. 1) Lệnh đồng thời với phép gán dùng các toán tử logic signal assignment with logic operators library ieee; use ieee.std_logic_1164.all; entity Q02_1 is port ( A, B, C: in std_logic; C: LSB F: out std_logic); end Q02_1; architecture a of Q02_1 is signal D1, D5, D7: std_logic; begin D1 <= not(A) and not(B) and C; [...]... logic 1 làm cho đoạn LED sáng) : mạch này nhận giá trị ra từ mạch trên và chuyển sang mã 7 đoạn hiện trên LED 7 đoạn a) Hãy viếtVHDL với 2 mạch này độc lập b) Hãy viếtVHDL chỉ có 1 mạch duy nhất Bài giải Ta có thể dùng when-else hay with-select-when để mô tả các mạch này a) Mã VHDL với 2 mạch độc lập library ieee; use ieee.std_logic_1164.all; entity Q06_1 is port( in_n: in std_logic_vector(9 downto... chỉ cần viết lại như sau : if (CLR = '1') then Q_int state state state state null; end case; state . là MUX 4 sang 1 với ngõ chọn là inst(2:1). Process U2 chính là MUX 2 sang 1 với ngõ chọn là inst(0). Từ đó ta có m ạch logic của mã VHDL trên là: (ALU 1 bit) Các BT giải sẵn về VHDL 2011 – trang. port ( A : in STD_LOGIC_VECTOR(2 downto 0); C : out STD_LOGIC_VECTOR(1 downto 0)); end ONES_CNT_EX4B; architecture Structural of ONES_CNT_EX4B is Các BT giải sẵn về VHDL 2011 – trang 10 COMPONENT. Các BT giải sẵn về VHDL 2011 – trang 1 ĐHBK Tp HCM–Khoa ĐĐT–BMĐT Môn học: Kỹ thuật số GVPT: Hồ Trung Mỹ Bài tập giải sẵn về VHDL (AY1112-S1) (Các mã VHDL đã được chạy thử

Ngày đăng: 30/05/2014, 22:55

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan