Tải bản đầy đủ (.pdf) (42 trang)

Bài giảng Thiết kế logic số: Lecture 2.5 - TS. Hoàng Văn Phúc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (863.15 KB, 42 trang )

Thiết kế logic số
(VLSI design)
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
/>

Giới thiệu Bài giảng
 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.

Chương 2: Ngôn ngữ VHDL



2


Nhắc lại bài 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

Chương 2: Ngôn ngữ VHDL

3


Câu hỏi thảo luận chính
 Đ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?

Chương 2: Ngôn ngữ VHDL

4


VHDL statements (Phát biểu VHDL)

VHDL
statements

Concurrent
Đồng thời
Chương 2: Ngôn ngữ VHDL

Sequential
Tuần tự
5


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

Chương 2: Ngôn ngữ VHDL

6


Concurrent statements (Phát biểu đồng thời)
 Gán tín hiệu (dùng toán tử)
 Mô tả PROCESS
 Cài đặt component (COMPONENT INSTALLATION)

 GENERATE
 Gán tín hiệu đồng thời (Concurrent Signal Assignment)

Chương 2: Ngôn ngữ VHDL

7


Gán tín hiệu (dùng toán tử)
S
<= (A xor B) xor Cin;
Cout <= (A and B) or
(Cin and (A xor B));

Phần cứng tạo ra:


Chương 2: Ngôn ngữ VHDL

8


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

Chương 2: Ngôn ngữ VHDL

9


COMPONENT INSTALLATION
Khai báo (Declaration):

COMPONENT component_name IS
GENERIC (generic_declarations );
PORT (input,_output_declarations);
END COMPONENT component_name;

Cài đặt (Installation):
instant_name: COMPONENT component_name
GENERIC MAP( generics => generic values)

PORT MAP (inputs_and_outputs => signals);
Chương 2: Ngôn ngữ VHDL

10


Ví dụ 1: Thanh ghi dịch
CLK
Din

D

SET

CLR

Q

Q

D

SET

CLR

Q

Q


D

SET

CLR

Q

Dout

Q

Sử dụng thiết kế D-FF ba lần
Khai báo và cài đặt component

Chương 2: Ngôn ngữ VHDL

11


Ví dụ 1: Thanh ghi dịch (tiếp)
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;

begin

Dạng đầy đủ

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 rút gọn
12



Ví dụ 2: Bộ đếm cấu hình được (configurable counter)
entity counter is
generic (
N
:
top_value :
SETTOP
:
port (
count :out
enable :in
clk
:in
reset :in
end entity;

Chương 2: Ngôn ngữ VHDL

natural;
std_logic_vector(15 downto 0);
boolean := FALSE
);
std_logic_vector(N-1 downto 0);
std_logic;
std_logic;
std_logic);

13



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


Cài đặt component cho các bộ đếm
-- 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);

Chương 2: Ngôn ngữ VHDL

Dạng
đầy đủ

Dạng
rút gọn

15


CONCURENT SIGNAL ASSIGNMENT

 Gán tín hiệu dùng When
 Gán tín hiệu dùng With … Select

___________________________________________
Concurrent signal assignment: Gán tín hiệu đồng thời
Chương 2: Ngôn ngữ VHDL

16



Gán tín hiệu dùng When
target <= waveform1 when condition1
waveform2
when condition2



waveformN–1 when conditionN–1
waveformN
when conditionN
default_waveform;

Chương 2: Ngôn ngữ VHDL

else
else

else
else

17


Gán tín hiệu dùng With … Select
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;

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ự
library ieee;
use ieee.std_logic_1164.all;
----------------------------entity mux2 is

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);

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

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;

begin
with (sel) select

dout <=

.
end bhv;

din_0 when '0',
din_1 when others;

19



GENERATE
[label]:for generate_parameter_specification
generate
{ concurrent_statement }
end generate [label];
[label]: if condition
generate
{ concurrent_statement }
end generate [label];

Chương 2: Ngôn ngữ VHDL

20


Ví dụ với GENERATE (1)
architecture dataflow of adder4_gen is
library IEEE;
signal C: std_logic_vector (4 downto 0);
use IEEE.STD_LOGIC_1164.ALL;
---------------------------------------begin
entity adder4_gen is
C(0) <= CI;
port(
CO <= C(4);
A : in std_logic_vector(3 downto 0);
Carry: for i in 1 to 4 generate
B : in std_logic_vector(3 downto 0);

C(i) <= (A(i-1) and B(i-1)) or (C(i-1)
CI : in std_logic;
and (A(i-1) or B(i-1)));
SUM : out std_logic_vector(3 downto 0);
end generate Carry;
CO : out std_logic
Suma: FOR i IN 0 to 3 GENERATE
);
SUM(i) <= A(i) xor B(i) xor C(i);
end adder4_gen;
END GENERATE Suma;
-----------------------------end dataflow;

Sơ đồ mạch?
Chương 2: Ngôn ngữ VHDL

21


Ví dụ với GENERATE (2)
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?

Chương 2: Ngôn ngữ VHDL

22


Mô tả máy trạng thái (FSM)
 Mô hình Moore vs Mealey
 1-process FSM
 2-process FSM

Moore
machine

Chương 2: Ngôn ngữ VHDL

FSM

Mealy
machine


23


Moore vs Mealey (FSM)

X=0

24


State type declaration
Khai báo kiểu:
-- declare the (state-machine) enumerated type
type FSM_States is (RST, CNT, LOAD, OUT);

Khai báo tín hiệu:
-- declare signals of FSM_States type
signal current_state, next_state: FSM_States;

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


×