Bài giảng Thiết kế logic số - Chương 2: Ngôn ngữ VHDL (Phần 5) - Hoàng Văn Phúc

 VHDL khác với các ngôn ngữ lập trình khác như thế

nào?

 Hai loại phát biểu trong VHDL: tuần tự và đồng thời

 Các phát biểu tuần tự cơ bản: If, case, loop

 Ứng dụng chính của phát biểu tuần tự: các mạch số

tuần tự, cấu trúc mô phỏng kiểm tra

 

pdf 42 trang yennguyen 3960
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Thiết kế logic số - Chương 2: Ngôn ngữ VHDL (Phần 5) - Hoàng Văn Phúc", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Thiết kế logic số - Chương 2: Ngôn ngữ VHDL (Phần 5) - Hoàng Văn Phúc

Bài giảng Thiết kế logic số - Chương 2: Ngôn ngữ VHDL (Phần 5) - Hoàng Văn Phúc
Thiết kế logic số 
(VLSI design) 
https://sites.google.com/site/phucvlsi/teaching 
Chương 2: Ngôn ngữ VHDL 
Bài giảng 5: Phát biểu đồng thời, mô hình FSM 
và testbench trên VHDL 
Giáo viên: Hoàng Văn Phúc 
Bộ môn KT Xung-Số-Vi xử lý, Khoa Vô tuyến Điện tử 
02/2017 
 Nội dung: Phát biểu đồng thời; mô tả FSM; VHDL 
testbench 
 Thời lượng: 3 tiết bài giảng 
 Phương pháp: Thuyết trình (Slides, Bảng), Thảo luận, 
Minh hoạ trên ModelSim 
 Yêu cầu: Đọc trước Slides và tài liệu GV đã gửi 
 Mục tiêu: Nắm được cách sử dụng các phát biểu đồng 
thời; cách mô tả FSM và viết testbench trên VHDL 
 Tài liệu tham khảo: 
 Giáo trình “Thiết kế logic số”, HVKTQS, 2012, chương 2. 
 Circuit design with VHDL, MIT Press, 2005, chapter 5. 
Giới thiệu Bài giảng 
Chương 2: Ngôn ngữ VHDL 2 
 VHDL khác với các ngôn ngữ lập trình khác như thế 
nào? 
 Hai loại phát biểu trong VHDL: tuần tự và đồng thời 
 Các phát biểu tuần tự cơ bản: If, case, loop 
 Ứng dụng chính của phát biểu tuần tự: các mạch số 
tuần tự, cấu trúc mô phỏng kiểm tra 
Nhắc lại bài cũ 
Chương 2: Ngôn ngữ VHDL 3 
 Điểm khác biệt giữa phát biểu tuần tự và 
đồng thời? 
 Phân biệt generic và constant trong VHDL? 
 Phân biệt các phát biểu loop và generate? 
 Phân biệt các phát biểu gán tín hiệu có điều 
kiện và các phát biểu if, case? 
 Khi nào dùng kiểu testbench tự động? 
Câu hỏi thảo luận chính 
Chương 2: Ngôn ngữ VHDL 4 
VHDL statements (Phát biểu VHDL) 
VHDL 
statements 
Concurrent Sequential 
Đồng thời Tuần tự 
5 Chương 2: Ngôn ngữ VHDL 
Concurrent statements (Phát biểu đồng thời) 
KN: Là các phát biểu được thực thi đồng thời 
-> Việc thực thi không phụ thuộc vào vị trí xuất 
hiện của chúng trong chương trình 
Vị trí: Trực tiếp trong mô tả kiến trúc 
Ứng dụng: Dùng mô tả cho mạch dạng cấu trúc 
hoặc dataflow 
Cách gọi khác: phát biểu song song, dataflow 
6 Chương 2: Ngôn ngữ VHDL 
 Mô tả PROCESS 
 Cài đặt component (COMPONENT INSTALLATION) 
 GENERATE 
 Gán tín hiệu đồng thời (Concurrent Signal Assignment) 
7 
Concurrent statements (Phát biểu đồng thời) 
Chương 2: Ngôn ngữ VHDL 
 Gán tín hiệu (dùng toán tử) 
8 
Gán tín hiệu (dùng toán tử) 
Chương 2: Ngôn ngữ VHDL 
S <= (A xor B) xor Cin; 
Cout <= (A and B) or 
 (Cin and (A xor B)); 
