Bài tập ôn vhdl
Trang 1ĐHBK Tp HCM
Khoa Dién-DT
BMDT
Bai tap 6n VHDL
1 Tìm dạng tối thiểu hóa theo SOP của
a fXi, Xo, X3) = Xm (3, 4, 6, 7)
b f(x, Xo, Xa) = Im (1, 3, 4, 6, 7)
Kiểm tra lại kết quả tính tay bằng cách nhập các hàm trên chưa rút gọn thông qua biểu diễn bảng chân trị trong MAX+plus II bằng Waveform Editor và compile nó Ta đọc được kết quả rút gọn trong file rpt
2 Tìm dạng tối thiểu hóa theo POS của
c f(X1, X2, X:) = II M(O, 2, 5)
d flX1, xa, X3) = M(0, 1, 5, 7)
Kiém tra lai két qua tính tay bằng cách nhập các hàm trên chưa rút gọn thông qua biểu diễn bảng chân trị trong MAX+plus H bằng Waveform Editor va compile nó Ta đọc được kết quả rút gọn trong file rpt
3 Cho các biến vào X=x¡Xo và Y=y Yo, ra cua hé tổ hợp là hàm ƒ được
định nghĩa ƒ(X,Y) = 1 nếu X khác Y; ƒ(X,Y)=0 nếu X=Y Tìm dạng tối thiểu của ƒ theo SOP
4 Dùng Graphic Editor để vẽ mạch thực hiện các hàm sau
a fi = XoX3X4 + XIX¿X¿ + XIX¿X: + XIX2Xã
b fp = XoX4 + XIX¿ + X2X:
Hãy sử dụng mô phỏng chức năng/hàm để chứng tỏ rằng ƒ, = fe
5 Tương tự 4 với các hàm sau
a f =(Xị +X¿ + %2) ( X¿ + X: + X4) (Ky + Xs + X4) (Xi + Xã + Xã)
b fo = (2 + X4) (K3 + X4) (Xi + X4) -
Hãy sử dụng mô phỏng chức năng/hàm đê chứng tỏ rắng ƒ¡ = ƒ
6 Dùng Text Editor viết bằng VHDL các hàm:
7 a) Xét các phát biểu gán sau
fl <= ((xl AND x3) OR (NOT x1 AND NOT x3)) AND ((x2 AND
x4) OR (NOT x2 AND NOT x4)); f2 <=(x1 AND x2 AND x3 AND NOT x4) OR (NOT x1 AND NOT x2 AND x3 AND x4) OR (xl AND NOT x2 AND NOT x3 AND x4) OR (NOT x1 AND x2 AND x3 AND NOT x4);
a Viết mã VHDL đầy đủ cho các ham f1, f2 6 trén
b Sử dụng mô phỏng để chứng tỏ rằng f1 = f2
VHDL-BTOT-trang 1/11
Trang 2b) Trong các danh hiệu sau hãy tìm ra các danh hiệu hợp lệ và không hợp lệ Với các danh hiệu không hợp lệ, hãy giải thích tại saovới cách
viết đó không hợp lệ? reset_ out Time_Co CaRryOut? 32bit_addr = Addr32bit
c) Đoạn mã sau có các lỗi Hãy tìm ra và giải thích?
line 3
line 5 PORT IS (w : IN STD_LOGIC_VECTOR(3 DOWNTO 0); line 6 y : OUT STD_LOGIC_VECTOR(1 DOWNTO 0);
line 9
line 10 ARCHITECTURE Behavior OF encoder42 IS
line 12 "11" WHEN w(3) ='1'ELSE; y <=
line 13 "10" WHEN w(2) ='1' ELSE;
line 14 "01" WHEN w(1) ='l' ELSE;
line 16 z <='0' WHEN w = "0000" ELSE '1';
đ) Hãy cho biết những lệnh nào sau đây có cú pháp và ngữ nghĩa đúng để
mô tả cho hàm f = x’y + xy’
f<=(x AND NOT y) OR(NOTxANDy);
f<=(NOT x AND NOT y) ORx;
f<= NOT x AND y OR x AND NOT y;
f<=( NOT x OR y) AND NOT y;
f<= (NOT x AND y) OR (x AND NOT y) ;
8 Tìm tối thiểu hoa dang SOP va POS cho cdc ham sau:
A4 Xa X:) = Ym (1, 2, 3, 5)
AX, Xp, X3) = Em (1, 4, 7) + d(2,5)
ƒẤXu, Xa, Xạ, x¿) = IM(0, 1, 2, 4, 5, 7, 8, 9, 10, 12, 14, 15)
ƒŒi, Xa, X3, X4) =Em(0, 2,8, 9, 10, 15) + d(1, 3, 6,7)
Hãy kiểm tra lại kết quả bằng cách sử dụng nhập thiết kế bang bang
chân trị (qua Waveform Editor)
9 Một hàm logic 4 biến có giá trị ra là 1 nếu 3 trong 4 biến vào là 1 Thiết kế và cài đặt hàm này bằng: sơ đồ mạch; bảng chân trị; va VHDL
Trang 310 Thiết kế mạch nhân 2 số nhị phan 2 bit: Z = A x B, voi A=A, Ao, B=B¡Bụ và Z=Z¿Z¿Z¡Zo Thiết kế và cài đặt bằng 1 trong 3 cách design
entry
11 So sánh 2 số A (2bït: A¡A¿), B (2 bít: B¡Bọ); hệ có 3 ngõ ra f1=1 nếu
A=B, f2=1 nếu A < B và f3=l nếu A>B
12 Tương tự câu trên cho A và B đều là dữ liệu 4 bit
13 Mach tao parity chan cho dé liéu vào 4 bit
14 Tương tự câu trên cho dữ liệu là 8 bit
15 Thiết kế mạch thực hiện x”“+x+1 với x=xaX¡Xo
16 Thực hiện hàm f hoạt động theo bảng sau:
Mạch nhận một số X (4 bit: xạxạX¡Xọ) có 4 ngõ ra như sau:
» f1 =1 nếu X chia hết cho 2
f2 = 1 nếu X chia hết cho 3 f3 = 1 nếu X chia hết cho 4
#4 = 1 nếu X chia hết cho 5
11
Cho mạch sau:
A
be
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 dé chi 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 đó
18 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 ;
PORT ( Clock : IN STD_LOGIC ;
Q: BUFFER STD_LOGIC_VECTOR(1 DOWNTO 0) ) ;
END upcount ;
Behavior OF upcount IS ARCHITECTURE
BEGIN
PROCESS ( Clock )
BEGIN
IF (Clock’ EVENT AND Clock = ‘1’) THEN
VHDL-BTOT-trang 3/11
Trang 4Q<=QH'T;
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à B,Bạ (nghĩa là đếm từ 00 đến 99, B¡ và Bọ là 2 số 4 bi)
Giả sử bộ đếm BCD làm việc theo cạnh lên Clk và có thêm ngõ vào Reset
bat đồng bộ voi Clk (nghĩa là bất cứ khi nào Reset=1 thì các ngõ ra là 0)
b) Giả sử Bị và Bọ được đưa vào một mạch khác mà sẽ cho ngõ ra G trị là
1 khi B¡Bọ 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
19 Thiết kế một bộ đếm lên/xuống 4 bit có 5 ngõ vào điều khiển là Up,
Down, Clear, Load và Enable (trong đó chỉ có Clear và Enable hoạt động không đồng bộ với CIk) có tác đụng như sau:
¢ Enable =l thì ngõ ra Data_out=giá trị 4 bit chứa trong bộ đếm; còn ngược lại khi Enable =0 thì ngõ ra Data_out=”Z⁄ZZ⁄Z”;
»_ Load = 1 thì bộ đếm thực hiện tác vụ nạp song song từ giá trị 4 bit ở Data_in vào bộ đếm ở cạnh lên của xung nhịp CIk
* Clear = 1 thi x6a b6 dém về 0
» Up = I khi có cạnh lên ở CIk thì làm bộ đếm tăng thêm 1
© Down = 1 khi có cạnh lên ở Clk thì làm bộ đếm giảm đi 1
Như vậy bộ đếm hoạt động bình thường khi Load=0 và Clear=0
20 Ma VHDL cia 1 thiết bị là
1 entity test is
2 port (inl : in bit_vector (2 downto 0);
3 out : out bit_vector (3 downto 0));
4 end test;
5 architecture test_arch of test is
6 begin
7 outl(0)<=in1(1);
8 out1(1)<=in1(2);
9 outl(2)<=in1(0) and in1(1);
10 outl(3)<=’1’;
11 end test_arch ;
Tên của entity va than architecture 14 gi? Vẽ sơ đồ mach
21 Vẽ mạch của mã VHDL cho ở phía sau Sửa mã dé cho out1 có kiểu
đữ liệu là std_ logic Có thê bỏ tín hiệu connectI được không? Giải thích
1 entity nandgate is
2 port (
3 inl: in bit;
4 in2: in bit;
5 outl: out bit;
6 );
Trang 524
7 end nandgate;
8 architecture nandgate_arch of nandgate is
9 signal connect] : bit;
10 begin
11 connectl <= in1 and in2;
12 outl <= not connectl;
13 end nandgate_arch;
22 Các tín hiệu a, b, c được gán như sau:
a<= “01”; b<= “11”; c<= “10”;
Tìm d1 khi nó được gán: dl<= (a nand b) nand c;
Tìm d2 khi nó được gán: d2<= a nand (b nand c);
23 Cho trước bảng chân trị của cổng xnor:
1 entity test9 is
2 port (in1, in2 : in std_logic;
3 out! : out std_logic);0
4 end test9;
Cai dat céng nay bang:
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
đ) 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à l trong 4 ngõ vào (Da,D›,D¡ và
Dạ) 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?
25 Thiết kế mạch chuyền đổi mã BCD8421 sang mã quá 3 (excess-3) với các cách
Sau:
a Viét truc tiép entity cho mach này dùng các lệnh đồng thời
b Viết trực tiếp entity cho mạch này dùng các lệnh tuần tự
c Dùng hàm (function)
d Dùng thủ tục (procedure)
26 _ Viết khai báo cho cấu trúc sau, giả sử các tín hiệu trong mã là port:
architecture write_entity of exercise2 is begin
mapper: process (addr) begin
shadow_ram_sel <= ‘0’;
sram_sel <= ‘0’;
if addr >= x0100” and addr < x”4000” then
shadow_ram_sel <= ‘1’;
elsif addr >= x’8000” and addr < x”C000” then
sram_sel <= ‘1’;
end if;
promsel <= ‘0’;
if eme_mapped = ‘0’ and bootup then
prom_sel <= ‘1’;
end if;
end process mapper;
mem_mapped <= shadow_ram_sel or sram_sel;
VHDL-BTOT-trang 5/11
Trang 627
28
29
30
31
32
33
end write_entity;
Tìm các lỗi trong đoạn mã sau và hãy sửa lại cho đúng:
entity 4to1_mux
port( signal a, b, c, d: std_logic_vectors(3 downto 0);
select: in std_logic-vector(1 downto 0);
x: out bit_vector(3 downto 0);
end
architecture of 4to1_mux
begin p1: process begin
if select =’00’ then
X <= a)
elsif select = ‘10’
x<=b;
elsif select = ‘11’
X <=C}
else
x<=d end if;
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:
a 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é tua cộng BCD va hién thi LED bay doan:
Thiét kế mạch chuyền đổi nhị phan 8 bit sang BCD (2 digit)
Thiét ké mạch cộng, song song 2 so BCD (1 digit)
c 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 1a 2 digit 1/2 (2 digit rudi)
d Thiết kế mạch hiển thị BCD ra bảy đoạn
e._ 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:
a Viét mi VHDL cho JK flifpflop kích cạnh lên
b Ding a dé thiét ké mach dém Johnson 4 bit
c Viét truc tiép không sử dụng a
Suy ra giản đồ trạng thái của FSM có 1 ngõ vào X va 1 ngé ra Z FSM sé tao ra Z=l khi nhận được chuỗi vào 1001 hoặc 1111; ngược lại Z=0 Các mẫu vào phủ lắp được cho phép Thí dụ:
X: 010111100110011111 Z: 000000100100010011
Thiết kế mạch đếm lên 3 bit có ngõ diéu khién CNTRL:
a Khi CNTRL=0 theo số nhị phân thông thường: 000, 001, 010,
b Khi CNTRL=1 theo ma Gray : 000, 001, 011,
Xét ma VHDL sau, quan hệ giữa Input va 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
Trang 734
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 TEEE.std logic 1164.all;
entity toto is
port (A, B, C : in std logic;
O1, O2 : out std logic);
end toto;
architecture synth of toto is
signal V, R : std logic;
begin
process (V, C)
begin
if (V='1*‘) then
Q92 <= C;
end if;
end process;
R <= B xor C;
process (A)
begin
if (A'event and A='1') then
O1 <= C;
V <= R;
end if;
end process;
end synth;
Hay hoan tat giản độ định thì của mạch được mô tả bởi mã VHDL ở trên:
VHDL-BTOT-trang 7/11
Trang 8
35 Xét mã VHDL ở hình sau:
a Vẽ mạch logic tương ứng với nó
b Cho biết danh sách dò sự thay đổi của tín hiệu trong process thỉs và that? Danh sách tối thiểu cho các process đó là gì?
'VHDL-BTOT-trang 8/11
Trang 936
library ieee;
use ieee.std_logic_1164.all;
entity toto is
port (a, b, c : in std_logic;
£ : out std logic);
end toto;
architecture titi of toto is
signal d, e : std_logic;
begin
this: process (a, b, c, e)
begin
if (b'event) and (b = '0')
then if c = '1'
then £ <= a;
else f <= not e;
end if;
end if;
end process;
that: process (a, b, d)
begin
if (b = '0')
then e <= d;
else d <= not a;
end if;
end process;
end titi;
Hay viét ma VHDL cho các FSM sau:
a
BARNEY = ’0°
VHDL-BTOT-trang 9/11
WILMA = ’0°
Trang 10
RESET=0'
/§ropprp` \ CE<=
a | START_STOP="1" |
\ CLEARS
N
\ START_STOP='1'
37 _ 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
38 Thiết kế mạch nhân nối tiếp 2 số 4 bit bằng VHDL (hệ có 1 ngõ vào X và l ngõ Z,
cùng với xung nhịp CLK kích cạnh lên)
39 Cho trước mạch đêm 4 bit sau:
+ aL [TL L[Er Dor aL
TT [ = [
Reset
Hãy tim chuỗi đếm của mạch đếm nay
a
b Việt mã 'VHDL cho mạch trên
c Ding b dé thiết kế mạch đếm 16 bit có chức năng tương tự như mạch đêm 4 bit
d 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ó
40 _ Viết mã VHDL cho phần cứng sau (FA=Full Adder)
VHDL-BTOT-trang 10/11
Trang 1141
VHDL-BTOT-trang 11/11
Sum
Asynchronous reset