1. Trang chủ
  2. » Luận Văn - Báo Cáo

Báo cáo đề tài sinh viên đề tài báo cáo mạch số bằng VHDL

30 398 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 30
Dung lượng 135,55 KB

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

Nội dung

Cấu trúc ngôn ngữ cơ bản của VHDL gồm: - Đối tượng: Quy định các dạng tín hiệu cố định, tín hiệu, cổng vào - ra, hay tín hiệu đệm … - Các kiểu dữ liệu: Quy định các kiểu dữ liệu có thể đ

Trang 1

BÁO CÁO ĐỀ TÀI SINH VIÊN

ĐỀ TÀI:BÁO CÁO MẠCH SỐ BẰNG VHDL

Mã số: -ĐT-SV-2011

I Giới thiệu chung về công nghệ logic khả trình CPLD/FPGA

II Tìm hiểu ngôn ngữ mô tả phần cứng VHDL

VDHL là ngôn ngữ mô tả phần cứng cho các kiểu mạch số trong phạm vị các kết nối đơn giản của các cổng đến những hệ thống phức tạp VHDL là viết tắt của VHSIC Hardware Description Language và VHSIC là viết tắt của Very High Speed Integrated Circuits Ở đây,chúng ta chỉ tóm tắt ngắn gọn nguyên lý cơ bản của VHDL và cú pháp của nó Nhiều chức năng cao cấp của ngôn ngữ VHDL có thể đã bị bỏ qua

VHDL cho phép mô tả được hầu hết các hệ thống phần cứng số Các mô hình trừu tượng gồm :

Mô hình hành vi (a Model of Behaviour).

Mô hình thời gian (a Model of Time).

Mô hình cấu trúc (a Model of Structure).

Việc nắm chắc cấu trúc,cú pháp các mô hình mô tả của ngôn ngữ là rất quan trọng.

VHDL cũng có nhiều điểm giống như một ngôn ngữ lập trình bậc cao, có cấutrúc, có cú pháp riêng, có cách tổ chức chương trình, có từ khóa, có phương pháp biểudiễn số liệu riêng

Cấu trúc ngôn ngữ cơ bản của VHDL gồm:

- Đối tượng: Quy định các dạng tín hiệu cố định, tín hiệu, cổng vào - ra, hay

tín hiệu đệm …

- Các kiểu dữ liệu: Quy định các kiểu dữ liệu có thể được dùng để gán cho

mỗi đối tượng

- Các phép toán: Quy định các phép toán sử dụng cho mỗi loại dữ liệu.

- Các đơn vị thiết kế: Các thành phần cơ bản cấu trúc lên một chương trình mã

mô tả dùng VHDL

Trang 2

- Các cấu trúc lệnh tuần tự: Cấu trúc câu lệnh thực hiện theo tiến trình tuần

tự, thường dùng mô tả các cấu trúc mạch tuần tự của mạch số

- Các cấu trúc lệnh song song: Cấu trúc câu lệnh thực hiện song song, thường

dùng mô tả các cấu trúc mạch tổ hợp

1 Cấu trúc cơ bản của ngôn ngữ lập trình VHDL.

Cấu trúc cơ bản của một chương trình mô tả bằng VHDL

—khai báo thư viện

Khai báo các tham số generic nếu cần:

Generic( khai báo danh sách các tham số);

Port( Khai báo danh sách các cổng vào/ra

);

End Tên_thực_thể;

Bắt đầu viết

Architecture Tên_kiến_trúc of Tên_thực_thể is

{Khai báo:kiểu dữ liệu, các component,các đối tượng constant, signal} Begin

{ Viết các mô tả dùng cấu trúc lệnh song song }

Process( danh sách tín hiệu kích thích nếu cần)

{Khai báo:kiểu dữ liệu, các đối tượng biến constant, variable }

Trang 3

architecture Behavioral of mach is

signal e,g :std_logic;

begin

e<=a and b;

g<= c xor d;

Trang 4

f<=e or g;

end Behavioral;

2.Các đơn vị thiết kế trong VHDL