Phần cứng tạo ra: 
Nhắc lại về PROCESS 
 Mỗi khối câu lệnh PROCESS là một khối lệnh tuần tự 
 Mô tả mạch theo hành vi 
 Khối PROCESS không có danh sách Sensitive list thì bắt buộc 
phải xuất hiện lệnh WAIT 
 Không giới hạn số lệnh PROCESS trong một mô tả kiến trúc 
9 Chương 2: Ngôn ngữ VHDL 
COMPONENT component_name IS 
 GENERIC (generic_declarations ); 
 PORT (input,_output_declarations); 
END COMPONENT component_name; 
COMPONENT INSTALLATION 
instant_name: COMPONENT component_name 
 GENERIC MAP( generics => generic values) 
 PORT MAP (inputs_and_outputs => signals); 
Khai báo (Declaration): 
Cài đặt (Installation): 
10 Chương 2: Ngôn ngữ VHDL 
Ví dụ 1: Thanh ghi dịch 
11 Chương 2: Ngôn ngữ VHDL 
Q
Q
SET
CLR
D
Q
Q
SET
CLR
D
Q
Q
SET
CLR
D
Din
CLK
Dout
Sử dụng thiết kế D-FF ba lần 
Khai báo và cài đặt component 
library IEEE; 
use IEEE.STD_LOGIC_1164.ALL; 
----------------------------- 
entity shift_reg is 
port( 
 Din : in std_logic; 
 CLK : in std_logic; 
 Dout : out std_logic 
 ); 
end shift_reg; 
----------------------------- 
architecture struct of 
shift_reg is 
signal Q1, Q2 : std_logic; 
component D_flipflop 
port( 
 D : in std_logic; 
 CLK : in std_logic; 
 Q : out std_logic 
 ); 
end component; 
12 
Ví dụ 1: Thanh ghi dịch (tiếp) 
begin 
DFF1: D_flipflop 
 port map (D => Din, CLK 
 => CLK, Q => Q1); 
DFF2: D_flipflop 
 port map (D => Q1, CLK 
 => CLK, Q => Q2); 
DFF3: D_flipflop 
 port map (Q2, CLK, Dout); 
end structure; 
Dạng đầy đủ 
Dạng rút gọn 
entity counter is 
generic ( 
 N : natural; 
 top_value : std_logic_vector(15 downto 0); 
 SETTOP : boolean := FALSE ); 
port ( 
 count :out std_logic_vector(N-1 downto 0); 
 enable :in std_logic; 
 clk :in std_logic; 
 reset :in std_logic); 
end entity; 
Ví dụ 2: Bộ đếm cấu hình được (configurable counter) 
13 Chương 2: Ngôn ngữ VHDL 
Khai báo component cho bộ đếm 
component counter is 
generic ( 
 N : natural; 
 top_value : std_logic_vector(15 downto 0); 
 SETTOP : boolean := FALSE ); 
port ( 
 count :out std_logic_vector(N-1 downto 0); 
 enable :in std_logic; 
 clk :in std_logic; 
 reset :in std_logic); 
end component; 
Chương 2: Ngôn ngữ VHDL 14 
-- installation of 4-bit and 8-bit counters 
counter1: counter 
generic map (N => 16, top_value => x"000a", 
 SETTOP => TRUE) 
port map (count => cnt1, enable => enable, 
 clk => clk, reset => reset); 
counter2: counter 
generic map (4, x"000b", FALSE) 
port map (cnt2, enable, clk, reset); 
counter3: counter 
generic map (8, x"001b", TRUE) 
port map (cnt3, enable, clk, reset); 
Cài đặt component cho các bộ đếm 
Chương 2: Ngôn ngữ VHDL 15 
Dạng 
đầy đủ 
Dạng 
rút gọn 
 Gán tín hiệu dùng When 
 Gán tín hiệu dùng With  Select 
CONCURENT SIGNAL ASSIGNMENT 
Chương 2: Ngôn ngữ VHDL 16 
___________________________________________ 
Concurrent signal assignment: Gán tín hiệu đồng thời 
target <= waveform1 when condition1 else 
 waveform2 when condition2 else 
 • 
 • 
 • 
 waveformN–1 when conditionN–1 else 
 waveformN when conditionN else 
 default_waveform; 
Gán tín hiệu dùng When 
Chương 2: Ngôn ngữ VHDL 17 
WITH expression SELECT 
target <= waveform1 WHEN choice_list1, 
 waveform2 WHEN choice_list2, 
 • 
 • 
 • 
 waveformN–1 WHEN choice_listN–1, 
 waveformN WHEN choice_listN, 
 default_value WHEN OTHERS; 
