1. Trang chủ
  2. » Giáo Dục - Đào Tạo

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

120 257 0

Đ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

Định dạng
Số trang 120
Dung lượng 1,09 MB

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

Nội dung

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

Trang 1

Bài 1

Vấn đề Mô hình hoá

phần cứng (Hardware Modeling)

Trang 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

Trang 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

Trang 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 hỗ trợ bởi một số tool

VHDL-87 VHDL-93

VHDL-2X

Trang 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

Trang 6

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

Trang 7

Sự chồng chéo trong VHDL

Behavioral

Logic RTL

Layout Place & Route Utility

FPGA Vendor Library Synthesizable Code

Trang 8

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

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

Trang 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

Trang 10

A[3:0] entity Add_4 B[3:0]

entity Full_Add

A B

entity

Cấu trúc Top - Down

Macro

Trang 11

VHDL modules

SDF (Standard Delay

Format)

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

Trang 12

VHDL modules

Synthesis

Place & Route

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

(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

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

Trang 15

Bài 2

Ngôn ngữ VHDL

Trang 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

Trang 17

Các loại Design Unit

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

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

• 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

Trang 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 đó

port (A, B : in std_logic ;

Carry, Sum : out std_logic) ;

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

Trang 19

architecture My_Arch of Half_Add is

begin Sum <= A xor B ; Carry <= A and B ;

Trang 20

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 ;

Trang 22

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 ;

declarationdetails

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

Trang 23

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

Trang 24

package std_logic_1164 is

package std_logic_arith is

package std_logic_unsigned is

library IEEE ;

Trang 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

Trang 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

Trang 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

Trang 28

Design Unit Identifier

entity HALF_ADD

entity DFF entity REG4 package My_Counters .

Trang 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 is

begin process (Clock, Reset) begin

If (Reset = ‘1’ ) then

Q <= ‘0’ ; elsif (Clock’event and Clock = ‘1’) then

Q <= D ; end if ; end process ; end architecture RTL ;

Clock

Reset

Ví dụ về Hierarchy : DFF

Trang 30

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

U0 U1 U2

REG_4

Ví dụ về Hierarchy : REG-4

Trang 32

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

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

Sig_1

Bus_1

A1 A2

A4

B3 B2

Trang 34

Clk Rst

U2

U1

U0

Cụ thể hoá phần tử

Trang 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

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;

 Lab Marker

Trang 36

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

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;

port ( Data_In: in std_logic_vector (Count_Width -1 downto 0);

Clk, Reset, Load, UpDn : in std_logic;

Q_Out: out std_logic_vector (Count_Width -1 downto 0));

end component ; begin

U0: My_Cntr generic map (Count_Width => 64)

port map (DATA_BUS, CLOCK, RST, LD, CNTRL, DATA_OUT ) ;

• • • •

end architecture RTL;

Trang 38

.

architecture

Trang 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

Trang 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

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

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

Trang 42

Bài 3

Signals và Data Types

Trang 43

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

Trang 44

entity REG_4 is

port (D_in1 : in std_logic_vector (3 downto 0);

Cntrl : in std_logic_vector (1 downto 0);

Clock, Reset : in std_logic;

Q_out : out std_logic_vector (3 downto 0));

end entity REG_4;

signal A : integer ; signal B : bit ;

signal C : integer ; signal D : std_logic ;

Trang 45

Các loại data type trong

• Defines pointers to objects

• covered in Advanced VHDL course

– File

• Sequence of objects of given type

• covered in Advanced VHDL course

Trang 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ó:

Trang 47

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

type boolean is (false, true) ;

architecture BEHAVE of MUX is

signal A,B,Sel, Z : bit ;

begin

if Sel = ‘1’ then

Z <= A ; else

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

thuyết

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

Trang 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

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ở

Trang 50

type std_ulogic is ( ‘U’, Uninitialized

– 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

Trang 51

signal A,B,C,Res_Out : std_logic ;

signal Out_1 : std_ulogic ;

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

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

Trang 52

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

Trang 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) is when LOAD =>

if COND_A and COND_B then

NEXT_STATE <= FETCH ;

else NEXT_STATE <= STOR ;

Trang 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” ;

Trang 55

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 ;

Trang 56

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

My_BusA My_BusB

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

Trang 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” ;

Trang 58

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

type OPCODE is record

PARITY : bit;

ADDRESS : std_logic_vector ( 0 to 3 );

DATA_BYTE : std_logic_vector ( 7 downto 0 );

NUM_VALUE : integer range 0 to 6;

STOP_BITS : bit_vector (1 downto 0);

end record ;

.

signal TX_PACKET, RX_PACKET : OPCODE;

.

T X _ P A C K E T

Records

Ngày đăng: 18/11/2017, 19:18

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w