120
Hardware Modeling - 1 - 1 Bài 1 Vấn đề Mô hình hoá phần cứng (Hardware Modeling)

Vhdl Slides

  • Upload
    hoadktd

  • View
    8.555

  • Download
    3

Embed Size (px)

DESCRIPTION

VHDL - Thầy Lê Hải Sâm

Citation preview

Page 1: Vhdl Slides

Hardware Modeling - 1 - 1

Bài 1

Vấn đề Mô hình hoá phần cứng

(Hardware Modeling)

Page 2: Vhdl Slides

Hardware Modeling - 1 - 2

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 của VHSIC Hardware Description Language

– Còn VHSIC là từ viết tắt của Very High Speed Integrated 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

Page 3: Vhdl Slides

Hardware Modeling - 1 - 3

VHDL - Mục đích và sự hình thành

• VHDL, trướ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á thiết bị, nhưng nó mới chỉ định nghĩa các tham số khái quát cho việc tổng hợp thiết bị

• Kết quả: một mô hình phần cứng đã cho không hẳn đã phù hợp với một thiết kế ở mức cổng logic đã có thông qua các công cụ và các công nghệ đích (target) khác nhau

Page 4: Vhdl Slides

Hardware Modeling - 1 - 4

Chuẩn hoá VHDL

• Tổ chức IEEE chính thức phê chuẩn chấp nhận ngôn ngữ VHDL 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 được sửa đổi theo chu kỳ tối thiểu là 5 năm

• Sửa đổi đầu tiên đượ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

VHDL-93

VHDL-2X

Page 5: Vhdl Slides

Hardware Modeling - 1 - 5

IEEE 1076(modeling)

IEEE 1076(synthesis)

Language Subsets

• Không phải tất cả các cấu trúc VHDL đều có thể tổng hợp được. Ví dụ, wait for 10 ns là một cấu trúc mô hình hoá thông dụng, nhưng nó không tương ứng với và cũng không thể tạo ra một phần tử ở mức cổng logic

Page 6: Vhdl Slides

Hardware Modeling - 1 - 6

Behavioral

Logic

RTL

Layout

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

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

DFF AND_OR2

CLB_R5C5

CLB_R5C6

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

F

Page 7: Vhdl Slides

Hardware Modeling - 1 - 7

Sự chồng chéo trong VHDL

Behavioral

Logic

RTL

Layout Place & Route Utility

FPGA Vendor Library

Synthesizable Code

Hardware Model Sum <= A + B after 3 ns ;

Sum <= A + B ;

component Xlx_add2

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

Page 8: Vhdl Slides

Hardware Modeling - 1 - 8

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

• VHDL hỗ trợ hướng tiếp cận top-down trong thiết kế

Page 9: Vhdl Slides

Hardware Modeling - 1 - 9

Nguyên tắc phân đoạn • Khi tiến hành phân đoạn một thiết kế trong VHDL,

cần lưu 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ại biên giới các module

• Phù hợp với cấu trúc mã nguồn dạng RTL – Giảm đến tố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• Hầu hết các công cụ đều không tối ưu thông qua biên

giới hierarchy– Kích thước của từng block đủ nhỏ để có thể kiểm tra

nhanh chóng• Mẫu thử nhanh, đơn giản cho mỗi sub-module

Page 10: Vhdl Slides

Hardware Modeling - 1 - 10

A[3:0]entityAdd_4

B[3:0]

C_in

SUM [3:0]

C_out

C_out

SumA

B

C_in

entity Full_Add

A

B

entityHalf_Add Sum

Carry Leaf Cell

Cấu trúc Top - Down

Macro

Page 11: Vhdl Slides

Hardware Modeling - 1 - 11

VHDL modules

Synthesis

Place & Route

Behavioral Simulation (Testbench driven)

Gate-Level Functional (Netlist-driven )

Gate-Level Timing (Back-annotated netlist )

V I

T A

L

VHDL Initiative Toward ASIC Libraries

SDF (Standard Delay Format)& Structural VHDL File

Kiểm tra thiết kế• Khi sử dụng VHDL, có thể thực hiện các bước kiểm tra

thiết kế, bắt đầu từ Behavioral Simulation

Page 12: Vhdl Slides

Hardware Modeling - 1 - 12

VHDL modules

Synthesis

Place & Route

Các bước kiểm tra thiết kế (1) Mô phỏng Behavioral

• Thực hiện mã nguồn mô tả hành vi, dùng testbench

(2) Mô phỏng RTL • Thực hiện file mã nguồn RTL, dùng testbench

(3) Mô phỏng chức năng trong VHDL • Thực hiện file .vhd mô tả cấu trúc, dùng testbench

(4) Mô phỏng chức năng thiết bị ở mức cổng• Mô phỏng netlist pre-P&R EDN dùng công cụ mức cổng

(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

Page 13: Vhdl Slides

Hardware Modeling - 1 - 13

Test-Bench

Behavioral Module

MCU FPGA

PLDMemory

Kiểm tra thiết kế?

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

netlist-driven

Page 14: Vhdl Slides

Hardware Modeling - 1 - 14

Kết luận

• VHDL là một ngôn ngữ dùng để mô hình hoá phần cứng của thiết bị

• 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ưởng

đến 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)

Page 15: Vhdl Slides

Hardware Modeling - 1 - 15

Bài 2

Ngôn ngữ VHDL

Page 16: Vhdl Slides

Hardware Modeling - 1 - 16

Chương trình VHDL bao gồm các design units.

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