Gán tín hiệu dùng With  Select 
Chương 2: Ngôn ngữ VHDL 18 
. 
Thiết kế MUX dùng phát biểu đồng thời và tuần tự 
19 
library ieee; 
use ieee.std_logic_1164.all; 
----------------------------- 
entity mux2 is 
port ( 
din_0 :in std_logic; 
din_1 :in std_logic; 
sel :in std_logic; 
dout :out std_logic); 
end entity; 
----------------------------- 
architecture bhv of mux2 is 
begin 
with (sel) select 
dout <= din_0 when '0', 
 din_1 when others; 
end bhv; 
library ieee; 
use ieee.std_logic_1164.all; 
----------------------------- 
entity mux2 is 
port ( 
din_0 :in std_logic; 
din_1 :in std_logic; 
sel :in std_logic; 
dout :out std_logic); 
end entity; 
----------------------------- 
architecture bhv of mux2 is 
begin 
process(din_0, din_1,sel) 
begin 
case sel is 
 when '0' => dout <= d_in0; 
 when others => dout <= d_in1; 
end case; 
end process; 
end bhv; 
[label]:for generate_parameter_specification 
generate 
{ concurrent_statement } 
end generate [label]; 
GENERATE 
[label]: if condition 
generate 
{ concurrent_statement } 
end generate [label]; 
Chương 2: Ngôn ngữ VHDL 20 
Ví dụ với GENERATE (1) 
Chương 2: Ngôn ngữ VHDL 21 
library IEEE; 
use IEEE.STD_LOGIC_1164.ALL; 
---------------------------------------- 
entity adder4_gen is 
port( 
 A : in std_logic_vector(3 downto 0); 
 B : in std_logic_vector(3 downto 0); 
 CI : in std_logic; 
 SUM : out std_logic_vector(3 downto 0); 
 CO : out std_logic 
 ); 
end adder4_gen; 
------------------------------ 
architecture dataflow of adder4_gen is 
signal C: std_logic_vector (4 downto 0); 
begin 
 C(0) <= CI; 
 CO <= C(4); 
 Carry: for i in 1 to 4 generate 
 C(i) <= (A(i-1) and B(i-1)) or (C(i-1) 
 and (A(i-1) or B(i-1))); 
 end generate Carry; 
 Suma: FOR i IN 0 to 3 GENERATE 
 SUM(i) <= A(i) xor B(i) xor C(i); 
 END GENERATE Suma; 
end dataflow; 
Sơ đồ mạch? 
Ví dụ với GENERATE (2) 
Chương 2: Ngôn ngữ VHDL 22 
library IEEE; 
use IEEE.STD_LOGIC_1164.ALL; 
----------------------------------------- 
entity generate_expample2 is 
port( 
 A : in std_logic_vector(3 downto 0); 
 B : in std_logic_vector(3 downto 0); 
 O : out std_logic_vector(1 downto 0) 
 ); 
end generate_expample2; 
------------------------------------------ 
architecture dataflow of generate_expample2 is 
begin 
 msk: FOR i IN 0 to 3 GENERATE 
 ifgen: IF i rem 2 = 0 GENERATE 
 O(i/2) <= A(i) and B(i); 
 END GENERATE ifgen; 
 END GENERATE msk; 
end dataflow; 
Sơ đồ mạch? 
Mô tả máy trạng thái (FSM) 
 Mô hình Moore vs Mealey 
 1-process FSM 
 2-process FSM 
FSM 
Moore 
machine 
Mealy 
machine 
Chương 2: Ngôn ngữ VHDL 23 
Moore vs Mealey (FSM) 
24 
X = 0 
State type declaration 
-- declare the (state-machine) enumerated type 
type FSM_States is (RST, CNT, LOAD, OUT); 
-- declare signals of FSM_States type 
signal current_state, next_state: FSM_States; 
Khai báo kiểu: 
Khai báo tín hiệu: 
current_state, next_state chỉ nhận một trong 
các giá trị trong tập hợp sau: RST, CNT, LOAD, OUT 
Chương 2: Ngôn ngữ VHDL 25 
1-Process FSM 
Chương 2: Ngôn ngữ VHDL 26 
process(clk, rst) 
begin 
if(rst = ‘1’) then 
 state <= s0; 
 Z <= ‘0’; 
elsif (rising_edge(clk)) then 
 case state is 
 when S0 => 
 next_state <= .... ; 
 Z <= ... ; 
 when S1 => 
 next_state <= ... ; 
 Z <= ... ; 
 end case; 
