Kiến thức cơ bản về vhdl

VHDL là viết tắt của cụm từ Very High Speed Intergrated Circuit Hardware Description Language - ngôn ngữ mô tả phần cứng cho các mạch tích hợp tốc độ rất cao. VHDL là ngôn ngữ mô tả phần cứng được phát triển dùng cho chương trình VHSIC (Very High Speed Intergrated Circuit) của bộ quốc phòng Mỹ. Mục tiêu của việc phát triển VHDL là có được một ngôn ngữ mô tả phần cứng tiêu chuẩn và thống nhất cho phép phát triển thử nghiệm các hệ thống số nhanh hơn cũng như cho phép dễ dàng đưa các hệ thống đó vào ứng dụng trong thực tế.

doc68 trang | Chia sẻ: haohao89 | Lượt xem: 3753 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Kiến thức cơ bản về vhdl, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
KIẾN THỨC CƠ BẢN VỀ VHDL VHDL là viết tắt của cụm từ Very High Speed Intergrated Circuit Hardware Description Language - ngôn ngữ mô tả phần cứng cho các mạch tích hợp tốc độ rất cao. VHDL là ngôn ngữ mô tả phần cứng được phát triển dùng cho chương trình VHSIC (Very High Speed Intergrated Circuit) của bộ quốc phòng Mỹ. Mục tiêu của việc phát triển VHDL là có được một ngôn ngữ mô tả phần cứng tiêu chuẩn và thống nhất cho phép phát triển thử nghiệm các hệ thống số nhanh hơn cũng như cho phép dễ dàng đưa các hệ thống đó vào ứng dụng trong thực tế. Ngôn ngữ VHDL được ba công ty Intermetics, IBM và Texas Instruments bắt đầu nghiên cứu phát triển vào 7/1983. Phiên bản đầu tiên được công bố vào 8/1985. Sau đó VHDL được đề xuất để tổ chức IEEE xem xét thành một tiêu chuẩn. Năm 1987, đã đưa ra tiêu chuẩn về VHDL – tiêu chuẩn IEEE-1076-1987. VHDL được phát triển để giải quyết các khó khăn trong việc phát triển, thay đổi và lập tài liệu cho các hệ thống số. Như ta đã biết, một hệ thống số có rất nhiều tài liệu mô tả. Ðể có thể vận hành bảo trì sửa chữa một hệ thống ta cần tìm hiểu tài liệu đó kỹ lưỡng. Với một ngôn ngữ mô tả phần cứng thì việc xem xét các tài liệu mô tả trở nên dễ dàng hơn vì bộ tài liệu đó có thể được thực thi để mô phỏng hoạt động của hệ thống. Như thế ta có thể xem xét toàn bộ các phần tử của hệ thống hoạt động trong một mô hình thống nhất. Trước khi VHDL ra đời, có nhiều ngôn ngữ mô tả phần cứng được sử dụng nhưng không có một tiêu chuẩn thống nhất. Vì các ngôn ngữ mô phỏng phần cứng đó được các nhà cung cấp thiết bị phát triển, nên mang các đặc trưng gắn với các thiết bị của nhà cung cấp đó và thuộc sở hữu của nhà cung cấp. Trong khi đó, VHDL được phát triển như một ngôn ngữ độc lập không gắn với bất kỳ một phương pháp thiết kế, bộ mô phỏng hay công nghệ phần cứng nào. Người thiết kế có thể tự do lựa chọn công nghệ, phương pháp thiết kế trong khi vẫn sử dụng một ngôn ngữ duy nhất. VHDL có một số ưu điểm hơn hẳn các ngôn ngữ mô tả phần cứng khác là: Tính công cộng: VHDL được phát triển dưới sự bảo trợ của chính phủ Mỹ và hiện nay là một tiêu chuẩn của IEEE, VHDL không thuộc sở hữu của bất kỳ cá nhân hay tổ chức nào. Do đó VHDL được hỗ trợ của nhiều nhà sản xuất thiết bị cũng như nhiều nhà cung cấp công cụ thiết kế mô phỏng hệ thống. Ðây là một ưu điểm nổi bật của VHDL, giúp VHDL trở nên ngày càng phổ biến. Khả năng hỗ trợ nhiều công nghệ và phương pháp thiết kế: VHDL cho phép thiết kế bằng nhiều phương pháp như phương pháp thiết kế từ trên xuống, hay từ dưới lên dựa vào các thư viện có sẵn. Như vậy VHDL có thể phục vụ tốt cho nhiều mục đích thiết kế khác nhau, từ việc thiết kế các phần tử phổ biến đến việc thiết kế các IC ứng dụng đặc biệt (Application Specified IC). Ðộc lập với công nghệ: VHDL hoàn toàn độc lập với công nghệ chế tạo phần cứng. Một mô tả hệ thống dùng VHDL thiết kế ở mức cổng có thể được chuyển thành các bản tổng hợp mạch khác nhau tuỳ thuộc vào công nghệ chế tạo phần cứng nào được sử dụng (dùng CMOS, nMOS, hay GaAs). Ðây cũng là một ưu điểm quan trọng của VHDL nó cho phép người thiết kế không cần quan tâm đến công nghệ phần cứng khi thiết kế hệ thống, như thế khi có một công nghệ chế tạo phần cứng mới ra đời nó có thể được áp dụng ngay cho các hệ thống đã thiết kế. Khả năng mô tả mở rộng: VHDL cho phép mô tả hoạt động của phần cứng từ mức hệ thống số (hộp đen) cho đến mức cổng. VHDL có khả năng mô tả hoạt động của hệ thống trên nhiều mức nhưng chỉ sử dụng một cú pháp chặt chẽ thống nhất cho mọi mức. Như thế ta có thể mô phỏng một bản thiết kế bao gồm cả các hệ con được mô tả ở mức cao và các hệ con được mô tả chi tiết. Khả năng trao đổi kết quả: Vì VHDL là một tiêu chuẩn được chấp nhận, nên một mô hình VHDL có thể chạy trên mọi bộ mô phỏng đáp ứng được tiêu chuẩn VHDL và các kết quả mô tả hệ thống có thể được trao đổi giữa các nhà thiết kế sử dụng công cụ thiết kế khác nhau nhưng cùng tuân theo chuẩn VHDL. Hơn nữa, một nhóm thiết kế có thể trao đổi mô tả mức cao của các hệ thống con trong một hệ thống; trong khi các hệ con đó được thiết kế độc lập. Khả năng hỗ trợ thiết kế mức lớn và khả năng sử dụng lại các thiết kế: VHDL được phát triển như một ngôn ngữ lập trình bậc cao, vì vậy nó có thể sử dụng để thiết kế một hệ thống lớn với sự tham gia của một nhóm nhiều người. Bên trong ngôn ngữ VHDL có nhiều tính năng hỗ trợ việc quản lý, thử nghiệm và chia sẻ thiết kế. VHDL cũng cho phép dùng lại các phần đã có sẵn. 3.1. CÁC CẤU TRÚC CƠ BẢN CỦA NGÔN NGỮ VHDL Các thành phần chính xây dựng trong ngôn ngữ VHDL được chia ra thành năm nhóm cơ bản như sau: - Entity - Architecture - Package - Configuration. - Library. Entity: Trong một hệ thống số, thông thường được thiết kế theo một sự xếp chồng các Modul, mà mỗi Modul này tương ứng với một thực thể thiết kế (được gọi là Entity) trong VHDL. Mỗi một Entity bao gồm hai phần: - Khai báo thực thể ( Entity). - Thân kiến trúc ( Architecture Bodies ) Một khai báo Entity được dùng để mô tả giao tiếp bên ngoài của một phần tử (component), nó bao gồm các khai báo các cổng đầu vào, các cổng đầu ra của phần tử đó. Phần thân của kiến trúc được dùng để mô tả sự thực hiện bên trong của thực thể đó. Packages: Các đóng gói chỉ ra thông tin dùng chung, mà các thông tin này được sử dụng bởi một vài Entity nào đó. Configuration: Định cấu hình, nó cho phép gắn kết các thể hiện của phần tử cần dùng nào đó của một thiết kế nào đó có dạng một cấu trúc và đưa các thể hiện này vào trong cặp Entity và Architecture. Nó cho phép người thiết kế có thể thử nghiệm để thay đổi các sự thực thi khác nhau trong một thiết kế. Mỗi một thiết kế dạng VHDL bao gồm một vài đơn vị thư viện, mà một trong các thư viện này được dịch sẵn và cất trong một thư viện thiết kế. 3.1.1. Khai báo Entity Như trên đã đề cập, phần khai báo Entity chỉ đưa ra một cái nhìn phía bên ngoài của một phần tử mà không cung cấp thông tin về sự thực hiện của phần tử đó như thế nào. Cú pháp khai báo của một Entity như sau: Entity entity_name is [generic (generic_declaration);] [port (port_declaration);] {entity_declarative_item {constants, types, signals};} end [entity_name]; [] : Dấu ngoặc vuông chỉ ra các tham số có thể lựa chọn. | : Dấu gạch đứng hiển thị một sự lựa chọn trong số các lựa chọn khác. {} : Khai báo một hoặc nhiều các đối tượng, mà các đối tượng này có thể được định nghĩa bởi người dùng. a. Khai báo Generic: Dùng để khai báo các hằng mà chúng có thể được dùng để điều khiển cấu trúc và sự hoạt động của Entity. Cú pháp của khai báo này như sau: generic ( constant_name : type [:=init_value] {;constant_name: type[:=init_value]}); Ở đây tên hằng constant_name chỉ ra tên của một hằng dạng generic (hằng dùng chung). Kiểu (Type) được dùng để chỉ ra kiểu dữ liệu của hằng. Init_value : chỉ ra giá trị khởi tạo cho hằng. b. Khai báo cổng ( Port ): Được dùng để khai báo các cổng vào, ra của Entity. Cú pháp của khai báo này như sau: Port ( port_name : [mode] type [:= init_value] {; port_name:[mode] type [:=init_value]}); Port_name được dùng để chỉ ra tên của một cổng, mode chỉ ra hướng vào ra của tín hiệu tại cổng đó. Type chỉ ra kiểu dữ liệu của một cổng và init_value chỉ ra giá trị khởi tạo cho cổng đó. Chú ý ! Với VHDL không phân biệt chữ hoa và chữ thường, chẳng hạn như: xyz = xYz = XYZ. Có bốn mode được sử dụng trong khai báo cổng: - in: Chỉ có thể được đọc, nó chỉ được dùng cho các tín hiệu đầu vào (chỉ được phép nằm bên phải phép gán). - out: Chỉ được dùng để gán giá trị, nó chỉ được dùng cho các cổng đầu ra (nó chỉ được nằm bên trái của phép gán). - inout: Có thể được dùng để đọc và gán giá trị. Nó có thể có nhiều hơn một hướng điều khiển (có thể nằm ở bên trái hoặc bên phải phép gán). - Buffer: Có thể được dùng để đọc và gán giá trị (có thể nằm ở bên trái hoặc bên phải phép gán). Inout là một cổng hai hướng, còn Buffer là một cổng không có hướng. c. Entity_declarative_item : Được dùng để khai báo các hằng, kiểu dữ liệu, hoặc tín hiệu mà nó có thể được sử dụng trong khi thực hiện của một Entity. d. Ví dụ : Ví dụ về khai báo các cổng vào ra: entity xxx is port ( A : in integer ; B : in integer ; C : out integer ; D : inout integer ; E : buffer integer) ; end xxx; architecture bhv of xxx is begin process (A,B) begin C <= A ; -- ( Câu lệnh đúng: A được gán cho C ). A <= B ; -- ( Câu lệnh sai: A là một đầu vào ). E <= D + 1; -- ( Câu lệnh đúng: D ở mode inout vì vậy nó -- có thể được gán và đọc ) D <= C + 1; -- ( Câu lệnh sai : C là cổng đầu ra nên không -- thể đọc được cho đầu vào ). end process; end bhv; Ví dụ về khai báo Entity: Hình 3.1: Thực thể FULL_ADDER 1bit. Hình 3.1 chỉ ra một giao diện của một bộ cộng một bit. Tên Entity của phần tử này là FULL_ADDER. Nó bao gồm các cổng đầu vào A, B và CIN. Các cổng này có kiểu dữ liệu là kiểu Bit, còn các cổng đầu ra SUM và COUT cũng mang kiểu dữ liệu là kiểu BIT. Ngôn ngữ VHDL dùng để diễn tả giao diện này như sau: Entity FULL_ADDER is port ( A, B, CIN : in BIT; SUM, COUT : out BIT ); End FULL_ADDER ; Chúng ta có thể điều khiển cấu trúc cũng như thời gian của một Entity bởi việc sử dụng các hằng generic. Ví dụ sau sẽ chỉ ra việc điều khiển này, trong ví dụ này hằng N được dùng để chỉ ra số bít của một bộ cộng. Trong quá trình mô phỏng hoặc quá trình tổng hợp, giá trị thực tế cho mỗi hằng dùng chung generic có thể bị thay đổi. entity ADDER is generic (N : INTEGER := 4); M : TIME := 10ns); port ( A, B : in BIT_VECTOR (N -1 downto 0 ); CIN :in BIT; SUM : out BIT_VECTOR (N-1 downto 0); COUT : out BIT ); end ADDER; Giao diện mô tả bộ cộng này như sau: Hình 3.2: Thực thể FULL_ADDER 4 bit. 3.1.2. Các kiểu kiến trúc (Achitecture) Một kiến trúc đưa ra kết cấu bên trong của một Entity. Một Entity có thể có nhiều hơn một kiến trúc, nó chỉ ra quan hệ giữa các đầu vào và đầu ra của một Entity mà quan hệ này được diễn tả theo các thuật ngữ sau: - Kiểu hành vi hoạt động ( Behavioral ). - Kiểu hoạt động của các luồng dữ liệu ( Dataflow ). - Kiểu cấu trúc ( Structure ). Một kiến trúc xác định chức năng của một Entity. Nó bao gồm các phần: Khai báo các các tín hiệu, hằng, khai báo các kiểu, các phần tử, tiếp theo là các phát biểu (lệnh) đồng thời. Khai báo một kiến trúc sử dụng cú pháp sau: architecture architecture_name of entity_name is { architecture_declarative_part } Begin {concurrent_statement} --(lệnh đồng thời) end [ architecture_name ]; 3.1.2.1. Kiến trúc theo kiểu hành vi hoạt động (Behavioral) Một kiến trúc kiểu hành vi hoạt động chỉ ra các hoạt động mà một hệ thống riêng biệt nào đó phải thực hiện trong một chương trình, nó giống như việc diễn tả các quá trình hoạt động, nhưng không cung cấp chi tiết mà thiết kế được thực thi như thế nào. Thành phần chủ yếu của việc diễn tả theo kiểu hành vi trong VHDL là process. Dưới đây là ví dụ chỉ ra kiểu diễn tả theo kiểu hành vi của một bộ cộng với tên là FULL_ADDER. architecture BEHAVIOUR of FULL_ADDER is begin process (A,B,CIN) begin if ( A ='0' and B ='0' and CIN='0' ) then SUM <= '0'; COUT <= '0' ; elsif (A='0' and B='0' and CIN='1') or (A='0' and B='1' and CIN='0') or (A='1' and B='0' and CIN='0') then SUM <= '1'; COUT <= '0' ; elsif (A='0' and B='1' and CIN='1') or (A='1' and B='0' and CIN='1') or (A='1' and B='1' and CIN='0') then SUM <= '0'; COUT <= '1'; elsif (A='1' and B='1' and CIN='1') then SUM <='1'; COUT <='1'; end if; end process; end BEHAVIOURAL; 3.1.2.2. Kiến trúc theo kiểu hoạt động của các luồng dữ liệu (Dataflow) Một kiến trúc kiểu luồng dữ liệu chỉ ra một hệ thống dưới dạng mô tả đồng thời của các luồng điều khiển và dịch chuyển của dữ liệu. Nó sử dụng theo mẫu thông tin hoặc mẫu hoạt động của luồng dữ liệu đó, hoặc mẫu thời gian của các chức năng logic tổ hợp. Chẳng hạn như các bộ cộng, bộ so sánh, bộ giải mã, và các cổng logic nguyên thủy. Ví dụ: architecture DATAFLOW of FULL_ADDER is signal S : BIT; begin S <= A xor B ; SUM <= S xor CIN after 10 ns; COUT <= (A and B ) or (S and CIN) after 5ns; end DATAFLOW; 3.1.2.2. Kiến trúc theo kiểu cấu trúc (Structure) Một kiến trúc kiểu cấu trúc chỉ ra sự thực thi cấu trúc theo dạng sử dụng các khai báo phần tử và các thể hiện của phần tử đó. Ví dụ dưới đây chỉ ra sự diễn tả cấu trúc của một bộ cộng FULL_ADDER như trên đã giới thiệu. Hai kiểu phần tử được sử dụng trong ví dụ này là HALF_ADDER và OR_GATE. architecture STRUCTURE of FULL_ADDER is component HALF_ADDER port (L1, L2 : in BIT; CARRY, SUM : out BIT); end component; component OR_GATE port (L1, L2 : in BIT; O: out BIT); end component; begin HA1: HALF_ADDER port map (A,B,N1,N2); HA2: HALF_ADDER port map (N2,CIN,N3,SUM); OR1 : OR_GATE port map (N1, N3,COUT); end STRUCTURE; Ở ví dụ này Entity ở mức cao nhất sẽ chứa hai thể hiện của HALF_ADDER và một thể hiện của OR_GATE. Thể hiện HALF_ADDER có thể bị rằng buộc với một Entity khác, mà Entity này bao gồm một cổng XOR và một cổng AND. Giao tiếp của một bộ cộng HALF_ADDER có dạng như sau: Hình 3.3: Giao tiếp bộ cộng HALF_ADDER. Bộ cộng này gồm có hai đầu vào L1 và L2, đầu ra là SUM và CARRY. Kiểu BIT là kiểu tiền định nghĩa của ngôn ngữ VHDL, nó có kiểu liệt kê dạng chữ ký tự như '0' và '1'. 3.1.3. Các đóng gói (Packages) Mục đích chính của Package là tập hợp các phần tử có thể bị chia sẻ bởi hai hay nhiều đơn vị thiết kế (hay các phần tử có thể dùng chung được). Nó có chứa các kiểu dữ liệu, các hằng, các chương trình con có thể dùng chung giữa các thiết kế. Một Package có cha hai phần chính: - Phần khai báo Package. - Phần thân Package. 3.1.3.1. Phần khai báo Package Một khai báo Package được dùng để cất giữ hàng loạt các khai báo dùng chung, chẳng hạn như các phần tử, các kiểu, các thủ tục, các hàm. Các khai báo này có thể nhập vào các đơn vị thiết kế khác bởi việc sử dụng một mệnh đề use. Ví dụ: package EXAMPLE_PACK is type SUMMER is ( MAY, JUN, JUL, AUG, SEP); component D_FLIP_FLOP port (D, CK:in BIT; Q, QBAR: out BIT) end component; constant PIN2PIN_DELAY:TIME:=125ns; function IN2BIT_VEC(INT_VALUE:INTEGER) return BIT_VECTOR; end EXAMPLE_PACK; Ở ví dụ này tên của package được khai báo là EXAMPLE_PACK. Nó có chứa các khai báo kiểu, phần tử, hằng, và hàm. Lưu ý rằng hoạt động của hàm INT2BIT_VEC không xuất hiện ở trong khai báo gói, mà chỉ có giao tiếp của hàm xuất hiện. Việc định nghĩa, hay thân của hàm chỉ xuất hiện trong thân của đóng gói ( Body Package ). Giả sử rằng đóng gói này đã được dịch và tạo thành một thư viện thiết kế và được gọi là DESIGN _LIB. Xem xét việc dùng mệnh đề use để sử dụng chúng dưới đây: library DESIGN_LIB; use DESIGN_LIB.EXAMPLE_PACK.all Entity RX is......... Mệnh đề library DESIGN_LIB cho phép thư viện thiết kế DESIGN_LIB được phép dùng trong phần mô tả này, điều đó có nghĩa là tên DESIGN_LIB có thể được sử dụng. Mệnh đề use tiếp theo sẽ lấy tất cả các khai báo có trong Package EXAMPLE_PACK vào trong khai báo Entity của RX. Có nghĩa là ta có thể chọn lựa các khai báo từ trong một các khai báo của một đóng gói vào trong một đơn vị thiết kế khác. Ví dụ : library DESIGN_LIB; use DESIGN_LIB.EXAMPLE_PACK.D_FLIP_FLOP; use DESIGN_LIB.EXAMPLE_PACK.PIN2PIN_DELAY; architecture RX_STRUCTURE of RX is......... Hai mệnh đề use ở ví dụ này nhằm tạo ra khai báo cho D_FLIP_FLOP và khai báo hằng cho PIN2PIN_DELAY được phép sử dụng trong thân kiến trúc. 3.1.3.1. Phần khai báo thân Package Sự khác biệt giữa khai báo Package và thân Package có cùng mục đích như khai báo của một Entity và phần thân kiến trúc Architecture của chúng. Cú pháp khai báo của Package như sau: package package_name is {package_declarative_item} end [package_name ]; package body package_name is {package_declarative_item} end [package_name] Một thân package được dùng để lưu các định nghĩa của một hàm và thủ tục, mà các hàm và thủ tục này chúng đã được khai báo trong phần khai báo package tương ứng. Vì vậy phần thân package luôn được kết hợp với phần khai báo của chúng, hơn nữa một phần khai báo package luôn có ít nhất một phần thân package kết hợp với chúng. Ví dụ: package EX_PKG is subtype INT8 is integer range 0 to 255; constant zero : INT8:=0; procedure Incrementer (variable Count : inout INT8); end EX_PKG; package body EX_PKG is procedure Incrementer (variable Data : inout INT8) is begin if (Count >= MAX ) then Count:=ZERO; else Count:= Count +1; end if; end Incrementer; end EX_PKG; 3.1.4. Định cấu hình (Configurations) Mỗi một Entity bao gồm nhiều kiến trúc khác nhau. Trong quá trình thiết kế, người thiết kế có thể muốn thử nghiệm với các sự biến đổi khác nhau của thiết kế bằng việc chọn lựa các kiểu kiến trúc khác nhau. Configuration có thể được sử dụng để cung cấp một sự thay thế nhanh các thể hiện của các phần tử (Component) trong một thiết kế dạng cấu trúc. Cú pháp khai báo của Configuration này như sau: Configuration configuration_name of entity_name is {configuration_decalarative_part} For block_specification {use_cluse} {configuration_item} end for; Với một Entity của bộ cộng FULL_ADDER như đã giới thiệu ở phần trên, ở ví dụ này ta có thể sử dụng chúng trong phép định cấu hình như sau: configuration FADD_CONFIG of FULL_ADDER is For STRUCTURE for HA1, HA2 : HALF_ADDER use entity burcin.HALF_ADDER(structure); for OR1: OR_GATE use Entity burcin.OR_GATE; end for; end FADD_CONFIG; Ở đây tên của phép định cấu hình là tuỳ ý, ở ví dụ này ta lấy tên là FADD_CONFIG, còn với dòng lệnh For STRUCTURE chỉ ra kiến trúc được định cấu hình và được sử dụng với thực thể Entity FULL_ADDER. Giả sử rằng chúng ta đã dịch hai thực thể HALF_ADDER và OR_GATE thành thư viện với tên là burcin và sử dụng chúng trong ví dụ trên. 3.1.5. Các thư viện thiết kế Kết quả của việc biên dịch VHDL là chúng được cất giữ bên trong các thư viện để dùng cho bước mô phỏng tiếp theo, điều này giống như việc sử dụng một phần tử đã được khai báo trong một thiết kế khác. Một thư viện thiết kế có thể chứa các đơn vị thư viện như sau: - Các đóng gói (PACKAGES) - Các thực thể Entity - Các kiểu kiến trúc Architectures - Các phép định cấu hình Configurations. Chú ý! VHDL không hỗ trợ các thư viện theo thứ bậc. Bạn có thể có nhiều thư viện như theo ý muốn nhưng không được khai báo lồng nhau! Để mở một thư viện và truy cập chúng như một Entity đã được biên dịch trong một thiết kế VHDL mới, điều đầu tiên cần làm là phải khai báo tên thư viện. Cú pháp của chúng như sau: Library library_name : [path/directory_name]; Bạn có thể truy cập các đơn vị đã được biên dịch từ một thư viện VHDL tới ba mức như sau: library_name.Package_name.item_name Ví dụ: Giả sử chúng ta tạo một đóng gói để cất một hằng mà hằng này được sử dụng trong nhiều thiết kế, sau đó dịch nó và cất vào trong thư viện với tên là burcin . Package my_pkg is constant delay: time:=10ns; end my_pkg; Tiếp đến chúng ta gọi my_pkg để sử dụng chúng trong thiết kế dưới đây: architecture DATAFLOW of FULL_ADDER is signal S : BIT; begin S <= A xor B; SUM <= S xor CIN after burcin.my_pkg.delay; COUT <= (A and B ) or (S and CIN) after 5ns; end DATAFLOW; 3.2. CÁC ĐỐI TƯỢNG DỮ LIỆU Một đối tượng dữ liệu giữ một giá trị của một kiểu nhất định. Trong VHDL có ba lớp đối tượng dữ liệu : - Các hằng (Constants). - Các biến (Variables). - Các tín hiệu (Signals). Lớp cuả một đối tượng được chỉ ra bởi một từ khoá và nó được chỉ ra ở điểm bắt đầu của một khai báo. 3.2.1. Các hằng (Constants) Một hằng nó là một đối tượng mà nó được khởi tạo để chỉ ra một giá trị cố định và nó không bị thay đổi. Khai báo hằng được phép khai báo trong các đóng gói, các Entity, các kiến trúc, các chương trình con, cá
Tài liệu liên quan