Thiết kế logic số (VLSI design)

TS. Hoàng Văn Phúc Bộ môn KT Xung, số, Vi xử lý 02/2017

https://sites.google.com/site/phucvlsi/teaching

Nội dung

 Nội dung: Phát biểu tuần tự  Thời lượng: 3 tiết bài giảng

2

VHDL statements

VHDL statements

Sequential

Concurrent

Tuần tự

Đồng thời

3

Sequential statements (Phát biểu tuần tự)

KN: Là các phát biểu được thực thi một cách tuần tự  Việc thực thi phụ thuộc vào vị trí xuất hiện của chúng trong chương trình.

Vị trí: Trong các khối Processes (Quá trình), Procedures (chương trình con) and Functions (Hàm)

Ứng dụng:

4

Dùng mô tả cho mạch tuần tự Dùng mô tả mạch tổ hợp (ít dùng) Dùng cho các cấu trúc mô phỏng, kiểm tra

Sequential statements

1. IF, CASE

2. WAIT, ASSERT, REPORT

3. LOOP

5

4. Sequential Signal Assignment

PROCESS

[label]: Process (sensitive list) Variable: … Begin -- sequential statements End process [label];

6

SENSITIVE LIST?

Lệnh IF

7

IF condition1 THEN -- [sequence-of-statements1] ELSIF condition2 THEN --- [sequence-of-statements2] ELSIF condition3 THEN [sequence-of-statements3] .. ELSE [sequence-of-statementsN] END IF;

IF Example 1: D-Flip Flop

Điều khiển theo sườn clock: if rising_edge(clk) then …

if (clk='1' and clk'event) then …

8

if falling_edge(clk) then … if (clk=‘0' and clk'event) then …

library ieee ;

use ieee.std_logic_1164.all;

entity dff is

port ( d: in std_logic;

rst: in std_logic;

clk: in std_logic;

q: out std_logic);

end dff;

architecture behv of dff is

begin

dff_proc: process(rst, clk)

begin

if (rst = ‘1’) then

q <= ‘0’;

-- clock rising edge

elsif (clk='1' and clk'event) then

q <= d;

end if;

end process dff_proc;

9

end behv;

IF Example 2: Register

10

IF Example 3: Simple Counter

Counter enable? Kd #= 2N

11

Lệnh CASE

CASE expression IS WHEN choice1 => --[sequence-of-statements1] WHEN choice2 => --[sequence-of-statements2] ... WHEN others => -- optional if all choices covered --[sequence-of-statementsN] END CASE;

12

CASE – Example: Multiplexer

13

library IEEE;

use IEEE.STD_LOGIC_1164.ALL; entity mulx2_1 is port ( in1 : in std_logic_vector(7 downto 0); in2 : in std_logic_vector(7 downto 0); sel : in std_logic; dout : out std_logic_vector(7 downto 0) ); end mux2_1; architecture Behavioral of mux2_1 is begin process(in1, in2,sel) begin case sel is when ’0’ => dout <= in1; when others => dout <= in2; end case; end process; end Behavioral;

14

Lệnh LOOP: 3 kiểu

for variable in range loop -- sequence-of-statements end loop;

while condition loop -- sequence-of-statements end loop;

-- sequence-of-statements

15

loop exit when condition end loop;

Lệnh LOOP: Ví dụ (1) – Không có điều kiện

library IEEE; use IEEE.STD_LOGIC_1164.ALL; ----------------------------------------- entity loop_example is port( vector_in : in std_logic_vector(7 downto 0); out1 : out std_logic ); end loop_example; ------------------------------------------ architecture loop1 of loop_example is begin loop_p: process (vector_in) variable i : integer; variable p : std_logic; begin p := '1'; for i in 7 downto 0 loop p := p and vector_in(i); end loop; out1 <= p; end process loop_p; end loop1;

16

Lệnh LOOP: Ví dụ (2)

architecture loop2 of loop_example is begin loop_p: process (vector_in) variable i: integer; variable p: std_logic; begin i := 7; p := '1'; while (i >= 0) loop p := p and vector_in(i); i := i-1; end loop; out1 <= p; end process loop_p; end loop2;

17

Lệnh LOOP: Ví dụ (3)

architecture loop3 of loop_example is begin loop_p: process (vector_in) variable i: integer; variable p: std_logic; begin p := '1'; i := 7; loop p := p and vector_in(i); i := i-1; exit when i < 0; end loop; out1 <= p; end process loop_p; end loop3;

18

Trắc nghiệm

Câu 1: Điểm đặc trưng nhất của các phát biểu tuần tự

trong VHDL

A. Câu lệnh được thực thi một cách tuần tự theo thứ tự

xuất hiện

B. Lệnh tuần tự được biên dịch thành mã máy giống như

C. Lệnh tuần tự chỉ xuất hiện trong khối process hoặc

câu lệnh của phần mềm.

D. Câu lệnh tuần tự dùng để mô tả mạch tuần tự

19

chương trình con

Trắc nghiệm

A. Không có sự khác biệt, hai lệnh này có thể sử dụng

Câu 2: Đặc điểm khác biệt giữa lệnh IF và lệnh CASE

thay thế lẫn nhau.

B. Điều kiện trong câu lệnh CASE là điều kiện cùng cấp

còn điều kiện trong câu lệnh IF là điều kiện phân cấp

C. Lệnh CASE thường dùng cho các khối tổ hợp, còn

lệnh IF sử dụng cho khối mạch tuần tự

20

D. Không có sự khác biệt rõ rệt giữa hai câu lệnh

Trắc nghiệm

Câu 3: Cơ chế ảnh hưởng của sensitive list trong khối Process

A. Giống như danh sách các tham biến đầu vào của khối thiết kế

B. Danh sách sensitive list kích thích cho quá trình thực hiện

C. Bất kỳ sự thay đổi nào của các đối tượng trong danh sách

sensitive list đều làm cho quá trình tương ứng được thực thi.

D. Giá trị của các tín hiệu trong danh sách sensitive list quy định giá

trị của các tín hiệu đầu ra của khối quá trình

21

Trắc nghiệm

A. Lệnh Loop chỉ có ý nghĩa sử dụng trong mô phỏng thiết kế

Câu 4: Phát biểu nào sau đây không đúng

B. Lệnh IF và lệnh CASE có thể thay thế nhau trong một số

trường hợp

C. Lệnh WAIT, ASSERT chỉ sử dung cho mục đích mô phỏng

D. Phần tử nhớ chỉ có thể mô tả bằng câu lệnh tuần tự

22

kiểm tra thiết kế.