Design Units trong VHDL

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

Page 17: Vhdl Slides

Hardware Modeling - 1 - 17

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 kiểm tra lại secondary design unit. Nếu không, chương trình sẽ có lỗi.

• Các secondary unit không thể tồn tại độc lập -- tức là, phải phụ thuộc primary unit

Page 18: Vhdl Slides

Hardware Modeling - 1 - 18

• Entity mô tả external interface của thực thể được thiết kế, cùng các thuộc tính liên quan với interface đó

entity Half_Add is

port (A, B : in std_logic ;

Carry, Sum : out std_logic) ;

end Half_Add ;

A

Carry

Sum

B

Entity

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 ; ’

Page 19: Vhdl Slides

Hardware Modeling - 1 - 19

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

Architecture

• Architecture mô tả hoạt động bên trong của 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 với nó, có thể có nhiều architecture cho một thực thể

Page 20: Vhdl Slides

Hardware Modeling - 1 - 20

Multiple Architecture• Có thể có nhiều architecture cùng tồn tại để mô tả hoạt

động 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ết 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 . . .

end Half_Add ;

architecture BEH of Half_Add is . . .

end BEH ;

architecture RTL of Half_Add is . . .

end RTL ;

architecture XLX of Half_Add is . . .

end XLX ;

entity Cnt64 is . . .

end Cnt64 ;

architecture BEH of Cnt64 is . . .

end BEH ;

architecture RTL of Cnt64 is . . .

end RTL ;

architecture XLX of Cnt64 is . . .

end XLX ;

Page 21: Vhdl Slides

Hardware Modeling - 1 - 21

package My_Pack is

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

end package My_pack ;

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

entity . . .

Package• Một package declaration được dùng để khai báo các dữ

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

declarations, v.v…

Page 22: Vhdl Slides

Hardware Modeling - 1 - 22

package My_Pack is

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

end My_Pack ;

package body My_Pack is

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

. . .end My_Pack ;

declaration

details

Package Body• Một package body là một dependent unit của một

package, nó chứa các thông tin chi tiết về các đối tượng trong package

– Subprograms, deferred constants

Page 23: Vhdl Slides

Hardware Modeling - 1 - 23

Library • Về cơ bản, tất cả các đối tượng VHDL đều được lưu

trong các thư viện– Theo định nghĩa, thư viện là một tập hợp các đơn vị

thiết kế (design unit) đã được kiểm chứng– Work và std là hai thư viện dùng được cho mọi design

unit

package std_logic_1164 is..

package std_logic_arith is..

package std_logic_unsigned is..

library IEEE ;

Page 24: Vhdl Slides

Hardware Modeling - 1 - 24

Library

• Libraries và Packages comprise the VHDL Design Management structure

– Theo một nghĩa nào đó, nó tương tự như directories và subdirectories

package std_logic_1164 is..

package std_logic_arith is..

package std_logic_unsigned is..

library IEEE ;

Page 25: Vhdl Slides

Hardware Modeling - 1 - 25

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 trúc của library, do vậy chúng không dễ được chuyển giao giữa các tool

package Fast_Counters is..

package DSP_Filters is..library My_Lib ;use My_Lib.Fast_Counters.all ;