VDHL sử dụng 6 đơn vị thiết kế gồm 2 loại: đơn vị cơ bản và đơn vị thiết kế thứ cấp:

Đơn vị thiết kế cơ bản:

Library: Cho phép tạo thư viện trong VHDL

Package: Tạo các gói giữ liệu trong Library, như các khai báo các đối tượng,khai

báo thủ tục, hàm

Entity: (Thực thể) - cho phép khai báo các giao diện của một khối thiết kế số nào

đó: như khai báo các cổng vào/ra, các tham số của khối mạch

- Đơn vị thiết kế thứ cấp (Phụ thuộc vào một đơn vị thiết kế cơ bản):

Architecture: Mô tả hoạt động bên trong của một Entity hay đây chính là phần

mô tả hoạt động của khối mạch số

Package Body: Mô tả chỉ tiết cho các khai báo trong Package như viết các hàm,

các thủ tục

Configuration: Đơn vị thiết kế cấu hình cho phép gắn các phiên bản của thực thể vào

những kiến trúc khác nhau Cấu hình cũng có thể được sử dụng để thay thế một cách nhanh chóng các phần tử của thực thể trong các biểu diễn cấu trúc của thiết kế

2.1 Library (thư viện).

Trong VHDL có các thư viện thiết kế chuẩn,ví dụ:

library IEEE;

use IEEE.STD_LOGIC_1164.ALL; thư viện chuẩn.

use IEEE.STD_LOGIC_ARITH.ALL; thư viện toán học

use IEEE.STD_LOGIC_UNSIGNED.ALL; thư viện chuẩn hỗ trợ thực hiện các phép

tính không dấu.

Ngoài ra người thiết kế có thể tạo các thư viện thiết kế riêng

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 để

sử dụng trong các thiết kế khác.Một thư viện thiết kế có thể chứa các thư viện như sau:

Trang 5

-Các đóng gói (packages):chứa những mô tả khai báo được dùng chung.

-Các thực thể Entity:những mô tả giao diện thiết kế được dùng chung.

-Các kiểu kiến trúc Architectures:những mô tả hoạt động thiết kế được dùng chung.

-Các phép định cấu hình Configiration:những phiên bản của thực thể được dùng chung.

Lưu ý:VHDL không hỗ trợ các thư viện theo thứ bậc,chúng ta có thể có nhiều thư viện nhưng không được khai báo lồng nhau.

Ví dụ cách gọi và sử dụng thư viện:

2.2 Package và Package Body.

Package: Là đơn vị thiết kế cơ bản dùng để chứa những khai báo cho các đối

tượng, khai báo thủ tục procedure, hàm function, kiểu dữ liệu, component có thểdùng chung cho những thiết kế, cấu trúc, dự án khác nhau …

Package Body : là đơn vị thiết kế phụ thuộc được dùng để chứa những mô tả chỉ tiết cho các khai báo trong đơn vị thiết kế Package nào đó, mô tả chi tiết nội dung của các

hàm, các thủ tục

Package Body thường được viết ngay sau Package.

Cú pháp khai báo của Package như sau:

Trang 6

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

Cú pháp của mô tả cấu hình như sau:

Configuration tên_cấu_hình of tên_thực_thể is

