Bài tập về PLD và VHDL - Hồ Trung Mỹ
1) Mã VHDL của 1 thiết bị là
1 entity test is
2 port (in1 : in bit_vector (2 downto 0);
3 out1 : out bit_vector (3 downto 0));
4 end test;
5 architecture test_arch of test is
6 begin
7 out1(0)<=in1(1);
8 out1(1)<=in1(2);
9 out1(2)<=in1(0) and in1(1);
10 out1(3)<=’1’;
11 end test_arch ;
Tên của entity và thân architecture là gì? Vẽ sơ đồ mạch.
2) Cài đặt cổng XNOR bằng
a) Các phát biểu when-else
b) Các phát biểu with-select-when
c) Các phát biểu case-when
d) Các phát biểu if-then-else
ĐHBK Tp HCM–Khoa ĐĐT–BMĐT Môn học: Kỹ thuật số GVPT: Hồ Trung Mỹ Bài tập về PLD và VHDL Dùng PLA 3x4x2 ở hình 1 để cài đặt 2 hàm Boole: F1 = x’y’z + xy’ + x’yz’ F2 = x’yz’ + xy + x’z’ + x’y’ Hình 1 Hình 2 Cài đặt 3 hàm Boole sau với PLA có cấu trúc như hình 2 F0(A,B,C,D) = Σm (2, 3, 4, 5, 6, 7, 13, 15) F1(A,B,C,D) = Σm (6, 7, 13, 14, 15) F2(A,B,C,D) = Σm (4, 5, 6, 13, 14) Với mạch sau: a) Hãy tìm biểu thức tối thiểu cho F(A,B,C,D) dạng SOP. b) Viết chương trình VHDL cài đặt hàm trên. c) Thêm một tín hiệu clk để chỉ cho ngõ ra F thay đổi khi có cạnh lên ở clk, còn khi clk ở trạng thái khác thì ngõ ra F giữ trị cũ vừa trước đó. Dưới đây là một chương trình VHDL mô tả bộ đếm lên 4 bit đơn giản LIBRARY ieee ; USE ieee.std_logic_1164.all ; USE ieee.std_logic_unsigned.all ; ENTITY upcounter IS PORT ( Clock : IN STD_LOGIC ; Q : BUFFER STD_LOGIC_VECTOR(1 DOWNTO 0) ) ; END upcounter ; ARCHITECTURE Behavior OF upcounter IS BEGIN PROCESS ( Clock ) BEGIN IF (Clock’EVENT AND Clock = ‘1’) THEN Q <= Q + ‘1’ ; END IF ; END PROCESS; END Behavior ; a) Dựa vào chương trình trên hãy phát triển bộ đếm lên BCD (có 2 số mã [digit] BCD là B1B0 (nghĩa là đếm từ 00 đến 99, B1 và B0 là 2 số 4 bit). Giả sử bộ đếm BCD làm việc theo cạnh lên Clk và có thêm ngõ vào Reset bất đồng bộ với Clk (nghĩa là bất cứ khi nào Reset=1 thì các ngõ ra là 0) b) Giả sử B1 và B0 được đưa vào một mạch khác mà sẽ cho ngõ ra G trị là 1 khi B1B0 trong tầm từ 00 đến 90 và có trị số là bội số của 9. Hãy cài đặt mạch trên. Mã VHDL của 1 thiết bị là 1 entity test is 2 port (in1 : in bit_vector (2 downto 0); 3 out1 : out bit_vector (3 downto 0)); 4 end test; 5 architecture test_arch of test is 6 begin 7 out1(0)<=in1(1); 8 out1(1)<=in1(2); 9 out1(2)<=in1(0) and in1(1); 10 out1(3)<=’1’; 11 end test_arch ; Tên của entity và thân architecture là gì? Vẽ sơ đồ mạch. Cài đặt cổng XNOR bằng Các phát biểu when-else Các phát biểu with-select-when Các phát biểu case-when Các phát biểu if-then-else Ta muốn thiết kế mạch phát hiện có 3 ngõ vào là 1 trong 4 ngõ vào (D3,D2,D1 và D0) của hệ, khi đó ngõ ra Y =1. Viết phương trình của Y. Cài đặt mạch bằng các lệnh có thể sử dụng được? Có bao nhiêu cách? Xây dựng mạch so sánh độ lớn của 2 số 4 bit A và B với 3 ngõ ra (bằng nhau: AEQB, nhỏ hơn: ALTB, và lớn hơn: AGTB) dùng: Các toán tử logic Các toán tử quan hệ Mô hình cấu trúc Lệnh when-else Lệnh if-then-else Thiết kế mạch cộng BCD và hiển thị LED bảy đoạn: Thiết kế mạch chuyển đổi nhị phân 4 bit sang BCD (2 digit, nhưng chỉ cần 5 bit). Thiết kế mạch chuyển đổi nhị phân 8 bit sang BCD (2 digit). Thiết kế mạch cộng song song 2 số BCD (1 digit). Sử dụng các thiết kế ở a. và b. để làm các component cho mạch cộng 2 số BCD 2 digit, kết quả ra là 2 digit 1/2 (2 digit rưỡi). Thiết kế mạch hiển thị BCD ra bảy đoạn. Ráp lại các phần c) và d) thành 1 mạch hoàn chỉnh để cộng 2 số nhị phân vào và cho ra kết quả BCD. Thiết kế bộ đếm Johnson 4 bit: Viết mã VHDL cho JK flifpflop kích cạnh lên. Dùng a. để thiết kế mạch đếm Johnson 4 bit. Viết trực tiếp không sử dụng a) Xét mã VHDL sau, quan hệ giữa Input và Output cho ta biết chức năng của mạch này là gì? Với chức năng đó thì cách viết này có chỗ nào chưa đạt không? Nếu chưa đạt thì hãy viết lại để cho kết quả tốt nhất. LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY problem IS PORT (Input: IN STD_LOGIC_VECTOR(3 DOWNTO 0); Output: OUT STD_LOGIC_VECTOR(3DOWNTO 0)); END problem; ARCHITECTURE LogicFunc OF problem IS BEGIN WITH Input SELECT Output <= “0001” WHEN “0101”, “0010” WHEN “0110”, “0011” WHEN “0111”, “0010” WHEN “1001”, “0100” WHEN “1010”, “0110” WHEN “1011”, “0011” WHEN “1101”, “0110” WHEN “1110”, “1001” WHEN “1111”, “0000” WHEN OTHERS; END LogicFunc; Cho trước mã VHDL sau: library IEEE; use IEEE.std_logic_1164.all; entity toto is port (A, B, C : in std_logic; Q1, Q2 : out std_logic); end toto; architecture synth of toto is signal V, R : std_logic; begin process (V, C) begin if (V='1‘) then Q2 <= C; end if; end process; R <= B xor C; process (A) begin if (A'event and A='1') then Q1 <= C; V <= R; end if; end process; end synth; Hãy hoàn tất giản độ định thì của mạch được mô tả bởi mã VHDL ở trên: Cho trước mạch đếm 4 bit sau: Hãy tìm chuỗi đếm của mạch đếm này. Viết mã VHDL cho mạch trên. Dùng b. để thiết kế mạch đếm 16 bit có chức năng tương tự như mạch đếm 4 bit. Có thể viết tổng quát thành mạch đếm N bit theo chức năng tương tự của a? Nếu được hãy viết mã VHDL cho nó. Thiết kế mạch nhân song song 2 số 2 bit bằng VHDL. Từ đó xây dựng mạch nhân song song 2 số 4 bit. Hãy vẽ mạch logic tương ứng của các đoạn chương trình VHDL sau: LIBRARY ieee; use ieee.std_logic_1164.all; ENTITY ex01 IS PORT( A, B : IN STD_LOGIC; X, Y : IN STD_LOGIC; Z : OUT STD_LOGIC); END ex01; ARCHITECTURE a OF ex01 IS BEGIN process (A) if (A = ‘1’) then Z <= X elseif (B= ‘1’) then Z <= not X; else Z <= Y; end if; end process; END a; Tìm bảng chân trị và vẽ sơ đồ logic (sử dụng các cổng và các mạch MSI nếu có) cho mạch được mô tả bằng VHDL như sau: entity BLACK_BOX is port (A, B, C, D: in BIT; X, Y: out BIT); end BLACK_BOX; architecture DATA_FLOW of BLACK_BOX is signal P, R, S: BIT_VECTOR(2 downto 0); begin P <= A & B & C; R <= B"011"; S <= P xor R; with S select X <= not D when O"7" | O"0", D when O"2" to O"5", '0' when others; Y <= A xor B when C='0' else A and B when D='1' else not B; end DATA_FLOW; Hãy vẽ mạch logic tương ứng của các đoạn chương trình VHDL sau: library IEEE; use IEEE.std_logic_1164.all; entity test is port ( din, clk: in std_logic; dout: out std_logic); end test; architecture a of test is component dff is port ( d,clk: in std_logic; q: out std_logic ); end component; component xor2 is port ( a,b: in std_logic; y : out std_logic ); end component; signal toggle: std_logic; begin u1: xor2 port map (a => dout, b => din, y => toggle); u2: dff port map (d => toggle, clk => clk, q => dout ); end a; Cài đặt hàm Boole sau: F(A,B,C,D) = A’BC + AD + AC Với: a) Lệnh gán tín hiệu thông thường (dùng các toán tử) with–select–when when–else if–then–else case–when Chú ý: Cho phép dùng chung khai báo entity. Thiết kế mạch nhân 2 số nhị phân 2 bit A (A1A0) và B (B1B0) với kết quả là số nhị phân 4 bit P(P3P2P1P0): Tìm biểu diễn mỗi ngõ ra theo các ngõ vào bằng các cổng logic và mạch cộng bán phần HA nếu cần. Viết mô tả VHDL cho mạch này (giả sử có sẵn component HA). Với mạch sau hãy viết mô tả với VHDL dùng mô hình cấu trúc (giả sử có sẵn component của MUX và register 8 bit). Cho trước mã VHDL sau: library IEEE; use IEEE.std_logic_1164.all; entity test_ckt is port( x : in std_logic_vector(1 downto 0); enb, a, b, c, d : in std_logic; y : out std_logic); end; architecture logic of test_ckt is begin combin: process(x, enb, a, b, c, d) begin y <= '0'; if (enb = '1') then case x is when "00" => y <= a; when "01" => y <= b; when "10" => y <= c; when "11" => y <= d; when others => y <= '0'; end case; end if; end process; end logic; a) Hãy vẽ sơ đồ hộp đen với các ngõ vào và ngõ ra của chương trình trên? b) Viết phương trình Boolean của ngõ ra y. c) Mạch này có chức năng gì? (Tên gọi là gì)
File đính kèm:
- bai_tap_ve_pld_va_vhdl_ho_trung_my.doc