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

Bài giảng thiết kế hệ thống số: Ngôn ngữ mô tả phần cứng HDL( Ngôn ngữ VHDL)

52 13 1

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

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Ngôn ngữ mô tả phần cứng HDL (Ngôn ngữ VHDL)
Người hướng dẫn TS. Võ Đình Tùng
Trường học Trường Đại Học Bách Khoa Hà Nội
Chuyên ngành Thiết kế hệ thống số
Thể loại Bài giảng
Thành phố Hà Nội
Định dạng
Số trang 52
Dung lượng 860,62 KB

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

Nội dung

Bài giảng "Thiết kế hệ thống số" giới thiệu về ngôn ngữ mô tả phần cứng HDL, đặc biệt là ngôn ngữ VHDL. Trong bài giảng này, bạn sẽ được học cách sử dụng VHDL để mô tả và thiết kế các hệ thống số. Các chủ đề chính bao gồm cú pháp cơ bản của VHDL, các kiểu dữ liệu, lệnh điều khiển cơ bản và các khái niệm liên quan đến mô hình RTL (Register Transfer Level). Bằng cách tham gia bài giảng này, bạn sẽ có được kiến thức cần thiết để bắt đầu xây dựng các hệ thống số bằng VHDL.

Trang 1

Chương 5 : NGÔN NGỮ MÔ TẢ PHẦN CỨNG HDL

Hardware Description Language

Phần C: Ngôn ngữ VHDL (VHSIC HDL = Very-High-Speed Integrated Circuits)

Trang 2

7.1 TỔNG QUAN NGÔN NGỮ VHDL

VHDL = VHSIC HDL (very-high-speed integrated circuits hardware descripton language)

VHDL là một ngôn ngữ mô tả phần cứng, được dùng phổ biến trong việc thiết

kế các mạch tích hợp và các hệ thống số một cách dễ dàng và hiệu quả với tốc độ cao Ngôn ngữ VHDL dựa trên một ngôn ngữ mô tả phần cứng khác là VHSIC (Very High Speed Integated Circuit) do bộ quốc phòng Mỹ phát triển từ năm 1980 Phiên bản đầu tiên của ngôn ngữ này là VHDL 87 VHDL là một ngôn ngữ mô tả phần cứng đầu tiên được tổ chức IEEE chứng nhận là một tiêu chuẩn chung

Một trong những điều cơ bản thúc đẩy việc sử dụng ngôn ngữ VHDL đó là tính chuẩn hóa, độc lập về công nghệ của các nhà cung cấp…VHDL được ứng dụng trực tiếp trên các công nghệ FPGA , CPLDs…Code VHDL được viết để thực thi các mạch tích hợp trong các thiết bị lập trình được của các hãng như Xilinx, Altera, Amtel …

7.2 CẤU TRÚC CỦA MỘT THIẾT KẾ DÙNG NGÔN NGỮ VHDL

Package là một vùng lưu trữ các dữ liệu để dùng chung cho các entity

Mô tả dữ liệu bên trong một package cho phép được tham khảo bởi một entity

khác, vì vậy dữ liệu có thể được dùng chung

Một package bao gồm 2 phần:

+ Phần mô tả định nghĩa giao diện cho package

+ Phần thân ấn định các hoạt động cụ thể của package

Cú pháp khai báo PACKAGE được xác định là:

(Thư viện)

Trang 3

-

PACKAGE example_arithmetic IS

các khai báo khối có thể chứa các khai báo sau:

- Subprogram declaration

- Type, subtype declaration

- Constant, deferred constant declaration

- Signal declaration creates a global signal

Tất cả các đối tượng khai báo trong package có thể được truy xuất bởi bất kỳ

một thiết kế nào đó bằng cách sử dụng mệnh đề use và khai báo library

- library my_lib;

use my_lib.example_arithmetic.all;

- Một số thư viện chuẩn

library ieee;