end if; 
end process; 
X Z 
2-Process Moore State Machine 
Chương 2: Ngôn ngữ VHDL 27 
process ( clk, rst) 
begin 
if(rst = ‘1’) then 
 State <= S0; 
elsif (rising_edge(clk)) then 
case state is 
 when S0 => 
 if(X =’1’) then 
 next_state <= ... ; 
 end if; 
 when S1 => 
 if( X = ‘1’) then 
 next_state <= ... ; 
 end if; 
 end case; 
end if; 
end process; 
process (state) 
begin 
case state is 
 when S0 => Z <= ... ; 
 when S1 => Z <= ... ; 
end case; 
end process; 
X Z 
2-Process Mealy FSM 
Chương 2: Ngôn ngữ VHDL 28 
process (clk, rst) 
begin 
if(rst = ‘1’) then 
 state <= S0; 
elsif (rising_edge(clk)) then 
 case state is 
 when S0 => 
 if(X=’1’) then 
 next state <= ... ; 
 end if; 
 when S1 => 
 if( X = ‘1’) then 
 next state <= ... ; 
 end if; 
 end case; 
end process; 
process (state, X) 
begin 
 case state is 
 when S0 => 
 if(X=’1’) then 
 Z <= ... ; 
 else 
 Z <= ... ; 
 end if; 
 when S1 => 
 if(X=’1’) then 
 Z <= ... ; 
 else 
 Z <= ... ; 
 end if; 
 end case; 
end process; 
X 
Z 
Ví dụ thiết kế FSM đơn giản 
_ 
Chương 2: Ngôn ngữ VHDL 29 
Example: 1-Process Mealy FSM 
library IEEE; 
use IEEE.std_logic_1164.all; 
entity fsm is 
port ( clk, reset, x1 : IN std_logic; 
outp : OUT std_logic); 
end entity; 
architecture beh1 of fsm is 
type state_type is (s1,s2,s3,s4); 
signal state: state_type ; 
begin 
process (clk, reset) 
begin 
if (reset ='1') then 
 state <=s1; outp<='1'; 
