1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Bài giảng môn kỹ thuật số 2 chương 5 GV nguyễn hữu chân thành

135 369 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 135
Dung lượng 3,24 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

 Khai báo của các kiểu dữ liệu phải cho phép entity thấy được qua ANDGATE... Thân kiến trúc Architecture body Khai báo entity là một hộp đen với mô tả các giao tiếp I/O còn thân kiến

Trang 1

Chương 5 THIẾT KẾ SỐ DÙNG VHDL

Trang 2

NỘI DUNG

Trang 3

1 GIỚI THIỆU

 Các phương pháp thiết kế:

 Các phương trình Boolean

 Thiết kế dựa trên Schematic

 Các ngôn ngữ mô tả phần cứng HDLs (Hardware

Description Languages): VHDL, Verilog HDL, ABEL, …

Trang 4

1 GIỚI THIỆU (tt)

 Quá trình thiết kế hệ thống số:

Trang 5

 Vẽ dạng sóng quan hệ vào/ra (Waveform Editor)

Trang 6

1 GIỚI THIỆU (tt)

 Tổng hợp (synthesis):

 Tổng hợp logic (logic synthesis/logic optimization)

 Tổng hợp sơ đồ mạch (layout synthesis/physical design)

 Mô phỏng (simulation)

Trang 7

1 GIỚI THIỆU (tt)

 VHDL (Very High Speed Integrated Circuits HDL):

 Ngôn ngữ được dùng để mô tả các hệ thống số: lập tài liệu

(documentation), mô phỏng (simulation), kiểm chứng (verification) và tổng hợp (synthesis)

 VHDL được chuẩn hóa vào năm 1987 qua chuẩn IEEE 1076

(VHDL-87) và được cập nhật năm 1993 (VHDL-93) Sau đó

được bổ sung qua chuẩn IEEE 1164 với hệ thống logic đa

trị.

 Ứng dụng: thiết kế với các PLD, CPLD và FPGA

 Sự khác biệt giữa VHDL và các ngôn ngữ lập trình thông thường

 Ngôn ngữ lập trình thông thường: tuần tự

 VHDL: song song

Trang 8

2 CÁC CẤU TRÚC CƠ BẢN CỦA VHDL

Trang 9

2.1 Entity (tt)

 Khai báo entity

 Entity định nghĩa giao tiếp của module phần cứng với môi

trường bên ngoài sử dụng nó

 Cú pháp khai báo:

entity entity_name is

genericsports

begin

entity statements

end [entity] entity_name;

Trang 10

 Các port trong khai báo entity:

 Mỗi tín hiệu I/O trong một khai báo entity được xem là một

port

 Mỗi port được khai báo phải có tên, chiều dữ liệu (mode) và

kiểu dữ liệu

port (port_name: mode data_type;

port_name: mode data_type;

… port_name: mode data_type);

 In: luồng dữ liệu chỉ đi vào entity.

 Out: luồng dữ liệu chỉ đi ra khỏi entity.

 Buffer: tương tự out, nhưng cho phép hồi tiếp nội

 Inout: luồng dữ liệu có thể vào hay ra entity và cũng cho phép hồi

tiếp nội.

Trang 11

2.1 Entity (tt)

 Kiểu dữ liệu:

 IEEE 1076/93: boolean, bit, bit_vector, integer, …

 IEEE std_logic_1164: std_ulogic, std_ulogic_vector, std_logic và

std_logic_vector (hệ thống logic đa trị).

 Các kiểu dữ liệu do người sử dụng đinh nghĩa.

 Khai báo của các kiểu dữ liệu phải cho phép entity thấy được qua

ANDGATE

Trang 12

2.1 Entity (tt)

 Ví dụ 2.2: khai báo bộ so sánh 4-bit

entity eqcomp4 is port (A, B : in bit_vector(3 downto 0);

equals : out bit);

port (a, b : in std_logic_vector(3 downto 0);

equals: out std_logic);

Trang 13

2.2 Thân kiến trúc (Architecture body)

 Khai báo entity là một hộp đen với mô tả các giao tiếp I/O còn