use ieee.std_logic_1164.all;

std_logic_1164: là thư viện logic chuẩn của IEEE (đoạn 1164), mục đích cung cấp các chuẩn cơ bản để có thể mô tả các kiểu dữ liệu kết nối trong VHDL

std_logic_arith: là thư viện chứa tập các phép toán và hàm

Kiểu std_logic có thể có các giá trị

Trang 4

PORT( A,B : IN BIT;

SUM,CARRY : OUT BIT);

END HALF_ADDER;

- Trong khai báo ENTITY, có 4 kiểu tín hiệu khác nhau:

• IN: mô tả các ngõ vào entity Kiểu IN thì được sử dụng cho các ngõ vào

clock, các ngõ vào điều khiển,…

• OUT: mô tả dòng dữ liệu đi ra khỏi entity, entity sẽ không thể đọc các tín hiệu

này, kiểu OUT chỉ được sử dụng khi tín hiệu không được sử dụng bởi bất kỳ kiểu nào trong entity

• BUFFER: Kiểu tín hiệu này mô tả dòng dữ liệu đi ra khỏi entity, nhưng entity

có thể đọc những tín hiệu này (mục đích đọc lại tín hiệu ngõ ra ở bên trong của

Trang 5

cấu trúc) Tuy nhiên , tín hiệu sẽ không thể điều khiển từ ngõ ra của entity, vì vậy nó không thể được sử dụng cho các dữ liệu ngõ vào

• INOUT: Kiểu tín hiệu này cho phép tín hiệu có thể có cả hai kiểu: vào và ra,

khi khai báo tín hiệu theo kiểu INOUT thì tín hiệu có thể được điều khiển từ ngõ ra của entity Kiểu tín hiệu này chỉ nên sử dụng khi thật cần thiết(ví dụ như bus dữ kiệu 3 trạng thái), và khi sử dụng kiểu tín hiệu này thì mã của chương trình sẽ trở nên khó hiểu hơn đối với người thiết kế

Loại tín hiệu cũng phải được mô tả trong khai báo PORT, loại tín hiệu sẽ mô tả

các giá trị mà tín hiệu đó có thể được ấn định, ngoài ra có thể mô tả một vector những tín hiệu có cùng loại

 Lưu ý: trong file report, nếu không gán chân linh kiện thì các biến ngõ vào và ra

sẽ được gán ngẫu nhiên Để gán các chân, có thể thực hiện từ phần mềm hỗ trợ hoặc thực hiện như sau:

Ví dụ:

- ENTITY my_design is

Port (a, b : in integer range 0 to 7;

c : bit_vector (3 to 5);

d : bit_vector (27 downto 25);

e : out Boolean);

attribute pinnum: string;

attribute pinnum of c: signal is "1,2,3";

attribute pinnum of d: signal is "6,5,4";

attribute pinnum of e: signal is "2";

END my_design;

-

7.2.3 ARCHITECTURE

Chức năng của architecture là mô tả mối liên hệ giữa các tín hiệu ngõ vào và tín

hiệu ngõ ra ( bao gồm cả những tín hiệu BUFFER), có thể viết nhiều kiến trúc khác

nhau trong một entity, nhưng chỉ một trong số đó có khả năng xuất hiện trong mã VHDL architechture có 3 dạng: mô tả cấu trúc (structure); mô tả dòng dữ liệu (data

flow); mô tả hành vi (behavioral)

Trang 6

7.2.3.1 Mô tả architechture dưới dạng cấu trúc (structure)

Ví dụ chương trình bộ cộng trên sẽ có dạng:

-

ENTITY HALF_ADDER IS

PORT( A,B : IN BIT;

SUM,CARRY : OUT BIT);

X1: XOR2 port map (A,B,SUM);

A1: AND2 port map (A,B,CARRY);

END HA_STRUCTURE;