entity Mod1 is port ( . . .

library My_Lib

Page 26: Vhdl Slides

Hardware Modeling - 1 - 26

Khởi tạo các Library • Thông thường, cần phải tạo các thư viện trong mỗi

tool cụ thể thay vì attach các thư viện đã có ở đâu đó

– Đặt tên cho library, và sau đó phân tách các design unit được chọn đưa vào nó

package Fast_Counters is..

package DSP_Filters is..library My_Lib ;use My_Lib.Fast_Counters.all ;

entity Mod1 is port ( . . .

library My_Lib

Page 27: Vhdl Slides

Hardware Modeling - 1 - 27

Work Library• Đây là thư mục con (sub-directory) mặc định được

dùng để lưu giữ tất cả các đơn vị thiết kế đã được biên dịch (compiled design units), trừ khi có các chỉ định khác.

• Mỗi một công cụ mô phỏng hoặc tổng hợp đều sẽ tạo ra một cấu trúc như thế

– Chú ý: hiển thị ở library là nhãn tên của design unit chứ không phải là tên của source file

Page 28: Vhdl Slides

Hardware Modeling - 1 - 28

Design Unit Identifier

entity HALF_ADDentity DFFentity REG4package My_Counters. . .

architecture RTLarchitecture STRUCTURAL

Work Library

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

work library

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

Page 29: Vhdl Slides

Hardware Modeling - 1 - 29

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

architecture RTL of DFF isbegin 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 ;

ClockReset

D Q

Ví dụ về Hierarchy : DFF

Page 30: Vhdl Slides

Hardware Modeling - 1 - 30

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;

architecture Structural of REG_4 is

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

beginU3 : 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;

Clk

Rst

D_in(3)

D_in(2)

D_in(1)

D_in(0)

Q_out(3)

Q_out(2)

Q_out(1)

Q_out(0)

DFF

DFF

DFF

DFF

U3

U0

U1

U2

REG_4

Ví dụ về Hierarchy : REG-4

Page 31: Vhdl Slides

Hardware Modeling - 1 - 31

Liên kết Tín hiệu• Có hai phương pháp liên kết các tín hiệu với các

cổng tương ứng của chúng– Liên kết theo vị trí: Các tín hiệu ở mức cao được liệt kê

theo đúng trật tự của các cổng (port) ở mức thấp trong component 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 ;

Page 32: Vhdl Slides

Hardware Modeling - 1 - 32

Liên kết Tín hiệu• Có hai phương pháp liên kết các tín hiệu với các

cổng tương ứng của chúng– Liên kết theo tên: Các cổng (ports) và tín hiệu

(signals) được liệt kê một cách rõ ràng, đầy đủ, không phụ thuộc trật tự (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 ;

Page 33: Vhdl Slides

Hardware Modeling - 1 - 33

architecture Structural of Top is

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

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

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

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

Sub_A Sub_B

Top

I1

I2O1O2

Sig_1

Bus_1

A1

A2

A4

A3 B4

B3

B2

B1

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

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

Page 34: Vhdl Slides

Hardware Modeling - 1 - 34

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 ;

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

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

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

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

end Xilinx_Struct ;

• Component instantiation from target library may be helpful for chip level optimization ( i.e., Xilinx Virtex )

Clk

Rst

D_in(3)

D_in(2)

D_in(1)

D_in(0)

Q_out(3)

Q_out(2)

Q_out(1)

Q_out(0)

FDC

FDC

FDC

FDC

U3

U2

U1

U0

Cụ thể hoá phần tử

Page 35: Vhdl Slides

Hardware Modeling - 1 - 35

Sử dụng Generics• Generics là các tham số có thể cập nhật động (thay

đổi giá trị) trong từng câu lệnh cụ thể hoá phần tử của thiết kế (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;

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

LabMarker

Page 36: Vhdl Slides

Hardware Modeling - 1 - 36

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

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

– Nếu không có genericmap, generic nhận giá trị mặc định ban đầu

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

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 ;beginU0: My_Cntr generic map (Count_Width => 64) port map (DATA_BUS, CLOCK, RST, LD, CNTRL, DATA_OUT ) ; • • • • end architecture RTL;

Page 37: Vhdl Slides

Hardware Modeling - 1 - 37

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ý

cho một mô hình phần cứng VHDL – Analysis (phân tích)

• Design unit được kiểm tra lỗi cú pháp. Sau khi hoàn tất, nó sẽ được lưu giữ ở work directory

– Elaboration (chỉnh sửa)• Cấu trúc hierarchy của thiết kế được dàn trải bắt đầu từ mức

cao nhất. Ứng với mỗi sub-module cụ thể chỉ có một copy duy nhất được tạo ra

– Synthesis (tổng hợp)• Dạng mô tả netlist của thiết kế được tạo ra hoặc theo format

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 thời gian gián đoạn. Nó được điều khiển bởi các sự kiện ở các tín hiệu đồng bộ quá trình

Page 38: Vhdl Slides

Hardware Modeling - 1 - 38

Analyze

ElaborateExecute Synthesize

Quy trình biên dịch entity DFF is port (D, Clk : in Reset: in Q: out

. . .architecture..

Page 39: Vhdl Slides

Hardware Modeling - 1 - 39

Trình tự Biên dịch • Do mối quan hệ giữa các primary và secondary

design unit cũng như khả năng có thể cụ thể hoá các module ở mức 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 được phân tích trước các architecture tương ứng với chúng

• Các package cần phải được phân tích trước các package body

• Mỗi một module cần phải được phân tích trước khi nó được tham trỏ bởi các module khác

– Đây là trình tự biên dịch Bottom-up

Page 40: Vhdl Slides

Hardware Modeling - 1 - 40

- - 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 cả các dòng

A_OUT <= ‘1’ ; - - Comments có thể viết từ đây

Comments• Comments (chú thích) có tác dụng làm cho mã

nguồn trở nên dễ hiểu hơn, điều này cũng tương tự như ở các ngôn ngữ khác

Page 41: Vhdl Slides

Hardware Modeling - 1 - 41

Kết luận

• VHDL bao gồm các primary và secondary design unit

• Trật tự biên dịch chương trình VHDL được thực hiện theo một quy luật chặt chẽ

• Tất cả các design unit đã được kiểm chứng được lưu trong một thư viện gọi là work library

• Có thể sử dụng Generics để tăng tính linh hoạt của mã nguồn (source code)

Page 42: Vhdl Slides

Hardware Modeling - 1 - 42

Bài 3

Signals và Data Types

Page 43: Vhdl Slides

Hardware Modeling - 1 - 43

Data Types

• Data types là một yếu tố quan trọng trong VHDL (cũng như 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 giả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ả phần cứng và kiểm tra lỗi nhằm đảm bảo sự tương thích tín hiệu 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)

Page 44: Vhdl Slides

Hardware Modeling - 1 - 44

entity REG_4 isport (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;

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

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

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)

Page 45: Vhdl Slides

Hardware Modeling - 1 - 45

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

Page 46: Vhdl Slides

Hardware Modeling - 1 - 46

Scalar Data Types

• Kiểu dsữ liệu vô hướng nhận các giá trị đơn lẻ. Trong VHDL, lớp các data type này gồm có:

– Bit– Boolean– Integer– Real– Physical– Character – Std_logic and std_ulogic– Enumerated

Page 47: Vhdl Slides

Hardware Modeling - 1 - 47

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

type boolean is (false, true) ;

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

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

both yield boolean result

Bit và Boolean • Vừa đủ để mô hình hoá phần cứng, nhưng nó không

cho phép mô tả các giá trị high-impedance, unknown, don’t care, v.v...

• Thích hợp cho việc mô hình hoá ở mức khái niệm lý thuyết

Page 48: Vhdl Slides

Hardware Modeling - 1 - 48

Integer và Real• Chấp nhận các giá trị và các đại lượng một cách trực

quan và linh hoạt– Cần phải quy định giải giá trị cho các kiểu nguyên

(integer), nếu không nó sẽ sử dụng giải giá trị mặc định với số nguyên 32-bit

• Cho phép người thiết kế sử dụng các giá trị floating point

– Khai báo các kiểu real với giải giá trị thực nhất định – Cách dùng giá trị kiểu ‘Real’ không giống như ‘Integer’

type integer is range . . .

type real is range . . .

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

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

Page 49: Vhdl Slides

Hardware Modeling - 1 - 49

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.

type time is range 1 to 1000000

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

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

Physical• Kiểu vật lý (Physical type) được dùng để định lượng

các đại lượng vật lý như là khối lượng, độ dài, thời gian

• Kiểu vật 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ở

Page 50: Vhdl Slides

Hardware Modeling - 1 - 50

type std_ulogic is ( ‘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

) ;

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

Std_logic và Std_ulogic• Std_logic được phát triển từ hệ thống MVL (Multi-Value

Logic) và được dùng để mô hình hoá phần cứng một cách chi tiết hơn so với kiểu bit

– Hỗ trợ các mức giá trị khác nhau của tín hiệu: don't-care conditions, unknown, three-state …

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

Page 51: Vhdl Slides

Hardware Modeling - 1 - 51

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

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

CB

A

Out_1C

B

A

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

Res_Out

So sánh Std_logic và Std_ulogic

• Cả hai kiểu đều chứa cùng một tập các giá trị như nhau– Sự khác nhau ở chỗ thực hiện mạch (implementation)– Chữ u trong ulogic có nghĩa là unresolved

• Nếu người thiế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ín hiệu nào được đưa tới cửa ra

• Std_ulogic không có khả năng đó, nhưng nó tạo ra một công cụ nội tại để kiểm tra các lỗi wired-oring do sơ suất

X

Page 52: Vhdl Slides

Hardware Modeling - 1 - 52

signal A,B,C,Res_Out : std_logic ;

C

B

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’ ;

Res_Out

En0

En2

En1

Signal Resolution• Một cửa ra cụ thể không thể có nhiều tín hiệu điều

khiển 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 gán tín hiệu có điều kiện và data-type là std_logic:

Page 53: Vhdl Slides

Hardware Modeling - 1 - 53

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

Enumerated (liệt kê)• Tăng mức độ linh hoạt trong việc mô hình hoá phần

cứng– Các kiểu liệt kê do người dùng định nghĩa sử dụng các giá trị

có thể nhận biết một cách dễ dàng và thích hợp với hoạt động của mô hình

– Làm cho các chương trình dễ hiểu hơn nhất là khi mô tả các máy trạng thái (hệ logic dãy) hoặc các hệ thống phức tạp

case (STATE) iswhen LOAD => . . .if COND_A and COND_B thenNEXT_STATE <= FETCH ;else NEXT_STATE <= STOR ;

Page 54: Vhdl Slides

Hardware Modeling - 1 - 54

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

• 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 biên dịch giá trị này không được tự động hiểu là ‘3’

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

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

Page 55: Vhdl Slides

Hardware Modeling - 1 - 55

Array• Array là nhóm các phần tử đơn có cùng kiểu (type)

ban đầu

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

index position0123

B_bus

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?

signal B_bus : WORD ;

type DATA is array (3 downto 0) of integer range 0 to 9 ;

signal B_bus : DATA ;

Page 56: Vhdl Slides

Hardware Modeling - 1 - 56

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

3 012

3 012

My_BusA

My_BusB

My_BusB <= My_BusA ;

My_BusA

3 012

0 321

My_BusC

Inadvertent bit-swap?

My_BusC <= My_BusA ;

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

– 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

Page 57: Vhdl Slides

Hardware Modeling - 1 - 57

signal Data_Word : std_logic_vector (11 downto 0) ;

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 dễ đọc hơn - người thiết kế có thể sử dụng các giá trị ở cơ số 16 (hexadecimal) hoặc 8 (octal)

– Có thể sử dụng dấu gạch dưới các giá trị biến cho dễ đọc

Data_Word <= X”A6F”;

Data_Word <= ”101001101111” ;

Data_Word <= O”5157”;

Data_Word <= B”1010_0110_1111” ;

Page 58: Vhdl Slides

Hardware Modeling - 1 - 58

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

type OPCODE is recordPARITY : 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

Records

Page 59: Vhdl Slides

Hardware Modeling - 1 - 59

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

String

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 ;

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 ;

Page 60: Vhdl Slides

Hardware Modeling - 1 - 60

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;

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

WORD <= ( 2 => ‘1’, 3 => D, others => ‘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

Phép gộp các Array • Phép gộp (Aggregate) là một công cụ tiện lợi để

nhóm các kiểu dữ liệu (data type) cả vô hướng và phức hợp trong các phép gán

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

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

Page 61: Vhdl Slides

Hardware Modeling - 1 - 61

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

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

TX_PACKET. ADDRESS <= ( “0011” ) ;

Gộp các Record• Phép gộp (Aggregate) là một công cụ tiện lợi để

nhóm các kiểu dữ liệu (data type) cả vô hướng và phức hợp trong các phép gán

Only records can accept aggregate of arrays

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

DATA_WORD <= ( H_BYTE, L_BYTE) ;

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

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

DATA_WORD <= ( others => H_BYTE);

Page 62: Vhdl Slides

Hardware Modeling - 1 - 62

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ế 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)

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

signal My_Mem : Mem_Array ;

7 6 5 4 3 2 1 00

1

2

3

Page 63: Vhdl Slides

Hardware Modeling - 1 - 63

Tạo Array của các Record

• Array của các record thường được dùng trong các ứng 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 recordPARITY : 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

. . .

. . .

. . .

My_Data

Page 64: Vhdl Slides

Hardware Modeling - 1 - 64

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ỉ Read/Write được chuyển thành dạng integer, để tham trỏ tới một phần tử trong array 2-D - 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 00

1

2

3

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

Page 65: Vhdl Slides

Hardware Modeling - 1 - 65

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 00

1

2

3

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

Page 66: Vhdl Slides

Hardware Modeling - 1 - 66

Các kiểu con (Subtypes) thường được dùng để phát hiện lỗi ‘out-of-range’ trong kết quả mô phỏng, và cũng có thể có tác dụng tối ưu hoá quá trình tổng hợp logic

Kiểu con trong VHDL• Một kiểu con (subtype) trong VHDL là một tập hợp

có hạn chế của một kiểu (type) đã có– Kiểu đã có cũng có thể là một kiểu đã đượ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 ;

Page 67: Vhdl Slides

Hardware Modeling - 1 - 67

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 ;

Label Base Type Constraint

subtype Arith_Ops is My_State range Add to Mult ;

subtype My_OHE_State is std_logic_vector ( 3 downto 0 ) ; constant Init_St0 : My_OHE_State := “0001” ; constant Load_St1 : My_OHE_State := “0010” ; constant Jump_St2 : My_OHE_State := “0100” ; constant Stor_St3 : My_OHE_State := “1000” ;

Page 68: Vhdl Slides

Hardware Modeling - 1 - 68

Bài 4

Operators vàExpressions

Page 69: Vhdl Slides

Hardware Modeling - 1 - 69

Các toán tử trong VHDL

• VHDL chứa một lượng lớn các toán tử (operator) dùng cho 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ữ liệu (data type) nhất đ ịnh

– Đặc biệt, cần lưu ý các toán tử số học (arithmetic) không dùng được với các kiểu dữ liệu phức hợp (bit_vector and std_logic_vector), vì các array không có giá trị bằng số tường minh

• Các Function (subprogram) được tạo ra để khắc phục những vấn đề liên quan

– Các hàm này có trong các gói được gọi là “arithmetic packages”

Page 70: Vhdl Slides

Hardware Modeling - 1 - 70

Operator Overloading• Operator overloading (chồng hàm) trong VHDL có

nghĩa là một toán tử cụ thể (ví dụ, ‘+’ ) có thể được dùng với các data type khác nhau

– Điều này xảy ra do các subprogram riêng biệt được viết cho từng data type nhất định

Compiler tự động chọn sub-function thích hợp dựa trên data type của các operands

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 );

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

Page 71: Vhdl Slides

Hardware Modeling - 1 - 71

andornandnorxornotxnor (VHDL-93)

Y <= G or ( F and H ) ;

Z <= A and B ;

ZB

A

F

H

GY

Các toán tử Logic

• Các logical operator đượ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

Page 72: Vhdl Slides

Hardware Modeling - 1 - 72

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ị ỗ ừ ả

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

B_vec (7)A_vec (7)

C_vec (7)

B_vec (6)A_vec (6)

C_vec (6)

B_vec (5)A_vec (5)

C_vec (5)

B_vec (0)A_vec (0)

C_vec (0)

.

.

.

C_vec <= A_vec and B_vec ;

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

Page 73: Vhdl Slides

Hardware Modeling - 1 - 73

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

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

FLAG_BIT <= ( A > B ) ;

Nếu A lớn hơn B, FLAG_BIT sẽ được gán giá trị true, ngược lại

FLAG_BIT được gán giá trị false

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

Page 74: Vhdl Slides

Hardware Modeling - 1 - 74

Rules for use on Arrays1. Arrays must be same type2. Arrays may be different lengths3. Arrays of different lengths are aligned left and then lexically compared -- Compares ASCII values

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

if ( A_vec > B_vec ) thenState <= NormalelseState <= Code_Redend if …

Toán tử quan hệ với các Array

• Ví dụ này cho kết quả là false – Các vector được so sánh từ trái sang phải. Việc so sánh được

thực hiện lần lượ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

Page 75: Vhdl Slides

Hardware Modeling - 1 - 75

+ Addition

- Subtraction

* Multiplication

/ Division

abs Absolute Value

** Exponentiation

signal A_num, B_num : integer range 0 to 15 ; signal Z_num : integer range 0 to 31 ;

Z_num <= ( A_num + B_num ) ;

+ Z_num

A_num

B_numInfers a 5-bit adder

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ử số học vốn không dùng với các dữ liệu có kiểu array

Page 76: Vhdl Slides

Hardware Modeling - 1 - 76

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 định nghĩa sẵn trong IEEE hoặc từ các hãng cung cấp phần mềm thiết kế

– Các function như vậy thườ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

• Toán tử “+” là overloaded

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 ;. . . .

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

Page 77: Vhdl Slides

Hardware Modeling - 1 - 77

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 + D_int ;

Z_vec < = A_vec + B_vec ;

Array Arithmetic • Nếu có các function thích hợp có thể dùng được

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

– Nếu không, compiler sẽ thông báo lại rằng các operator đó là “undefined”

Page 78: Vhdl Slides

Hardware Modeling - 1 - 78

Các toán tử Shift (dịch)

• Các toán tử Shift được định nghĩa trong VHDL-93 và rất hay được sử dụng, nhất là khi cần mô tả hoạt động của các phần 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ược lại

• 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

Page 79: Vhdl Slides

Hardware Modeling - 1 - 79

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

Page 80: Vhdl Slides

Hardware Modeling - 1 - 80

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);

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”

cho kq

Page 81: Vhdl Slides

Hardware Modeling - 1 - 81

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 ;

Concatenation• Toán tử nối (concatenation) “&” cho phép kết nối

các biến kiểu scalar và kiểu array thành kiểu array lớn hơn

– Các phép gán được thực hiện với sự tương hợp vị trí (positional association)

Page 82: Vhdl Slides

Hardware Modeling - 1 - 82

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

B

A

CD

Z

3 logic levels

D

Z

A

B

C

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

+++

++

+

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

Page 83: Vhdl Slides

Hardware Modeling - 1 - 83

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 ;

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

Các Slice của Array• Một nhóm các phần tử kề cận nhau trong một array

được goại là một slice và có thể được tham trỏ đồng thời

– Các phần tử khác của array không bị ảnh hưởng bởi phép gán slice

Page 84: Vhdl Slides

Hardware Modeling - 1 - 84

signal Status_Bus : std_logic_vector (15 downto 0) ;

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 tử được chọn không liền nhau (9,8,3,2,1, và 0) từ ‘Status’ bus gồm 16-bit

– Giải mã toàn bộ bus có thể làm tăng số lượng mạch logic tổ hợp và làm cho thiết bị làm việc chậm hơn)

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

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

Inefficient !!

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

Will Not Compile!

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

Optimal !!

Page 85: Vhdl Slides

Hardware Modeling - 1 - 85

Bài 5

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

Page 86: Vhdl Slides

Hardware Modeling - 1 - 86

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 hiện không tuỳ thuộc vào vị trí của chúng trong chương trình

• Các câu lệnh được gọi là sequential khi chúng được thực hiện một cách tuần tự theo trình tự viết chúng trong chương trình, giống như các lệnh trong các phần mềm thông thường

– Tất cả các câu lệnh viết trong một process là những lệnh sequential

Page 87: Vhdl Slides

Hardware Modeling - 1 - 87

architecture RTL of ENTITY_1 is . . . begin concurrent statements ;

. . . process begin sequential statements ; . . . end process ;

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

• Mọi câu lệnh nằm ngoài một process đều là lệnh concurrent

Cấu trúc ngôn ngữ

Page 88: Vhdl Slides

Hardware Modeling - 1 - 88

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

Process• Một process bao gồm

các câu lệnh sequential – Các câu lệnh trong một

process được thực hiện lần lượt

• Mỗi process đều phải được hoạt kích theo một cách nhất định

– Thường là do sự thay đổi 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’

Page 89: Vhdl Slides

Hardware Modeling - 1 - 89

G1 G2

G3

B

AC C<=A and B

...

Process 1

process (C,..)begin

Process 3

If C = ‘1’then ...

Process 2

C

C

Các Process là đồng thời• Trong việc mô hình hoá phần cứng, quan điểm về

concurrency (tính đồng thời) là rất cần thiết– Bất kỳ sự thay đổi nào ở tín hiệu ‘C’ - cửa ra của c ng ổ

G1, cũng đều được đồng thời đưa tới cửa vào của các cổng G2 và G3

Page 90: Vhdl Slides

Hardware Modeling - 1 - 90

C<=A and B...

Process n

process (C,..)begin

Process n2

If C = ‘1’then ...

Process n1

C

C

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

một process sang một process khác– Các process concurrent, được liên kết bởi các tín hiệu,

thường được gọi là VHDL Connectivity Model (mô hình kết nối)

process n

process (...

Rst

Sig1

Sig2

Process n4

Process n3

Page 91: Vhdl Slides

Hardware Modeling - 1 - 91

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

Optional Label

Các thành phần của Process Signals in sensitivity list create implied “wait” condition

Signal updated with new value when process suspends

All statements within the process are handled

sequentially, in order

Keyword

Keywords “end” and “process”

Page 92: Vhdl Slides

Hardware Modeling - 1 - 92

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

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

B

B

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

Out1

? Out1

A

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

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

Page 93: Vhdl Slides

Hardware Modeling - 1 - 93

wait on... An event on given signal wait until... A specific condition wait for ... A specified time amount wait Indefinite suspension

wait on... An event on given signal wait until... A specific condition wait for ... A specified time amount wait Indefinite suspension

wait on A, B ;wait until CLK = ‘1’ ;wait for 10 ns ;

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 • 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• Đối với các mô hình hành vi, người thiết kế thưòng

dùng các câu lệnh wait. Trong VHDL có bốn dạng lệnh wait

wait;

Page 94: Vhdl Slides

Hardware Modeling - 1 - 94

Các điều kiện Wait• Ví dụ dưới đây so sánh các điều kiện ‘wait’ từ các

câu lệnh được viết rõ ràng (explicit) và điều kiện ‘wait’ ẩn ý (implicit)

– Note: Một số compiler dùng tổng hợp mạch không hỗ trợ điều kiện explicit ‘wait’

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

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 ?

Page 95: Vhdl Slides

Hardware Modeling - 1 - 95

Simulation discrete time step

998 999 1000 1001

D1 D+nD+2D+1

1002

. . .

Delta cycles in-between

D1 D+2D+1. . .

Delta cycles in-between

Concurrent Operations

Modeling Concurrency• Công cụ mô phỏng VHDL đượ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 process được thực hiện cho đến khi bị tạm dừng, (2) giá trị của các tín hiệu được cập nhật, (3) sự thay đổi giá trị ở các tín hiệu làm cho các process liên quan được thực hiện

• Thời gian giữa các công đoạn này được gọi là delta cycle • 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

Page 96: Vhdl Slides

Hardware Modeling - 1 - 96

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 trường mô hình hoá hành vi trong VHDL

• Mỗi hoạt động (transaction) của thực thể được sắp đặt ở một thời điểm thích hợp

• Bước thời gian chỉ tăng lên khi không còn transaction nào khác ở thời điểm mô phỏng

Page 97: Vhdl Slides

Hardware Modeling - 1 - 97

Simulation discrete time steps

t t+1 t+2 t+3

D1 D+nD+2D+1

t+4

. . .Delta cycles

D1 D+2D+1. . .Delta cycles

Transaction Queuet + 3 t + 4 t + 5

. . .

. . .Int <= ‘1’ Data<= ‘0’

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

. . .Out2<= ‘0’

Out1<= ‘1’

Scheduling Events

ns

Del

ta

Cyc

les

Discrete Time

Page 98: Vhdl Slides

Hardware Modeling - 1 - 98

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

• Cụ thể, giá trị hiện tại của A được đọc và được dùng

để gán cho tín hiệu Z

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

. . .end process ;

Transactions

Page 99: Vhdl Slides

Hardware Modeling - 1 - 99

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

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

Z<=A;...

Process 1Process 1

process (Z,..)begin

Process 3Process 3

If Z = ‘1’

then ...

Process 2Process 2

Z

Z

Events• 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 ở tín hiệu đó

• Mỗi một phép gán tín hiệu đều gây ra mộttransaction, nhưng không phải tất cả các transaction đều làm xuất hiện các event ở tín hiệu được gán

• Một event ở một tín hiệu đã cho có thể hoạt kích một process chỉ khi tín hiệu đó có tên trong sensitivity list của proccess

Page 100: Vhdl Slides

Hardware Modeling - 1 - 100

process ( Clk) begin

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

process ( Clk) begin

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

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

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

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

C

ClkBA

Building Registers

Page 101: Vhdl Slides

Hardware Modeling - 1 - 101

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)

• Tuy nhiên, cần phân biệt cách dùng, các khả năng và những hạn chế của từng đối tượng này

• Ở mức thực thể, tất cả các port được khai báo thuộc lớp signal, chúng có khả năng trao đổi giá trị với các module khác, và có thể dùng được cho mọi process được khai báo trong các architecture body lệ thuộc

• Trong mỗi architecture body, tất cả các tín hiệu được khai báo chỉ có tác dụng cục bộ với architecture đó, và chỉ được dùng với các process được khai báo trong cùng architecture đó

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

Page 102: Vhdl Slides

Hardware Modeling - 1 - 102

Phạm vi của Signal và Variable

• Port là signal, được khai báo ở mức cao nhất (entity)• 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

Input Ports

Signals

process

Variables

Output Ports

Page 103: Vhdl Slides

Hardware Modeling - 1 - 103

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 được gán phải có cùng kiểu

(type)– Tất cả các signal và variable được gán phải có cùng kích

thước (size)

• Nếu signal là một port, người thiết kế phải lưu ý thêm:– Signals có mode “in” có thể đọc nhưng không được gán giá

trị– Signals có mode “out” có thể được gán giá trị trong

process, nhưng không được đọc

Page 104: Vhdl Slides

Hardware Modeling - 1 - 104

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

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

Q

Internal_Cnt

Will produce compiler error

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

Counter

Phép gán với Signal

Page 105: Vhdl Slides

Hardware Modeling - 1 - 105

Using Variables

• Vì phạm vi của một variable chỉ giớ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 đọc trước khi giá trị của nó được xác định, đều sẽ được suy diễn như là một register trong cấu trúc hardware nếu như nó được dùng với một process có clock

– 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

Page 106: Vhdl Slides

Hardware Modeling - 1 - 106

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

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

Clk

A D

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

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

Clk

A CB D

Variable trong các Process có Clock

Page 107: Vhdl Slides

Hardware Modeling - 1 - 107

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

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

Q

Internal_Cnt

Alternate Solution

Will produce compiler error

architecture RTL of Count_1 isbeginprocess (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 ;

Counter

Page 108: Vhdl Slides

© 2003 Xilinx, Inc. All Rights Reserved

Các lệnh điều khiển chương trình trong VHDL

Bài 6

Page 109: Vhdl Slides

Hardware Modeling - 1 - 109

architecture RTL of ENTITY_1 is . . . begin concurrent statements ;

. . . 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 ;

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

Cấu trúc ngôn ngữ

Page 110: Vhdl Slides

Hardware Modeling - 1 - 110

processbeginif (boolean expression) thensequential statements;

end if ;

processbeginif (boolean expression) thensequential statements;

end if ;

processbeginif (boolean expression) thensequential statements ;else sequential statements ;

end if ;

processbeginif (boolean expression) thensequential statements ;else sequential statements ;

end if ;

processbeginif (boolean expression 1) thensequential statements ;elsif (boolean expression 2) then sequential statements ; elsif (boolean expression 3) then sequential statements ; else sequential statements ;

end if ;

processbeginif (boolean expression 1) thensequential statements ;elsif (boolean expression 2) then sequential statements ; elsif (boolean expression 3) then sequential statements ; else sequential statements ;

end if ;

Các câu lệnh If/Else• Câu lệnh if/else làm cho các giao dịch được thực

hiện dựa trên những điều kiện nhất định. Có ba dạng lệnh if/else cơ bản sau:

Page 111: Vhdl Slides

Hardware Modeling - 1 - 111

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

Z <= A ;elsif (Sel = “01”) then

Z <= B ;elsif (Sel = “10”) then

Z <= C ; elsif (Sel = “11”) then

Z <= D ; end if; end process ;

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

Z <= A ;elsif (Sel = “01”) then

Z <= B ;elsif (Sel = “10”) then

Z <= C ; elsif (Sel = “11”) then

Z <= D ; end if; end process ;

Z

D

C

B

A

SelD

C

B

AZ

Late arriving signal?Late arriving signal?

Ví dụ về lệnh If/Elsif1. Điều kiện đầu tiên thoả mãn sẽ

được thực hiện ngay2. Các điều kiện có thể gối nhau3. Điều kiện đầu tiên của lệnh

if/elsif có ưu tiên cao nhất

Sufficient for std_logic?Sufficient for std_logic?

Page 112: Vhdl Slides

Hardware Modeling - 1 - 112

process (…) begincase ( selector expression ) iswhen ... =>

sequential statements ;when ... =>

sequential statements ; when ... =>

sequential statements ; end case ; . . .end process ;

process (…) begincase ( selector expression ) iswhen ... =>

sequential statements ;when ... =>

sequential statements ; when ... =>

sequential statements ; end case ; . . .end process ;

process (...)begincase ( selector expression ) iswhen ... =>

sequential statements ; . . . when others =>

sequential statements ; end case ; . . .end process ;

process (...)begincase ( selector expression ) iswhen ... =>

sequential statements ; . . . when others =>

sequential statements ; end case ; . . .end process ;

Câu lệnh Case• Câu lệnh case làm cho các giao dịch được thực hiện

tuỳ thuộc vào giá trị của biểu thức chọn• Lệnh case có hai dạng cơ bản:

Page 113: Vhdl Slides

Hardware Modeling - 1 - 113

• Tất cả các giá trị có thể có của biểu thức chọn đều phải được chỉ rõ (specified) trong câu lệnh

• Các điều kiện không được chồng chéo (gối) nhau• Giải các giá trị được mô tả phải hữu hạn (discrete)• 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

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

end case ;. . .end process ;

Z

D

C

B

A

Sel Is this sufficient for std_logic?

Ví dụ về lệnh Case

Page 114: Vhdl Slides

Hardware Modeling - 1 - 114

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

Z <= A ;elsif (Sel <= 5) then

Z <= B ;elsif (Sel <= 7) then

Z <= C ; elsif (Sel <= 9) then

Z <= D ; end if; end process ;

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

Z <= A ;elsif (Sel <= 5) then

Z <= B ;elsif (Sel <= 7) then

Z <= C ; elsif (Sel <= 9) then

Z <= D ; end if; end process ;

D

C

B

AZ

Các điều kiện chồng chéo • Ví dụ dưới đây minh hoạ trường hợp các điều kiện chồng

chéo nhau. Khi đó ta chỉ có thể sử dụng lệnh if/elseif. Muốn sử dụng lệnh case phải chỉnh lại các điều kiện

Page 115: Vhdl Slides

Hardware Modeling - 1 - 115

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

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

. . .end process ;

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)

Page 116: Vhdl Slides

Hardware Modeling - 1 - 116

Lệnh gán Signal có điều kiện • Lệnh gán tín hiệu có điều kiện là một dạng có tác dụng tương

đương lệnh if/else

• 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

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

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

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

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

Page 117: Vhdl Slides

Hardware Modeling - 1 - 117

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

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

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

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

Lệnh gán Signal có lựa chọn• Lệnh gán tín hiệu có lựa chọn là một dạng lệnh có tác

dụng tương đương với lệnh case• Quy tắc sử dụng hoàn toàn giống với lệnh case:

– (1) Tât cả các điều kiện phải được liệt kê đủ– (2) Các điều kiện không được chồng chéo nhau

Page 118: Vhdl Slides

Hardware Modeling - 1 - 118

Outline

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

and Case Statements• Loop Statements• Summary

Page 119: Vhdl Slides

Hardware Modeling - 1 - 119

process ( A, B_bus ) begin

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

process ( A, B_bus ) begin

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

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 một phương pháp điều khiển lặp riêng. Dạng thông dụng nhất là “for … loop”

– Biến chỉ số ‘index’ cho vòng lặp không được khai báo riêng, không thể gán giá trị cho nó, và không được sử dụng ở ngoài vòng lặp

– Nó được dùng như là một hằng số– Sau mỗi phép lặp,

giá trị của nó được cập nhật theo chiều hướng ghi trong câu lệnh từ trái sang phải

Page 120: Vhdl Slides

Hardware Modeling - 1 - 120

process ( A, B_bus ) begin

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

process ( A, B_bus ) begin

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

A

B_bus (7)

A

..

.

A

B_bus (6)

B_bus (0)

C_bus (7)

C_bus (6)

C_bus (0)

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ênkết quả logic của từng phép lặp

• 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 hay được sử dụng trong các chương trình con (function và procedure)