thân kiến trúc cung cấp mô tả chức năng của hộp đen đó

 Một entity có thể có nhiều thân kiến trúc

 Mỗi thân kiến trúc chỉ kết hợp với một khai báo entity

 Các kiến trúc của VHDL được chia làm 2 loại:

 Mô tả hành vi (behavior description)

 Mô tả dạng giải thuật (algorithmic description)

 Mô tả luồng dữ liệu (data flow description)

 Mô tả cấu trúc (structural description)

 Một thiết kế có thể dùng một trong các loại trên hay cũng có thể

kết hợp các loại với nhau

Trang 14

1 GIỚI THIỆU (tt)

 Biểu diễn hệ thống:

 Dạng hành vi: mô tả chức năng của hệ thống → tập trung

vào quan hệ giữa các tín hiệu vào và ra

 Dạng cấu trúc: mô tả cài đặt bên trong của hệ thống → đặc tả

rõ ràng các thành phần nào được dùng và kết nối giữa chúng

Trang 15

2.2 Thân kiến trúc (Architecture body) (tt)

 Khai báo thân kiến trúc:

architecture architecture_name of entity_name is

declarations

begin

concurrent_statements

end [architecture] architecture_name;

 Mô tả hành vi: mô tả chức năng của hệ thống → tập trung vào

quan hệ giữa các tín hiệu vào và ra

 Mô tả dạng giải thuật: còn được gọi là mô tả cấp cao

(high-level) vì nó tương tự với mô tả trong các ngôn ngữ cấp cao như C, Basic …

Trang 16

Ví dụ 2.4: Mô tả dạng giải thuật:

bộ so sánh bằng 4-bit

entity eqcomp4 is

port (a, b : in std_logic_vector(3 downto 0);

equals: out std_logic);

Trang 17

 Mô tả luồng dữ liệu: mô tả cách dữ liệu truyền từ ngõ vào

đến ngõ ra (không dùng các phát biểu tuần tự)

Ví dụ 2.5: Mô tả dạng luồng dữ liệu:

bộ so sánh bằng 4-bit

library ieee;

use ieee.std_logic_1164.all;

entity eqcomp4 is

port (a, b : in std_logic_vector(3 downto 0);

equals: out std_logic);

Trang 18

Ví dụ 2.6: Mô tả dạng luồng dữ liệu khác:

bộ so sánh bằng 4-bit

library ieee;

use ieee.std_logic_1164.all;

entity eqcomp4 is

port (a, b : in std_logic_vector(3 downto 0);

equals: out std_logic);

end eqcomp4;

architecture bool of eqcomp4 is

begin

equals <= not(a(0) xor b(0))

and not(a(1) xor b(1)) and not(a(2) xor b(2)) and not(a(3) xor b(3)) ; end bool;

Trang 19

2.2 Thân kiến trúc (Architecture body) (tt)

 Mô tả dạng cấu trúc:

 Chứa các danh sách kết nối (netlist) – các thành phần

(component) được khởi tạo và được kết nối với nhau qua các tín hiệu

 Thiết kế dạng phân tầng (hierarchical design)

Structural Decomposition

Behavioral Modeling

a Full Tree Design

Behavioral Modeling

b Partial Tree Design

Trang 20

Ví dụ 2.7: Mô tả dạng cấu trúc:

library ieee;

use ieee.std_logic_1164.all;

entity eqcomp4 is

port (a, b : in std_logic_vector(3 downto 0);

equals: out std_logic);

u0: xnor2 port map (a(0), b(0),x(0));

u1: xnor2 port map (a(1), b(1),x(1));

u2: xnor2 port map (a(2), b(2),x(2));

u3: xnor2 port map (a(3), b(3),x(3));

u4: and4 port map (x(0), x(1),x(2),x(3),equals);

end struct;

Trang 21

2.3 Danh hiệu

gạch dưới

 Ký tự đầu tiên phải là chữ cái

 Ký tự cuối cùng không được là dấu gạch dưới

 Không phân biệt chữ hoa/thường

 Không cho phép hai dấu gạch dưới xuất hiện liên tiếp

 Có thể sử dụng bất cứ ký tự cho phép nào, bao gồm cả các

ký tự !, , @, và $

 Phân biệt chữ hoa và chữ thường

Trang 22

 Ví dụ 2.9: Các danh hiệu nào sau đây là hợp lệ:

Trang 23

2.4 Các đối tượng dữ liệu

 Đối tượng dữ liệu giữ giá trị cĩ kiểu dữ liệu cụ thể

 Đối tượng dữ liệu thuộc một trong 4 lớp: hằng số, biến số, tín

hiệu và tập tin (file)

 Kh n ng nhìn th y (visibility):ả năng nhìn thấy (visibility): ăng nhìn thấy (visibility): ấy (visibility):

 Một đối tượng được khai báo trong một package có thể

được tham chiếu bởi một entity hay một architecture dùng package đó

 Một đối tượng được khai báo trong một entity chỉ được

thấy trong entity đó

 Một đối tượng được khai báo trong một architecture chỉ

được thấy trong architecture đó

 Một đối tượng được khai báo trong một process chỉ được

thấy trong process đó

Trang 24

2.4.1 Hằng số

 Giữ một giá trị khơng đổi trong mơ tả thiết kế Giá trị này

thường được gán khai báo

constant constant_name: type_name [:= value];

Ví dụ 2.10: Các khai báo hằng số:

constant bus_width: integer := 8;

constant rise_time: time := 10ns;

constant iteration: integer := 4;

 Được khai báo trong vùng khai báo của package, entity,

architecture hay process

 Ứng dụng: định nghĩa nội dung của ROM hay các thông số cố

định (delay, số lần lặp, rise time, hold time …)

Trang 25

2.4.2 Tín hiệu

 Đại diện cho giá trị dữ liệu trên các đường dữ liệu thực trong

mạch (wire, port …) hay trạng thái của các phần tử nhớ

signal signal_name: type_name [:= initial value];

Ví dụ 2.11: Các khai báo tín hiệu

signal clock: bit;

signal databus: std_logic_vector(0 to 7);

 Thường được khai báo trong phần khai báo của entity hay

architecrture

 Có hai chiều: thời gian và giá trị

 Một giá trị được gán đến một tín hiệu không làm tín hiệu thay

đổi tức thời mà phải sau một thời gian delay nhỏ

Ký hiệu phép gán: “<=”

Trang 26

 Chỉ dùng trong các process hay subprogam (function và

procedure)

variable variable _name: type_name [:= initial value];

Ví dụ 2.12: Các khai báo biến số

variable result: std_logic := 0;

variable sum: integer range 0 to 100 := 10;

 Ph i được khai báo trong vùng khai báo của các process hay ả năng nhìn thấy (visibility):

subprogam

 Phép gán cho một variable là tức thời (không có chiều thời

gian)

Ký hiệu phép gán: “:=”

 Các biến được dùng chủ yếu cho mục đích tính toán (vòng lặp,

trị trung gian, …)

Trang 27

2.5 Các kiểu dữ liệu

 Trong VHDL các đối tượng dữ liệu của các kiểu cơ bản (base

type) khác nhau không thể gán cho nhau mà không dùng hàm chuyển đổi kiểu

 Ví dụ 2.13: Nếu a và b đều là các biến nguyên thì phép gán

a <= b + ‘1’;

sẽ phát sinh lỗi trừ khi toán tử “+” là overloaded

 Các kiểu dữ liệu trong VHDL có thể chia ra làm 4 loại chính:

 Kiểu vô hướng (kiểu một chiều)

 Kiểu phức hợp (kiểu đa chiều)

 Kiểu truy cập (access)

 Kiểu tập tin (file)

Trang 28

2.5.1 Kiểu vô hướng

 Kiểu vô hướng chỉ giữ một giá trị tại thời điểm mô phỏng hiện

hành (current simulation time)

 Kiểu vô hướng có thứ tự cho phép dùng với các toán tử quan hệ

 Có 4 loại kiểu vô hướng:

 (1) Kiểu liệt kê (enumeration type)

 (2) Kiểu số nguyên (integer type)

 (3) Kiểu số dấu chấm động (floating type)

 (4) Kiểu vật lý (physical type)

Trang 29

2.5.1.1 Kiểu liệt kê

 Danh sách các giá trị mà một đối tượng có thể giữ

 Kiểu liệt kê có thứ tự: giá trị phía trái nhất là nhỏ nhất, tăng dần

