1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Bài giảng thiết kế nhờ máy tính

112 90 0
Tài liệu được quét OCR, nội dung có thể không chính xác

Đ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 112
Dung lượng 23,99 MB

Nội dung

Trang 1

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 2

Chuong 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 3

Cá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 5

Tw 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 8

2.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 10

Ví 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 12

Kié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 13

Ký 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 20

3.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 21

3.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 22

Ví 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 23

Nộ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 24

Cá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 29

Chươ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 30

Mã 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 31

5.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 32

Mé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 33

Chươ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 34

Chươ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 35

Nộ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 39

Nộ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 40

Nộ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

Ngày đăng: 18/11/2017, 20:55

TỪ KHÓA LIÊN QUAN

w