- Chú ý, trong trường hợp này các tín hiệu trong Port Map (ánh xạ cổng) của đối tượng trong thành phần này và các tín hiệu trong khai báo phải được liên kết theo vị trí

7.2.3.2 Mô tả architechture dưới dạng dòng dữ liệu (data flow)

Ví dụ chương trình bộ cộng trên sẽ có dạng:

-

ENTITY HALF_ADDER IS

PORT( A,B : IN BIT;

SUM,CARRY : OUT BIT);

Trang 7

END HA_STRUCTURE;

-

Mô hình dòng dữ liệu sử dụng phát biểu gán tín hiệu đồng thời, ký hiệu <= chỉ giá trị được gán cho tín hiệu Phép gán được thực hiện khi có 1 sự kiện tín hiệu của biểu thức bên phải

7.2.3.3 Mô tả architechture dưới dạng hành vi (behavioral)

Kiểu mô tả hành vi bao gồm tập hợp thứ tự các phép gán tín hiệu tuần tự được

khai báo bên trong phát biểu process

Biến được khai báo trong process là biến cục bộ Tín hiệu không được khai báo

trong process

Ví dụ chương trình bộ cộng trên sẽ có dạng:

-

ENTITY HALF_ADDER IS

PORT( A,B : IN BIT;

SUM,CARRY : OUT BIT);

Trang 8

- ENTITY DFF IS

7.2.3.4 Mô tả architechture dưới dạng hỗn hợp (mixed style)

Có thể trộn lẫn 3 kiểu trong một architechture

Ví dụ mô tả mạch cộng toàn phần (FULL_ADDER) sau:

-

ENTITY FULL_ADDER IS

PORT( A,B,CIN : IN BIT;

Trang 9

SUM, COUT : OUT BIT);

Configuration dùng để liên kết các hợp phần tới entity Configuration ban đầu

có thể được ấn định tới rất nhiều architecture trong một entity

Trang 10

Định cấu hình cho phép mô phỏng các thiết kế ở thành phần con, dễ dàng kiểm tra được thiết kế hơn một chương trình lớn Một cấu hình được dùng để nối từng cặp như sau:

• Một thân architecture tới khai báo entity của nó

• Một component với một entity

Ví dụ xây dựng một entity FULL_ADDER ở trên có thể tách ra làm ba architecture body: FA_BEHAVIOR, FA_STRUCTURE, và FA_MIXED Một architecture bất kỳ có thể được chọn bằng cách đặc tả một configuration thích hợp

liên kết thực thể với nhiều đối tượng của một thành phần

For A3: AND2

Use entity HS_LIB.AND2HS(AND2STR);

PORT MAP (HS_B => A1, HS_Z=>Z, HS_A => A0 );

End for;

liên kết thực thể với các đối tượng đơn của một thành phần

Trang 11

For all : OR2

Use entity CMOS_LIB.OR2CMOS(OR2STR);

End for;

liên kết thực thể với tất cả các đối tượng của thành phần OR2

For others: AND2

Use entity WORK.A_GATE(A_GATE_BODY);

X1: XOR2 port map(A, B, S1);

X1: XOR2 port map(S1, Cin, SUM);

A1: AND2 port map(S2, A, B);

A2: AND2 port map(S3, B, Cin);

A3: AND2 port map(S4, A, Cin);

O1: OR2 port map(S2, S3, S5);

O2: OR2 port map(S3, B, Cin);

NAND_GATE port map(S4,S5,Cout);

END FA_STR;

-

Có 4 đặc tả cấu hình trong phần khai báo của thân kiến trúc (architecture body):

• Đặc tả thứ nhất chỉ rằng đối tượng có nhãn X1 và X2 của component XOR2 liên kết với entity bởi cặp entity - architecture XOR2 và XOR2BEH có sẵn

trong thư viện WORK

• Đặc tả thứ hai liên kết đối tượng component AND2 có nhãn A3 đến entity bởi cặp entity - architecture AND2HS và AND2STR đã có trong thư viện thiết kế