theo chiều sang phải và giá trị phía phải nhất là lớn nhất

 Các kiểu định nghĩa sẵn (predefined) trong các gói standard,

std_logic_1164, …

 standard: bit, boolean, character

 std_logic_1164: std_ulogic, std_logic

Ví dụ 2.14:

type boolean is (false, true);

type bit is (‘0’, ‘1’);

Trang 30

2.5.1.1 Kiểu liệt kê (tt)

 std_ulogic: hệ thống 9 mức logic

type std_ulogic is (‘U’, ‘X’, ‘0’, ‘1’, ‘Z’, ‘W’, ‘L’, ‘H’, ‘-’);

 Kiểu std_logic có cùng tập giá trị như std_ulogic nhưng có

hàm phân giải, resolved, để phân giải mức logic khi có nhiều phép gán đến cùng một tín hiệu

subtype std_logic is resolved std_ulogic;

Trang 31

2.5.1.1 Kiểu liệt kê (tt)

 Do người sử dụng định nghĩa (user-defined):

Ví dụ 2.15:

type states is (read, write , play, sleep);

signal current_state: states;

type sports is (baseball, football, basketball, soccer, running);

signal your_sport: sports;

better_than_baskball<=‘1’ when your_sport>= basketball else

‘0’;

Trang 32

2.5.1.2 Kiểu integer

VHDL hỗ trợ các số nguyên trong khoảng – 2147483648 (hay –

(231-1)) ÷ 2147483647 ((231-1)) → (32-bit)

type integer is range -2147483648 to 2147483647;

 Một đối tượng kiểu integer có thể ràng buộc với một khoảng

variable a : integer range -255 to 255;

 Các thao tác với số có dấu và không dấu → tùy công cụ tổng hợp

hỗ trợ

2.5.1.3 Kiểu real

 Giá trị trong khoảng -1.0E38 ÷ +1.0E38

type real is range -1.0E38 to 1.0E38;

 Thường không được hỗ trợ trong các công cụ tổng hợp do lượng

tài nguyên cần để cài đặt các thao tác số học là rất lớn

Trang 33

 Thường là các đơn vị đo, không có ý nghĩa cho việc tổng hợp.

Ví dụ 2.16: Kiểu vật lý định nghĩa sẵn là time

type time is range -2147483647 to 2147483647

Trang 34

2.5.2 Kiểu phức hợp

 Một đối tượng kiểu phức hợp có thể giữ nhiều giá trị tại 1 thời

điểm

 Có 2 loại kiểu phức hợp:

 (1) Kiểu mảng (array type)

 (2) Kiểu bản ghi (record type)

Trang 35

 Đối tượng kiểu mảng gồm nhiều phần tử có cùng kiểu dữ liệu.

 Các kiểu định nghĩa sẵn:

Ví dụ 2.17:

type bit_vector is array (natural range <>) of bit;

type std_logic_vector is array (natural range <>) of std_logic;

signal a: std_logic_vector (7 downto 0);

 Người dùng cũng có thể định nghĩa kiểu riêng:

Ví dụ 2.18:

type byte is array(7 downto 0) of bit;

signal b: byte;

type data_word is array (7 downto 0) of std_logic; 1D

type ROM is array (0 to 125) of data_word; 1D x 1D

type decode_matrix is array (positive range 15 downto 1,

natural range 3 downto 0) of std_logic; 2D

Trang 36

 Một đối tượng mảng có thể gán cho một đối tượng mảng khác có

 Có thể dùng ký hiệu để chỉ định cơ số cho một chuỗi bit: nhị

phân (B), bát phân (O) và thập lục phân (X)

Ví dụ 2.20:

signal a: std_logic_vector(0 to 7);

a <= X“7A”;

Trang 37

 Đối tượng kiểu bản ghi gồm nhiều phần tử có thể có các kiểu dữ

liệu khác nhau

Ví dụ 2.21:

type iocell is record

buffer_inp : bit_vector(7 downto 0);

Trang 38

 Ví dụ 2.22:

type byte_size is integer range 0 to 255;

signal my_int: byte_size;

signal your_int: integer range 0 to 255;

