Bài giảng Ngôn ngữ VHDL

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

 

ppt120 trang | Chuyên mục: Logic Mờ và Ứng Dụng | Chia sẻ: tuando | Lượt xem: 371 | Lượt tải: 0download
Tóm tắt nội dung Bài giảng Ngôn ngữ VHDL, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
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ếtInteger và RealChấp nhận các giá trị và các đại lượng một cách trực quan và linh hoạtCầ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-bitCho 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 ;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 . . .if COND_A and COND_B thenNEXT_STATE ‘0’ ) ; WORD ‘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 sizePhé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ánOnly scalar data variables are allowed on the left-side aggregates.H_Byte ‘1’, 2 to 5 => ‘0’ ) ; 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 earlierTX_PACKET L_BYTE, UPPER=> H_BYTE) ; DATA_WORD H_BYTE); DATA_WORD H_BYTE); Tạo lập các Array 2-DKhi 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 3Tạo Array của các RecordArray 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;PARITYADDRESSDATA_BYTENUM_VALUESTOP_BITS. . .. . .. . .My_DataPhép gán các Array 2-DVớ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_unsignedtype 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)) (others => ‘1’) , 1 => “10100010”, 2 => “00001111”, 3 => “11110000” ) ; 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 logicKiểu con trong VHDLMộ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 Constraintsubtype My_Small_Int is My_Int range 5 to 30 ;Sử dụng kiểu con trong VHDLtype My_State is ( Load, Jump, Add, Sub, Div, Mult, StorA, StorB) ;signal Curr_State, Next_State : My_State ; Label Base Type Constraintsubtype 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” ; Bài 4Operators vàExpressionsCác toán tử trong VHDLVHDL 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 quanCác hàm này có trong các gói được gọi là “arithmetic packages” Operator OverloadingOperator 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 địnhCompiler tự động chọn sub-function thích hợp dựa trên data type của các operandssignal 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 Greater than>= Greater than or equalsignal FLAG_BIT : boolean ;signal A, B : integer ;FLAG_BIT 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ị falseCá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 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 valuessignal A_vec : bit_vector ( 7 downto 0 ) := “11000110” ;signal B_vec : bit_vector ( 5 downto 0 ) := “111001” ;if ( A_vec > B_vec ) thenState  ; when . . .signal Int_Bus : std_logic_vector ( 5 downto 0 ) ;. . . Int_Bus  ; when . . .Will Not Compile!process ( Int_Bus )begincase ( Int_Bus ) is when “110011” =>  ; when . . .Optimal !!Bài 5 Các câu lệnh Concurrent và Sequential 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ìnhCá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 	 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 concurrentCấu trúc ngôn ngữarchitecture RTL of My_And2 isbegin. . .process (A, B)begin C 	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 ;Câu lệnh CaseCâ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ọnLệnh case có hai dạng cơ bản: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ệnhCác điều kiện không được chồng chéo (gối) nhauGiả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 caseprocess (A, B, C, D, Sel )begincase Sel is when “00” => Z Z Z Z 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)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ạchTuy 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 Z Z Z 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 ;Lệnh gán Signal có lựa chọnLệ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 caseQuy 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 nhauOutlineIf/else StatementsCase StatementConcurrent Form of If/else and Case StatementsLoop StatementsSummaryprocess ( 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ặpLệ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ặpNó đượ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ảiprocess ( A, B_bus ) begin for i in 7 downto 0 loop C_bus (i) <= A and B_bus (i) ; end loop ;AB_bus (7) A... AB_bus (6)B_bus (0)C_bus (7)C_bus (6)C_bus (0)Sử dụng các lệnh LoopKhi 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ặpKhi 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 viCá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)

File đính kèm:

  • pptbai_giang_ngon_ngu_vhdl.ppt