THIET KE NHO’ MAY TINH Nguyễn Phú Bình Bộ môn KTMT - Khoa CNTT Trường ĐH Bách Khoa Hà Nội Nội dung của môn học
= Phan 1: Cơ sở thiết kế mach logic
= Phan 2: Quy trình thiết kế ASIC/ASIP
= Phan 3: Ngôn ngữ mô tả phần cứng VHDL
Copyright (c) 10/2006 by NPB 3
của tác giả
" Không được tự ý sao chép hay quảng bá bài giảng này nếu chưa được sự đồng ý của tác giả
" Địa chỉ liên hệ của tác giả: Nguyễn Phú Bình
Bộ môn Kỹ thuật Máy tính
Khoa Công nghệ Thông tin
Trang 2Chuong 1
GIỚI THIỆU CHUNG
Nguyễn Phú Bình
Bộ môn Kỹ thuật Máy tính, Khoa Công nghệ Thông tin
Trường Đại học Bách Khoa Hà Nội
Copyright (c) 10/2006 by NPB
" Very High Speed Intergrated Circuit Hardware Description Language
= Tiéu chuan IEEE-1076-1987
“Trước khi VHDL ra đời, có khá nhiều ngôn ngữ mô
phỏng phần cứng:
- Không thống nhất
‹ Mang các đặc trưng gắn với thiết bị của nhà cung cấp - Thuộc sở hữu nhà cung cấp Copyright (c) 10/2006 by NPB 7 Các ưu điêm của VHDL 1.1 Giới thiệu về VHDL 1.2 Các bước thiết kế 1.3 Các công cụ tự động thiết kế điện tử 1.4 Chuyển từ mã VHDL sang mạch Copyright (c) 10/2006 by NPB " Tính công cộng:
s VHDL là một tiêu chuẩn của IEEE
a Không thuộc sở hữu của bất kỳ cá nhân hay tổ chức nào
o Được hỗ trợ của nhiều nhà sản xuất thiết bị cũng như nhiêu nhà cung câp công cụ thiệt kê mô phỏng hệ thông
Copyright (c) 10/2006 by NPB 8
Trang 3Các ưu điểm của VHDL (tiếp) : Cac ưu điểm của VHDL (tiếp)
= Kha nang ho tro’ nhiều công nghệ và phương pháp = Kha năng trao đổi kết quả:
thiết kế: c Vì VHDL là một tiêu chuẩn được chấp nhận, nên một mô
› VHDL cho phép thiết kế bằng nhiều phương pháp như hình VHDL có thê chạy trên mọi bộ mô phỏng đáp ứng
thiết kế từ trên xuống, hay từ dưới lên dựa vào các thư được tiêu chuẫn VHDL
viện có sẵn " Khả năng hỗ trợ thiết kế mức lớn và khả năng sử
a VHDL cũng hỗ trợ cho nhiều loại công nghệ xây dựng dụng lại các thiết kế: mạch như sử dụng công nghệ đồng bộ hay không đồng
bộ, sử dụng ma trận lập trình được hay sử dụng mảng logic ngẫu nhiên
a VHDL có thễ phục vụ tốt cho nhiều mục đích thiết kế
khác nhau, từ việc thiết kế các phần tử phổ biến đến việc -_ Bên trong VHDL có nhiều tính năng hỗ trợ việc quản lý, thiết kế các IC ứng dụng đặc thu (Application Specified thử nghiệm và chia sẻ thiết kế - §/"
IC - ASIC) c VHDL ciing cho phép dùng lại các phân đã có sản ‹ Là một ngôn ngữ lập trình bậc cao nên VHDL có thé stp
dung dé thiét ké một hệ thống lớn với sự tham gia của một nhóm nhiều người
Copyright (c) 10/2006 by NPB 9 Copyright (c) 10/2006 by NPB 11
" Độc lập với công nghệ: Các ưu điểm của VHDL (tiếp) Nội dung chươn
„ Hoàn tồn độc lập với cơng nghệ chế tạo phần cứng 1.1 Giới thiệu về VHDL a VD: mot mô tả hệ thống dùng VHDL thiết kế ở mức cổng 1.2 Các bước thiết ké
có thể được chuyển thành các bản tỗng hợp mạch khác eo
nhau tùy thuộc vào công nghệ chế tạo phần cứng nao 1.3 Các công cụ tự động thiệt kê điện tử
được sử dụng (dùng CMOS, nMOS, .) 1.4 Chuyển từ mã VHDL sang mạch " Khả năng mô tả mở rộng:
s VHDL cho phép mô tả hoạt động của phần cứng từ mức hệ thống số (hộp đen) cho đến mức cỗng
« VD: có thể mô phỏng một bản thiết kế bao gồm cả các hệ con được mô tả ở mức cao và các hệ con được mô tả
chỉ tiết Copyright (c) 10/2006 by NPB 10 Copyright (c) 10/2006 by NPB 12
Trang 4
Các bước thiết kế
VHDL etry -Ắ
(RTL love Ir =_ Bước 1: Viết mã VHDL (Register Transfer Level) Cemntiesn “ Bước 2: Tổng hợp Y ¡Biên dịch mã VHDL thành Nethes Netlist (Ube bevel) ø Tối ưu Netlist (về tốc độ/diện tích) - mô phỏng thiết kế » Bước 3: Xếp chỗ và nối dây ø_ Dùng phần mềm tạo layout cho chip PLD/FPGA hoặc các mặt nạ cho ASIC Srlaxe ⁄ˆ tiruruwz,m Y CNGrtmtzcd scilsi (Comte evel) *Xwufiila1(6:
Fax & Rik Xwnilal‹s Copyright (c) 10/2006 by NPB 13 = Một số bộ công cụ (design suite): c Altera’s Quartus II c Xilinx’s ISE
= Mét sé géi chuong trinh riéng:
« Leonardo Spectrum (CT tống hợp của Mentor Graphics) c Synplify (CT téng hop ctia Synplicity)
c ModelSim (CT m6 phoéng cua Model Technology, Mentor Graphics) Copyright (c) 10/2006 by NPB 15 Nội dung chương 1 Nội dung chương † 1.1 Giới thiệu về VHDL 1.2 Các bước thiết kế 1.3 Các công cụ tự động thiết kế điện tử 1.4 Chuyển từ mã VHDL sang mạch
Copyright (c) 10/2006 by NPB 14 1.1 Giới thiệu về VHDL 1.2 Cac bước thiết kế
1.3 Các công cụ tự động thiết kế điện tử 1.4 Chuyển từ mã VHDL sang mạch
Copyright (c) 10/2006 by NPB 16
Trang 5Tw ma VHDL sang mach = VD: B6 cong day du (Full Adder) ab cin | s cout a —> ‹ 00 6 |0 0 Fur [ 01 0 |1 0 b-> Adder io 0 1 O — COUL ii a o I1 el 00 E [1 oO 01 tf ụU | s=na£fb@cm I0 | 0 | cout = a.b + a.cin + b.cin bi 1 tl Copyright (c) 10/2006 by NPB 17 = Mạch vật lý phụ thuộc vào công cụ tổng hợp (biên dịch/tối ưu) và công nghệ của thiết bị =_ VD: các sơ đồ mạch có thể có của bộ FullAdder > PLD, FPGA:hinh b, ¢ > ASIC: hinhd — ve = - ' ` s =~ in 11 : * " | bo " : lo ie - > ————— F een a4 : " ` | ‘ote ] 3 ˆR i [pt ef oof on = 1} wt, rr) Copyright (c) 10/2006 by NPB 19 về u Ma VHDL va tin hiệu mô phỏng a Cobar ed Ser) tem (511% Pull@amer fi rest (3, b, $14( 19 hat, », ceetz OOF 441); (9 fsii@ee#ez; §WOH1U/140 @v23(4fLes Éf ?(ái8d£xr lý tieIM âđ #đ b €6 ziaj vert {C (ð 09% bị A (Ca 4 ti: 9V {b W@ si ớ|: Lê sự re sE1es4; Copyright (c) 10/2006 by NPB 18 Chương 2 CẤU TRÚC MÃ LỆNH Nguyễn Phú Bình
Bộ môn Kỹ thuật Máy tính, Khoa Công nghệ Thông tin
Trường Đại học Bách Khoa Hà Nội
Copyright (c) 10/2006 by NPB 20
Trang 6
2.1 Cac don vi co’ ban cua VHDL
2.2 Khai báo thư viện (Library) 2.3 Thực thê (Entity) 2.4 Kiến trúc (Architecture) 2.5 Các ví dụ Copyright (c) 10/2006 by NPB 21 ee » baat Các don vi co’ ban cua VHDL (tiép) LIBRARY ¬ declarations Basic ENTITY VHDL code ARCHITECTURE - Copyright (c) 10/2006 by NPB 23 Các đơn vị cơ bản của VHDL = Ma lénh VHDL gém 3 phần cơ bản sau:
o Khai bao LIBRARY (thu viện): gồm danh sách các thư viện sử dụng trong thiệt kê (VD: ieee, std, work, .) a ENTITY (thực thể): mô tả các chân vào-ra của mạch „ ARCHITECTURE (kiến trúc): mô tả hoạt động của mạch = LIBRARY:
¡ Tập hợp các đoạn lệnh thường được sử dụng ¡ Cho phép sử dụng lại các đoạn mã lệnh và chia sẻ với
các ứng dụng khác
„ Mã lệnh được viết theo khuôn dạng của các FUNCTION, PROCEDURE hay COMPONENT và được đặt bên trong các PACKAGE
Copyright (c) 10/2006 by NPB 22
Trang 7
2.2 Khai báo thư viện (Library)
" Cú pháp:
LIBRARY library_name;
USE library name.package_name.package_parts;
»" Thường sử dụng các thư viện sau: LIBRARY ieee; USE ieee.std logic 1164.a1ll; LIBRARY std; USE std.standard.all; LIBRARY work; USE work.all; Copyright (c) 10/2006 by NPB 25 Nội dung chương 2
2.1 Các đơn vị cơ bản của VHDL
2.2 Khai báo thư viện (Library) 2.3 Thực thé (Entity) 2.4 Kiến trúc (Architecture) 2.5 Các ví dụ Copyright (c) 10/2006 by NPB 27 Khai báo thư viện (tiếp) "Các thư viện std và work ngầm định có sẵn, không cần khai báo = Sử dụng thư viện ieee khi dùng các kiểu dữ liệu STD LOGIC, STD_ULOGIC,
= Thu vién ieee gdm các gói (package):
¬ $td_logic_1164: các mức logic STD_LOGIC và STD_ULOGIC
3 Síd logic arith:
" Các kiểu dữ liệu SIGNED và UNSIGNED
" Các thuật toán xử lý dữ liệu và các phép toán so sánh
= Các hàm chuyển đổi dữ liệu
¬ síd logic _signed: cho phép xử lý dữ liệu STD_LOGIC_VECTOR
như là dữ liệu kiểu SIGNED
1 std_logic_unsigned: cho phép xử lý dữ liéu STD_LOGIC_VECTOR như là dữ liệu kiêu UNSIGNED Copyright (c) 10/2006 by NPB 26 2.3 Thực thể (Entity) " Cú pháp: ENTITY entity name IS PORT (
port name : signal _ mode signal type; port name : signal mode signal type; c }?
END entity name;
" Trong đó:
c Signal mode: IN, OUT, INOUT, BUFFER c Signal type: BIT, STD_LOGIC, INTEGER,
c Entity name: khéng dug’c dung cac tén riéng cua VHDL
Copyright (c) 10/2006 by NPB 28
Trang 82.4 Kién tric (Architecture) ENTITY nand_ gate 18 PORT {ä, b : IN BIT; > OUT x : OUT BIT); END nand gate; IN —p Circuit —> INGUT ì > BUFFER x _ — w b Sietadl mrww#ex NAND gate Copyright (c) 10/2006 by NPB 29 “ Mỗi thực thê phải đi kèm với ít nhất 1 kiến trúc " Cú pháp: ARCHITECTURE architecture name OF entity name IS [declarations] BEGIN (code) END architecture_name; " Ví dụ: ARCHITECTURE myarch OF nand_gate IS BEGIN x <= a NAND 5b; END myarch; Copyright (c) 10/2006 by NPB 31 Các kiêu mô tả kiến trúc
2.1 Các đơn vị cơ bản của VHDL 2.2 Khai báo thư viện (Library)
2.3 Thuc thé (Entity) 2.4 Kién tric (Architecture)
2.5 Cac vi du
Copyright (c) 10/2006 by NPB 30 = M6 hinh cau tric (Structural Style): gồm các thành phân (component) được liên kêt với nhau
" Mô hình luồng dữ liệu (Dataflow Style): gom cac
lệnh gán được thực hiện đồng thời
"Mô hình hoạt động (Behavioral Style): gồm các lệnh gán được thực hiện tuần tự
“ Dạng kết hợp của 3 kiểu mô hình trên
Copyright (c) 10/2006 by NPB 32
Trang 9
Nội dung chương 2 Ví dụ 1 (tiếp)
2.1 Các đơn vị cơ bản của VHDL
2.2 Khai báo thư viện (Library) 2.3 Thực thê (Entity) 2.4 Kiến trúc (Architecture) 2.5 Các ví dụ Copyright (c) 10/2006 by NPB 33 1 2 LIBRARY ieee; 3 USE ieee.std logic 1164.,a1ll; 4 5 ENTITY dff IS 6 PORT (d, clk, rst: IN STD_LOGIC; 7 q: OUT STD_LOGIC) ; 8 END dff; 9 10 ARCHITECTURE behavior OF dff IS 11 BEGTN 12 PROCESS (rst, clk) 13 BEGIN 14 IF (rst='1') THEN 15 q <= '0'; 16 ELSIF (clk'EVENT AND clk='1') THEN 17 q<=d; 18 END IF; 19 END PROCESS; 20 END behavior; 21 Copyright (c) 10/2006 by NPB 35 = Trigger D xúc phát sườn dương có tín hiệu Reset tích cực mức cao Ä ` d ->— a o Néu rst = 1 thì q= 0 DHE o Nguge lai: £ 3 ` ˆ oo clk >>
= Néu clk chuyén từ 0 lên 1 thì q = d
= Con lai thi hé gi nguyên trạng thái nt <3 |
mĐAc lữ: 10w Md Ars nhac Sâu
om | |
ad
~ rs |
2 [ Ì
Copyright (c) 10/2006 by NPB "_Trigger D xúc phát sườn dương có đầu vào D là
Trang 10Ví dụ 2 (tiếp) 2 ENTITY example IS 3 PORT ( a, b, clk: IN BIT; 4 q:OUT BIT); 5 END example; 6 -
7 ARCHITECTURE example OF example IS
8 SIGNAL temp : BIT; 9 BEGIN 10 temp <= a NAND b; 11 PROCESS (clk) 12 BEGIN 13 IF (clk'EVENT AND clk='1') THEN q<=temp; 14 END IF; 15 END PROCESS; 16 END example; 17 - == —=— 18 Cé thé thay đòng 8 và 10 bang q <= a NAND b 6 dong 13 Copyright (c) 10/2006 by NPB 37 Nội dung chương 3 3.1 Các kiểu dữ liệu có sẵn
3.2 Các kiểu dữ liệu do người dùng định nghĩa
3.3 Các kiêu dữ liệu dẫn xuất 3.4 Kiểu dữ liệu mảng
3.5 Kiểu dữ liệu bản ghi
3.6 Các kiểu dữ liệu có dấu và không dấu
3.7 Chuyễn đổi kiểu dữ liệu 3.8 Các ví dụ Copyright (c) 10/2006 by NPB 39 Thiết kế nhờ máy tính Các kiểu dữ liệu của VHDL Chương 3 CÁC KIỀU DỮ LIỆU Nguyễn Phú Bình
Bộ môn Kỹ thuật Máy tính, Khoa Công nghệ Thông tin
Trường Đại học Bách Khoa Hà Nội
Copyright (c) 10/2006 by NPB 38 VHDL cung cap:
‹ Một số kiểu dữ liệu cơ sở (kiểu dữ liệu vô hướng — scalar) -_ Cách tạo nên các kiểu dữ liệu tổng hợp (composite) Các kiểu dữ liệu vô hướng:
c Cac kiểu số, các đại lượng vật lý, các kiểu liệt kê
© Có rất nhiều kiểu dữ liệu cơ sở chuẩn đã được định nghĩa trước Các kiểu dữ liệu tổng hợp:
c Kiéu mang (array) c Kiéu ban ghi (record)
Ngoài ra VHDL còn cung cấp cả kiéu access (pointer) va kiểu file (ta không nghiên cứu)
Copyright (c) 10/2006 by NPB 40
Trang 11™ Định nghĩa kiêu dữ liệu trong VHDL Kiéu BIT va BIT_VECTOR
full_type_declaration ::= type identifier is type definition ;
type definition ::= scalar type definition | composite type definition
| access type definition
| file_type definition
scalar type definition ::= enumeration type definition integer type definition
floating type definition physical type definition composite type definition ::= array type definition
record type definition
Copyright (c) 10/2006 by NPB 41
= Kiểu BỊT và BIT_VECTOR: 2 mức logic '0' và '1
m Vị dụ:
SIGNAL x: BIT;
x dugc khai báo như một tín hiệu số kiểu BIT SIGNAL y: BIT_VECTOR (3 DOWNTO 0);
y 1A mét vector 4 bit, với bit trái nhât là MSB STGNAL w: BTIT VECTOR (0 TO 7);
w là một vector 8 bit, với bit phải nhât là MSB
" Cac phép gan tín hiệu (dùng toán tử <= ) sau là hợp lệ: x<= '1'; ' ' ding cho 1 bit cén " " dùng cho vector y <= "0111"; y 1A tin hiéu 4 bit cé gia tri 14 "0111" (MSB = '0') w <= "01110001"; y 1a tin hiéu 8 bit cé gid tri 14 "01110001" (MSB = '1') Copyright (c) 10/2006 by NPB 43 3.1 Cac kiéu dữ liệu có sẵn Kiéu STD_LOGIC = Gdi standard cua thu vién std: kiéu BIT, BOOLEAN, INTEGER va REAL =" Goi std_logic_1164 của thư viện ieee: kiểu STD_LOGIC và STD_ULOGIC
" Gói std_logic_ arith của thư viện ieee: định nghĩa kiễu SIGNED và UNSIGNED, cộng thêm nhiều hàm chuyền đổi dữ liệu, VD: conv_integer(p), conv_unsigned(p, b), conv_signed(p, b), conv_síd logic _vecior(p, b)
" Gói std_logic_signed và std_logic_unsigned của thư viện ieee: chứa các hàm cho phép họat động với dữ liệu STD_LOGIC_VECTOR được thực hiện khi mà kiểu dữ liệu là SIGNED hoặc UNSIGNED
Trang 12Kiéu STD_ULOGIC = Hé théng logic 9 mức được giới thiệu trong chuẩn IEEE 1164 (‘U’, X, ‘0’, ‘1’, ‘2’, ‘W’, ‘L’, ‘H’, ~)
" STD_LOGIC là subtype của STD_ULOGIC (có thêm giá trị logic 'U' — Unresolved)
Resolval logic system (STD_LOGIC) x 0 i z ¥ L 1 - ~° x x x x x * x x x 6 x 0 x é 3 6 0 x i x x ! ¿ i Ì x 2 x 0 z ¥ L H x w x 0 w ¥ ụ ¥ x L x 0 L “ L Lị x BE x 0 L = ¥ ví u x - x x x x x x x x Copyright (c) 10/2006 by NPB 45
= Kiéu dé liéu vat ly:
s Biểu thị một đại lượng vật lý nào đó, chẳng hạn như là
khôi lượng, độ dài, thời gian hoặc điện áp
¡ Cú pháp khai báo một kiểu dữ liệu vật lý như sau: physical_type_definition ::= range_constraint units base_unit_declaration { secondary unit_declaration } end units
base _unit_declaration ::= identifier ; secondary unit_declaration ::= identifier = physical literal ; physical literal ::= [ abstract literal ] unit_ name Copyright (c) 10/2006 by NPB 47 Một số kiểu dữ liệu vật lý
Trang 13Ký tự và xâu ký tự
“ Các kí tự được biểu diễn ở trong cặp dấu nháy
don, vi du: ‘A' kt un I1
" Nội dung của một xâu kí tự được biểu diễn trong cặp dâu nháy kép, ví dụ: "A string” ""— xâu rỗng "A string in a string: ""A string”" " — xâu có chứa ky ty" Copyright (c) 10/2006 by NPB 49 SIGNAL a: BIT; SIGNAL b: BIT_VECTOR(7 DOWNTO 0) ; : STD_LOGIC;
SIGNAL d: STD_LOGIC_VECTOR(7 DOWNTO 0) ; SIGNAL e: INTEGER RANGE 0 TO 255;
b(5); legal (same scalar type: BIT)
<= a; legal (same scalar type: BIT)
da(5); legal (same scalar type: STD LOGIC)
<= oc; legal (same scalar type: STD LOGIC) = c; illegal (type mismatch: BIT x STD_LOGIC)
d; illegal (type mismatch: BIT VECTOR x
STD_LOGIC_VECTOR) INTEGER x BIT VECTOR) INTEGER x STD LOGIC VECTOR) b; illegal (type mismatch:
d; illegal (type mismatch: Copyright (c) 10/2006 by NPB 51
x0 <= '0'; bit, std_logic, or std_ulogic value '0
xi <= "00011111"; bit vector, std logic vector,
std_ulogic vector, signed, or unsigned
x2 <= "0001_1111"; underscore allowed to ease visualization
x3 <= "101111"; binary representation of decimal 47
x4 <= B"101111"; binary representation of decimal 47
x5 <= 0"57"; octal representation of decimal 47 x6 <= X"2F"; hexadecimal representation of decimal 47
n <= 1200; integer
m <= 1.200; integer, underscore allowed
IF ready THEN Boolean, executed if ready=TRUE y <= 1.2E-5; real q <= d after 10 ns; physical Copyright (c) 10/2006 by NPB 50 Nội dung chương 3 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 Các kiểu dữ liệu có sẵn
Các kiểu dữ liệu do người dùng định nghĩa Các kiểu dữ liệu dẫn xuất
Kiểu dữ liệu mảng Kiểu dữ liệu bản ghi
Các kiểu dữ liệu có dấu và không dấu
Chuyén đổi kiểu dữ liệu
Các ví dụ
Copyright (c) 10/2006 by NPB 52
Trang 14_¬ \ „` 3.2 Các kiểu dữ liệu người dùng đn " Pay: yi dt
= Có 2 dạng dữ liệu người dùng có thể định nghĩa:
¡ integer (kiểu số nguyên) « enumerated (kiéu liét kê) Copyright (c) 10/2006 by NPB 53 Kiểu liệt kê do NSD định nghĩa "Ò Cú pháp: enumeration_type_definition ::= , enumeration_literal } ) ( enumeration_literal { enumeration literal ::= = Vi du:
type logic_level is (unknown, low, undriven, high); type alu function is (disable, pass, add, subtract, multiply, divide); type octal digit is ('0', TD; identifier | character literal eae Copyright (c) 10/2006 by NPB 55 ` = a : 5 oS Kiéu so nguyén do NSD dinh nghia = Cu phap:
integer type definition ::= range constraint
range constraint ::= range range
range ::= simple expression direction simple expression direction ::= to | downto = Vi du: « Kiéu character: chtra ca tén va ky ty type character is ( type type type type type
byte int is range 0 to 255;
signed word int is range -32768 to 32767; bit_index is range 31 downto 0;
my integer is range -32 to 32; student grade is range 0 to 100;
Copyright (c) 10/2006 by NPB 54 NUL, SOH, STX, ETX, EOT, ENQ, ACK, BEL, BS, HT, LF, VI, FF, CR, 5O, 51, DLE, DC1, DC2, DC3, DC4, NAK, SYN, ETB, CAN, EM, SUB, ESC, FSP, GSP, RSP, USP, Pou rpr umn rar TU, rer org, T11)
Trang 15
Nội dung chương 3
3.1 Các kiểu dữ liệu có sẵn
3.2 Các kiểu dữ liệu do người dùng định nghĩa
3.3 Các kiểu dữ liệu dẫn xuất 3.4 Kiểu dữ liệu mảng
3.5 Kiểu dữ liệu bản ghi
3.6 Các kiểu dữ liệu có dấu và không dấu
3.7 Chuyển đổi kiểu dữ liệu 3.8 Các ví dụ
Copyright (c) 10/2006 by NPB 57
" VD 2: Các phép gan gia Types va Subtypes SUBTYPE my logic IS STD LOGIC RANGE '0' TO '1';
SIGNAL a: BIT;
SIGNAL b: STD LOGIC;
STGNAL c: my logic;
b <= a; illegal (type mismatch: BIT vs STD LOGIC) b <= c; legal (same "base" type: STD LOGIC)
Copyright (c) 10/2006 by NPB 59
3.3 Cac kiéu dữ liệu dẫn xuất
= VD 1: cdc kiéu Subtype duoc dan xuất từ các kiểu
dữ liệu ở các phân trước
SUBTYPE natural IS INTEGER RANGE 0 TO INTEGER'HIGH;
SUBTYPE my logic IS STD LOGIC RANGE '0' TO 'Z';
C6 STD_LOGIC = ('X', tor, tat, tt, Ww, 'L','H', tat) Suy ra my_logic = ('0','1','Z") SUBTYPE small integer IS INTEGER RANGE -32 TO 32; Copyright (c) 10/2006 by NPB 58 3.1 Các kiểu dữ liệu có sẵn
3.2 Các kiểu dữ liệu do người dùng định nghĩa 3.3 Các kiểu dữ liệu dẫn xuất
3.4 Kiểu dữ liệu mảng 3.5 Kiểu dữ liệu bản ghi
3.6 Các kiểu dữ liệu có dấu và không dấu 3.7 Chuyển đổi kiểu dữ liệu
3.8 Các ví dụ
Copyright (c) 10/2006 by NPB 60
Trang 16> 3.4 Kiéu di ligu mang " Mảng (Array) là tập hợp các phần tử có cùng kiểu " Mảng có thể là mảng 1 chiều (1D), 2 chiều (2D) hoặc là mảng 1 chiêu của mảng 1 chiêu (1Dx1D) scala iD Copyright (c) 10/2006 by NPB 61 Ví dụ về khai báo mang " Mảng 1Dx1D:
TYPE row IS ARRAY (7 DOWNTO 0) OF STD_LOGIC; TYPE matrix IS ARRAY (0 TO 3) OF row; SIGNAL x: matrix; TYPE matrix IS ARRAY (0 TO 3) OF STD_LOGIC_VECTOR (7 DOWNTO 0) ; " Mảng 2D: TYPE matrix2D IS ARRAY (0 TO 3, 7 DOWNTO 0) OF STD_LOGIC; " Khởi tạo mảng: :="0001"; mang 1D t=( 101,101,101, *11) mang 1D ss((TO','1','1', '1'), ('1','1','1','0')); ư— 1Dx1D / 2D Copyright (c) 10/2006 by NPB 83 Ví dụ về sử dụng mảng " Định nghĩa mảng: TYPE type_name IS ARRAY (specification) OF data_type; > > " Sử dụng mang:
STIGNAL signal_name: type name [:= initial_value] ;
signal name cũng có thể là CONSTANT hoặc VARIABLE
Copyright (c) 10/2006 by NPB 62 TYPE row IS ARRAY (7 DOWNTO 0) OF STD LOGIC;
TYPE arrayl IS ARRAY (0 TO 3) OF row;
TYPE array2 IS ARRAY (0 TO 3) OF STD _LOGIC_VECTOR(7 DOWNTO 0);
Trang 17
vé gan mang Ví dụ mảng các cổng (tiếp)
" Giả sử có một mảng được khai báo là: o type ais array (1 to 4) of character;
“Đề gán giá trị cho các phần tử của mảng theo thứ tự 'f, 'o', 'o', 'd' ta có thể dùng cách viết như sau: ¡ 8:=(f,'o','o', 'd’); ¡s a:= (1 => 'f, 3 =>'0'), 4 => 'd', 2 => '0)); ¡a a:=(f, 4 => td, others => 'o); Copyright (c) 10/2006 by NPB 65 So Package: - LIBRARY ieee;
USE ieee.std_logic 1164.al1;
PACKAGE my data types IS CONSTANT b: INTEGER := 7;
TYPE vector array IS ARRAY (NATURAL RANGE <>) OF STD LOGIC VECTOR(b DOWNTO 0); END my data_types; So Main code: - LIBRARY ieee; USE ieee.std_logic_1164.al1; USE work.my data_types.all; user-defined package ENTITY mux IS PORT (inp: IN VECTOR_ARRAY (0 TO 3); Vi du vé mang cac céng vao-ra
“ Không có kiểu dữ liệu có sẵn nhiều chiều " Một cách mô tả các chân vào-ra của mạch trong
khai báo ENTITY là dùng mảng các vector " Không được phép dùng TYPE trong khai báo ENTITY = => Định nghĩa kiểu dữ liệu mới trong 1 PACKAGE Copyright (c) 10/2006 by NPB 66 3.1 Các kiểu dữ liệu có sẵn
3.2 Các kiểu dữ liệu do người dùng định nghĩa 3.3 Các kiểu dữ liệu dẫn xuất
3.4 Kiểu dữ liệu mảng 3.5 Kiểu dữ liệu bản ghi
3.6 Các kiểu dữ liệu có dấu và không dấu 3.7 Chuyển đổi kiểu dữ liệu
3.8 Các ví dụ
Copyright (c) 10/2006 by NPB 68
Trang 18
3.5 Kiểu dữ liệu bản ghi
" Bản ghi (Record) là kiêu dữ liệu gồm các phần tử có kiểu khác nhau nhưng có liên kết với nhau = CU pháp khai báo kiểu bản ghi:
record type definition ::= record element_declaration { element_declaration } end record element_declaration ::= identifier_list : element _subtype definition ;
identifier list ::= identifier { , identifier )
element_subtype_ definition ::= subtype indication
Copyright (c) 10/2006 by NPB 69
Nội dung chương 3
3.1 Các kiểu dữ liệu có sẵn
3.2 Các kiểu dữ liệu do người dùng định nghĩa
3.3 Các kiêu dữ liệu dẫn xuất 3.4 Kiểu dữ liệu mảng
3.5 Kiểu dữ liệu bản ghi
3.6 Các kiểu dữ liệu có dấu và không dấu
3.7 Chuyễn đổi kiểu dữ liệu 3.8 Các ví dụ Copyright (c) 10/2006 by NPB 71 về kiểu bản ghi | = HPS ~ l^ Panes 2 a Sa Kiêu dữ liệu có dâu và kh = Vi du 1:
TYPE birthday IS RECORD
day: INTEGER RANGE 1 TO 31; month: month_name; END RECORD; " Ví dụ 2: type instruction is record
op_code : processor op; address mode : mode;
operandl, operand2: integer range 0 to 15; end record;
= Dé truy cập vào trường f của bản ghi r, ta sử dụng
cach viét r.f
Copyright (c) 10/2006 by NPB 70 = Cac kiéu SIGNED va UNSIGNED dug dinh nghia
trong gói síd_logic_ arith của thư vién ieee " Ví dụ:
SIGNAL x: SIGNED (7 DOWNTO 0); SIGNAL y: UNSIGNED (0 TO 3);
UNSIGNED: "0101" biéu dién s6 5, "1101" biểu diễn số 13 SIGNED: "0101" biểu điễn số 5, "1101" biểu diễn số -3
= Dung voi các phép tốn số học, khơng dùng được với các phép toán logic
Copyright (c) 10/2006 by NPB 72
Trang 19
LIBRARY ieee;
USE ieee.std_ logic 1164.all;
USE ieee.std logic arith.all;
SIGNAL a: IN SIGNED (7 DOWNTO 0); SIGNAL b: IN SIGNED (7 DOWNTO 0); SIGNAL x: OUT SIGNED (7 DOWNTO 0); V <= a + b; w <= a AND b; Copyright (c) 10/2006 by NPB 73 LIBRARY ieee;
USE ieee.std_ logic 1164.all;
USE ieee.std logic unsigned.all;
SIGNAL a: IN STD LOGIC VECTOR (7 DOWNTO 0); SIGNAL b: IN STD LOGIC VECTOR (7 DOWNTO 0); SIGNAL x: OUT STD LOGIC VECTOR (7 DOWNTO 0); V <= a + b; w <= a AND b; Copyright (c) 10/2006 by NPB 75 LIBRARY ieee; USE ieee.std_logic_1164.all; r
SIGNAL a: IN STD LOGIC VECTOR (7 DOWNTO 0) SIGNAL b: IN STD LOGIC VECTOR (7 DOWNTO 0); SIGNAL x: OUT STD LOGIC VECTOR (7 DOWNTO 0); v<=atb; w <= a AND b; Copyright (c) 10/2006 by NPB 74 Nội dung chương 3 3.1 Các kiểu dữ liệu có sẵn
3.2 Các kiểu dữ liệu do người dùng định nghĩa 3.3 Các kiểu dữ liệu dẫn xuất
3.4 Kiểu dữ liệu mảng 3.5 Kiểu dữ liệu bản ghi
3.6 Các kiểu dữ liệu có dấu và không dấu 3.7 Chuyển đổi kiểu dữ liệu
3.8 Các ví dụ
Copyright (c) 10/2006 by NPB 76
Trang 203.7 Chuyển đổi kiểu dữ liệu
= VHDL không cho phép các phép toán trực tiếp ( số học, logic, .) tác động lên các dữ liệu khác kiểu
nhau
„ Gói std_logic_1164 của thư viện ieee cung cấp
các hàm chuyển đổi kiểu dữ liệu
Copyright (c) 10/2006 by NPB 77
TYPE long IS INTEGER RANGE -100 TO 100; TYPE short IS INTEGER RANGE -10 TO 10; SIGNAL x : short; SIGNAL y : long; y <= 2*x + 5; y <= long(2*x + 5); Copyright (c) 10/2006 by NPB 79 Cac ham chuyén déi = conv_integer(p) chuyén déi p thuộc kiéu INTEGER,
UNSIGNED, SIGNED, hoac STD_ULOGIC thanh mét gia tri INTEGER
" conv_unsigned(p, b): chuyén đỗi p thuộc kiểu INTEGER,
UNSIGNED, SIGNED, hoac STD_ULOGIC thanh mét gia tri UNSIGNED voi kích thước là b bit
" conv_signed(p, b): chuyén déi p cua kiédu INTEGER,
UNSIGNED, SIGNED, hoadc STD_ULOGIC thanh mét giá trị SIGNED voi kích thước là b bit
= conv_std_logic_vector(p, b): chuyén déi p thuộc kiểu dữ
ligéu INTEGER, UNSIGNED, SIGNED, hoac STD_LOGIC thành một giá trị STD_LOGIC_VECTOR với kích thước b bit
Copyright (c) 10/2006 by NPB 78
LIBRARY ieee;
USE ieee.std_logic 1164.all1;
USE ieee.std logic arith.all;
SIGNAL a: IN UNSIGNED (7 DOWNTO 0); SIGNAL b: IN UNSIGNED (7 DOWNTO 0);
SIGNAL y: OUT STD LOGIC_VECTOR (7 DOWNTO 0) ; y <= CONV_STD LOGIC VECTOR ((atb), 8);
Phép toán hợp lệ: a+b được chuyén ddéi tt UNSIGNED thanh
một giá trị 8-bit STD LOGIC VECTOR, sau đó gán cho ÿy
Copyright (c) 10/2006 by NPB 80
Trang 213.1
Nội dung chương 3 Các kiểu dữ liệu có sẵn
3.2 Các kiểu dữ liệu do người dùng định nghĩa
3.3 Các kiểu dữ liệu dẫn xuất 3.4 Kiểu dữ liệu mảng
3.5 Kiểu dữ liệu bản ghi
3.6 Các kiểu dữ liệu có dấu và không dấu
3.7 Chuyển đổi kiểu dữ liệu 3.8 Các ví dụ Copyright (c) 10/2006 by NPB 81 Ví dụ 1 (tiếp) = Xét tinh hop lệ của các phép gán sau: x(2) <= a; y(0) <= x(0); z(7) <= x(5); b <= v(3); wl(0,0) <= x(3); w1(2,5) <= y(T); w2 (0) (0) <= x(2); w2(2) (5) <= y(7); wl(2,5) <= w2(3) (7); b <= a; wl(0) (2) <= x(2); w2(2,0) <= a; Copyright (c) 10/2006 by NPB 83 3.8 Cac vi d
" Ví dụ 1: cho các khai báo sau
TYPE byte IS ARRAY (7 DOWNTO 0) OF STD_LOGIC; TYPE meml IS ARRAY (0 TO 3, 7 DOWNTO 0) OF STD_LOGIC; TYPE mem2 IS ARRAY (0 TO 3) OF byte;
TYPE mem3 IS ARRAY (0 TO 3) OF STD_LOGIC_VECTOR(0 TO 7); SIGNAL a: STD_LOGIC;
SIGNAL b: BIT;
SIGNAL x: byte;
SIGNAL y: STD_LOGIC_VECTOR (7 DOWNTO 0); SIGNAL v: BIT_VECTOR (3 DOWNTO 0);
Trang 22Ví dụ 1 (tiếp) = Xét tính hợp lệ của các phép gán sau: wl <= ((OTHERS=>'Z'), "11110000" ,"11110000", (OTHERS=>'0')) ; wl <= (OTHERS => '1'); wl(0, 7 DOWNTO 0) <="11111111"; w2 <= (OTHERS => 'Z'); w2(0, 7 DOWNTO 0) <= "11110000"; w2(0) (7 DOWNTO 0) <= "11110000"; w2 <= ((OTHERS=>'0'), (OTHERS=>'0'), (OTHERS=>'0'), (OTHERS=>'0')) ; w3(2) <= y; w3(1) <= "00000000"; w3(1) <= (OTHERS => '0'); w3 <= ("11111100", ('0','0','0','O','Z','Z2','Z','Z',), (OTHERS=>'0'), (OTHERS=>'0')) ; Copyright (c) 10/2006 by NPB 85 a0) ——— xi bio) ail) —4 xi li a li) —— ` b a(2)ì ——] X3! 2) — ED) al woe XY FY b3) —— Copyright (c) 10/2006 by NPB 87
SETITY and2 1% EWY1?Y amn42 16
PORT (6, be If BIT; PORT (8, br 18 BIT VECTOR (3 TO 3); x: OUT BIT}; mx: QUT BIT VECTOR (9 FO 3p); EMD and2; END and2;
ARCHITECTURE and? OF and? 1á ARCHITECTIRE arc? CF and? If &SG1%8 BEG1M * <= 6 PRD b; x <= a AND b; END and2; END and2; Copyright (c) 10/2006 by NPB 86 Chương 4 CÁC TỐN TỬ VÀ THUỘC TÍNH Nguyễn Phú Bình
Bộ môn Kỹ thuật Máy tính, Khoa Công nghệ Thông tin
Trường Đại học Bách Khoa Hà Nội
Copyright (c) 10/2006 by NPB 88
Trang 23Nội dung chương 4 Các toán tử gán 4.1 Các toán tử 4.2 Các thuộc tính 4.3 Các thuộc tính do người dùng định nghĩa 4.4 Chồng toán tử 4.5 GENERIC Copyright (c) 10/2006 by NPB 89
<= dung gan gia tri cho SIGNAL
:= _ dùng gán giá tri cho VARIABLE, CONSTANT,
GENERIC
=> _ dùng gán giá trị cho từng phần tử của kiểu
Trang 24Các toán tử logic Toán tử so sánh
»" VHDL định nghĩa các toán tử logic sau:
NOT, AND, OR, NAND, NOR, XOR, XNOR
" Dữ liệu cho các toán tử này phải là kiểu: BIT, STD_LOGIC, STD_ULOGIC, BIT_VECTOR, STD_LOGIC_VECTOR,STD_ULOGIC_VECTOR " Ví dụ: y <= NOT (a AND b); y <= a NAND b; Copyright (c) 10/2006 by NPB 93 " Có các toán tử so sánh sau: =_ So sánh bằng /=_ So sánh khác nhau < So sánh nhỏ hơn >_ So sánh lớn hơn <= So sánh nhỏ hơn hoặc bằng >=_ So sánh lớn hơn hoặc bằng
„Chỉ tác động lên 2 toán hạng có cùng kiểu
= Kết quả là một giá trị Boolean
= Cac toan hạng ứng với phép so sánh bằng và khác (= và /=) có thể có kiểu bất kì Với các kiểu có cấu trúc, 2 giá trị được coi là bằng nhau nếu tất cả các thành phần tương ứng của chúng là như nhau
"Các toán tử sọ sánh còn lại phải có toán hang là kiểu vô hướng hoặc kiểu mảng 1 chiều của các kiểu rời rạc
Copyright (c) 10/2006 by NPB 85
Các toán tử số học Toán tử dịch
" Dùng cho các kiểu dữ liệu số như là:INTEGER, SIGNED, UNSIGNED, REAL " Bao gom: + Toán tử cộng - Toán tử trừ bd Toán tử nhân / Toán tử chia a Toán tử lấy mũ
MOD Phép chia lấy phần nguyên (Y MOD X có dấu của X) REM Phép chia lấy phan du (¥ REM X cé dau cia Y) ABS Phép lady giá trị tuyệt đối
Copyright (c) 10/2006 by NPB 94 " Cú pháp sử dụng toán tử dịch là:
<left operand> <shift operation> <right operand>
" Trong đó:
- <leftoperand> : kiểu là BIT_VECTOR c <right operand> : kiéu la INTEGER = CO hai toan tử dich:
c Sil Toán tử dịch trái c Ril Toán tử dịch phải
Copyright (c) 10/2006 by NPB 96
Trang 25
= Toan tl ghép nối (&) tác động lên các mang 1 chiều để cho ra một mảng mới với nội dung của
toán hạng bên phải được ghép nôi theo sau nội
dung của toán hạng bên trái
"Nó cũng được sử dụng để thêm 1 phần tử vào mảng hoặc hình thành 1 mảng từ 2 phân tử “ Toán tử này thường được sử dụng với kiểu xâu kí tự Copyright (c) 10/2006 by NPB 97 4.1 Các toán tử 4.2 Các thuộc tính 4.3 Các thuộc tính do người dùng định nghĩa 4.4 Chồng toán tử 4.5 GENERIC Copyright (c) 10/2006 by NPB 99
Thứ tự ưu tiên của các toán tử = Thự tự ưu tiên giảm dần từ trên xuống: ak a / + (sign) + - = /= and or abs mod rem - (sign) & < <= > >= nand nor xor not Copyright (c) 10/2006 by NPB 98 4.2 Cac thuéc tinh " Thuộc tính dữ liệu: oO ñ ñ Oo Oo Oo Oo dLOW Trả về giá trị nhỏ nhất của chỉ số mảng dHIGH Trả về chỉ số lớn nhát của chỉ số mảng dLEFT Trả về chỉ số bên trái nhất của mảng d’RIGHT Trả về chỉ số bên phải nhất của mảng dLENGTH Trả về kích thước của vector dRANGE Trả về khoảng chỉ số của vector dREVERSE_RANGE Trả về khoảng chỉ số của vector theo thứ tự đảo ngược
Copyright (c) 10/2006 by NPB 100
Trang 26= Giả sử d là một vector được khai báo như sau: SIGNAL d : STD_LOGIC_VECTOR(0 TO 7) =" Ta Số CÓ:
d'LOW = 0, d'HIGH = 7, d'LEFT = 0, d'RIGHT = 7, d'LENGTH = 8, d'RANGE = (0 to 7), d'REVERSE_ RANGE = {7 downto 0)
„ Các thuộc tính này có thể dùng trong các vòng lặp:
a FOR i IN RANGE (0 TO 7) LOOP o FOR i IN d'RANGE LOOP
a FOR i IN RANGE (d'LOW TO d'HIGH) LOOP a FOR i IN RANGE (0 TO d'LENGTH-1) LOOP
= Néu tin hiệu có kiểu liệt kê thì:
a đ'VAL(pos) Trả về giá trị phần tử tại vị trí pos
d’ POS (val) Trả về vị trí phần tử có giá trị là val
d'LEFTOF(value) Trả về giá trị phân tử liên bên trái của value
d'RTGHTOF (value) Trả về giá trị phân tử liền bên phải của value d' PRED (value) Trả về giá trị của phần tử có vị trí nhỏ hơn vị trí của value 1 don vi
a d'SUCC (value) Trả về giá trị của phần tử có vị trí lớn hơn vi tri cla value 1 don vi
a đ'VAL(row,colum) Trả về giá trị ở một vị trí đặc biệt n n n n Copyright (c) 10/2006 by NPB 101
" 4 câu lệnh sau kiểm tra sự kiện xuất hiện sườn dương của xung clk:
c ÏF (clkKEVENT AND clk='4)) c IF (NOT clk'STABLE AND clk='1') c WAIT UNTIL (clk'EVENT AND clk='1'); : IF RISING_EDGE(cIk) Copyright (c) 10/2006 by NPB 103 Các thuộc tính (tiếp) " Thuộc tính tín hiệu: Giả sử s là một SIGNAL thì ta có :
- #EVENT: Trả về True khi một sự kiện xảy ra đối với s
3 s’STABLE: Trả về True nếu không có sự kiện nào xảy ra đối voi s
: SACTIVE: Trả về True khi s = 1
+ #QUIET <time>: Trả về True khi trong khoảng thời gian time không
có sự kiện nào xảy ra
+ @LAST_EVENT: Trả về thời gian đã trôi qua kể từ sự kiện cuối cùng + §LAST_ACTIVE: Trả về thời gian đã qua kê từ lần s = 1 cuối cùng
1 §LAST_VALUE: Trả về giá trị của s ở sự kiện trước
Trang 27=" = Các thuộc tính do NSD định nghĩa : a :
= NSD có thể định nghĩa ra 1 thuộc tính mới theo cú
pháp:
c Khai báo thuộc tinh:
ATTRIBUTE attribute_name: attribute_type; c Mô tả thuộc tính ATTRIBUTE attribute_name OF target_name: class IS value; c Trong do: « attribute_type: kiểu dữ liệu bat ky (BIT, INTEGER, STD LOGIC VECTOR, ) " class: TYPE, SIGNAL, FUNCTION, * value: '0', 27, "00 11 10 01", Copyright (c) 10/2006 by NPB 105
" Mã hóa kiểu liệt kê:
TYPE color IS (red, green, blue, white) ;
= Ngam định thì red = "00", green = "01", blue = "10", white = "11" Đề thay đổi lại ta có thể dùng:
ATTRIBUTE enum_encoding OF color: TYPE IS "11 00 10 01";
= Thuéc tinh do ngudi dùng định nghĩa có thể khai báo ở bất cứ vị trí nào, ngoại trừ trong thân của PACKET Copyright (c) 10/2006 by NPB 107
ATTRIBUTE number of inputs: INTEGER;
ATTRIBUTE number of inputs OF nand3: SIGNAL IS 3;
Trang 28
= NSD co thé dinh nghia 1 toan tle mdi cé tring tén voi 1 toán tử đã được định nghĩa san
" VD: Định nghĩa phép + giữa 1 số INTEGER và 1 BIT
FUNCTION "+" (a: INTEGER, b: BIT) RETURN INTEGER IS BEGIN IF (b='1') THEN RETURN atl; ELSE RETURN a; END IF; END Wap " Sử dụng:
SIGNAL inp1, outp: INTEGER RANGE 0 TO 15;
SIGNAL inp2: BIT;
( )
outp <= 3 + inpl + inp2;
Copyright (c) 10/2006 by NPB 109
= GENERIC Ia cach tao ra 1 tham sé tinh dung
chung cho toàn bộ thiết kế
Trang 29Chương 5
MÃ LỆNH SONG SONG
Nguyễn Phú Bình
Bộ môn Kỹ thuật Máy tính, Khoa Công nghệ Thông tin
Trường Đại học Bách Khoa Hà Nội Copyright (c) 10/2006 by NPB 113 = Nhắc lại khái niệm về mạch tổ hợp và mạch dãy: 1 Mach té hop: = Đầu ra chỉ phụ thuộc vào đầu vào của hệ tại thời điểm hiện tại » Không cần phần tử nhớ " Được tạo thành chỉ từ các cổng logic cơ bản 3 Mach day: « Đầu ra còn phụ thuộc vào cả đầu vào trong quá khứ của mạch „ Cần có phần tử nhớ và một vòng phản hồi tín hiệu
hit =äi ( ere put
ingeet ep, CUM nedt tal > OUIpu Com benalonal lowe Link rer mex tale “hao: state Elewnetts Copyright (c) 10/2006 by NPB 115 Ma song so 5.1 Song song và tuần tự 5.2 Sử dụng các toán tử 5.3 Mệnh đề WHEN 5.4 GENERATE 5.5 BLOCK Copyright (c) 10/2006 by NPB 114 = Cac lénh VHDL duc thực hiện đồng thời (song song)
= Chỉ có những phát biểu nam trong PROCESS,
FUNCTION, PROCEDURE thì mới được thực hiện tuần tự (trong khi cả khôi lệnh đó vẫn được thực hiện song song cùng các thành phân khác)
Trang 30Mã lệnh song song ki
9.2 Sử dụng các toán
= Cac thành phần sau đây có thể được sử dụng trong mã lệnh song song:
¡ Các toán tử o Phat bigu WHEN
(WHEN/ELSE hoac WITH/SELECT/WHEN) c Phat bigu GENERATE
¡ Phat bigu BLOCK Copyright (c) 10/2006 by NPB 117 = Day la cach co’ ban nhat dé tao cac doan lénh song song = Cac toan tl cé thé duoc str dung dé thuc hién một mạch tổ hợp bắt kỳ = Với các mạch phức tạp, có thể dùng cách viết lệnh
đơn giản hơn là sử dụng các lệnh tuần tự (cho dù
đó không phải là mạch dãy) Copyright (c) 10/2006 by NPB 119 5.1 Song song và tuần tự 5.2 Sử dụng các toán tử 5.3 Mệnh đề WHEN 5.4 GENERATE 5.5 BLOCK Copyright (c) 10/2006 by NPB 118 " Bộ chọn kênh 4-1: 1 2 LIBRARY ieee; 3 USE ieee.std_logic 1164.al1; 4 5 ENTITY mux IS 6 PORT (a, b, c, d, s0, sl: IN STD_LOGIC; 7 V:OUT STD LOGIC) ; 1 8 mux ; 9 10 ARCHITECTURE pure logic OF mux IS 11 BEGIN
Trang 315.3 Mệnh đề WHEN =+Tr] FT Ï _u -: 2 =i ~~ > Copyright (c) 10/2006 by NPB 121 " Có 2 dạng:
‹ WHEN / ELSE (Simple WHEN):
assignment WHEN condition ELSE assignment WHEN condition ELSE
c WITH/ SELECT / WHEN (Selected WHEN):
WITH identifier SELECT assignment WHEN value, assignment WHEN value,
" Có thễ dùng với các từ khóa OTHERS (các TH còn lại) và UNAFFECTED (không làm gì) Copyright (c) 10/2006 by NPB 123 Ví dụ về mệnh đề WHEN 5.1 Song song và tuần tự 5.2 Sử dụng các toán tử 5.3 Mệnh đề WHEN 5.4 GENERATE 5.5 BLOCK
Copyright (c) 10/2006 by NPB 122 - With WHEN/ELSE -
outp <= "000" WHEN (inp='0' OR reset='1') ELSE "001" WHEN ctl='1' ELSE
"010";
With WITH/SELECT/WHEN - WITH control SELECT
output <= "000" WHEN reset, "111" WHEN set, UNAFFECTED WHEN OTHERS;
Copyright (c) 10/2006 by NPB 124
Trang 32Ménh dé WHEN (tié Chương trình 1
" Dạng khác của mệnh đề WHEN: "WHEN value"
WHEN value
single value
WHEN valuel to value2
range, for enumerated data types only
WHEN valuel | value2 | valuel or value2 or Copyright (c) 10/2006 by NPB 125 1 - Solution 1: with WHEN/ELSE - 2 LIBRARY ieee; 3 USE ieee.std logic 1164.all; NGHuacannnnnnnỶnnnnnïỶẳannnnnnnnnnnnnnanannnnnnnnanannnm 5 ENTITY mux IS
6 PORT (a, b, c, d: IN STD_LOGIC;
7 sel: IN STD_LOGIC_VECTOR (1 DOWNTO 0); 8 y:OUT STD_LOGIC) ; 9 END mux; 10 - 11 ARCHITECTURE muxl OF mux IS 12 BEGIN
13 y <= a WHEN sel="00" ELSE
14 b WHEN sel="01" ELSE
15 c WHEN sel="10" ELSE 16 d; 17 END mux1; 18 - = Viết lệnh mô tả bộ chọn kênh 4-1 sử dụng mệnh đề WHEN (theo cả 2 dạng) Copyright (c) 10/2006 by NPB 126 10 11 12 13 18 19 Chương trình 2 - Solution 2: with WITH/SELECT/WHEN - LIBRARY ieee; USE ieee.std logic 1164.a11; ENTITY mux IS
PORT (a, b, c, d: IN STD_LOGIC;
Trang 33Chương trình 3 ương trình 1 2 LIBRARY ieee; 3 USE ieee std_logic_1164.al1; 4 5 ENTITY mux IS
6 PORT (a, b, ¢, d: IN STD_LOGIC; 7 sel: IN INTEGER RANGE 0 TO 3;
8 y:OUT STD_LOGIC) ; 9 END mux;
10 Solution 1: with WHEN/ELSE - 11 ARCHITECTURE muxl OF mux IS
12 BEGIN
13 y <= a WHEN sel=0 ELSE 14 b WHEN sel=1 ELSE 15 c WHEN sel=2 ELSE 16 d;
17 END mux1;
18 Solution 2: with WITH/SELECT/WHEN - 19 ARCHITECTURE mux2 OF mux IS 20 BEGIN 21 WITH sel SELECT 22 y <= a WHEN 0, 23 b WHEN 1, 24 c WHEN 2, 25 d WHEN 3; here, 3 or OTHERS are equivalent, 26 END mux2; 27 Copyright (c) 10/2006 by NPB 129 đâ ~l@ b0 é 10 12 13 15 16 17 198 20 22 Solution 1: with WHEN/ELSE - LIBRARY ieee; USE ieee.std_logic_1164.al1; ENTITY encoder IS
PORT (x: IN STD LOGIC VECTOR (7 DOWNTO 0); y: OUT STD_LOGIC_VECTOR (2 DOWNTO 0)); END encoder; ARCHITECTURE encoderl OF encoder IS BEGIN y <= "000" WHEN x="00000001" ELSE "001" WHEN x="00000010" ELSE "011" WHEN x="00001000" ELSE "100" WHEN x="00010000" ELSE "110" WHEN x="01000000" ELSE "528"; END encoder1; Copyright (c) 10/2006 by NPB 131 Chương trình
= Viết lệnh mô tả bộ mã hóa
„ Hệ có n đầu vào (n : dạng 2m) và m đầu ra ¡ Tại 1 thời điểm có duy nhất 1 đầu vào = 1 Xin |) —>è> XII-2) —> nxIm m eNcopeR [ Lai |: xiÌì xíu" > ¡¿ VD:n=8,m=3 Copyright (c) 10/2006 by NPB 130 4Ð Œ@ Ơ >ÚI MB 10 12 13 15 16 17 19 21 22 23 Solution 2: with WITH/SELECT/WHEN - LIBRARY ieee; USE ieee.std_logic 1164.all; ENTITY encoder IS
Trang 34Chương trình a = Viết lệnh mô tả một bộ ALU có cấu trúc như sau: 10) TỦ bu FU) rat Mux ¥ (7:0 — — to Arithmetic re : ! Unit sel (3) cm — E sel oa) ] Copyright (c) 10/2006 by NPB 133 LIBRARY ieee;
USE ieee.std logic 1164.411; USE ieee.std logic unsigned.all;
ENTITY ALU IS
PORT (a, b: IN STD_LOGIC_VECTOR (7 DOWNTO 0); sel; IN STD_LOGIC_VECTOR (3 DOWNTO 0); cin: IN STD_LOGIC;
10 y: OUT STD_LOGIC_VECTOR (7 DOWNTO 0)); 11 END ALU;
12
13 ARCHITECTURE dataflow OF ALU IS
14 SIGNAL arith, logic: STD_LOGIC_VECTOR (7 DOWNTO 0); 15 BEGIN we 16 - Arithmetic unit: - 17 WITH sel(2 DOWNTO 0) SELECT 18 arith <= a WHEN "000", 19 atl WHEN "001", 20 a-1 WHEN "010", 21 b WHEN "011", 22 btl WHEN "100", 23 b-1 WHEN "101", 24 ath WHEN "110", 25 atb+cin WHEN OTHERS; Copyright (c) 10/2006 by NPB 135 Ví dụ 3 (tiế Chương trình (tiế " Bảng hoạt động của ALU: l (peraison tuntow [ram] V«<<4 | Traesfer a mn <= 4+ Inorement a
ono y <= uel Decrement a mit y<=h Tester by on y <= bel Ín-rvmce4 h onl y <= bel Decrement b
ani y <= ah Sahl sand b
LODE | y <=aebeem Add o and b wath carry tuø! ycu NOTa Comp kcœw«nl d
1001 v <= NOT b Compemem b
mio y¥ <2 os AND b AND
mii xe<-a(M(b OR 1100 | vy se aNANDD NAND
ai y cen NORD NOR
110) y<=a NORD XOR
fill | y <ea NNORD XNOR
Copyright (c) 10/2006 by NPB
Aritlinimctic
Logic
Trang 35Nội dung chương 5 5.1 Song song và tuần tự 5.2 Sử dụng các toán tử 5.3 Mệnh đề WHEN 5.4 GENERATE 5.5 BLOCK Copyright (c) 10/2006 by NPB 137
SIGNAL x: BIT_VECTOR (7 DOWNTO 0); SIGNAL y: BIT_VECTOR (15 DOWNTO 0); SIGNAL z: BIT_VECTOR (7 DOWNTO 0); G1: FOR i IN x'RANGE GENERATE
z(i) <= x(i) AND y(it8); END GENERATE; Copyright (c) 10/2006 by NPB 139 5.4 GENERATE
= Cho phép lap lai doan lénh mét sé lan
" Thường dùng với FOR:
label: FOR identifier IN range GENERATE (concurrent assignments)
END GENERATE;
= C6 thé dung voi IF Thuong két hep theo dang
Sau:
labell: FOR identifier IN range GENERATE
label2: IF condition GENERATE (concurrent assignments) END GENERATE; END GENERATE ; Copyright (c) 10/2006 by NPB 138
= Cac can cua range phai la gia tri tinh (static) = Vi dy: doan lénh sau sé khéng téng hop duoc
NotOK: FOR i IN 0 TO choice GENERATE (concurrent statements)
END GENERATE;
Copyright (c) 10/2006 by NPB 140
Trang 36» Cần thận với các tín hiệu multiply-driven (unresolved):
OK: FOR i IN 0 TO 7 GENERATE
output (i)<='1' WHEN (a(i) AND b(i))='1' ELSE '0'; END GENERATE ;
NotOK: FOR i IN 0 TO 7 GENERATE
accum <= "11111111" WHEN (a(i) AND b(i))='1' ELSE "00000000" ;
END GENERATE;
NotOK: For i IN 0 to 7 GENERATE accum <= accum + 1 WHEN x(i)='1'; END GENERATE ; Copyright (c) 10/2006 by NPB 141 LIBRARY ieee; USE ieee std_logic_1164.al1l; ENTITY shifter IS
PORT (inp: IN STD_LOGIC VECTOR (3 DOWNTO 0); sel: IN INTEGER RANGE 0 TO 4;
outp: OUT STD_LOGIC VECTOR (7 DOWNTO 0)); END shifter; 1 2 4 5 7 8 9 ˆ °
11 ARCHITECTURE shifter OF shifter IS
12 SUBTYPE vector IS STD_ LOGIC VECTOR (7 DOWNTO 0);
13 TYPE matrix IS ARRAY (4 DOWNTO 0) OF vector; 14 SIGNAL row: matrix; 15 BEGIN 16 row(0) <= "0000" & inp; 17 G1: FOR i IN 1 TO 4 GENERATE 18 row(i) <= row(i-1) (6 DOWNTO 0) & '0'; 19 END GENERATE ; 20 outp <= row(sel) ; 21 END shifter; 22 Copyright (c) 10/2006 by NPB 143 = Viết lệnh mô tả hệ có hoạt động như sau: ¡ Giả sử input = "1111"
a Tao ma tran row như hình sau
Trang 37
BLOCK là một kỹ thuật cho phép người thiết kế
phân nhóm các vùng logic trong mô hình thiết kế Mỗi BLOCK có thể khai báo tín hiệu cục bộ, kiểu dữ liệu, hằng số
= Bat cl đối tượng nào có thê được khai báo trong
phần khai báo của ARCHITECTURE thì đều có thể
khai báo trong phần khai báo của BLOCK
= Cé 2 loai BLOCK: a Simple
o Guarded
Copyright (c) 10/2006 by NPB 145
= Mét BLOCK cé thé dug dat trong 1 BLOCK khac theo cu phap sau: labell: BLOCK [declarative part of top block] BEGIN [concurrent statements of top block] label2: BLOCK [declarative part nested block] BEGIN
(concurrent statements of nested block) END BLOCK label2;
[more concurrent statements of top block]
END BLOCK labell;
Copyright (c) 10/2006 by NPB 147
Simple BLOCK
= Thé hién sy phan vùng cục bộ của mã lệnh, cho
phép 1 tập các phát biêu song song được nhóm lại vao trong 1 BLOCK
“ Giúp cho mã nguồn chương trình dễ đọc và dễ quản lý hơn "Ò Cú pháp: label: BLOCK [declarative part] BEGIN (concurrent statements)
END BLOCK label;
Copyright (c) 10/2006 by NPB 146 " Là 1 dạng BLOCK đặc biệt, có chứa 1 biểu thức guarded expression
= Cac phat biéu bén trong Guarded BLOCK chi duoc thuc hién khi guarded expression = TRUE
" Cú pháp:
label: BLOCK (guard expression) [declarative part]
BEGIN
(concurrent guarded and unguarded statements) END BLOCK label;
Copyright (c) 10/2006 by NPB 148
Trang 38
Thực hiện Chốt với Guarded BLOCK
Trong VD sau, q<=d chỉ được thực hiện khi clk='1' LIBRARY ieee; USE ieee.std logic 1164.all; PORT (d, clk: IN STD_LOGIC; q:OUT STD_LOGIC) ; 1 2 3 4 5 ENTITY latch IS 6 7 8 END latch; 9 10 ARCHITECTURE latch OF latch IS 11 BEGIN 12 bi: BLOCK (clk='1') 13 BEGIN 14 q <= GUARDED d; 15 END BLOCK bi; 16 END latch; Copyright (c) 10/2006 by NPB 149 2 LIBRARY ieee; 3 USE ieee.std logic 1164.al1; 4 we ee ee ee ee ee ee ee ee ee 5 ENTITY dff IS 6 PORT (d, clk, rst: IN STD LOGIC; 7 q:OUT STD LOGIC) ; 8 END dff£; 9 el le 10 ARCHITECTURE dff OF dff IS 11 BEGIN 12 bil: BLOCK (clk'EVENT AND clk='1') 13 BEGIN 14 q <= GUARDED '0' WHEN rst='l' ELSE d; 15 END BLOCK bl; 16 END dff;
Viết mã VHDL mô tả hoạt động cua trigger D
tích cực sườn dương, có tín hiệu rst tích cực mức cao Copyright (c) 10/2006 by NPB 150 Chương 6 MÃ LỆNH TUẦN TỰ Nguyễn Phú Bình
Bộ môn Kỹ thuật Máy tính, Khoa Công nghệ Thông tin
Trường Đại học Bách Khoa Hà Nội
Copyright (c) 10/2006 by NPB 152
Trang 39Nội dung chương 6 Ví dụ về PROCESS 6.1 PROCESS 6.2 Tin hiéu va bién 6.3 Lénh IF 6.4 Lệnh WAIT 6.5 Lệnh CASE 6.6 Lệnh LOOP 6.7 Một số ví dụ Copyright (c) 10/2006 by NPB 153 " Trigger D xúc phát sườn dương có tín hiệu Reset tích cực mức cao : d HB—d ‹ Nếu rst = 1 thì q= 0 DF c Ngược lại:
= Nếu clk chuyển từ 0 lên 1 thì q = d =
= Còn lại thì hệ giữ nguyên trạng thái rs -
Sire 1W 14) Ors 20 Ose Alors 31.» tikes i 1 [ wd 0 [ ou I rd | ~n [ | Copyright (c) 10/2006 by NPB 155 6.1 PROCESS
= PROCESS 1a 1 khdi lệnh tuân tự của VHDL, được cài đặt trong chương trình chính với cú pháp sau:
[label:] PROCESS (sensitivity list)
[VARIABLE name type [range] [:= initial _value;]]
BEGIN
(sequential code)
END PROCESS [label];
" PROCESS được thực hiện mỗi khi 1 tín hiệu trong sensitivity 1ist (danh sách nhạy) thay đổi
" Chú ý:
o Khai bao label va VARIABLE la tuy chon
Trang 40Nội dung chương 6 ~ Nội dung chư 6.1 PROCESS 6.1 PROCESS 6.2 Tin hiéu va bién 6.2 Tin hiéu va bién 6.3 Lénh IF 6.3 Lénh IF 6.4 Lệnh WAIT 6.4 Lệnh WAIT 6.5 Lệnh CASE 6.5 Lệnh CASE 6.6 Lệnh LOOP 6.6 Lệnh LOOP 6.7 Một số ví dụ 6.7 Một số ví dụ Copyright (c) 10/2006 by NPB 157 Copyright (c) 10/2006 by NPB 159
" C62 cach Giến) yên giá truyén gia trị động: bằng SIGNAL (tín hiệu) và VARIABLE trị động: bằng 6.2 Tín hiệu và biến (tín hiệu) " Cú pháp: " An 6.3 Lệnh IF
" SIGNAL: IF conditions THEN assignments; c C6 thé khai bao & trong PACKAGE, ENTITY, ARCHITECTURE (va cdc
thành phân bộ phận)
: Gán bằng toán tử <=
ELSIF conditions THEN assignments; c Pham vi tac dung là toàn cục ELSE assignments;
c Trong PROCESS, gia trị của SIGNAL chỉ được cập nhật ở thời điểm trước END IF: khi két thuc PROCESS 7 =» VARIABLE: » Vi du:
c Chicé thé khai bao @ trong cdc doan lénh tuan ty (PROCESS, FUNCTION,
PROCEDURE) IF (x<y) THEN temp:="11111111";
- Gần bằng toán tử := ELSIF (x=y AND w='0') THEN temp:="11110000";
c Pham vi tac dụng là cục bộ ELSE t :=(OTHERS =>'0') ; ‹ Trong PROCESS, giá trị của VARIABLE được cập nhật ngay lập tức cmp: ƒ
‹_ Nếu muốn truyền giá trị của VARIABLE ra ngoài PROCESS thì phải gán qua
một SIGNAL khác Copyright (c) 10/2006 by NPB 158 Copyright (c) 10/2006 by NPB 160