Thao tác sau phát sinh lỗi biên dịch: if my_int=your_int then …

 Kiểu con là kiểu cơ bản (base type) với một ràng buộc

Ví dụ 2.23:

type DIGIT is (‘0’,’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’);

subtype MIDDLE is DIGIT range ’3’ to ’7’;

subtype byte is bit_vector(7 downto 0);

signal b1: byte;

signal b2: bit_vector(7 downto 0);

Thao tác sau không phát sinh lỗi biên dịch: if b1 = b2 then …

Trang 39

2.5.4 Một số kiểu dữ liệu bổ sung

 Chuẩn IEEE 1076.3 định nghĩa 2 package VHDL: numeric_bit

và numeric_std

 Hai package này mở rộng một vài toán tử và định nghĩa một số

hàm mới cho các kiểu unsigned và signed

 Numeric_std:

type unsigned is array (natural range <>) of std_logic;

type signed is array (natural range <>) of std_logic;

 Numeric_bit:

type unsigned is array (natural range <>) of bit;

type signed is array (natural range <>) of bit;

 Tham khảo thêm các package khác trong \Refs\ieee1164pkg.pdf

Trang 40

2.5.5 Chuyển đổi kiểu dữ liệu

 Chuyển đổi từ một kiểu dữ liệu này sang một kiểu dữ liệu khác

 Các package bổ sung cung cấp sẵn một số hàm chuyển đổi kiểu

(tham khảo \Refs\ieee1164pkg.pdf)

Ví dụ 2.24:

- to_stdlogicvector(bit_vector): chuyển bit_vector thành std_logic_vector.

signal a: bit_vector(3 downto 0);

signal b: std_logic_vector(3 downto 0);

a <= “0101”;

b <= to_stdlogicvector(a);

- conv_std_logic_vector(integer, bits) : chuyển integer thành std_logic_vector.

conv_std_logic_vector(7,4) sẽ cho kết quả là “0111”

- conv_integer(std_logic_vector) : chuyển std_logic_vector thành integer.

conv_integer(“0111”) sẽ cho kết quả là 7

Trang 41

2.6 Các toán tử

 Biểu thức (expression): bao gồm các toán tử và các toán hạng

 Mỗi toán tử (operator) được chỉ định với một hay một số kiểu dữ

liệu cụ thể → dùng toán tử với các toán hạng thuộc kiểu dữ liệu không được hỗ trợ là không hợp lệ → các toán tử mở rộng (overloaded operators)

Trang 42

2.6 Các toán tử (tt)

 Các toán hạng trong các phép toán số học phải cùng kiểu,

ngoại trừ phép toán lấy mũ cần số mũ phải là số nguyên

 Các toán tử logic không có thứ tự ưu tiên như trong đại số

Boole → cần dùng các dấu ngoặc trong các phương trình logic nhiều tầng (multilevel logic equations)

Ví dụ 2.25:

X = A + B.C trong đại số Boole được tính là X = A + (B.C)

Nhưng trong VHDL sẽ là X = (A + B).C

Do đó đoạn mã: X <= A or B and C cần viết lại là X <= A or (B and C)

 Các toán hạng trong các phép toán quan hệ phải cùng kiểu,

tuy nhiên kết quả luôn là kiểu Boolean (True hay False)

 Overloaded operators: tham khảo \Refs\ieee1164pkg.pdf

Trang 43

2.7 Các thuộc tính

 Cung cấp thông tin bổ sung về một tín hiệu, biến, kiểu dữ liệu

hay một thành phần (component)

 Một số thuộc tính định nghĩa sẵn thông dụng:

 Một số thuộc tính của kiểu vô hướng và kiểu mảng:

X'high giới hạn trên của X (hay chỉ số trên nếu X là 1 mảng) X'low giới hạn dưới của X (hay chỉ số dưới nếu X là mảng) X'left giá trị phía trái nhất của X (hay chỉ số phía trái nhất nếu X là

1 mảng)

X'right giá trị phía phải nhất của X (hay chỉ số phía phải nhất nếu X là

1 mảng)

 Một số thuộc tính của kiểu mảng có ràng buộc:

X'reverse_range khoảng của X theo thứ tự ngược

Ngày đăng: 06/12/2015, 04:14

TỪ KHÓA LIÊN QUAN