HS_LIB Anh xạ của cổng thành phần (AND2 ) và các cổng thực thể(AND2HS) được liên kết theo tên (name association)

Trang 12

• Đặc tả thứ ba chỉ rằng tất cả các đối tượng của component OR2 được liên kết với entity bởi cặp entity - architecture có sẵn trong thư viện thiết kế

CMOS_LIB

• Đặc tả cuối cùng chỉ rằng tất cả các đối tượng không liên kết (unbound) của

component AND2, đối tượng A1 và A2 được liên kết tới entity khác là: A_GATE có architecture A_GATE_BODY, kiến trúc này có sẵn trong thư

viện WORK

Trong ví dụ này đã chỉ ra các đối tượng của cung một thành phần (component)

có thể được liên kết (bound) với các thực thể khác nhau

7.3 CÁC KHAI BÁO TRONG VHDL

7.3.1 Khai báo kiểu hỗ trợ

Kiểu liệt kê, số nguyên, dãy một chiều và kiểu bản ghi

7.3.1.1 Kiểu liệt kê

Ví dụ

- Type STD_ULOGIC is (‘U’, ‘X’, ‘0’, ‘1’, ‘Z’, ‘W’, ‘L’, ‘H’, ‘_’);

std_ulogic là 1 kiểu liệt kê bao gồm 9 giá trị được khai báo là

U<X<0<1<Z<W<L<H< _

Signal S: STD_ULOGIC;

Type STATE_TYPE is (HALT, READY, RUN, ERROR);

HALT< READY< RUN< ERROR

Variable STATE: STATE_TYPE;

Type CODE_TYPE is (NUL, ‘0’, ‘1’);

Function CODE (C: in INTEGER) return CODE_TYPE;

- Kiểu STD_ULOGIC và STATE_TYPE là 2 kiểu liệt kê; tuy nhiên mức độ trừu tượng của STATE_TYPE cao hơn của STD_ULOGIC

Trật tự các giá trị xuất hiện trong khai báo liệt kê định nghĩa thứ tự của chúng, giá trị bên trái nhỏ hơn giá trị bên phải

7.3.1.2 Kiểu nguyên

Kiểu nguyên là 1 tập hợp những giá trị rơi vào vùng số nguyên được chỉ ra

Ví dụ:

Trang 13

- type LENGTH is range 0 to 1000;

type BYTE_INT is range –128 to 127;

type MY_INTEGER is range -2147483647 to 2147483647;

-

7.3.1.3 Kiểu dãy nhiều chiều

Kiểu dãy nhiều chiều được VHDL hỗ trợ để định nghĩa một tập chỉ số Tuy nhiên chỉ có dãy một chiều được công cụ tổng hợp cho phép Vậy phải khai báo hai dãy một chiều thay vì một dãy hai chiều

Ví dụ:

- Type WORD is array (31 downto 0) of BIT;

Type RAM is array (1023 downto 0) of WORD;

- Thay vì:

tại nữa, địa chỉ thành phần được tính toán chỉ một lần và trở thành mã cố định) Ví dụ: - Architecture A of E is

Type CODE_TYPE is (NONE, DATA, STATMT) ;

Type ITEM_TYPE is record;

Trang 14

7.3.1.5 Tiêu chuẩn IEEE

Khối STD_LOGIC_1164 định nghĩa các giá trị kiểu đa luận lý Khối này được

hỗ trợ bởi tất cả công cụ tổng hợp Ví dụ:

- Type STD_LOGIC is ( ‘U’, Uninitialized

Giá trị 'U'và 'W' được gọi là giá trị gần luận lý, chủ yếu có chức năng mô phỏng

và hiển nhiên không có ý nghĩa phần cứng Giá trị 'U' là chữ tận cùng bên trái trong định nghĩa STD_ULOGIC liệt kê, và là giá trị mặc định cho các biến số hoặc các tín hiệu ban đầu trước khi được gán các giá trị 'X' và 'W' biểu diễn trạng thái mà bộ mô phỏng không thể xác định được 'W' có ảnh hưởng ít hơn có thể bị gán đến '0', '1' và 'X'

Trang 15

Do các công cụ tổng hợp chưa thể phân biệt giữa các độ mạnh yếu, nên các giá trị 'L' và 'H' không có ngữ nghĩa tổng hợp chuẩn

'Z' có thể được dùng trong mô phỏng như là kết quả khi không có bộ điều khiển nào đang hoạt động Đối với tổng hợp, phần cứng đặc biệt được ám chỉ khi gán phép gán giá trị vô hướng 'Z' được dùng, mục đích của phép gán là đặt đầu ra tới bộ đệm 3 trạng thái

7.3.2 Các kiểu không hỗ trợ

Vài kiểu dữ liệu không được dùng cho mục đích tổng hợp (ví dụ, tất cả kiểu vật lý định nghĩa bởi người thiết kế không được hỗ trợ), kiểu vật lý định nghĩa trước TIME không được hỗ trợ Ngay cả sự ràng buộc thời gian đối với tổng hợp không được biểu

diễntrong VHDL với các biểu thức thời gian Do đó mệnh đề after và reject không

được dịch và không có công cụ tổng hợp nào có thể đảm bảo rằng tín hiệu sẽ thay đổi sau một khoảng thời gian chính xác

Nếu các mệnh đề này được sử dụng trong mô tả VHDL, công cụ tổng hợp sẽ bỏ qua và kết quả phần cứng có thể mâu thuẫn với mô tả đầu vào Điều này nói rằng kiểu mẫu chính xác cho tổng hợp không dùng bất kỳ biểu thức thời gian nào, bao gồm lệnh

biểu thức thời gian wait for Trong mô phỏng qúa trình bị tạm ngưng trong thời gian định nghĩa bởi biểu thức for Trong suốt giai đoạn này, tất cả tín hiệu giữ các giá trị

mới của chúng Trong miền tổng hợp không thể phỏng đoán phần cứng với các kết quả như vậy mà không cung cấp phần cứng vì nó quá phức tạp và quá đặc biệt (như bộ định thời gian)

7.3.3 Các kiểu con

Các kiểu con rất hữu dụng cho tổng hợp Ở mỗi bước mô phỏng, các kiểu con cung cấp khả năng mạnh mẽ cho việc kiểm tra sử dụng kiểu Các kiểu con còn thừa hưởng tất cả toán tử định nghĩa từ các kiểu cơ bản của chúng

Ví dụ: chức năng thao tác trên kiểu BIT_VECTOR có thể được dùng với bất kỳ

kiểu con của BIT_VECTOR dài bằng giá trị còn lại trong khoảng thích hợp

Trang 16

Ví dụ:

-

Constant rise_time : time :=10 ns;

Constant bus_width : integer :=8;

-

Ví dụ:

-

Type TAB2 is array (BIT, BIT) of BIT;

Constant AND_TAB: TAB2 := ((‘0’, ’0’), (‘0’, ‘1’));

- Giá trị hằng số được tính toán chỉ một lần Quá trình tổng hợp chấp nhận hằng

số của bất kỳ kiểu tổng hợp nào

Trong trường hợp khai báo như vậy không tạo ra bất kỳ phần cứng nào Nếu hằng số được dùng trong phép gán tín hiệu như các lệnh dưới đây thì phần cứng được suy ra:

Ví dụ: Phía phải của phép gán tín hiệu

-

Constant COD1: BIT_VECTOR := X ”EA”;

Constant MASK: BIT_VECTOR:=”01111111”;

Signal V, R, A: BIT_VECTOR(7 downto 0);

begin

V <= COD1; R <= A and MASK;

Trang 17

7.4.2 Khai báo biến số và tín hiệu

Các khai báo biến số

Variable variable_name : type_name [:=value];

Port ( DATA: in BIT_VECTOR (1 downto 0);

CLOCK :in BIT;

Z: out BIT);

Constant K1: BIT_VECTOR : = “01”;

Trang 18

Variable A1, A2: BIT_VECTOR(DATA’range);

Variable A3: BIT;

Begin

If CLOCK = ‘1’ and CLOCK’event then

Z <= (DATA and K2)(1) or (DATA and K1)(0);

Trang 19

- Signal clock: bit;

khai báo tín hiệu clock của kiểu bit lấy giá trị 1,0

Signal data_bus : bit_vector( 0 to 7);

khai bo tín hiệu data_bus thuộcc kiểu bit_vector có độ rộng 8 bit

-

7.4.3 Các giá trị khởi động

Trong VHDL, có 3 loại giá trị ban đầu:

• Giá trị mặc định từ định nghĩa kiểu hay kiểu con

• Giá trị ban đầu khi đối tượng được khai báo

• Giá trị được gán khi sử dụng một phát biểu lúc bắt đầu quá trình

Trường hợp thứ nhất và thứ hai sẽ bị bỏ qua bởi công cụ tổng hợp, nên có thể phát sinh mâu thuẫn giữa hoạt động mô phỏng và kết quả tổng hợp Do đó đề nghị phải khởi động một cách rõ ràng và có hệ thống các biến và tín hiệu với các lệnh đặc biệt Điều này đạt được trong phần mã tổng hợp phục vụ cho việc xử lý thiết lập/thiết lập lại và sự khởi động phải được trình bày trong phần này

Nếu cổng out hoặc thông số out của chương trình con có giá trị mặc định,

chúng hoạt động giống như một giá trị khởi động cho tín hiệu hoặc biến và sẽ bị công

Trang 20

Toán tử luận lý và toán tử not chấp nhận các toán hạng có các kiểu BIT, BOOLEAN, và VECTOR với kích thước giống nhau Một quy ước được chấp nhận rộng rãi cho giá trị boolean: TRUE tương đương với giá trị BIT '1' và ngược lại

Toán tử nand và nor không kết hợp với nhau trong 1 cú pháp liên tục, chúng phải được ngăn cách bằng dấu () :

A and B nand C; trái luật

(A and B ) nand C; đúng luật;

Toán tử quan hệ luôn trả về giá trị Boolean '0' hoặc '1' và là kết quả của sự so

sánh hai toán hạng cùng một kiểu cơ bản

Trong mô phỏng, toán tử bằng và khác được định nghĩa rõ ràng cho các kiểu Kết quả là TRUE nếu hai toán hạng có cùng giá trị

Trang 21

Các toán tử quan hệ được định nghĩa cho tất cả các kiểu vô hướng và dãy một

chiều Thứ tự của kiểu vô hướng được định nghĩa bởi khai báo của nó, kiểu 'LEFT' thấp hơn kiểu 'RIGHT'

Đối với dãy một chiều, thứ bậc quan hệ của chúng được định nghĩa bởi bậc ngữ nghĩa Ví dụ:

Toán tử này nếu thực hiện với khối số học thì kết quả của lệnh cuối cùng "10" <

"101" sẽ được thông dịch khác nhau đối với số không dấu hoặc số có dấu

Signal A, B, C: BIT_VECTOR(2 downto 0);

Trang 22

Các toán tử dịch chuyển hỗ trợ cho BIT_VECTOR Các toán tử dịch chuyển và

quay là sll, srl, sla, sra, rol và ror

7.4.4.5 Các toán tử nhân

Phép chia "/", phép nhân "*", lấy modulo "mod", lấy số dư "rem" được xếp

trong nhóm nhân Chỉ có toán tử nhân được hỗ trợ thêm ví dụ không hạn chế đối với tất cả các kiểu số nguyên Đối với vài công cụ tổng hợp, nhiều chiến lược nhân được

đề nghị để tạo ra phần cứng

"/", mod, và rem được hỗ trợ có hạn chế đối với các giá trị của toán hạng vế

phải, các công cụ tổng hợp đòi hỏi các giá trị này là dương và là lũy thừa của 2 Hơn nữa chúng thường là các hằng số toàn cục Kết quả phần cứng của toán tử này dựa trên các toán tử dịch bit

Trang 23

-

7.4.4.6 Các toán tử hỗn hợp

Abs, giá trị tuyệt đối được hỗ trợ cho tất cả các giá trị số nguyên,

Toán tử số mũ "**", được hỗ trợ với hạn chế toán hạng trái là hằng số toàn cục,

giá trị của nó phải là 2

7.4.5 Phép gán biến số

Biến không dùng chung được khai báo trong quá trình hoặc trong phần khai báo chương trình con

Phép gán biến được thực hiện bởi toán tử :=, thao tác này xảy ra ngay lập tức

khi tính toán Do đó, giá trị của biến chỉ thay đổi bởi lệnh gán tiếp theo nếu giá trị mới khác với giá trị cũ

Ví dụ: cách gán biến khác nhau:

- A:= 0 ; giá trị integer 0 được gán cho biến A

REC.FIELD := B; B được gán cho bản ghi FIELD của REC

VECTOR := X “AA”; phép gán vector toàn cục

WBUS(1) := F(A); phép gán phần tử của vector

WORD(3 to 4) := “10”; phép gán một nhóm phần tử vector

REC := (‘A’, 3, “10”); Phép gán giá trị theo vị trí của vetor

REC := (LETTER => ‘C’, FIELD => 3, BIT2 => “11”);

Phép gán với tên - Hơn nữa, ở phần bên trái của lệnh gán, nhiều biến số có thể gộp lại Ví dụ: -

Trang 24

Lưu ý, biến khai báo trong chương trình con chỉ tồn tại trong chương trình con này và biến mất ở ngoài chương trình con Vì vậy, nếu biến số đã được gán, kết quả bị mất sau khi chạy lệnh return ngoại trừ được trả về khi dùng thông số out bên trong thủ tục hoặc lệnh return bên trong hàm Tuy nhiên biến này có thể tạo ra một phần nhớ nếu thời điểm đồng bộ xảy ra trước khi chương trình con kết thúc

• Đợi một sự kiện trên một tín hiệu tùy thuộc vào danh sách Danh sách của

wait phải bao gồm tất cả tín hiệu được đọc trong quá trình:

Ví dụ:

- Process

Trang 25

Nếu kiểu của tín hiệu đồng hồ không là BOOLEAN hoặc BIT, mà là kiểu đa giá trị, thì để phù hợp với sự mô phỏng, điều kiện sau phải được thêm vào lệnh wait: CLK'LAST_VALUE = '0'

Điều này xác định sườn lên hợp lệ cho tổng hợp Điều kiện cạnh xung đồng hồ

trở thành Ví dụ:

Wait until CLK =’1’ and CLK’last_value = ‘0’;

Nếu lệnh wait là rõ ràng, lệnh đồng bộ được mô tả bởi một lệnh điều kiện if Ví dụ:

If CLK = ‘0’ and CLK’event and CLK’last_value =’1’ then …

Hoặc sử dụng thuộc tính 'STABLE với giá trị thời gian mặc định 0ns,

('STABLE là một hàm chấp nhận kiểu thông số TIME có giá trị mặc định là zero) Ví

Begin

If S1 = ‘1’ then

RESULT <= R1;

Elsif S2 = ’0’ then

Trang 26

Type CODE_TYPE is (ADD, SUB, RST, INCX);

Subtype WORD is INTEGER range 0 to 3;

Signal CODE: CODE_TYPE;

Ngày đăng: 03/04/2023, 15:04

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm