Bài 1

V n đ  Mô hình hoá ph n  c ng ứ (Hardware Modeling)

Hardware Modeling - 1 - 1

VHDL là gì?

• M t t

ừ ế ắ ộ ừ ế ắ  vi t t t cho m t t ộ ừ ế ắ  vi t t t khác, VHDL là t vi t t t

t c a

vi

ừ ế ắ ủ Very High Speed Integrated

c a  ủ VHSIC Hardware Description Language t t – Còn VHSIC là t

Circuit

• Ti p theo, chúng ta b t đ u tìm hi u v  xu t x  và m c

ắ ầ ấ ứ ụ ế ể ề

ủ ữ đích c a ngôn ng  này

Hardware Modeling - 1 - 2

• VHDL, tr ầ

ụ ể ướ ế

VHDL ­ M c đích và s  hình  thành ộ ủ ế c h t và ch  y u là m t công c  đ  mô hình  ứ ỏ

hoá ph n c ng (hardware modeling) ợ – Đ  mô ph ng (simulation) và t ng h p (synthesis) m ch

ấ ớ ợ ẩ ỉ • Chu n IEEE 1076 r t hoàn ch nh cho vi c mô hình hoá  ị ế ị t b , nh ng nó m i ch  đ nh nghĩa các tham s  khái  ế ị t b ỉ ư thi ệ ổ quát cho vi c t ng h p thi

ế ợ ộ ộ ứ • K t qu : m t mô hình ph n c ng đã cho không h n đã phù  ổ  m c c ng logic đã có thông qua các t k

ả ầ ớ ế ế ở ứ h p v i m t thi ệ ụ công c  và các công ngh  đích (target) khác nhau

Hardware Modeling - 1 - 3

Chu n hoá VHDL

• T  ch c IEEE chính th c phê chu n ch p nh n ngôn ng  VHDL

ư

ậ ẩ

ủ ẩ

ượ

ư

c s a đ i

ỳ ố

ữ nh  là m t chu n c a h  vào năm 1987, chu n IEEE 1076 ủ – Gi ng nh  các chu n kác c a IEEE, chu n IEEE 1076 đ i thi u là 5 năm

theo chu k  t

ượ

ệ ệ

ổ ầ • S a đ i đ u tiên đ ượ ắ ầ

ấ ầ

VHDL-2X

ỗ ợ ộ

VHDL-93

ậ ỗ ợ ở

ượ

ử c th c hi n năm 1993, và VHDL­93 hi n  ứ nay đ c coi là phiên b n chính th c c a ngôn ng  này, hi n  ệ nay b t đ u xu t hi n VHDL 200X   ế – Tuy nhiên, h u h t các công c  (tool) ả đ u h  tr  phiên b n đ u tiên (VHDL­87) ủ – Các b  ph n c a VHDL 200X  ộ ố c h  tr  b i m t s  tool đ

VHDL-87

Hardware Modeling - 1 - 4

Language Subsets

IEEE 1076 (modeling)

IEEE 1076 (synthesis)

ể ổ ề ấ ợ

ể ạ ươ ứ ả ấ ả t c  các c u trúc VHDL đ u có th  t ng h p  ụ wait for 10 ns là m t c u trúc mô hình hoá thông  ộ ấ ớ ng  ng v i và cũng không th  t o ra

• Không ph i t c. Ví d ,  đ ư d ng, nh ng nó không t ầ ử ở ứ   m t ph n t

ượ ụ ộ ổ  m c c ng logic

Hardware Modeling - 1 - 5

Các mức trừu tượng trong mô tả phần cứng

F

Behavioral

Ít chi tiết hơn, thiết kế và mô phỏng nhanh hơn

RTL

AND_OR2

DFF

Logic

Chi tiết hơn, phụ thuộc công nghệ, thiết kế và mô phỏng chậm hơn

Layout

CLB_ R5C5

CLB_ R5C6

Hardware Modeling - 1 - 6

S  ch ng chéo trong  VHDL

Sum <= A + B after 3 ns ;

Hardware Model

Behavioral

Synthesizable Code

Sum <= A + B ;

RTL

component Xlx_add2

FPGA Vendor Library

Logic

Place & Route Utility

Layout

port ( A: in bit ; B: in bit ; Sum: out bit ); end component ;

Hardware Modeling - 1 - 7

Trình tự thiết kế Top-Down

• VHDL h  tr  h

ỗ ợ ướ ế ậ ng ti p c n top­down trong thi ế ế t k

Hardware Modeling - 1 - 8

ắ ạ

• Khi ti n hành phân đo n m t thi

ầ ư ế ế

ạ t k  trong VHDL, c n l u

Nguyên t c phân đo n  ộ ế ể

i các module

i biên gi

ợ ế ố – Gi m đ n t ọ

ớ • Phù h p v i c u trúc mã ngu n d ng RTL  ố ả i thi u s  clock trên m i block • Quan tr ng đ i v i các ràng bu c v  th i gian, Important for

ố ư

ạ ỗ ề ờ ạ

timing constraints, t

ộ ấ i  u hoá c u trúc m ch

ụ ề

ố ư

ế

– Duy trì các tín hi u then ch t trong ph m vi m i block i  u thông qua biên gi

ệ • H u h t các công c  đ u không t

i

hierarchy ướ

ủ ừ

ể ể

ỏ ể c c a t ng block đ  nh  đ  có th  ki m tra nhanh

– Kích th chóng ẫ

ơ

ả • M u th  nhanh, đ n gi n cho m i sub­module

ộ ố tâm cân nh c m t s  các đi m chính sau  ạ ố – Tín hi u ra có ch t (Register) t ớ ấ ồ ể ố ớ

Hardware Modeling - 1 - 9

Cấu trúc Top - Down

SUM [3:0]

A[3:0]

entity Add_4

B[3:0]

C_out

C_in

Sum

entity Full_Add

A B

C_out

Macro

C_in

A

entity Half_Add

B

Sum

Leaf Cell

Carry

Hardware Modeling - 1 - 10

Ki m tra thi

ế ế t k

ể ự ướ ể ế c ki m tra thi t

• Khi s  d ng kế, b t đ u t

Behavioral Simulation (Testbench driven)

VHDL modules

ệ ử ụ  VHDL, có th  th c hi n các b ắ ầ ừ Behavioral Simulation

L A T

Synthesis

Gate-Level Functional (Netlist-driven )

I

V

Place & Route

VHDL Initiative Toward ASIC Libraries

Gate-Level Timing (Back-annotated netlist )

SDF (Standard Delay Format) & Structural VHDL File

Hardware Modeling - 1 - 11

Các bước kiểm tra thiết kế

(1) Mô ph ng Behavioral  ồ

hành vi, dùng testbench

• Th c hi n mã ngu n mô t

ỏ ự ỏ (2) Mô ph ng RTL  ự

• Th c hi n file mã ngu n RTL,  dùng testbench

VHDL modules

ỏ ự

ả ấ

(3) Mô ph ng ch c năng trong VHDL   c u trúc,

ứ • Th c hi n file .vhd mô t dùng testbench

Synthesis

ế ị ở ứ

t b

m c c ng

(4) Mô ph ng ch c năng thi ỏ

ụ ứ

• Mô ph ng netlist pre­P&R EDN  dùng công c  m c c ng

Place & Route

ệ ờ

ỏ ự

(5) Mô ph ng theo quan h  th i gian trong VHDL • Th c hi n file c u trúc .vhd và file SDF;  dùng testbench ỏ

ở ứ

ệ ờ

(6) Mô ph ng quan h  th i gian

m c c ng

ử ụ

• Mô ph ng netlist post P&R EDN netlist, s  d ng các delays

Hardware Modeling - 1 - 12

ế ế

Ki m tra thi

t k ?

Test-Bench

Behavioral Module

• Chip level • Board level • Std parts model • Model bus operation • Discrete event-driven • Flexibility over strictly

FPGA

MCU

netlist-driven

Memory

PLD

Hardware Modeling - 1 - 13

ế

K t lu n

• VHDL là m t ngôn ng  dùng đ  mô hình hoá ph n c ng

ứ ữ ể ầ

ộ ế ị t b ợ ủ c a thi ổ ữ ủ

ộ ả ưở ế ệ ng đ n

ộ ậ • T ng h p logic là m t t p con c a toàn b  ngôn ng ụ • Các v n đ  v  công c  và công ngh  có  nh h ủ ấ ệ ổ vi c t ng h p logic c a m t thi

ề ề ợ ỏ ế ế t k ồ ữ ệ ờ ị ộ ể • Các mô ph ng HDL có th  bao g m các d  li u đ nh th i

(back­annotated timing data)

Hardware Modeling - 1 - 14

Bài 2

Ngôn ng  VHDL

Hardware Modeling - 1 - 15

Design Units trong VHDL

ươ

ng trình VHDL bao g m

Ch các design units.

ộ ậ

ộ ố M t s  design units đ c l p  ớ v i các design unit khác.

• Entity • Architecture • Configuration • Package • Package Body • Library

Hardware Modeling - 1 - 16

Các lo i Design Unit

• Trong VHDL có hai lo i ạ design unit, đó là:

– Primary

• Không ph  thu c vào các design unit khác

– Secondary ộ

• Ph  thu c vào primary design unit

ầ ổ

ỗ ể ế ạ ả • M i khi có thay đ i trong primary design unit, c n ph i  ươ ng i secondary design unit.  N u không, ch

ki m tra l ẽ trình s  có l ỗ i.

• Các secondary unit không th  t n t ụ

ể ồ ạ ộ ậ i đ c l p

ả ộ ph i ph  thu c primary unit ứ ­­ t c là,

Hardware Modeling - 1 - 17

Entity

• Entity mô t

ả external interface c a th c th  đ

c

ế ế

ộ t k , cùng các thu c tính liên quan v i

ể ượ ớ interface

thi đó

A

Sum

entity Half_Add is

B

Carry

port (A, B : in std_logic ;

Carry, Sum : out std_logic) ;

end Half_Add ;

Chú thích: VHDL’93 cho phép dùng optional reserved word entity ngay sau reserved word end, ví dụ, ‘end entity Half_Add ; ’

Hardware Modeling - 1 - 18

Architecture

• Architecture mô t

ả ạ ộ ự ủ ể  ho t đ ng bên trong c a th c th

ể ắ

ớ ắ

ể ệ ề

ủ ộ

ộ ớ v i nó, có th  có nhi u architecture cho m t th c th

(entity) g n v i nó (primary unit) ộ – M t architecture th  hi n m t ch c năng c a th c th  g n

architecture My_Arch of Half_Add is

begin

Sum <= A xor B ;

Carry <= A and B ;

end My_Arch ;

Note: VHDL’93 cho phép sử dụng reserved word architecture sau reserved word end

Hardware Modeling - 1 - 19

Multiple Architecture

ồ ạ ể

• Có th  có nhi u architecture cùng t n t

ạ ộ  ho t đ ng

i đ  mô t

ể ể ể

ế

t

ủ ộ

ể ề ộ ủ c a m t th c th – Chúng có th  bi u di n các giai đo n khác nhau c a quá trình thi ế ế k  ho c các cách ti p c n khác nhau cho cùng m t ch c năng  (optimization for speed verus area, etc.)

entity Half_Add is . . .

