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

 

doc7 trang | Chuyên mục: Kỹ Thuật Số | Chia sẻ: tuando | Lượt xem: 368 | Lượt tải: 0download
Tóm tắt nội dung Bài tập về PLD và VHDL - Hồ Trung Mỹ, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
Đ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:

  • docbai_tap_ve_pld_va_vhdl_ho_trung_my.doc