Phần khai báo của cấu hình (cho phép sử dụng

Trang 7

các phần tử trong package và library.

Trang 8

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ể đú.

Cú pháp khai báo của một Entity nh sau:

Entity entity_name is

[generic(generic_declaration);]

[port (port_declaration);]

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

2.4.1 Generic

Tham số khai bỏo trong phần generic dựng để kiểm soỏt, thay đổi cấu trỳc, hoạt

động của thực thể, chỳng sẽ được truyền giỏ trị hoặc lấy giỏ trị mặc định ban đầu khithực thể được khởi tạo Tham số này rất hữu ớch khi thiết kế theo kiểu cấu trỳc, sẽ sửdụng nhiều thành phần cấu trỳc cựng kiểu như khai bỏo của ENTITY nhưng cútham số về cấu trỳc, hoạt động khỏc nhau

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.

Trang 9

SUM

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

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.

2.4.3 Ví dụ về khai báo Entity:

Hình trên 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

Trang 10

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ả giaodiện này nh sau:

Entity FULL_ADDER is

port ( A, B, CIN : in BIT;

SUM, COUT : out BIT );

End FULL_ADDER ;

2.5 Architecture

Cấu trỳc này cho phộp mụ tả hoạt động bờn trong của thực thể Cỳ phỏp chung của một Architecture:

Architecture Tờn_kiến_trỳc of Tờn_thực_thể is

Thực hiện cỏc khai bỏo cho kiến trỳc

mụ tả trờn để thực hiện cho từng thành phần con tương ứng của hệ thống số

2.5.1 Cỳ phỏp cho mụ hỡnh luồng dữ liệu (RTL) :

ARCHITECTURE architecture-name OF entity-name

IS

signal-declarations; khai bỏo tớn hiệu

BEGIN

concurrent-statements;

Trang 11

END architecture-name;

Những phát biểu concurrent được thực hiện một cách đồng

thời Ví dụ ARCHITECTURE Siren_RTL OF Siren IS

SIGNAL term_1: STD_LOGIC;

BEGIN

term_1 <= D OR V;

S <= term_1 AND M;

END Siren_RTL;

2.5.2 Cú pháp cho behavioral model :

ARCHITECTURE architecture-name OF entity-name

concurrent-Những câu lệnh bên trong process-block được thực hiện tuần tự, liên tục Tuy nhiên chính

process-block là concurrent-statements

Ví dụ : ARCHITECTURE Siren_Behavioral OF Siren IS

SIGNAL term_1: STD_LOGIC;

BEGIN

PROCESS (D, V, M) BEGIN

term_1 <= D OR V;

S <= term_1 AND M;

END PROCESS;

Trang 12

END Siren_Behavioral;

2.2.3 Cú pháp của structural model :

ARCHITECTURE architecture-name OF entity-name

Ví dụ : ARCHITECTURE Siren_Structural OF Siren IS

COMPONENT myOR PORT (

in1, in2: IN STD_LOGIC;

out1: OUT STD_LOGIC);

END COMPONENT;

SIGNAL term1: STD_LOGIC;

BEGINU0: myOR PORT MAP (D, V, term1);

S <= term1 AND M;

END Siren_Structural;

3 Đối tượng trong VHDL.

Trang 13

Trong ngôn ngữ VHDL gồm có 4 đối tượng là: tín hiệu signal, biến variable, hằng - constant, tham số chung – generic Mỗi đối tượng được khai báo

-dựa vào từ khóa tương ứng và chúng có mục đích sử dụng khác nhau

3.1 Signal-tín hiệu

Là đối tượng để biểu diễn đường kết nối các giữa các cổng vào/ra của thực thể(mạch số), giữa các cổng vào/ra của các khối thành phần phần cứng bên trongmạch số… Chúng là phương tiện truyền dữ liệu động giữa các thành phần của mạchsố

Tín hiệu có tính toàn cục rất cao, chúng có thể được khai báo trong package, Entity ,Architecture Các tín hiệu có thể được sử dụng nhưng không được khai báo trong process, proceduce, function, vì tiến trình và thủ tục, hàm là thành phần cơ sở

của mô hình và chúng được coi như các hộp đen

Cú pháp khai báo tín hiệu như sau:

Signal tên_tín_hiệu {,tên_tín_hiệu}:kiểu_dữ_liệu [:=giá_trị_khởi_tạo];

Ví dụ: Signal a,b,c: Bit:=’1’; Giá trị khởi tạo là ‘1’;

Signal y, reg: std_logic_vector(3 downto 0):=”0000”;

3.2 Variable-biến:

Là đối tượng cục bộ được sử dụng để chứa các kết quả trung gian Biến chỉđược khai báo và sử dụng trong process và trong procedure và function

Cú pháp khai báo biến cũng tương tự :

variable tên_biến {,tên_biến}: kiểu_dữ_liệu [:=giá_trị_khởi_tạo];

Ví dụ: variable x : Bit:=’1’;

variable Q: std_logic_vector(3 downto 0);

Nếu không được khởi tạo giá trị ban đầu biến sẽ nhận giá trị ban đầu là giá trịthấp nhất trong các giá trị thuộc miền xác định của kiểu dữ liệu

3.3 Constant-hằng

đối tượng hằng được gán cho các giá trị cụ thể của một kiểu dữ liệu khi được tạo ra vàkhông đổi trong toàn bộ quá trình thực hiện Hằng có thể dùng để mô tả cho tín hiệu không đổi (ví dụ tín hiệu GND, VCC,…) Hằng cũng có tính toàn cục giống như

tín hiệu và có thể được khai báo trong package, entity, architecture, proceduce, function, process…

Trang 14

constant datamemory : memory := (('0','0','0','0'),

('0','0','0','1'), ('0','0','1','1'));

3.4 Generic –tham số dựng chung

: Dựng để khai bỏo tham số cho mụ hỡnh mạch số, và chỉ được khỏi bỏo trong

phần Entity

Cỳ phỏp khai bỏo tham số dựng chung:

Generic(Tờn_tham_số {, Tờn_tham_số}: kiểu_dữ_liệu :=giỏ_trị_khởi_tạo);

Túm l ạ i: Cỏc đối tượng trong VHDL cú mục đớch sử dụng, phạm vi sử dụng khỏc

nhau, nhưng chỳng cú cỳ phỏp khai bỏo chung như sau:

Đối_tượng tờn_đối_tượng : kiểu_dữ_liệu {:=giỏ_trị_khởi_tạo}

4 Kiểu dữ liệu trong VHDL

Tất cả các đối tợng dữ liệu trong VHDL cần phải đợc định nghĩa với một kiểudữ liệu Một khai báo kiểu phải chỉ ra tên và dải của kiểu đó Khai báo kiểu dữ liệuchúng đợc phép khai báo trong phần khai báo các đóng gói, trong phần khai báoEntity, trong phần khai báo kiến trúc, trong phần khai báo các chơng trình con vàtrong phần khai báo các Process

Cỳ phỏp chung biểu diễn kiểu dữ liệu trong VHDL như sau:

Type Tờn_kiểu is giới_hạn_giỏ_trị_của_kiểu;

4.1 Bit và Bit_vector :

Loại Bit và Bit_vector được xỏc định trước trong VHDL Đối tượng của những loại này là giỏ trị „0‟ và „1‟ Loại Bit_vector là một vector đơn giản của loại Bit Một vector với tất cả cỏc bit cú cựng giỏ trị cú thể được biểu diễn bằng từ khúa

Trang 15

USE IEEE.STD_LOGIC_SIGNED.ALL; cho số có dấu

USE IEEE.STD_LOGIC_UNSIGNED.ALL; cho số không dấu

Một vector mà tất cả các bit có giá trị giống nhau có thể được biểu diễn ngắn gọn bằng cách sử dụng từ khóa “others” với cú pháp sau:

USE IEEE.STD_LOGIC_1164.ALL;

Trang 16

Loại Integer được xác định trước để định nghĩa các đối tượng số nhị phân dùng với tính toán số học Mặc định 1 tín hiệu khai báo Integer dùng tối đa 32 bit để chỉ một ký hiệu số Integers cũng có thể dùng ít bit hơn với khai báo từ khóa RANGE.

4.5 Bảng liệt kê Type

Một bảng liệt kê cho phép người dùng chỉ rõ những giá trị mà đối tượng dữ liệu có thể có.

Cú pháp: TYPE indentifier IS (trị 1,trị 2,…)

Ví dụ: TYPE state_type IS( S1,S2,S3);

Signal state: state_type;

State <=S1;

4.6 Array :

Loại ARRAY nhóm các đối tượng dữ liệu riêng lẻ của cùng một loại thành một mảng một chiều hay nhiều chiều.

Cú pháp : TYPE identifier IS ARRAY (range) OF type;

Ví dụ : TYPE byte IS ARRAY(7 DOWNTO 0) OF BIT;

TYPE memory_type IS ARRAY(1 TO 128)

OF byte; SIGNAL memory: memory_type;

memory(3) <= "00101101";

SUBTYPE là tập hợp con của một loại mà loại đó có sự ràng buộc về phạm vi.

Ví dụ : SUBTYPE integer4 IS INTEGER RANGE –8 TO 7;

SUBTYPE cell IS STD_LOGIC_VECTOR(3 DOWNTO 0);

TYPE memArray IS ARRAY(0 TO 15) OF cell;

5 Các phép toán trong VHDL

Trang 17

5.1 Toán tử logic

Toán tử logic gồm có: and, or, nand, nor, xor, not, xnor được sử dụng cho các

dạng dữ liệu là bit, boolean, bit_vector, std_logic_vector

Chú ý:

Toán tử logic dùng cho kiểu dữ liệu mảng có nguyên tắc thực hiện như sau:

+ Chỉ thực hiện với các mảng cùng kiểu, cùng độ lớn

+ Phép toán logic thực hiện với từng phần tử của mảng và theo thứ tự từ trái sang phải

+ Toán tử not có độ ưu tiên cao nhất

- Nguyên tắc thực hiện phép quan hệ với dữ liệu mảng:

+ Các mảng phải cùng kiểu, độ dài có thể khác nhau

+ Mảng có độ dài khác nhau thì phép quan hệ thực hiện ưu tiên phần tử từ trái sang phải và so sánh theo giá trị ASCII

Trang 18

5.3 Toán tử số học

* Phép nhân (multiplication (integer or floating point)) a * b

/ Phép chia ( division (integer or floating point)) a / b

MOD Lấy phần dư, dấu theo b ( modulus (integer)) a MOD b

REM Lấy phần dư, dấu theo a (remainder (integer)) a REM b

Toán tử quan hệ (Relational Operators)

Các toán tử số học là: +, -, *, /, abs (trị tuyệt đối), ** (hàm mũ)

5.4 Toán tử dịch:

Trang 19

Toán tử dịch là toán tử tác động lên toán hạng kiểu Bit_vector để tạo ra các phép dịch hoặc quay dữ liệu Cú pháp của toán tử dịch:

Toán_hạng_trái Toán_Tử_dịch Toán hạng phải;

Trong đó: <Toán_hạng_trái> phải là kiểu Bit_vector sẽ được dịch hoặc quay dữ liệu, <Toán_hạng_phải> xác định số vị trí được dịch hoặc quay và phải có kiểu số nguyên mang giá trị dương hoặc âm, nếu là giá trị âm sẽ chỉ ra hướng ngược lại với giá trị dương Mỗi phép dịch cho kết qủa cùng dạng và kích thước với toán hạng ban đầu

sll Dịch trái logic (shift left logical)

srl Dịch phải logic (shift right logical)

sla Dịch trái số học (shift left arithmetic)

sra Dịch phải số học (shift right arithmetic)

rol Xoay trái (rotate left)

ror Xoay phải (rotate right)

Ví dụ: signal A_vec : bit_vector (7 downto 0) := “11000110”;

signal D_vec : bit_vector (7 downto 0);

5.5 Toán tử ghép nối

Toán tử ghép nối “&” cho phép ghép nối một cách linh hoạt các dữ liệu đơn và

dữ liệu dạng mảng thành các mảng lớn hơn

Ví dụ: signal A_vector, B_vector: std_logic_vector (7 downto 0);

signal Z_vector: std_logic_vector (15 downto 0);

Z_vector <= A_vector & B_vector;

5.6 Toán tử tách

Toán tử tách cho phép ta lấy ra một số thành phần của mảng, chiều chỉ số củaphép tách phải cùng chiều đánh chỉ số đã định nghĩa cho mảng

Ví dụ: signal Z_vec: std_logic_vector (15 downto 0);

signal B_vec: std_logic_vector (7 downto 0);

B_vec <= Z_vec (12 downto 5);

5.7 Toán tử thuộc tính

Ngày đăng: 26/10/2014, 20:33

HÌNH ẢNH LIÊN QUAN

Hình trên 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 - Báo cáo đề tài sinh viên đề tài báo cáo mạch số bằng VHDL
Hình tr ên 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 (Trang 9)

TỪ KHÓA LIÊN QUAN

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

w