entity Cnt64 is . . .

end Half_Add ;

end Cnt64 ;

architecture BEH of Half_Add is . . .

architecture BEH of Cnt64 is . . .

end BEH ;

end BEH ;

architecture RTL of Half_Add is . . .

architecture RTL of Cnt64 is . . .

end RTL ;

end RTL ;

architecture XLX of Half_Add is . . .

architecture XLX of Cnt64 is . . .

end XLX ;

end XLX ;

Hardware Modeling - 1 - 20

Package

ượ

ữ ệ

c dùng đ  khai báo các d  li u

• M t ộ package declaration đ ế ế

t k , bao g m: dùng cho toàn b  thi – Constants, data types, subtypes, subprogram và function

declarations, v.v…

package My_Pack is

library IEEE; use IEEE.std_logic_1164.all ; . . . use work.My_Pack.all ;

entity . . .

constant. . . . . . function. . . . . . component . . . . . . subtype. . .

end package My_pack ;

Hardware Modeling - 1 - 21

Package Body

ộ ố ượ ế ề ứ ủ • M t ộ package body là m t ộ dependent unit c a m t  t v  các đ i t ng

package, nó ch a các thông tin chi ti trong package – Subprograms, deferred constants

package My_Pack is

package body My_Pack is

declaration

details

function bv_to_integer (BV: bit_v.. return integer is variable … begin for index in BV'range loop . . . .

constant. . . . . . function bv_to_integer ( . . . component . . . . . . subtype. . .

end My_Pack ;

. . . end My_Pack ;

Hardware Modeling - 1 - 22

Library

ấ ả ượ ư ề ng t c  các đ i t ố ượ  VHDL đ u đ c l u trong

ơ

ế ế t k

ượ

(design unit) đã đ

ượ

ọ  design unit

ư ệ ị

c cho m i

library IEEE ;

package std_logic_1164 is..

package std_logic_unsigned is..

package std_logic_arith is..

ề ơ ả • V  c  b n, t các th  vi n ộ ậ ư ệ – Theo đ nh nghĩa, th  vi n là m t t p h p các đ n v  thi ứ ể c ki m ch ng ư ệ – Work và std là hai th  vi n dùng đ

Hardware Modeling - 1 - 23

Library

ươ

Libraries và Packages comprise the VHDL Design Management  structure – Theo m t nghĩa nào đó, nó t

ư directories và

ng t

nh

subdirectories

library IEEE ;

package std_logic_1164 is..

package std_logic_unsigned is..

package std_logic_arith is..

Hardware Modeling - 1 - 24

ở ạ

Kh i t o các Library

• Tên c a library đ n thu n là m t tham tr  v  m t logic

ẽ ề ấ ể

– Chu n VHDL không quy đ nh các yêu c u ch t ch  v  c u  ễ ượ chuy n giao

ủ ầ ộ ơ

ầ ậ ủ trúc c a library, do v y chúng không d  đ gi a các tool

library My_Lib

package Fast_Counters is..

ỏ ề ặ ặ c

library My_Lib ; use My_Lib.Fast_Counters.all ;

package DSP_Filters is..

entity Mod1 is port ( . . .

Hardware Modeling - 1 - 25

ở ạ

Kh i t o các Library

ườ ả ạ ầ ỗ ụ ng, c n ph i t o các th  vi n trong m i tool c

ượ

• Thông th ể th  thay vì attach các th  vi n đã có  – Đ t tên cho library, và sau đó phân tách các design unit đ

c

ặ ọ

ư ch n đ a vào nó

library My_Lib

package Fast_Counters is..

ư ệ ở ư ệ đâu đó

library My_Lib ; use My_Lib.Fast_Counters.all ;

package DSP_Filters is..

entity Mod1 is port ( . . .

Hardware Modeling - 1 - 26

Work Library

ể c dùng đ   ị t t k ặ sub­directory) m c đ nh đ ế ế đã đ ư ụ • Đây là th  m c con ( ơ ữ ấ ả t c  các đ n v  thi

ẽ ạ ề ổ

ứ  library là nhãn tên c a design unit ch

ể ả

ộ ỗ • M i m t công c   ộ ấ m t c u trúc nh  th – Chú ý: hi n th

ượ ị ượ ư ị c biên d ch l u gi ị ỉ ừ (compiled design units), tr  khi có các ch  đ nh khác. ợ  đ u s  t o ra  ụ mô ph ngỏ  ho c ặ t ng h p ư ế ị ở không ph i là tên c a source file

Hardware Modeling - 1 - 27

Work Library

ụ ề ộ ủ ộ M t ví d  v  n i dung c a

work library

Design Unit Identifier

DFF

entity HALF_ADD entity entity REG4 package

My_Counters. . .

ươ ng

Secondary (dependent)  design units tham tr  ỏ ớ t i primary unit t ớ ứ ng v i nó

architecture RTL architecture STRUCTURAL

Hardware Modeling - 1 - 28

ụ ề

Ví d  v  Hierarchy : DFF

entity DFF is port (D, Clock : in std_logic ; Reset : in std_logic ; Q : out std_logic) ; end entity DFF ;

D

Q

Clock

Reset

architecture RTL of DFF is begin process (Clock, Reset) begin If (Reset = ‘1’ ) then Q <= ‘0’ ; elsif (Clock’event and Clock = ‘1’) then Q <= D ; end if ; end process ; end architecture RTL ;

Hardware Modeling - 1 - 29

ụ ề

Ví d  v  Hierarchy : REG­4

REG_4

D_in(3)

Q_out(3)

entity REG_4 is port (D_in : in std_logic_vector (3 downto 0); Clk, Rst : in std_logic; Q_out : out std_logic_vector (3 downto 0));

DFF U3

end REG_4;

architecture Structural of REG_4 is

D_in(2)

Q_out(2)

DFF U2

D_in(1)

Q_out(1)

DFF U1

component DFF port ( D, Clock : in std_logic ; Reset : in std_logic; Q : out std_logic ) ; end component ;

D_in(0)

Q_out(0)

DFF U0

Clk

Rst

begin U3 : DFF port map (D_in(3), Clk, Rst, Q_out(3)); U2 : DFF port map (D_in(2), Clk, Rst, Q_out(2)); U1 : DFF port map (D_in(1), Clk, Rst, Q_out(1)); U0 : DFF port map (D_in(0), Clk, Rst, Q_out(0)); end Structural;

Hardware Modeling - 1 - 30

• Có hai ph

ệ ổ

Liên kết Tín hiệu ớ ế ươ ng pháp liên k t các tín hi u v i các c ng  ủ ng  ng c a chúng

t kê theo

ượ ệ ệ ở ứ c li  m c cao đ ở ứ  m c th p trong component

đúng tr t t declaration

• U1: DFF port map (D_in, Clk, Rst, Q_out) ;

component DFF port (D, Clock : in std_logic ; Reset : in std_logic ; Q : out std_logic ) ; end component ;

ươ t ị ế – Liên k t theo v  trí: Các tín hi u  ổ ậ ự ủ  c a các c ng (port)

Hardware Modeling - 1 - 31

• Có hai ph

ệ ổ

Liên kết Tín hiệu ớ ế ươ ng pháp liên k t các tín hi u v i các c ng  ủ ng  ng c a chúng

ế

c

ệ ụ

t kê m t cách rõ ràng, đ y đ , không ph  thu c tr t t

ệ li (strongly recommended)

• U1: DFF port map ( D =>D_in(1), Clock =>Clk, Reset

=>Rst, Q =>Q_out(1)) ;

component DFF port (D, Clock : in std_logic ; Reset : in std_logic ; Q : out std_logic ) ; end component ;

ươ t ượ – Liên k t theo tên: Các c ng (ports) và tín hi u (signals) đ ậ ự ầ

Hardware Modeling - 1 - 32

ấ ả ể ầ ự ệ ả ượ

Signal Declaration • T t c  các tín hi u bên trong th c th  c n ph i đ

c khai

báo rõ ràng

architecture Structural of Top is

entity Top is port (I1, I2 : in std_logic; 01, 02 : out std_logic) ; end Top ;

component Sub_A port (A1, A2, A3 : in std_logic ; A4 : out std_logic_vector (3 downto 0)) ; end component ;

Top

component Sub_B port (B1: in std_logic_vector (3 downto 0 ) ; B2, B3, B4 : out std_logic) ; end component ;

Sub_A

Sub_B

Bus_1

signal Bus_1 : std_logic_vector (3 downto 0) ; signal Sig_1: std_logic ;

A4

B1

A1

B3

Sig_1

A2

A3

B2

B4

I1 I2

O1 O2

begin U0 : Sub_A port map (I1, I2, Sig_1, Bus_1) ; U1 : Sub_B port map (Bus_1, Sig_1, O1, O2) ; end Structural ;

Hardware Modeling - 1 - 33

Cụ thể hoá phần tử

• Component instantiation

entity REG_4 is port (D_in : in std_logic_vector (3 downto 0) ; Clk, Rst : in std_logic ; Q_out : out std_logic_vector (3 downto 0)) ; end REG_4 ;

Q_out(3)

from target library may be helpful for chip level optimization ( i.e., Xilinx D_in(3) Virtex )

FDC U3

D_in(2)

Q_out(2)

FDC U2

architecture Xilinx_Struct of REG_4 is component FDC port (D : in std_logic ; Clock, Reset : in std_logic ; Q : out std_logic) ; end component ; begin U3 : FDC port map (D=>D_in(3), Clock=>Clk, Reset=>Rst, Q=> Q_out(3)) ;

D_in(1)

Q_out(1)

FDC U1

U2 : FDC port map (D=>D_in(2), Clock=>Clk, Reset=>Rst, Q=> Q_out(2)) ;

D_in(0)

Q_out(0)

U1 : FDC port map (D=>D_in(1), Clock=>Clk, Reset=>Rst, Q=> Q_out(1)) ;

FDC U0

Clk

Rst

U0 : FDC port map (D=>D_in(0), Clock=>Clk, Reset=>Rst, Q=> Q_out(0)) ;

end Xilinx_Struct ;

Hardware Modeling - 1 - 34

S  d ng Generics • Generics là các tham s  có th  c p nh t đ ng (thay đ i giá  ụ ể

ố ộ

ế ế ị ể ậ ệ c  th  hoá ph n t ậ ộ ủ ầ ử c a  thi ổ t  k

ử ụ ố ừ tr ) trong t ng câu l nh (component instantiation) – Đi u này cho phép khai báo các tham s  m t cách linh ho t, m m

ề d oẻ

library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned_all; use IEEE.std_logic_arith.all;

entity My_Cntr is generic (Count_Width : integer := 8 ); port ( Data_In: in std_logic_vector (Count_Width -1 downto 0); Clk, Reset, Load, UpDn : in std_logic; Q_Out: out std_logic_vector (Count_Width -1 downto 0)); end entity My_Cntr;

 Lab Marker

architecture RTL of My_Cntr is • • • • end architecture RTL;

Hardware Modeling - 1 - 35

Cập nhật giá trị của Generics

ử ụ

library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned_all; use IEEE.std_logic_arith.all;

entity MY_TOP_DESIGN is port ( DATA_BUS: in std_logic_vector (63 downto 0); CLOCK, RST, LD, CNTRL : in std_logic; DATA_Out: out std_logic_vector (63 downto 0)) ; end entity MY_TOP_DESIGN;

architecture STRUCTURAL of MY_TOP_DESIGN is

t kế ế

ế

ộ • S  d ng m t  generic map cùng v i ớ port  map, khi có m t ộ ụ ầ ử ượ ph n t c c    đ ể th  hoá đâu đó  trong thi – N u không có

component My_Cntr generic ( Count_Width : integer := 8 ); port ( Data_In: in std_logic_vector (Count_Width -1 downto 0); Clk, Reset, Load, UpDn : in std_logic; Q_Out: out std_logic_vector (Count_Width -1 downto 0)); end component ; begin U0: My_Cntr generic map (Count_Width => 64) port map (DATA_BUS, CLOCK, RST, LD, CNTRL, DATA_OUT ) ; • • • • end architecture RTL;

generic map, generic  ậ ị nh n giá tr   ị ặ m c đ nh ban  đ uầ

Hardware Modeling - 1 - 36

Biên d ch VHDL   ớ ố ố

• Có th  có b n giai đo n biên d ch  ng v i b n m c x  lý

ạ ứ ử ị

i cú pháp. Sau khi hoàn t

ẽ t, nó s

ỗ c ki m tra l  work directory

đ

ứ ể ộ

• C u trúc hierarchy c a thi

m c

c l u gi – Elaboration (ch nh s a) ủ ỗ

c dàn tr i b t đ u t ỉ ụ ể

ả ắ ầ ừ ứ ộ

ấ Ứ ấ ượ ạ

ế ế ượ t k  đ cao nh t.  ng v i m i sub­module c  th  ch  có m t copy duy  nh t đ

– Synthesis (t ng h p)

netlist c a thi

c t o ra ho c theo format

ớ c t o ra  ợ ổ ả • D ng mô t ẩ

ế ế ượ ạ t k  đ ộ

chu n công nghi p ho c theo m t vendor­specific format

– Execution (ch  mô ph ng)

ỉ ượ

ỏ ỏ

ướ

• Mô hình đ ề

c mô ph ng theo các b ể

ự ệ ở

ượ

ở c đi u khi n b i các s  ki n

c th i gian gián đo n. Nó  ồ  các tín hi u đ ng b  quá trình

đ

ứ ầ cho m t mô hình ph n c ng VHDL  – Analysis (phân tích) ượ • Design unit đ ữ ở ượ ư   ỉ

Hardware Modeling - 1 - 37

Quy trình biên d chị

entity DFF is port (D, Clk : in Reset: in Q: out . . . architecture..

Analyze

Execute

Elaborate

Synthesize

Hardware Modeling - 1 - 38

Trình t

Biên d ch

• Do m i quan h  gi a các

ố ệ ữ

ả ư

ấ ị

ướ architecture c phân tích tr c các

primary và secondary design unit  ở ứ ể ụ ể  m c  cũng nh  kh  năng có th  c  th  hoá các module  ộ ậ ự ơ th p h n, nên quá trình biên d ch luôn tuân theo m t tr t t   nghgiêm ng tặ • Các entity ph i đ ứ ả ượ ớ ng  ng v i chúng ươ t

• Các package c n ph i đ

ả ượ ầ ướ package c phân tích tr c các

• M i m t module c n ph i đ

ả ượ ộ ướ c phân tích tr c khi nó

ỏ ở ự body  ỗ ượ đ – Đây là trình t ầ c tham tr  b i các module khác Bottom­up  biên d ch

Hardware Modeling - 1 - 39

Comments

ễ ể ư ở ươ ự ề ơ ở ồ • Comments (chú thích) có tác d ng làm cho mã ngu n tr    các ngôn nh ng t

ữ nên d  hi u h n, đi u này cũng t ng  khác

ắ ầ ỉ ế ụ ấ ế ế

ấ ả ấ ả ầ t c  các dòng ạ ­ ­ Comments b t đ u b ng hai d u g ch ngang        ­ ­ Chúng ch  ti p t c cho đ n h t dòng             ề ộ ­ ­ M t comment trên nhi u dòng c n ph i dùng  ạ ­ ­ hai d u g ch ngang trên t

ể ế ừ t t đây

A_OUT <= ‘1’ ; ­ ­ Comments có th  vi

Hardware Modeling - 1 - 40

ế

K t lu n

• VHDL bao g m các

ồ primary và secondary design unit

• Tr t t

ượ ự ng trình VHDL đ ệ c th c hi n theo

ậ ự ộ ươ ẽ ặ ị  biên d ch ch ậ m t quy lu t ch t ch

ứ ể ượ ư design unit đã đ c ki m ch ng đ c l u trong

ọ ượ work library ấ ả • T t c  các  ư ệ ộ m t th  vi n g i là

• Có th  s  d ng

ạ ủ ể ể ử ụ Generics đ  tăng tính linh ho t c a mã

ngu n (ồ source code)

Hardware Modeling - 1 - 41

Bài 3

Signals và  Data Types

Hardware Modeling - 1 - 42

• Data types là m t y u t

ọ ư  quan tr ng trong VHDL (cũng nh

gi

ữ ữ ệ

Data Types ộ ế ố trong các ngôn ng  khác) ỉ ể ộ ỗ – M i m t ki u d  li u ch  cho phép nh n các giá tr  trong m t  ả ấ ị i nh t đ nh ỗ ố ượ – M i đ i t

ả ng (signal, variable, constant, ho c port) c n ph i

có ki u d  li u nh t đ nh khi đ

ầ ặ c khai báo (declared)

ấ ị • VHDL là m t ngôn ng  đ nh ki u r t ch t ch

ữ ệ ộ ệ

ữ ị ẽ ặ

ượ ể ấ ể ế ớ ầ – Các tín hi u liên k t v i nhau c n ph i có cùng ki u ả ữ ệ ể ề • Trong VHDL có nhi u ki u d  li u cho phép mô t ả ứ ả ằ c ng và ki m tra l i nh m đ m b o s  t ứ ạ ớ trong các mô hình l n và ph c t p ả ể ắ – C n tuân th  quy t c ki m tra ki u trong các mô hình c

hành vi (behavioral) và m c c ng (gate­level)

ự ươ ể ỗ ầ  ph n  ệ ng thích tín hi u

Hardware Modeling - 1 - 43

ữ ệ ộ ộ ể ả

Signals và Ports ợ ầ • Ki u d  li u và đ  r ng bus c n ph i phù h p trong các  ổ

ệ ệ l nh gán tín hi u (signal) và c ng vào ra (port)

entity REG_4 is port (D_in1 : in std_logic_vector (3 downto 0); Cntrl : in std_logic_vector (1 downto 0); Clock, Reset : in std_logic; Q_out : out std_logic_vector (3 downto 0)); end entity REG_4;

(cid:0)

(cid:0)

signal A : integer ; signal B : bit ; signal C : integer ; signal D : std_logic ;

(cid:0)

(cid:0)

(cid:0)

A <= C; A <= C + 1; A <= B; D <= C; B <= D; Q_out <= Cntrl;

(cid:0)

Hardware Modeling - 1 - 44

Các lo i data type trong  VHDL

• Có 4 categories (lo i) data types trong VHDL

– Scalar

• Single value object, defined indices, ordered

– Composite

• Group objects, similar or different types

– Access

• Defines pointers to objects • covered in Advanced VHDL course

– File

• Sequence of objects of given type • covered in Advanced VHDL course

Hardware Modeling - 1 - 45

Scalar Data Types

ị ơ ẻ ậ ể ng nh n các giá tr  đ n l . Trong

ữ ệ • Ki u ds  li u vô h ớ ồ

– Real – Physical – Character  – Std_logic  and std_ulogic – Enumerated

ướ VHDL, l p các data type này g m có: – Bit – Boolean Integer

Hardware Modeling - 1 - 46

Bit và Boolean

ứ ư ừ ầ • V a đ  đ  mô hình hoá ph n c ng, nh ng nó không cho

ị các giá tr  high­impedance, unknown, don’t

ủ ể ả phép mô t care, v.v...

architecture BEHAVE of MUX is signal A,B,Sel, Z : bit ; begin if Sel = ‘1’ then Z <= A ; else Z <= B ; end if . . .

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

• Thích h p cho vi c mô hình hoá

if Sel =‘1’, if F >= G..

ệ ợ ở ứ ế ệ  m c khái ni m lý thuy t

both yield boolean result

type boolean is (false, true) ;

Hardware Modeling - 1 - 47

Integer và Real

• Ch p nh n các giá tr  và các đ i l

ị ẽ ử ụ

ể i giá tr  cho các ki u nguyên (integer),  ị ặ

ớ ố

ị ả

i giá tr  m c đ nh v i s  nguyên

ạ ượ ậ ấ ị ự ộ ng m t cách tr c quan

và linh ho tạ ả ầ – C n ph i quy đ nh gi ế n u không nó s  s  d ng gi 32­bit

signal A : integer range 0 to 7; signal B : integer range 15 downto 0 ;

type integer is range . . .

• Cho phép ng

ấ ị ư

ị ự ố

ị ể

ế ế ử ụ ả ớ i thi ể t k  s  d ng các giá tr  floating point  i giá tr  th c nh t đ nh

ườ – Khai báo các ki u real v i gi – Cách dùng giá tr  ki u ‘Real’ không gi ng nh  ‘Integer’

type CAPACITY is range -25.0 to 25.0 ; signal Sig_1 : CAPACITY := 3.0 ;

type real is range . . .

Hardware Modeling - 1 - 48

ượ ng các

Physical ượ ố ượ

ộ ể ị c dùng đ  đ nh l ờ ng, đ  dài, th i gian

• Ki u v t lý đ

ị ơ ở ủ ượ

ậ ể • Ki u v t lý (Physical type) đ ạ ượ ư ậ ng v t lý nh  là kh i l đ i l ơ ị ậ ể c đ nh nghĩa theo đ n v  c  s  c a nó – Bất kỳ đơn vị dẫn xuất nào cũng là bội của đơn vị cơ sở

type time is range 1 to 1000000

Time là kiểu vật lý duy nhất được định nghĩa trong VHDL. Nó rất cần thiết cho việc mô phỏng thời gian trễ và các tham số khác có liên quan thời gian.

constant Tpd : time := 3ns ; . . . Z <= A after Tpd ;

units fs; ps = 1000 fs; ns = 1000 ps; us = 1000 ns; ms = 1000 us; . . .

Hardware Modeling - 1 - 49

Std_logic và Std_ulogic

• Std_logic đ

ượ c phát tri n t

ỗ ợ

ượ ứ ế ầ ộ h  th ng  c dùng đ  mô hình hoá ph n c ng m t cách chi ti ể ừ ệ ố MVL (Multi­Value Logic)  t

ủ unknown, three­state …

ượ

– Đ c đ nh nghĩa trong gói IEEE std_logic_1164

type std_ulogic is (

ể và đ ớ ể bit ơ h n so v i ki u  ứ – H  tr  các m c giá tr  khác nhau c a tín hi u: don't­care conditions,

Recall: type bit is limited to (‘0’, ‘1’).

‘U’, -- Uninitialized ‘X’, -- Forcing Unknown ‘0’, -- Forcing Zero ‘1’, -- Forcing One ‘Z’, -- High Impedance ‘W’, -- Weak Unknown ‘L’, -- Weak Zero ‘H’, -- Weak One ‘ - ‘ -- Don’t Care

) ;

Hardware Modeling - 1 - 50

ư

• C  hai ki u đ u ch a cùng m t t p các giá tr  nh  nhau

So sánh Std_logic và Std_ulogic ộ ậ ạ

ỗ ự

ch  th c hi n m ch (implementation)

ế ế ử ụ

ườ

i thi

ả ế ị

ự ế

ượ

ệ  tín hi u nào đ

ư c đ a

ể ả – S  khác nhau  – Ch  ữ u trong ulogic có nghĩa là unresolved ề ế • N u ng t k  s  d ng hai hay nhi u tín hi u đi u khi n m t  ử c a ra chung thì anh ta ph i dùng m t hàm resolution (có trong gói  ieee_std_1164) đ  quy t đ nh trên th c t ớ ử t

i c a ra

ụ ộ

ư

ơ

i đ  ki m tra các l

ạ ể ể t

i

ạ • Std_ulogic không có kh  năng đó, nh ng nó t o ra m t công c  n i  ấ ỗ wired­oring do s  su t

signal A,B,C,Res_Out : std_logic ; signal Out_1 : std_ulogic ;

A

A

Res_Out <= A; Res_Out <= B; Res_Out <= C;

Out_1 <= A ; Out_1 <= B ; Out_1 <= C ;

Res_Out

Out_1

X

B C

B C

(cid:0)

Hardware Modeling - 1 - 51

Signal Resolution

ụ ể ề ể ề ệ

ể • M t c a ra c  th  không th  có nhi u tín hi u đi u khi n

ử ụ

ộ ệ

ộ ử ề

gán tín hi u có đi u ki n và data­type là std_logic:

signal A,B,C,Res_Out : std_logic ;

ộ ử ể ki u wire­or ạ ể – Đ  mô hình m t c a ra ba tr ng thái, ta s  d ng m t l nh

En0

A

Res_Out <= A when En0 = ‘1’ else ‘Z’ ; Res_Out <= B when En1 = ‘1’ else ‘Z’ ; Res_Out <= C when En2 = ‘1’ else ‘Z’ ;

En1

(cid:0)

B

Res_Out

En2

C

Hardware Modeling - 1 - 52

ứ ệ

t kê) ầ

• Tăng m c đ  linh ho t trong vi c mô hình hoá ph n c ng

ế

ạ ộ

Enumerated (li ạ ứ ộ ườ ệ ể t kê do ng – Các ki u li ễ ộ ậ nh n bi

ử ụ ể i dùng đ nh nghĩa s  d ng các giá tr  có th   ớ ợ t m t cách d  dàng và thích h p v i ho t đ ng c a mô hình ấ

ễ ể

ươ

các máy

– Làm cho các ch

ơ ng trình d  hi u h n nh t là khi mô t ệ ố

ứ ạ

tr ng thái (h  logic dãy) ho c các h  th ng ph c t p

type My_State is ( RST, LOAD, FETCH, STOR, SHIFT ) ; . . . signal STATE, NEXT_STATE : My_State ; . . .

case (STATE) is when LOAD => . . . if COND_A and COND_B then NEXT_STATE <= FETCH ; else NEXT_STATE <= STOR ;

Hardware Modeling - 1 - 53

Composite Data Types

ự ế ợ

• Các data type h n h p là s  k t h p các ph n t

ầ ử ướ ạ  d

i d ng m t

ượ

ợ array ho c m t record – Bit_vector, Std_logic_vector và String là các ki u h n h p đã đ

c

đ nh nghĩa trong VHDL

signal A_word : bit_vector (3 downto 0) := “0011” ;

ừ ộ

• Câu l nh này t o nên m t ki u bit_vector (array) t

m t nhóm 4

bit – Trong VHDL không đ nh nghĩa đâu là LSB ho c MSB; do v y, khi  ượ ự ộ c t

ị biên d ch giá tr  này không đ

ể  đ ng hi u là ‘3’

ố ượ ng có ki u  ấ

ể ơ

ố ượ

Chú ý: dùng d u trích kép (“0011”) cho các đ i t bit_vector, std_logic_vector ho c string, và dùng d u trích đ n (‘1’)  ng có ki u bit, std_logic và character  cho các đ i t

Hardware Modeling - 1 - 54

Array

• Array là nhóm các ph n t

ầ ử ơ ể đ n có cùng ki u (type) ban

type WORD is array (3 downto 0) of std_logic ;

signal B_bus : WORD ;

đ uầ

B_bus

1

3

2

0

index position

signal B_bus : DATA ;

Nếu B_bus có kiểu WORD, giá trị có thể có của các phần tử là? Còn nếu B_bus có kiểu DATA? type DATA is array (3 downto 0) of integer range 0 to 9 ;

Hardware Modeling - 1 - 55

Phép gán các Array  ị ộ  array cho m t array khác, thì ộ :

• Khi gán giá tr  m t

ả – 1. Các array c n ph i có cùng ki u giá tr ả – 2. Các array ph i có cùng đ  dài ượ – 3. Phép gán đ

c th c hi n theo v  trí, t

ả  trái sang ph i

signal My_BusA, My_BusB: bit_vector (3 downto 0) ; signal My_BusC : bit_vector (0 to 3) ;

My_BusC <= My_BusA ;

3

2

1

0

My_BusB <= My_BusA ; 0

2

3

1

My_BusA

My_BusA

My_BusB

My_BusC

0

1

2

3

3

2

1

0

Inadvertent bit-swap?

Hardware Modeling - 1 - 56

Cách viết lệnh gán Array

• Đ  đ n gi n các phép gán array – và làm cho ch

ươ

ả ơ ể ử ụ ng trình  ị ở ơ  c i thi

ể ử ụ

ễ ọ

ị ế

ướ

i các giá tr  bi n cho d  đ c

ế ế t k  có th  s  d ng các giá tr   ặ ạ ể ơ ườ ễ ọ d  đ c h n ­ ng ố s  16 (hexadecimal) ho c 8 (octal) – Có th  s  d ng d u g ch d

signal Data_Word : std_logic_vector (11 downto 0) ;

Data_Word <= X”A6F”;

Data_Word <= ”101001101111” ;

Data_Word <= O”5157”;

Data_Word <= B”1010_0110_1111” ;

Hardware Modeling - 1 - 57

Records

Record là nhóm các phần tử đơn có kiểu ban đầu có thể khác nhau.

type OPCODE is record PARITY : bit; ADDRESS : std_logic_vector ( 0 to 3 ); DATA_BYTE : std_logic_vector ( 7 downto 0 ); NUM_VALUE : integer range 0 to 6; STOP_BITS : bit_vector (1 downto 0); end record ; . . . signal TX_PACKET, RX_PACKET : OPCODE;

. . .

PARITY

ADDRESS

DATA_BYTE

NUM_VALUE STOP_BITS

T X _ P A C K E T

Hardware Modeling - 1 - 58

String

String là array của các character

signal Warning1: string (1 to 30) := “ Unexpected Outputs Detected” ; --declared within the architecture variable Warning2: string (1 to 30) := “ Unstable, Aborting Now” ; --declared within the process constant Warning3: string (1 to 20) := “ Entering FSM State2” ; --declared within the package or architecture

process ( A_sig , B_sig, C_sig ) begin if (A_sig and B_sig ) /= ‘1’ then report “ Unexpected Outputs…” ; elsif ( A_sig and C_sig ) = ‘1’ then report “ I need a vacation “; end if ; end process ;

process ( A_sig , B_sig, C_sig ) begin if (A_sig and B_sig ) /= ‘1’ then report Warning1; elsif ( A_sig and C_sig ) = ‘1’ then report Warning2 & “ Problem Mod2“; end if ; end process ;

process ( A_sig , B_sig, C_sig ) begin assert (A_sig and B_sig ) /= ‘1’ then report Warning1; severity note ; end if ; end process ;

Hardware Modeling - 1 - 59

Phép gộp các Array

ộ i đ  nhóm các

ụ ệ ợ ể • Phép gộp (Aggregate) là m t công c  ti n l ợ ứ ữ ệ ướ ể ả ng và ph c h p trong

ki u d  li u (data type) c  vô h các phép gán

signal H_BYTE, L_BYTE: std_logic_vector ( 0 to 7); signal Q_Out : std_logic_vector (31 downto 0); signal A, B, C, D : std_logic; signal WORD : std_logic_vector (3 downto 0);

(A,B,C,D)<=WORD;

Only scalar data variables are allowed on the left- side aggregates.

WORD <= ( 2 => ‘1’, 3 => D, others => ‘0’ ) ;

Q_Out <= ( others => ‘0’ ) ; WORD <= ( A, B, C, D ) ;

H_Byte <= ( 7|6|0 => ‘1’, 2 to 5 => ‘0’ ) ;

The total number of elements on both sides of any assignment must match, “others” can be used as a default assignment, regardless of the array size

Hardware Modeling - 1 - 60

Gộp các Record ộ

i đ  nhóm các

ụ ệ ợ ể • Phép g p (Aggregate) là m t công c  ti n l ợ ứ ộ ữ ệ ướ ể ả ng và ph c h p trong

ki u d  li u (data type) c  vô h các phép gán

DATA_WORD <= ( H_BYTE, L_BYTE) ;

type D_WORD is record UPPER : std_logic_vector (7 downto 0 ) ; LOWER : std_logic_vector (7 downto 0 ) ; end record ; signal DATA_WORD : D_WORD ; signal H_BYTE, L_BYTE: std_logic_vector (7 downto 0); signal TX_PACKET, RX_PACKET : OPCODE; --defined earlier

Only records can accept aggregate of arrays

TX_PACKET <= ( ‘1’,”0011”,”11101010”,5,”10” ) ;

DATA_WORD <= ( LOWER => L_BYTE, UPPER=> H_BYTE) ;

TX_PACKET. ADDRESS <= ( “0011” ) ;

TX_PACKET. ADDRESS(2) <= ‘0’ ;

DATA_WORD <= ( LOWER | UPPER=> H_BYTE);

DATA_WORD <= ( others => H_BYTE);

Hardware Modeling - 1 - 61

ạ ậ

T o l p các Array 2­D

• Khi c n mô hình hoá các c u trúc b  nh , ng

ườ ớ i thi ế ế t k

ầ ả ạ ộ ề

7 6 5 4 3 2 1 0

0

ộ ấ ự ấ ph i t o ra m t c u trúc array 2 chi u (2­D structure) ủ – Đây th c s  là m t array c a các array (ho c các record)

of

1

2

type Mem_Array is array ( 0 to 3 ) std_logic_vector ( 7 downto 0); signal My_Mem : Mem_Array ;

3

Hardware Modeling - 1 - 62

ượ ứ

ủ T o Array c a các Record ườ c dùng trong các  ng  ng đ

• Array c a các record th

ụ ủ ử d ng x  lý gói tin (packet handling)

type Data_Array is array ( 0 to 2 ) of OPCODE ; signal My_Data : Data_Array ;

type OPCODE is record PARITY : bit; ADDRESS : std_logic_vector ( 0 to 3 ); DATA_BYTE : std_logic_vector ( 7 downto 0 ); NUM_VALUE : integer range 0 to 6; STOP_BITS : bit_vector (1 downto 0); end record ; . . . signal TX_PACKET, RX_PACKET : OPCODE;

My_Data

. . .

PARITY

ADDRESS

DATA_BYTE

NUM_VALUE STOP_BITS

. . .

. . .

Hardware Modeling - 1 - 63

ế ị

Phép gán các Array 2­D ỉ ủ ớ ầ • V i h u h t các  ng d ng c a memory, vector đ a ch

ể ạ

ụ ứ ỏ ể c chuy n thành d ng integer, đ  tham tr    trong array 2­D

ượ Read/Write đ ầ ử ộ ớ i m t ph n t t   ­ Hàm bi n đ i conv_integer có trong gói  ổ ế

ieee.std_logic_unsigned

type Mem_Array is array ( 0 to 3 ) of std_logic_vector ( 7 downto 0 ); signal My_Mem : Mem_Array ;

signal R_Addr, W_Addr : std_logic_vector (1 downto 0 ) ;

7 6 5 4 3 2 1 0

0

1

2

My_Mem (conv_integer( W_Addr)) <= Data_In ; . . . D_Out <= My_Mem (conv_integer (R_Addr));

3

Hardware Modeling - 1 - 64

Initializing a ROM Array

• V i các  ng d ng ROM, phép k t t p (aggregate) là m t  ạ

ớ ụ ộ

ế ậ ạ ứ ụ ệ ể công c  ti n ích đ  kích ho t m ng array 2­D

type ROM_Array is array ( 0 to 3 ) of std_logic_vector ( 7 downto 0); constant My_ROM : ROM_Array := --continued below

7 6 5 4 3 2 1 0

0

1

2

constant My_ROM : ROM_Array := ( 0 => (others => ‘1’) , 1 => “10100010”, 2 => “00001111”, 3 => “11110000” ) ;

3

Hardware Modeling - 1 - 65

ộ ậ ạ

Ki u con trong VHDL ợ ể ộ • M t ki u con (subtype) trong VHDL là m t t p h p có h n  ế ủ ể

ượ

c đ nh nghĩa trong

ườ

ị ạ

ể IEEE1076 ho c cũng có th  do ng

i dùng t o ra

subtype My_Int is integer range 0 to 255 ;

Label

Base Type

Constraint

subtype My_Small_Int is My_Int range 5 to 30 ;

ể ch  c a m t ki u (type) đã có ộ – Ki u đã có cũng có th  là m t ki u đã đ

ng đ

ượ ỏ

ế

ố ư

 Các ki u con (Subtypes) th ể ườ c dùng đ  phát hi n  ả ỗ i ‘out­of­range’ trong k t qu  mô ph ng, và cũng có th  có  l ổ ụ tác d ng t

i  u hoá quá trình t ng h p logic

Hardware Modeling - 1 - 66

ử ụ

S  d ng ki u con trong VHDL

type My_State is ( Load, Jump, Add, Sub, Div, Mult, StorA, StorB) ; signal Curr_State, Next_State : My_State ;

subtype Arith_Ops is My_State range Add to Mult ;

Base Type

Label

Constraint

subtype My_OHE_State is std_logic_vector ( 3 downto 0 ) ; constant Init_St0 constant Load_St1 constant Jump_St2 constant Stor_St3

: My_OHE_State := “0001” ; : My_OHE_State := “0010” ; : My_OHE_State := “0100” ; : My_OHE_State := “1000” ;

Hardware Modeling - 1 - 67

Bài 4

Operators và Expressions

Hardware Modeling - 1 - 68

Các toán tử trong VHDL

• VHDL ch a m t l

ộ ượ ứ ử (operator) dùng cho

ệ ng l n các toán t ầ ớ ứ vi c mô hình hoá ph n c ng

• Tuy nhiên, m i toán t

ử ụ ữ ể ớ ữ c s  d ng v i (nh ng) ki u d

ầ ư ớ

ử ố ọ  s  h c (arithmetic) không  c v i các ki u d  li u ph c h p (bit_vector and

ố ườ

ị ằ

ng

ử ượ ỗ  đ ị ệ li u (data type) nh t  đ  nh  ệ ặ – Đ c bi t, c n l u ý các toán t ữ ệ ượ dùng đ std_logic_vector), vì các array không có giá tr  b ng s  t minh

• Các Function (subprogram) đ ề

ượ ạ ụ ể ắ c t o ra đ  kh c ph c

ượ

ữ ấ

c g i là “arithmetic

packages”

nh ng v n đ  liên quan – Các hàm này có trong các gói đ

Hardware Modeling - 1 - 69

Operator Overloading

• Operator overloading (ch ng hàm) trong VHDL có nghĩa là

ế

ệ ượ t đ

c vi

t cho

ộ ử ụ ể ể ượ ớ ồ ụ  c  th  (ví d , ‘+’ ) có th  đ c dùng v i các

ả ừ t ng data type nh t đ nh

signal A, B : std_logic_vector ( 3 downto 0 ) ; signal C, D : integer range 0 to 31 ; signal Q_Out : std_logic_vector ( 15 downto 0 );

-- add 2 vectors -- add 2 integers

Y <= A + B ; F <= C + D ; Q_Out <= Q_Out + 1; -- add vector and integer

m t toán t data type khác nhau – Đi u này x y ra do các subprogram riêng bi ấ ị

ự ộ

đ ng ch n sub­function thích h p d a trên data

ọ Compiler t type c a các operands

Hardware Modeling - 1 - 70

Các toán tử Logic

• Các logical operator đ

ượ ạ ớ ị

A

Z

B

F

Z <= A and B ;

H

Y

G

ể c đ nh nghĩa v i các toán h ng có  ki u (data type) bit, boolean, bit_vector và std_logic_vector

Y <= G or ( F and H ) ;

and or nand nor xor not xnor (VHDL-93)

Hardware Modeling - 1 - 71

Các toán tử Logic với biến kiểu Array

signal A_vec, B_vec, C_vec : bit_vector ( 7 downto 0 ) ;

C_vec (7)

A_vec (7) B_vec (7)

C_vec <= A_vec and B_vec ;

C_vec (6)

A_vec (6) B_vec (6)

C_vec (5)

A_vec (5) B_vec (5)

. . .

C_vec (0)

A_vec (0) B_vec (0)

Quy tắc sử dụng với biến kiểu Array 1. Các array phải có cùng kiểu (type) 2. Các array phải có cùng kích thước 3. Phép toán thực hiện với các phần tử cùng vị trí trong mỗi array, từ trái sang phải

Hardware Modeling - 1 - 72

Các toán t ể

ử ệ

quan h ớ ầ

• Các toán t

ế quan h  có th  dùng v i h u h t các data type

• T t c  các toán t

ử ả ể ệ ề ế quan h  đ u cho k t qu  ki u (type)

ấ ả Boolean

signal FLAG_BIT : boolean ; signal A, B : integer ;

FLAG_BIT <= ( A > B ) ;

ế

ơ

ẽ ượ

c gán giá tr

ượ ạ   c l i

ị true, ng

ượ

FLAG_BIT đ

c gán giá tr

N u A l n h n B, FLAG_BIT s  đ ị false

= Equality /= Inequality < Less than <= Less than or equal > Greater than >= Greater than or equal

Hardware Modeling - 1 - 73

ệ ớ

Toán t

quan h  v i các Array

signal A_vec : bit_vector ( 7 downto 0 ) := “11000110” ; signal B_vec : bit_vector ( 5 downto 0 ) := “111001” ;

Rules for use on Arrays 1. Arrays must be same type 2. Arrays may be different lengths 3. Arrays of different lengths are aligned left and then lexically compared -- Compares ASCII values

if ( A_vec > B_vec ) then State <= Normal else State <= Code_Red end if …

ượ

trái sang ph i. Vi c so sánh đ

ự c th c

ừ ầ ử

– Các vector đ ệ ầ ượ hi n l n l ắ

ụ ả

ố ượ ợ ế • Ví d  này cho k t qu  là false  ượ c so sánh t ừ t theo t ng ph n t ả • Quy t c: đ  đ m b o phép so sánh s  đ c h p lý  các

ầ ướ ể ả ả array c n ph i có cùng kích th c

Hardware Modeling - 1 - 74

ử ố ọ

Các toán t

s  h c

• Các toán t

ử ố ọ ữ ệ ể ớ s  h c dùng v i các ki u d  li u (data type)

integer, real, và physical

• Các toán t

ố ử ố ọ ữ ệ ớ

Z_num <= ( A_num + B_num ) ;

A_num

Z_num

+

ể  s  h c v n không dùng v i các d  li u có ki u  signal A_num, B_num : integer range 0 to 15 ; signal Z_num : integer range 0 to 31 ;

B_num

Infers a 5-bit adder

array + Addition - Subtraction * Multiplication / Division abs Absolute Value ** Exponentiation

Hardware Modeling - 1 - 75

ế

ể ự ị ấ

ố ọ Phép tính s  h c v i các  bi n Array ầ • Đ  th c hi n các phép tính s  h c c n có các function   các hãng cung c p

ư ậ

ượ

ề ầ

ng đ

ườ ộ ố

c đ t trong các gói g i là  ị

ặ ụ

ặ ở ư ệ

“arithmetic packages”. M t s  công c  (tool) d ch s n các gói  này và đ t

th  vi n c a chúng – Các gói std_logic_unsigned và std_logic_arith đ ể

c xác l p  ồ

ượ ổ

ư ệ

trong th  vi n IEEE đ  phát huy kh  năng trao đ i mã ngu n  gi a các công c  khác nhau

ố ọ ặ ừ ẵ đ nh nghĩa s n trong IEEE ho c t ế ế ph n m m thi t k – Các function nh  v y th

package STD_LOGIC_UNSIGNED is   function “+” (A,B: std_logic_vector) return std_logic_vector ; function “+” (A: std_logic_vector, B: integer ) return std_logic_vector ; function “+” (A,B: std_logic_vector) return integer ; . . . .

• Toán t

“+” là overloaded

library IEEE ; use IEEE.std_logic_1164.all ; use IEEE.Std_Logic_Unsigned.all ; use IEEE.Std_Logic_Arith.all;

Hardware Modeling - 1 - 76

Array Arithmetic

• N u có các function thích h p có th  dùng đ

ợ ế ượ c trong

ạ ằ

ế

ể ẽ ề ế ế ệ t k  (thông qua m nh đ  “use”), thì compiler s   ả ạ ế ề ừ ố ả i k t qu  tính t đ ng truy n tham s  cho tr  l

i r ng các operator đó là

“undefined”

module thi ự ộ t subprogram đó – N u không, compiler s  thông báo l

signal A_vec : std_logic_vector ( 7 downto 0 ) := “11001001” ; signal B_vec : std_logic_vector ( 7 downto 0 ) := “11100100 ” ; signal Z_vec : std_logic_vector ( 8 downto 0 ) ; signal D_int : integer range ( 0 to 9 ) ;

Z_vec < = A_vec + B_vec ;

Z_vec < = A_vec + D_int ;

Hardware Modeling - 1 - 77

Các toán t

Shift (d ch)

ượ

ạ ộ ấ ủ ượ ầ ả

• Các toán t hay đ các ph n t

ầ ử ấ ị ử c đ nh nghĩa trong VHDL­93 và r t   Shift đ ấ ử ụ  ho t đ ng c a  c s  d ng, nh t là khi c n mô t  trong c u trúc máy tính

ử ể ạ ỗ • M i toán t có hai toán h ng, toán h ng trái có ki u array

ỉ ố ướ ặ

ượ ể ề ặ ị ỉ ạ ả one­dimension (1­D) và toán h ng ph i có ki u nguyên  ị (integer) ch  s  b c c n d ch (ho c quay). S  âm cũng  đ ầ c dùng đ  ch  chi u d ch (ho c quay) ng ể ố ượ ạ i c l

• K t qu  c a các phép d ch (ho c quay) có cùng ki u và

ế ể ặ ị

ả ủ ướ ạ ớ kích th c v i toán h ng trái

Hardware Modeling - 1 - 78

Các toán t

Shift (d ch)

• sll ­ Logical left shift • srl ­ Logical right shift • sla ­ Arithmetic left shift • sra ­ Arithmetic right shift rol ­ rotate left logical ror ­ rotate right logical

Hardware Modeling - 1 - 79

Shift Operator ­ Các ví dụ

• Ví d :ụ signal A_vec : bit_vector (7 downto 0) := “11000110”; signal D_vec : bit_vector (7 downto 0);

cho kq

D_vec <= A_vec sll 2; D_vec <= A_vec sra 2; D_vec <= A_vec ror 3; D_vec <= A_vec srl 2; D_vec <= A_vec sra -2;

“00011000” “11110001” “11011000” “00110001” “00011000”

Hardware Modeling - 1 - 80

Concatenation

ử ố ế

ượ

ệ c th c hi n v i s  t

ng h p v  trí

n i (concatenation) “&” cho phép k t n i các bi n  ể ớ ự ươ

ế ố • Toán t ơ ớ ể ể ki u scalar và ki u array thành ki u array l n h n ị ự – Các phép gán đ (positional association)

signal A_vec, B_vec : std_logic_vector ( 7 downto 0 ) ;

signal Z_vec : std_logic_vector ( 15 downto 0 ) ; signal A_bit, B_bit, C_bit, D_bit : std_logic ; signal X_vec : std_logic_vector ( 2 downto 0 ) ; signal Y_vec : std_logic_vector ( 8 downto 0 ) ; Z_vec <= A_vec & B_vec ;

X_vec <= A_bit & B_bit & C_bit ;

Y_vec <= B_vec & D_bit ;

Hardware Modeling - 1 - 81

Nhóm các toán tử

ể ấ ơ ử ặ • Có th  s  d ng d u ngo c đ n đ  nhóm các toán t trong

ễ ọ ơ ộ ể ử ụ ứ ể m t bi u th c đã cho làm cho nó d  đ c h n

Z <= A + B + C + D ;

Z <= ( A + B ) + ( C + D ) ;

A

A

+

+

B

+

B

Z

C

Z

+

+

D

+

C D

3 logic levels

2 logic levels

This is especially important when the target technology is LUT (Look-Up Table) based. Each added level of logic incurs additional block and routing delays

Hardware Modeling - 1 - 82

Các Slice c a Array

ượ k  c n nhau trong m t array đ c

• M t nhóm các ph n t ộ ầ ử

ộ ạ

ưở

ị ả

ng b i phép

ộ ờ ỏ ồ c tham tr  đ ng th i ở ể ượ  khác c a array không b   nh h

ầ ử ề ậ go i là m t slice và có th  đ – Các ph n t gán slice

signal A_vec, B_vec : std_logic_vector (7 downto 0) ; signal Z_vec : std_logic_vector (15 downto 0) ; signal A_bit, B_bit, C_bit, D_bit : std_logic ;

(cid:0)

Z_vec (15 downto 8) <= A_vec ; B_vec <= Z_vec (12 downto 5) ; A_vec (1 downto 0) <= C_bit & D_bit ; . . . Z_vec (5 downto 1) <= B_vec (1 to 5 ) ;

The direction (ascending or descending) of the slice must be consistent with the direction of the array as it was originally declared

Hardware Modeling - 1 - 83

Slice và Concatenation

ụ ể

ể • Ví d , đ  mô hình hoá m t bi u th c có đi u ki n v i các ph n

ệ ừ c ch n không li n nhau (9,8,3,2,1, và 0) t

ầ  ‘Status’ bus

ố ượ

ổ ợ

ng m ch logic t

h p và

ử ượ t  đ ồ g m 16­bit ả – Gi

i mã toàn b  bus có th  làm tăng s  l ệ

ộ ế ị

ơ

t b  làm vi c ch m h n)

làm cho thi

signal Status_Bus : std_logic_vector (15 downto 0) ;

Will Not Compile!

process ( Status_Bus ) begin case ( Status_Bus ) is when “1101111101010011” => < sequential statement(s) > ; when . . .

Inefficient !!

process ( Status_Bus ) begin case ( Status_Bus(9 downto 8) & Status_Bus (3 downto 0)) is when “110011” => < sequential statement(s) > ; when . . .

process ( Int_Bus ) begin case ( Int_Bus ) is when “110011” => < sequential statement(s) > ; when . . .

Optimal !!

signal Int_Bus : std_logic_vector ( 5 downto 0 ) ; . . . Int_Bus <= Status_Bus ( 9 downto 8 ) & Status_Bus ( 3 downto 0 ) ;

Hardware Modeling - 1 - 84

Bài 5

Các câu l nh ệ Concurrent và  Sequential

Hardware Modeling - 1 - 85

Mô hình hoá ph n c ng

ự ứ ộ ộ

ể ả ử ụ ệ ờ ầ ệ ồ

ể • Đ  mô hình hoá m t th c th  ph n c ng m t cách có hi u  ả qu , VHDL s  d ng c  các câu l nh concurrent (đ ng th i)  ầ ự ẫ l n sequential (tu n t )

• Các câu l nh đ ỳ

ệ ượ ọ

c g i là concurrent khi chúng đ ủ ộ ị ự c th c  ươ ng

ượ ệ hi n không tu  thu c vào v  trí c a chúng trong ch trình

• Các câu l nh đ

ượ ượ c g i là sequential khi chúng đ ự c th c

ộ ự ế  vi

ế

ọ ầ ự  theo trình t ư ố ầ t chúng trong  ề ệ ng trình, gi ng nh  các l nh trong các ph n m m ườ

t trong m t process là nh ng l nh

sequential

ệ ệ hi n m t cách tu n t ươ ch thông th ng   ấ ả – T t c  các câu l nh vi

Hardware Modeling - 1 - 86

C u trúc ngôn ng

architecture RTL of ENTITY_1 is . . . begin

concurrent statements ;

. . .

process begin sequential statements ; . . . end process ;

. . .

ọ ộ

ằ ề

• M i câu l nh n m ngoài  m t process đ u là l nh  concurrent

concurrent statements ; . . . process begin sequential statements ; . . . end process ; ... end architecture RTL ;

Hardware Modeling - 1 - 87

Process

• M t process bao g m các

ộ ệ

ồ câu l nh sequential  ệ – Các câu l nh trong m t  ượ c th c hi n  process đ ầ ượ l n l

ả ượ ề c

architecture RTL of My_And2 is begin . . . process (A, B) begin    C <= A and B ; end process ; . . . end architecture RTL;

ườ

ự ng là do s  thay đ i

t ỗ • M i process đ u ph i đ ạ ho t kích theo m t cách  ấ ị nh t đ nh – Th ủ

ụ ể

c a các tín hi u trong  ề ặ process, ho c các đi u  ộ ệ ki n c  th  trong m t câu  ệ l nh ‘wait’

Hardware Modeling - 1 - 88

Các Process là đồng thời ầ

ệ ể ề • Trong vi c mô hình hoá ph n c ng, quan đi m v

ế ứ ấ ầ t

ờ  tín hi u ‘C’ ­ c a ra c a c

ượ

ệ ở ờ ư ớ ử c đ ng th i đ a t

ổng G1,  ủ i c a vào c a các c ng G2

ấ ỳ ự cũng đ u đ và G3

Process 1

Process 2

A

C

C

G2

G1

B

C<=A and B ...

If  C = ‘1’ then  ...

C

Process 3

G3

process (C,..) begin

ồ concurrency (tính đ ng th i) là r t c n thi ổ – B t k  s  thay đ i nào  ồ

Hardware Modeling - 1 - 89

ể ể ỉ

Mô hình kết nối trong VHDL ị ừ ộ  m t  • Ch  có các tín hi u (signal) là có th  chuy n giá tr  t

ượ

ế ở

c liên k t b i các tín hi u,

ượ

ế

ng đ

c g i là VHDL Connectivity Model (mô hình k t

ườ th n i)ố

Process n

Process n1

Sig1

C

Process n3

C<=A and B ...

Sig2

If  C = ‘1’ then  ...

C

process (...

Process n4

Process n2

Rst

process n

process (C,..) begin

ệ ộ process sang m t process khác – Các process concurrent, đ

Hardware Modeling - 1 - 90

Các thành phần của Process

Keyword

Signals in sensitivity list create implied “wait” condition

Optional Label

Signal updated with new value when process suspends

Keywords “end” and “process”

All statements within the process are handled sequentially, in order

architecture Behave of DFF is begin . . . Reg1: process (Clock, Reset) begin if Reset = ‘1’ then Q <= ‘0’ ; elsif ( Clock’event and Clock = ‘1’ ) then Q <= D ; end if ; end process; . . . end Behave ;

Hardware Modeling - 1 - 91

Bên trong và bên ngoài Process

B

Out1

ỉ Ch  có phép gán cu i cùng là có  ệ ự hi u l c

architecture ... process ( ) begin Out1 <= A; Out1 <= B; . . . end process ; end architecture ;

A

Out1

?

B

architecture . . . begin Out1 <= A; Out1 <= B; . . . end architecture ;

ộ C n ph i có m t hàm  ệ resolution cho tín hi u ra ‘Out1’

Hardware Modeling - 1 - 92

ỗ ả ầ ạ

ế ể ừ ơ

ạ ệ • V i đo n mã RTL, các tín hi u trong sensitivity list t o nên

ệ ặ ị m t đi u ki n wait m c đ nhcho process

Tạm dừng các Process ề ộ ơ • M i process c n ph i có m t c  ch  đ  kích ho t, đi u đó  ế ể ạ cũng có nghĩa là có c  ch  đ  t m d ng (suspending)  process – Đi u này t o nên tr ng thái đ i (wait) cho process   ạ ớ ề ộ ố ớ

• Đ i v i các mô hình hành vi, ng

ườ t k  th òng dùng

An event on given signal An event on given signal A specific condition A specific condition

ệ i thi ố ế ế ư ệ ạ các câu l nh wait. Trong VHDL có b n d ng l nh wait

wait on A, wait on... wait on... B ;wait until CLK = ‘1’ ; wait until... wait until... wait for 10 ns ; wait for ... A specified time amount wait for ... A specified time amount wait; wait wait

Indefinite suspension Indefinite suspension

Hardware Modeling - 1 - 93

ệ ệ

Các điều kiện Wait ề i đây so sánh các đi u ki n ‘wait’ t

ề ừ  các câu l nh  ẩ t rõ ràng (explicit) và đi u ki n ‘wait’  n ý (implicit)

ộ ố

đi u ki n explicit ‘wait’

process (A, B) begin C <= A and B ; end process ;

ệ ợ ụ ướ • Ví d  d ế ượ đ c vi ỗ ợ – Note: M t s   compiler dùng t ng h p m ch không h  tr

process begin wait on A, B ; C <= A and B ; end process ;

process begin C <= A and B ; wait on A, B ; end process ;

FYI: Another important consideration is that all processes are initialized before simulation, that means they are run until the first ‘wait’ condition is met

Given that fact, what is the value on ‘C’ at simulation time zero—assuming use of std_logic for each of the examples above ?

Hardware Modeling - 1 - 94

Modeling Concurrency

ượ

ỏ ể

ấ ả

ự ệ c ho t kích theo s  ki n – T i m t th i đi m b t k  trong th i gian mô ph ng, (1) t

t c  các  ị ủ

ế

ấ ỳ ệ ậ

ự ậ

ượ

• Công c  mô ph ng VHDL đ ờ ượ process đ ượ ệ tín hi u đ các process liên quan đ ờ

ừ ị ạ c th c hi n cho đ n khi b  t m d ng, (2) giá tr  c a các  ệ ị ở ổ ự  các tín hi u làm cho  c c p nh t, (3) s  thay đ i giá tr   c th c hi n ạ

c g i là delta cycle

ượ

ệ ượ • Th i gian gi a các công đo n này đ ệ • Theo cách đó, các process và các l nh concurrent đ

ư c coi nh

ờ ạ

ồ x y ra đ ng th i t

i m i đi m mô ph ng

Concurrent Operations

. . .

Delta cycles in-between D1

D+2

D+1

. . .

D+n

Delta cycles in-between D1

D+2

D+1

Simulation discrete time step

998

999

1000

1001

1002

Hardware Modeling - 1 - 95

Sắp xếp trình tự các Event

• C  ch  s p x p trình t

ế ắ ủ ự ế

ơ ườ ạ  các event là h t nhân c a môi  ng mô hình hoá hành vi trong VHDL tr

• M i ho t đ ng (transaction) c a th c th  đ

ể ượ ủ ự ặ ở ắ c s p đ t

• B c th i gian ch  tăng lên khi không còn transaction nào

ỗ ộ ợ ạ ộ ể ờ m t th i đi m thích h p

ờ ở ờ ể ỏ ướ khác ỉ  th i đi m mô ph ng

Hardware Modeling - 1 - 96

Scheduling Events

. . .

Simulation discrete time steps

Delta cycles D+1 D+2

D1

. . .

D+n

Delta cycles D+2

D+1

D1

ns

t

t+1

t+2

t+4

t+3

Transaction Queue

t + 3 Out1<= ‘1’

t + 5 Data<= ‘0’ . . .

t + 4 Int <= ‘1’ . . .

Out2<= ‘0’

l

. . .

s e c y C

Out1 <= ‘1’ ; Out2 <= ‘0’ ; . . . Int <= ‘1’ after 1 ns; . . . Data <= ‘0’ after 2 ns; . . .

a t l e D

Discrete Time

Hardware Modeling - 1 - 97

Transactions

• Câu l nh gán tín hi u “Z <= A” t o ra m t transaction trong

ệ ạ ộ

ệ VHDL

process (. . .) begin Z <= A ; F <= G ;

. . . end process ;

• C  th , giá tr  hi n t gán cho tín hi u Zệ

ụ ể ị ệ ạ ủ ượ ọ ượ i c a A đ c đ c và đ ể c dùng đ

Hardware Modeling - 1 - 98

Events ặ

ự ế ự ệ ổ

ệ  tín hi u đó ề ệ ộ ỗ ị ủ • N u giá tr  c a “Z” ho c “F”  th c s  có thay đ i sau l nh  gán (transaction), ta nói có m t ộ ệ ở ấ event xu t hi n  • M i m t phép gán tín hi u đ u

process (A, G) process (A, G) begin begin Z <= A; Z <= A; F <= G; F <= G; . . . . . . end process ; end process ;

Process 2 Process 2

Process 1 Process 1

ệ ở

Z

Z<=A; ...

gây ra m tộ ả ư transaction, nh ng không ph i  ấ ả t c  các transaction đ u làm  t ấ  tín hi u  xu t hi n các event  ượ đ ộ ở ộ ệ  m t tín hi u đã cho

If Z = ‘1’ then ...

ệ c gán • M t event  ạ ể ộ

Z

Process 3 Process 3

có th  ho t kích m t process  ệ ch  khi tín hi u đó có tên trong  ủ sensitivity list c a proccess

process (Z,..) begin

Hardware Modeling - 1 - 99

Building Registers

process ( Clk) process ( Clk) begin begin

Mọi phép gán tín hiệu xảy ra sau mệnh đề:

if clock’event and clock = ‘1’ then...

if (Clk’event and Clk = ‘1’) then if (Clk’event and Clk = ‘1’) then C <= A and B ; C <= A and B ; end if; end if; end process; end process;

đều tạo ra một cấu trúc thanh ghi (register)

C

A B

Clk

Hardware Modeling - 1 - 100

Khái quát về Signal và Variable trong VHDL

ể ề

ự ặ

• H u nh  m i k t n i gi a các đi m trong m t th c th  đ u có  ế

ầ ể ượ th  đ

ư ọ ế ố c mô hình hoá b ng signal (tín hi u) ho c variable (bi n) ạ

ữ ằ ả t cách dùng, các kh  năng và nh ng h n

ệ ng này

ố ượ ể ấ ả

ộ ớ

t c  các port đ ổ

ượ

c cho m i process đ

• Tuy nhiên, c n phân bi ế ủ ừ ch  c a t ng đ i t ượ Ở ứ ự c khai báo thu c l p signal,   m c th c th , t ể ị ớ chúng có kh  năng trao đ i giá tr  v i các module khác, và có th   ượ dùng đ c khai báo trong các architecture  ộ ệ  thu c   body l ỗ

ấ ả

• Trong m i architecture body, t

t c  các tín hi u đ

c khai báo  ớ

ộ ớ

c dùng v i

ượ

ượ ụ ỉ ượ ụ ch  có tác d ng c c b  v i architecture đó, và ch  đ c khai báo trong cùng architecture đó các process đ

ử ụ

• Trong m i process, có th  khai báo và s  d ng variable đ  mô  ộ

ể ế ụ

ố ph ng các m i liên k t c c b

Hardware Modeling - 1 - 101

Phạm vi của Signal và Variable

ượ

m c cao nh t (entity)

ỗ ỗ

ở ứ c khai báo  • Port là signal, đ ể • Trong m i architecture có th  có các signal c c b ộ • Trong m i process có th  có các variable c c b

entity

architecture

process

Variables

Signals

Input Ports

Output Ports

Hardware Modeling - 1 - 102

Phép gán v i Signal

ố ươ

• VHDL phân bi

ệ t r t rõ ràng trong vi c x  lý v i các đ i t

ng

ệ ấ thu c các l p signal và variable

ắ • Các quy t c c  b n là:

ượ ượ

ướ

ả ả

ơ ả – T t c  các signal và variable đ – T t c  các signal và variable đ

c gán ph i có cùng ki u (type) c  c gán ph i có cùng kích th

ấ ả ấ ả (size)

ế

ườ

ả ư

• N u signal là m t port, ng

t k  ph i l u ý thêm:

ế ế ư

ượ

c gán giá tr

ể ượ

ư

c gán giá tr  trong process, nh ng

ượ

i thi ể ọ  Signals có mode “in” có th  đ c nh ng không đ  Signals có mode “out” có th  đ không đ

ọ c đ c

Hardware Modeling - 1 - 103

Phép gán v i Signal

Internal_Cnt

Q

Counter

entity Count_1 is port (Clk, D : in bit ; Q : out integer range...); end Count_1;

architecture WRONG of Count_1 is begin process (Clk) begin If Clk’event and Clk =‘1’ then Q <= Q + 1; end if ; end process ;

Will produce compiler error

architecture RTL of Count_1 is signal Internal_Cnt : integer range ... ; begin process (Clk) begin If Clk’event and Clk =‘1’ then Internal_Cnt <= Internal_Cnt + 1 ; end if ; end process ; Q <= Internal_Cnt ;

Hardware Modeling - 1 - 104

Using Variables

ỉ ớ ạ

i h n trong process

ượ

đó nó  ị ớ

c khai báo, ta không th  s  d ng nó đ  trao đ i giá tr  v i

đ ư các module khác, nh  cách s  d ng các signal ượ

ị ủ

• B t k  variable nào đ

c khi giá tr  c a nó đ

c xác

ấ ỳ ị

ượ ấ

c suy di n nh  là m t register trong c u trúc  ộ ư

ả ẩ

• Vì ph m vi c a m t variable ch  gi ể ử ụ ử ụ ướ ọ c đ c tr ư ễ ượ ử ụ ử ụ

ẽ ượ ề đ nh, đ u s  đ ế c dùng v i m t process có clock hardware n u nh  nó đ – Ph i c n th n khi s  d ng variable trong các process có clock ạ

ượ

• Tuy nhiên, r t nên s  d ng các variable đ

c trong các m ch

ổ ợ

logic t

h p trung gian

ỉ ầ

• Chúng làm tăng t c đ  c a vi c ch y mô ph ng vì ch  c n ít  ậ

ộ ủ ỏ ậ delta cycles cho vi c c p nh t các tín hi u ra

Hardware Modeling - 1 - 105

Variable trong các Process có Clock

process ( Clk ) process ( Clk ) variable B, C, D : bit := ‘1’ ; variable B, C, D : bit := ‘1’ ; begin begin If (Clk’event and Clk =‘1’) then If (Clk’event and Clk =‘1’) then B := A ; B := A ; C := B ; C := B ; D := C ; D := C ; end if ; end if ; end process ; end process ;

process ( Clk ) process ( Clk ) variable B, C, D : bit := ‘1’ ; variable B, C, D : bit := ‘1’ ; begin begin If ( Clk’event and Clk =‘1’ ) then If ( Clk’event and Clk =‘1’ ) then D := C ; D := C ; C := B ; C := B ; B := A ; B := A ; end if ; end if ; end process ; end process ;

A

B

C

D

D

A

Clk

Clk

Hardware Modeling - 1 - 106

Alternate Solution

Internal_Cnt

Q

Counter

entity Count_1 is port (Clk, D : in std_logic ; Q : out std_logic_vector ...); end Count_1;

architecture WRONG of Count_1 is begin process (Clk) begin If Clk’event and Clk =‘1’ then Q <= Q + 1; end if ; end process ;

architecture RTL of Count_1 is begin process (Clk) variable Internal_Cnt : std_logic_vector.. begin If Clk’event and Clk =‘1’ then Internal_Cnt := Internal_Cnt + 1 ; Q <= Internal_Cnt ; end if ; end process ;

Will produce compiler error

Hardware Modeling - 1 - 107

Bài 6

ươ

Các l nh đi u khi n  ch

ệ ng trình trong VHDL

© 2003 Xilinx, Inc. All Rights Reserved

Cấu trúc ngôn ngữ

architecture RTL of ENTITY_1 is . . . begin

concurrent statements ;

. . .

ế

c vi

t bên

• Các l nhệ if/else, case ho cặ loop  ả ượ ph i đ ộ trong m t process

process begin case ( sel_a ) is when… . . . end case ; end process ;

. . .

. . . process begin if (sel_b = “00”) then . . . else…. end if ; end process ; ... end architecture RTL ;

Hardware Modeling - 1 - 109

Các câu lệnh If/Else

• Câu l nh ệ

ự ự ị

ề ệ ệ ệ c th c hi n d a  if/else c  ơ

ả ượ if/else làm cho các giao d ch đ ạ ấ ị ữ trên nh ng đi u ki n nh t đ nh. Có ba d ng l nh  b n sau:

process process begin begin if (boolean expression) then if (boolean expression) then sequential statements; sequential statements; end if ; end if ;

process process begin begin if (boolean expression 1) then if (boolean expression 1) then sequential statements ; sequential statements ; elsif (boolean expression 2) then elsif (boolean expression 2) then sequential statements ; sequential statements ; elsif (boolean expression 3) then elsif (boolean expression 3) then sequential statements ; sequential statements ; else else sequential statements ; sequential statements ; end if ; end if ;

process process begin begin if (boolean expression) then if (boolean expression) then sequential statements ; sequential statements ; else else sequential statements ; sequential statements ; end if ; end if ;

Hardware Modeling - 1 - 110

Ví dụ về lệnh If/Elsif

ẽ ượ

1. Đi u ki n đ u tiên tho  mãn s  đ

c

ề ự

A

B

Z

ệ ệ th c hi n ngay ề ệ

ể ố ủ ệ

ệ 2. Các đi u ki n có th  g i nhau ầ 3. Đi u ki n đ u tiên c a l nh

if/elsif

C

ề ư

ấ có  u tiên cao nh t

D

D

Sel

process (A, B, C, D, Sel) process (A, B, C, D, Sel) begin begin If (Sel = “00”) then If (Sel = “00”) then

C

Z <= A ; Z <= A ;

elsif (Sel = “01”) then elsif (Sel = “01”) then

Z <= B ; Z <= B ;

B

elsif (Sel = “10”) then elsif (Sel = “10”) then

Z <= C ; Z <= C ;

elsif (Sel = “11”) then elsif (Sel = “11”) then

Z

A

Z <= D ; Z <= D ;

Late arriving signal? Late arriving signal?

end if; end if; end process ; end process ;

Sufficient for std_logic? Sufficient for std_logic?

Hardware Modeling - 1 - 111

Câu lệnh Case

• Câu l nh ệ ộ

ượ ự ệ ỳ c th c hi n tu

case làm cho các giao d ch đ ể ị ọ

• L nh ệ

ạ ị ủ ứ thu c vào giá tr  c a bi u th c ch n ơ ả : case có hai d ng c  b n

process (…) process (…) begin begin case ( selector expression ) is case ( selector expression ) is when ... => when ... =>

process (...) process (...) begin begin case ( selector expression ) is case ( selector expression ) is when ... => when ... =>

sequential statements ; sequential statements ;

sequential statements ; sequential statements ;

when ... => when ... =>

sequential statements ; sequential statements ;

. . . . . . when others => when others =>

when ... => when ... =>

sequential statements ; sequential statements ;

sequential statements ; sequential statements ;

end case ; end case ; . . . . . . end process ; end process ;

end case ; end case ; . . . . . . end process ; end process ;

Hardware Modeling - 1 - 112

Ví dụ về lệnh Case

ả ượ

c

ủ • T t c  các giá tr  có th  có c a bi u th c ch n đ u ph i đ ệ

ấ ả ỉ

ị ch  rõ (specified) trong câu l nh

ượ

ồ c ch ng ch ả ữ ả ấ

ế

ầ ề ạ

ừ ệ

• Các đi u ki n không đ ả ị ượ • Gi i các giá tr  đ c mô t ớ ợ ệ L nh Case thích h p v i các c u trúc ki u LUT  ụ ổ – H u h t các công c  t ng h p m ch  ấ đ u t o ra c u trúc MUX t

ạ  l nh case

A

B

Z

C

D

éo (g i) nhau ố ạ  ph i h u h n (discrete)

process (A, B, C, D, Sel ) begin case Sel is when “00” => Z <= A ; when “01” => Z <= B ; when “10” => Z <= C ; when “11” => Z <= D ; end case ; . . . end process ;

Sel

Is this sufficient for std_logic?

Hardware Modeling - 1 - 113

Các điều kiện chồng chéo

ụ ướ

• Ví d  d

ử ụ

ng h p các đi u ki n ch ng chéo  ố if/elseif. Mu n s  d ng

i đây minh ho  tr ỉ ỉ

nhau. Khi đó ta ch  có th  s  d ng l nh  l nh ệ

ạ ườ ệ ể ử ụ ệ ề i các đi u ki n

ả case ph i ch nh l

D

process (A, B, C, D, Sel) process (A, B, C, D, Sel) begin begin If (Sel <= 3) then If (Sel <= 3) then

Z <= A ; Z <= A ;

C

elsif (Sel <= 5) then elsif (Sel <= 5) then

Z <= B ; Z <= B ;

elsif (Sel <= 7) then elsif (Sel <= 7) then

B

Z <= C ; Z <= C ;

elsif (Sel <= 9) then elsif (Sel <= 9) then

Z <= D ; Z <= D ;

Z

A

end if; end if; end process ; end process ;

Hardware Modeling - 1 - 114

Giải hữu hạn các giá trị

• N u m t gi

ủ ệ ả ộ ộ

i các giá tr  đ ặ ả ữ ề ạ ế ị ượ c dùng làm đi u ki n c a m t  ầ ệ l nh case ho c if/else, nó c n ph i h u h n (discrete)

(cid:0)

process (…) begin if (x = 12 to 14) then sequential statements ; . . .

(cid:0)

(cid:0)

case ( selector expression ) is => sequential statements ; when 0 to 7 when 4.3 to 7.7 => sequential statements ; when “1000” to “1010” => sequential statements ; => sequential statements ; when “1000” | “1010”

(cid:0)

(cid:0)

. . . end process ;

Hardware Modeling - 1 - 115

Lệnh gán Signal có điều kiện

ộ ạ

ươ

gán tín hi u có đi u ki n

ệ  là m t d ng có tác d ng t

ng

L nh ệ ươ đ

ệ ng l nh

ệ if/else

architecture ... architecture ... begin begin Z <= A when Sel = “00” else Z <= A when Sel = “00” else B when Sel = “10” else B when Sel = “10” else C when Sel = “11” else C when Sel = “11” else ‘X’ ; ‘X’ ; end architecture ; end architecture ;

architecture ... architecture ... begin begin process ( A,B, C, Sel ) process ( A,B, C, Sel ) begin begin if (Sel = “00” ) then if (Sel = “00” ) then Z <= A ; Z <= A ; elsif (Sel = “10”) then elsif (Sel = “10”) then Z <= B ; Z <= B ; elsif (Sel = “11”) then elsif (Sel = “11”) then Z <= C ; Z <= C ; else else Z <= ‘X’ ; Z <= ‘X’ ; end if ; end if ; end process ; end process ; end architecture ; end architecture ;

ộ ế

• C  hai câu l nh đ u có chung m t k t qu  khi mô ph ng ho c

ệ ạ

ươ

ơ

ả ợ ổ t ng h p m ch ấ – Tuy nhiên, c u trúc bên ph i làm cho ch

ắ ng trình ng n g n h n

Hardware Modeling - 1 - 116

Lệnh gán Signal có lựa chọn

ộ ạ

ệ ọ  là m t d ng l nh có tác d ng

ươ

L nh ệ ươ t

ng đ ắ

ự ệ gán tín hi u có l a ch n ớ ệ case ng v i l nh  ử ụ ả

• Quy t c s  d ng hoàn toàn gi ng v i l nh case:  ệ

ớ ệ ệ

t kê đ

ố ả ượ c li (1) Tât c  các đi u ki n ph i đ ồ ượ ệ (2) Các đi u ki n không đ

c ch ng chéo nhau

architecture... architecture... with SEL select with SEL select Z <= A when “00” , Z <= A when “00” , B when “10” , B when “10” , C when “11” , C when “11” , ‘X’ when others ; ‘X’ when others ; end architecture ; end architecture ;

architecture ... architecture ... begin begin process ( A,B,C, SEL ) process ( A,B,C, SEL ) begin begin case (SEL) is case (SEL) is when “00” => Z <= A ; when “00” => Z <= A ; when “10” => Z <= B ; when “10” => Z <= B ; when “11” => Z <= C ; when “11” => Z <= C ; when others => Z <= ‘X’ ; when others => Z <= ‘X’ ; end case ; end case ; end process ; end process ; end architecture ; end architecture ;

Hardware Modeling - 1 - 117

Outline

If/else Statements

• Case Statement • Concurrent Form of If/else and Case Statements

• Loop Statements • Summary

Hardware Modeling - 1 - 118

Các câu lệnh Loop

• Các câu l nh loop có th  đ

ể ượ ọ ườ ợ c dùng cho m i tr ng h p

ệ có vòng l pặ

• L nh loop có nhi u d ng khác nhau, m i d ng s  d ng

ỗ ạ ử ụ ề

ươ ể ặ ng pháp đi u khi n l p riêng.

ế

c khai báo  ể

ụ ạ ề ấ

c   ngoài vòng l p ư

ượ

c dùng nh  là

ệ ộ m t ph ạ D ng thông d ng nh t là “for … loop” ỉ ố index’ cho vòng l p ặ – Bi n ch  s  ‘ ượ không đ riêng, không th  gán giá  ượ ị tr  cho nó, và không đ ặ ử ụ s  d ng

process ( A, B_bus ) process ( A, B_bus ) begin begin for i in 7 downto 0 loop for i in 7 downto 0 loop C_bus (i) <= A and B_bus (i) ; C_bus (i) <= A and B_bus (i) ; end loop ; end loop ;

ướ

ặ ượ

c c p nh t theo chi u h

ng ghi trong câu l nh t

– Nó đ ộ ằ    m t h ng s ỗ – Sau m i phép l p,  ị ủ giá tr  c a nó đ trái sang ph iả

Hardware Modeling - 1 - 119

Sử dụng các lệnh Loop

• Khi tổng hợp, lệnh loop được

“dàn trải ra” – Việc tổng hợp mạch dựa trên

process ( A, B_bus ) process ( A, B_bus ) begin begin for i in 7 downto 0 loop for i in 7 downto 0 loop C_bus (i) <= A and B_bus (i) ; C_bus (i) <= A and B_bus (i) ; end loop ; end loop ;

kết quả logic của từng phép lặp

A

C_bus (7)

B_bus (7)

A

C_bus (6)

• Khi mô phỏng, các lệnh loop tạo nên một công cụ linh hoạt để mô hình hoá hành vi • Các lệnh loop đặc biệt còn

B_bus (6)

. . .

hay được sử dụng trong các chương trình con (function và procedure)

A

C_bus (0)

B_bus (0)

Hardware Modeling - 1 - 120