elsif (clk='1' and clk'event) then 
 case state is 
 when s1 => 
 if x1='1' then state <= s2; 
 else state <= s3; 
 end if; 
 outp <= '1'; 
 when s2 => state <= s4; outp <= '1'; 
 when s3 => state <= s4; outp <= '0'; 
 when s4 => state <= s1; outp <= '0'; 
 end case; 
end if; 
end process; 
end beh1; 
Chương 2: Ngôn ngữ VHDL 30 
31 
library IEEE; 
use IEEE.std_logic_1164.all; 
entity fsm is 
port ( clk, reset, x1 : IN std_logic; 
outp : OUT std_logic); 
end entity; 
architecture beh1 of fsm is 
type state_type is (s1,s2,s3,s4); 
signal state: state_type ; 
begin 
process1: process (clk, reset) 
begin 
if (reset ='1') then state <=s1; 
elsif (clk='1' and clk„event) then 
2-Process FSM 
case state is 
 when s1 => if x1='1' then state <= s2; 
 else state <= s3; 
 end if; 
 when s2 => state <= s4; 
 when s3 => state <= s4; 
 when s4 => state <= s1; 
end case; 
end if; 
end process process1; 
process2 : process (state) 
begin 
case state is 
 when s1 => outp <= '1'; 
 when s2 => outp <= '1'; 
 when s3 => outp <= '0'; 
 when s4 => outp <= '0'; 
end case; 
end process process2; 
end beh1; 
VHDL testbench 
(Chương trình mô phỏng/kiểm tra thiết kế VHDL) 
DUT 
Input 
generate 
Output 
Verification 
DUT: Design Under Test 
Chương 2: Ngôn ngữ VHDL 32 
Example: VHDL Testbench 
library IEEE; 
use IEEE.STD_LOGIC_1164.ALL; 
------------------------------------------- 
entity adder4_test is 
end adder4_test; 
------------------------------------------- 
architecture test of adder4_test is 
component adder4 is 
port ( 
 A : in std_logic_vector(3 downto 0); 
 B : in std_logic_vector(3 downto 0); 
 CI : in std_logic; 
 SUM : out std_logic_vector(3 downto 0); 
 CO : out std_logic 
 ); 
end component; 
-- khai bao cac tin hieu vao ra cho DUT 
signal A : std_logic_vector(3 downto 0) := "0101"; 
signal B : std_logic_vector(3 downto 0) := "1000"; 
signal CI : std_logic := '1'; 
-- output--- 
signal SUM : std_logic_vector(3 downto 0); 
signal CO : std_logic; 
begin 
 DUT: component adder4 
 port map ( 
 A => A, B=> B, CI => CI, 
 SUM => SUM, CO =>CO 
 ); 
end test; 
33 
Mô hình kiểm tra tự động 
Chương 2: Ngôn ngữ VHDL 34 
DUT
Tạo giá trị 
đầu vào
So sánh 
giá trị 
đầu ra
Mô hình tham 
chiếu
Kết quả 
kiểm tra
DUT: Design Under Test 
Mô hình kiểm tra tự động: Ví dụ 
library IEEE; 
use IEEE.STD_LOGIC_1164.ALL; 
use IEEE.STD_LOGIC_ARITH.ALL; 
use IEEE.STD_LOGIC_UNSIGNED.ALL; 
----------------------------------------- 
entity adder4_etalon is 
port( 
 A : in std_logic_vector(3 downto 0); 
 B : in std_logic_vector(3 downto 0); 
 CI : in std_logic; 
 SUM : out std_logic_vector(3 downto 0); 
 CO : out std_logic); 
end adder4_etalon; 
------------------------------------------ 
architecture behavioral of adder4_etalon is 
signal s_sig: std_logic_vector(4 downto 0); 
signal a_sig: std_logic_vector(4 downto 0); 
signal b_sig: std_logic_vector(4 downto 0); 
begin 
 a_sig <= '0' & A; 
 b_sig <= '0' & B; 
 plus: process (a_sig, b_sig, CI) 
 begin 
 s_sig <= a_sig + b_sig + CI; 
 end process plus; 
 SUM <= s_sig (3 downto 0); 
 CO <= s_sig (4); 
end behavioral; 
35 
Mô hình kiểm tra tự động: Ví dụ 
library IEEE; 
use IEEE.STD_LOGIC_1164.ALL; 
use IEEE.STD_LOGIC_ARITH.ALL; 
USE IEEE.STD_LOGIC_UNSIGNED.ALL; 
library STD; 
use STD.TEXTIO.ALL; 
----------------------------------------- 
entity adder4_testbench is 
end adder4_testbench; 
----------------------------------------- 
architecture testbenchfull of adder4_testbench is 
signal a_t : std_logic_vector(3 downto 0) := "0000"; 
signal b_t : std_logic_vector(3 downto 0) := "0000"; 
signal sum_t : std_logic_vector(3 downto 0); 
signal sum_e : std_logic_vector(3 downto 0); 
signal ci_t : std_logic := '0'; 
signal co_t : std_logic; 
signal co_e : std_logic; 
signal clk : std_logic := '0'; 
component adder4 
 port (A : in std_logic_vector (3 downto 0); 
 B : in std_logic_vector (3 downto 0); 
 CI : in std_logic; 
 SUM : out std_logic_vector (3 downto 0); 
 CO : out std_logic 
 ); 
end component; 
component adder4_etalon 
 port (A : in std_logic_vector (3 downto 0); 
 B : in std_logic_vector (3 downto 0); 
 CI : in std_logic; 
 SUM : out std_logic_vector (3 downto 0); 
 CO : out std_logic 
 ); 
 end component; 
BEGIN 
 --create clock 
create_clock: process 
begin 
 clk <= '0'; 
 wait for 50 ns; 
 clk <= '1'; 
wait for 50 ns; 
end process create_clock; 
 check: process (clk) 
 variable info: line; 
 variable test_cnt: integer := 0; 
begin 
 if clk = '1' and clk'event then 
 write(info, string'("Test # ")); 
 write(info, integer'(test_cnt + 1)); 
 write(info, string'(" a = ")); 
 write(info, integer'(conv_integer(a_t))); 
 write(info, string'(" b = ")); 36 
Mô hình kiểm tra tự động: Ví dụ 
 write(info, integer'(conv_integer(b_t))); 
 write(info, string'(" CI = ")); 
 write(info, integer'(conv_integer(ci_t))); 
 write(info, string'(" sum = ")); 
 write(info, integer'(conv_integer(sum_t))); 
 write(info, string'(" CO = ")); 
 write(info, integer'(conv_integer(co_t))); 
 write(info, string'(" sum_e = ")); 
 write(info, integer'(conv_integer(sum_e))); 
 write(info, string'(" CO_e = ")); 
 write(info, integer'(conv_integer(co_e))); 
 if sum_e /= sum_t or co_e /= co_t then 
 write(info, string'("FAILURE")); 
 else 
 write(info, string'(" OK")); 
 end if; 
 writeline(output, info); 
 -- input data generator. 
 test_cnt := test_cnt + 1; 
 ci_t <= not ci_t; 
 if ci_t = '1' then 
 a_t <= a_t +1; 
 end if; 
 if a_t = "1111" then 
 b_t <= b_t + 1; 
 end if; 
 assert test_cnt < 512 
 report "end simulation" severity NOTE; 
 end if; 
 end process check; 
-- component installation 
 dut: adder4 
 port map ( 
 A => a_t, B => b_t, CI => ci_t, 
 SUM =>sum_t, CO => co_t); 
 etalon: adder4_etalon 
 port map (A => a_t, B => b_t, CI => ci_t, 
 SUM =>sum_e, CO => co_e); 
END testbenchfull; 
37 
Trắc nghiệm 
Câu 1: Cấu trúc lệnh FOR  GENERATE 
thường dùng trong trường hợp nào 
A. Dùng cho các cấu trúc chương trình lặp đi lặp lại giống 
nhau trong mô tả thiết kế. 
B. Dùng cho các cấu trúc mô tả lặp lại giống nhau hoặc có 
quy luật. 
C. Dùng để mô tả cho vòng lặp cứng trong thiết kế. 
D. Dùng mô tả các cấu trúc phần cứng có tính tùy biến về 
số lượng các khối cài đặt. 
Chương 2: Ngôn ngữ VHDL 38 
Trắc nghiệm 
Câu 2: Bản chất của câu lệnh PROCESS 
trong VHDL 
A. Tạo một quá trình trong mô tả kiến trúc của thiết kế. 
B. Là một khối lệnh tuần tự. 
C. Là một khối lệnh chứa là các lệnh tuần tự nhưng 
được xem như một cấu trúc lệnh đồng thời. 
D. Là một câu lệnh đồng thời sử dụng trong mô tả các 
quá trình. 
Chương 2: Ngôn ngữ VHDL 39 
Trắc nghiệm 
Câu 3: Ưu điểm cơ bản của sử dụng câu lệnh gán tín hiệu 
đồng thời so với sử dụng cấu trúc tuần tự tương đương 
A. Mang lại kết quả thiết kế tối ưu hơn 
B. Mã chương trình đơn giản và ngắn gọn hơn 
C. Mô tả sát hơn cấu trúc của mạch và giảm thiểu khả năng 
gây lỗi 
D. Giảm thiểu khả năng gây ra lỗi chức năng của mạch 
Chương 2: Ngôn ngữ VHDL 40 
Trắc nghiệm 
Câu 4: Biến generic được sử dụng như thế nào trong 
thiết kế VHDL 
A. Là các tham biến tĩnh ví dụ độ rộng bit, quy định cấu hình 
chức năng. 
B. Sử dụng như tham biến khi thiết kế nhưng phải là hằng số 
khi sử dụng. 
C. Là một biến phát sinh ra trong quá trình sử dụng khối thiết 
kế như một khối con. 
D. Sử dụng để quy định cho các đặc tính của các tham biến 
động trong thiết kế. 
Chương 2: Ngôn ngữ VHDL 41 
Trắc nghiệm 
Câu 5: Phân biệt tác dụng của lệnh IF tuần tự và IF GENERATE 
A. Lệnh IF tuần tự chỉ tác động lên các khối mô tả tuần tự còn lệnh IF 
 GENERATE tác động lên khối lệnh song song 
B. Lệnh IF tuần tự chỉ tác động lên các tham biến động còn lệnh 
IF  GENERATE tác động lên các tham biến tĩnh. 
C. Lệnh IF tuần tự là câu lệnh rẽ nhánh có điều kiện phân cấp còn 
IF GENERATE là lệnh với một giá trị điều kiện. 
D. Lệnh IF tuần tự làm thay đổi cấu trúc thiết kế hiện tại theo điều kiện 
logic của tham biến cài đặt còn IF  GENERATE cài đặt/hoặc 
không cài đặt theo điều kiện của tham biến tĩnh trong câu lệnh. 
Chương 2: Ngôn ngữ VHDL 42 

File đính kèm:

  • pdfbai_giang_thiet_ke_logic_so_chuong_2_ngon_ngu_vhdl_phan_5_ho.pdf