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

ĐIỆN tử VIỄN THÔNG 3 3 cac kieu du liu trong VHDL khotailieu

59 68 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 59
Dung lượng 646 KB

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

Nội dung

Signal Vị trí khai báo signal:  Phần khai báo của ENTITY  Phần khai báo của ARCHITECTURE  Phần khai báo của PACKAGE  Khai báo signal: SIGNAL name: mode type [:=initial_value] Không

Trang 1

Nội dung môn học

 3 Thiết kế mạch với ngôn ngữ VHDL.

 7 Máy hữu hạn trạng thái.

 8 Phương pháp thiết kế đa cấp (Packages, Components, Subprogram).

 9 Attibutes & Configurations.

 Thiết kế CPU.

Trang 2

3.2 - CẤU TRÚC MÃ LỆNH VHDL

use IEEE.std_logic_1164.all;

ENTITY Cong_And IS PORT (a,b, : in bit;

y :out bit);

END Cong_And;

Architecture dataflow of Cong_And is

begin

y <= a and b;

end dataflow;

LIBRARY ENTITY ARCHITECTURE

VHDL

BASIC

CODE

Trang 4

3.1 Các kiểu đối tượng

các loại sau:

 Signal: biểu diễn cho dây kết nối giữa

các cổng của các thành phần trong hệ thống.

 Variable: được sử dụng lưu trữ dữ liệu

nội bộ tạm thời, chỉ visible bên trong

process.

 Constant: hẳng số

Trang 5

3.1.1 Signal

 Các đối tượng signal được sử dụng

để kết nối - truyền thông giữa các entity nhằm tạo nên hệ thống.

Signal

Trang 6

3.1.1 Signal

 Phân loại:

 External Signal: là các tín hiệu kết nối

hệ thống với bên ngoài, tạo nên giao diện ghép nối của hệ thống với các hệ thống khác

 Internal Signal: là các tín hiệu chỉ

nhúng bên trong hệ thống, không nhìn thấy từ bên ngoài, tạo ra sự truyền

thông giữa các thành phần bên trong

hệ thống.

Trang 7

Khai báo trong Entity

Khai báo trong Architecture

ENTITY myboard IS

PORT ( [SIGNAL] a,b,c: inout bit;

data,extbus,result: inout bit_vector(0 to 7));

Trang 8

3.1.1 Signal

 Vị trí khai báo signal:

 Phần khai báo của ENTITY

 Phần khai báo của ARCHITECTURE

 Phần khai báo của PACKAGE

 Khai báo signal:

SIGNAL name: mode type [:=initial_value]

Không cần trong ENTITY Chỉ cần trong ENTITY

Trang 10

3.1.1 Signal

 Phạm vi tác động của khai báo signal:

 Một signal được khai báo trong PACKAGE thì

sử dụng được (visible) trong tất cả các thiết

kế sử dụng gói package này.

 Một signal được khai báo trong ENTITY thì sử dụng được (visible) trong tất cả các

ARCHITECTURE gắn với ENTITY này.

 Một signal được khai báo trong phần khai

báo của ARCHITECTURE thì chỉ sử dụng được trong architecture này.

 Một signal được khai báo trong 1 khối

(block) bên trong ARCHITECTURE thì chỉ sử dụng được bên trong khối đó.

Trang 11

3.1.1 Signal

 Ví dụ về phạm vi tác động của signal

A

B

C

Trang 12

3.1.1 Signal

 Một đặc điểm quan trọng của

signal khi được sử dụng bên trong một phần của mã tuần tự (vd

PROCESS, FUNCTION, PROCEDURE) là:

 Giá trị không được cập nhật ngay lập tức sau câu lệnh, mà phải đến kết

thúc đoạn mã tuần tự đó.

Trang 13

3.1.2 Biến (variable)

 Biến variable chỉ biểu diễn các dữ liệu nội bộ, chỉ có thể sử dụng bên trong PROCESS, FUNCTION, hoặc PROCEDURE.

 Giá trị của biến variable không thể truyền ra ngoài trực tiếp.

 Giá trị của biến được cập nhật trực tiếp sau từng dòng mã lệnh.

Trang 14

3.1.2 Biến (variable)

 Khai báo biến:

 VARIABLE name: type [range] [:= init_value];

VARIABLE control: BIT := '0';

VARIABLE count: INTEGER RANGE 0 TO 100;

VARIABLE y: STD_LOGIC_VECTOR (7 DOWNTO 0) := "10001000";

Trang 15

-PORT ( din: IN STD_LOGIC_VECTOR (7 DOWNTO 0); ones: OUT INTEGER RANGE 0 TO 8);

END count_ones;

ARCHITECTURE ok OF count_ones IS BEGIN

PROCESS (din) VARIABLE temp: INTEGER RANGE 0 TO 8; BEGIN

temp := 0;

FOR i IN 0 TO 7 LOOP

IF (din(i)='1') THEN temp := temp + 1;

Trang 16

-ARCHITECTURE not_ok OF mux IS

SIGNAL sel : INTEGER RANGE 0 TO 3;

BEGIN

PROCESS (a, b, c, d, s0, s1)

BEGIN

sel <= 0;

IF (s0='1') THEN sel <= sel + 1;END IF;

IF (s1='1') THEN sel <= sel + 2;END IF;

-PORT ( a, b, c, d, s0, s1: IN STD_LOGIC; 7y: OUT STD_LOGIC);

END mux;

ARCHITECTURE ok OF mux IS BEGIN

PROCESS (a, b, c, d, s0, s1) VARIABLE sel : INTEGER RANGE 0 TO 3; BEGIN

sel := 0;

IF (s0='1') THEN sel := sel + 1; END IF;

IF (s1='1') THEN sel := sel + 2; END IF; CASE sel IS

Trang 17

So sánh giữa Signal & Variable

Trang 18

3.1.3 Hằng số (Constant)

 Hằng số Constant là các tên được gán cho các giá trị cụ thể của 1 kiểu DL Sử dụng hằng số cho phép người thiết kế xây dựng mô hình dễ hiểu (better-

documented) và dễ thay đổi.

 Khai báo hằng số:

 CONSTANT name : type := value;

 Hằng số có thể khai báo trong package,

entity hoặc architecture Phạm vi tác động giống như tín hiệu signal.

Trang 19

3.1.3 Hằng số (Constant)

 Ví dụ về khai báo hằng số:

CONSTANT set_bit : BIT := '1';

CONSTANT pi: REAL := 3.1414;

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

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

Trang 20

3.2 Các kiểu dữ liệu VHDL

Trang 21

3.2.1 Kiểu dữ liệu vô hướng

 Kiểu dữ liệu vô hướng (Scalar Types):

 Integer types

 Real types

 Enumerated types

 Physical types

Trang 22

Kiểu số nguyên Integer

 Kiểu dl số nguyên 32 bit,

a := 1; Ok 1

a := -1; Ok 2

a := 1.0; error 3 END PROCESS;

END test;

Trang 24

Kiểu dữ liệu liệt kê

ENUMERATED

 Kiểu dữ liệu liệt kê rất hữu ích cho việc mô hình hóa trừu tượng, biểu diễn chính xác các giá trị cần cho tính toán.

TYPE bit IS ('0', '1');

TYPE bit_vector IS ARRAY (NATURAL RANGE <>) OF BIT;

TYPE fourval IS ( ‘X’, ‘0’, ‘1’, ‘Z’ );

TYPE state IS (idle, forward, backward, stop);

TYPE color IS ( red, yellow, blue, green, orange );

Trang 25

 Việc mã hóa các dữ liệu liệt kê

được thực hiện tuần tự và tự động

Ví dụ:

 TYPE color IS (red, green, blue, white);

 Có 4 dữ liệu liệt kê, dùng 2 bit biểu diễn, gán “00”=>red, “01”=>green,

“10”=>blue, “11”=>white.

Kiểu dữ liệu liệt kê

ENUMERATED

Trang 26

ENTITY traffic_light IS

PORT(sensor : IN std_logic;

clock : IN std_logic;

red_light : OUT std_logic;

green_light : OUT std_logic;

yellow_light : OUT std_logic);

END traffic_light;

-ARCHITECTURE simple OF traffic_light IS

TYPE t_state is (red, green, yellow);

Signal present_state, next_state : t_state;

ELSE next_state <= red;

END PROCESS;

END simple;

Trang 27

Kiểu dữ liệu PHYSICAL

 Kiểu dữ liệu Physical được dùng để biểu diễn các đại lượng vật lý như khoảng

cách, thời gian, dòng điện…

 Kiểu dữ liệu Physical không chỉ chỉ ra đối tượng mà còn chỉ ra cả các đơn vị

mà đối tượng đó có thể có.

TYPE current IS RANGE 0 to 1000000000 UNITS

na; nano amps

ua = 1000 na; micro amps

ma = 1000 ua; milli amps

a = 1000 ma; amps END UNITS;

Primary unit

Secondary units

Trang 28

Kiểu dữ liệu PHYSICAL

 VHDL chuẩn đã định nghĩa sẵn một kiểu dữ liệu physical đó là time:

TYPE TIME IS RANGE -2147483647 to 2147483647

Trang 29

PACKAGE example IS

TYPE current IS RANGE 0 TO 1000000000

UNITS

na; nano amps

ua = 1000 na; micro amps

ma = 1000 ua; milli amps

a = 1000 ma; amps END UNITS;

TYPE load_factor IS (small, med, big );

delay <= 10 ns WHEN (load = small) ELSE

delay <= 20 ns WHEN (load = med) ELSE

delay <= 30 ns WHEN (load = big) ELSE

delay <= 10 ns;

out_current <= 100 ua WHEN (load = small)ELSE out_current <= 1 ma WHEN (load = med) ELSE out_current <= 10 ma WHEN (load = big) ELSE out_current <= 100 ua;

END delay_calc;

Trang 30

3.2.2 Kiểu dữ liệu tổng hợp

 Kiểu dữ liệu tổng

hợp(CompositeTypes)

 Kiểu mảng (Array Types)

 Kiểu bản ghi (Record Types)

Trang 31

Kiểu mảng (Array Types)

 Kiểu dữ liệu mảng nhóm các phần tử

cùng kiểu với nhau như là 1 đối tượng đơn Các phần tử trong mảng được truy nhập bằng chỉ số.

 Ba loại mảng hay dùng:

1D

Trang 32

Kiểu mảng (Array Types)

 Thực tế, các kiểu dữ liệu định nghĩa sẵn trong VHDL chỉ bao gồm kiểu vô hướng

và vector (mảng một chiều của các bit)

 Các kiểu DL định nghĩa sẵn có thể tổng hợp bao gồm:

 Scalars: BIT, STD_LOGIC, STD_ULOGIC, and BOOLEAN.

 Vectors: BIT_VECTOR, STD_LOGIC_VECTOR, STD_ULOGIC_VECTOR, INTEGER, SIGNED, and UNSIGNED.

Trang 33

Kiểu mảng (Array Types)

Trang 34

Kiểu mảng (Array Types)

 Ví dụ về mảng 1Dx1D

 Ví dụ về mảng 2D

TYPE row IS ARRAY (7 DOWNTO 0) OF STD_LOGIC; 1D array

TYPE matrix IS ARRAY (0 TO 3) OF row; 1Dx1D array

SIGNAL x: matrix; 1Dx1D signal

-TYPE matrix IS ARRAY (0 TO 3) OF STD_LOGIC_VECTOR(7 DOWNTO 0);

TYPE matrix2D IS ARRAY (0 TO 3, 7 DOWNTO 0) OF STD_LOGIC;

2D array

Trang 35

Kiểu mảng (Array Types)

 Khởi tạo dữ liệu mảng:

 :="0001"; for 1D array

 :=('0','0','0','1') for 1D array

 :=(('0','1','1','1'), ('1','1','1','0')); for 1Dx1D or

2D array

Trang 36

Ví dụ về mảng 1D

PACKAGE array_example IS

TYPE data_bus IS ARRAY(0 TO 31) OF BIT; TYPE small_bus IS ARRAY(0 TO 7) OF BIT; END array_example;

USE WORK.array_example.ALL;

-ENTITY extract IS PORT ( data : IN data_bus;

FOR i IN 0 TO 7 LOOP data_out(i) <= data(i + start);

END LOOP;

END PROCESS;

END test;

Trang 37

Ví dụ về mảng 1Dx1D

LIBRARY IEEE;

USE IEEE.std_logic_1164.ALL;

PACKAGE memory IS

CONSTANT width : INTEGER := 3;

CONSTANT memsize : INTEGER := 7;

TYPE data_out IS ARRAY(0 TO width)

PORT( addr : IN INTEGER;

PORT( data : OUT data_out;

PORT( cs : IN std_logic);

END rom;

ARCHITECTURE basic OF rom ISCONSTANT z_state : data_out := (‘Z’, ‘Z’, ‘Z’, ‘Z’);

CONSTANT x_state : data_out := (‘X’, ‘X’, ‘X’, ‘X’);

CONSTANT rom_data : mem_data :=

( ( ‘0’, ‘0’, ‘0’, ‘0’),( ( ‘0’, ‘0’, ‘0’, ‘1’),( ( ‘0’, ‘0’, ‘1’, ‘0’),( ( ‘0’, ‘0’, ‘1’, ‘1’),( ( ‘0’, ‘1’, ‘0’, ‘0’),( ( ‘0’, ‘1’, ‘0’, ‘1’),( ( ‘0’, ‘1’, ‘1’, ‘0’),( ( ‘0’, ‘1’, ‘1’, ‘1’) );

BEGINASSERT addr <= memsizeREPORT “addr out of range”

Trang 38

Kiểu mảng không ràng

buộc

 Kiểu mảng không ràng buộc về

kích thước (Unconstrained arrays):

 Kích thước mảng không được chỉ ra khi khai báo.

 Kích thước mảng sẽ được chỉ ra khi khai báo signal/variable/constant sử dụng kiểu mảng này.

TYPE BIT_VECTOR IS ARRAY(NATURAL RANGE <>) OF BIT;

Trang 39

Kiểu dữ liệu con subtype

 Khai báo kiểu dữ liệu con được sử dụng để định nghĩa các tập con của một kiểu dữ liệu Tập con có thể chứa tòan bộ khoảng giá trị

của kiểu cơ sở những cũng có thể chỉ chứa một phần.

TYPE INTEGER IS -2,147,483,647 TO +2,147,483,647;

SUBTYPE NATURAL IS INTEGER RANGE 0 TO +2,147,483,647;

Trang 40

Ví dụ về khai báo subtype

PACKAGE mypack IS

SUBTYPE eightbit IS BIT_VECTOR(0 TO 7);

SUBTYPE fourbit IS BIT_VECTOR(0 TO 3);

FUNCTION shift_right(val : BIT_VECTOR) RETURN BIT_VECTOR;

END mypack;

-PACKAGE BODY mypack IS

FUNCTION shift_right(val : BIT_VECTOR) RETURN BIT_VECTOR

IS VARIABLE result : BIT_VECTOR(0 TO (val’LENGTH -1));

BEGIN

result := val;

IF (val’LENGTH > 1) THEN FOR i IN 0 TO (val’LENGTH -2) LOOP result(i) := result(i 1);

END LOOP;

result(val’LENGTH -1) := 0;

ELSE result(0) := 0;

END IF;

RETURN result;

END shift_right;

END mypack;

Trang 41

Kiểu bản ghi record

tượng có kiểu khác nhau như một đối tượng duy nhất.

được truy cập bằng tên trường của nó.

cùng kiểu hoặc khác kiểu dữ liệu Kiểu

dữ liệu có thể bao gồm cả mảng và

bản ghi.

Trang 42

Kiểu bản ghi record

 Ví dụ về kiểu bản ghi:

TYPE optype IS ( add, sub, mpy, div, jmp ); TYPE instruction IS

RECORD opcode : optype;

src : INTEGER;

dst : INTEGER;

END RECORD;

Trang 43

Kiểu bản ghi record

PROCESS(X) VARIABLE inst : instruction;

VARIABLE source, dest : INTEGER; VARIABLE operator : optype;

BEGIN source := inst.src; Ok line 1 dest := inst.src; Ok line 2 source := inst.opcode; error line 3 operator := inst.opcode; Ok line 4 inst.src := dest; Ok line 5

inst.dst := dest; Ok line 6 inst := (add, dest, 2); Ok line 7 inst := (source); error line 8 END PROCESS;

TYPE optype IS ( add, sub,

Trang 44

Kiểu bản ghi record

TYPE word IS ARRAY(0 TO 3) OF

packet.addr.key := 5; Ok packet.addr := (10, 20); Ok packet.data(0) := (‘0’, ‘0’, ‘0’, ‘0’); packet.data(10)(4) := ‘1’; error packet.data(10)(0) := ‘1’; Ok END PROCESS;

Trang 45

Kiểu dữ liệu File

 Các file bao gồm các dãy tuần tự của một kiểu dữ liệu (có thể là

INTEGER, record…)

 Cuối mỗi file được đánh dấu kết thúc bằng ký tự “End of file”.

Trang 46

Kiểu dữ liệu File

 Các thao tác thực hiện với file:

 READ (file, data)Procedure

 WRITE (file, data)Procedure

 ENDFILE (file)Function, returns boolean

Trang 47

Kiểu dữ liệu File

 Khai báo kiểu file:

 TYPE int_file IS FILE OF INTEGER;

 Khai báo đối tượng file:

 FILE myfile : int_file IS IN

“/test/data_file”

Trang 48

VARIABLE rom_data : dtype; line 4 VARIABLE i : INTEGER := 0; line 5 BEGIN

IF (rom_init = false) THEN line 6 WHILE NOT ENDFILE(rom_data_file) line 7 AND (i < 64) LOOP

READ(rom_data_file, rom_data(i)); line 8

i := i + 1; line 9 END LOOP;

rom_init := true; line 10 END IF;

IF (cs = ‘1’) THEN line 11 data <= rom_data(addr); line 12 ELSE

data <= -1; line 13 END IF;

END PROCESS;

END rom;

Trang 49

Các kiểu DL có thể tổng hợp

Trang 51

Đề tài môn học Thiết kế nhờ

MT

Nhóm: 6 người/nhóm

Trang 52

Đề tài môn học Thiết kế nhờ

MT

 Đề tài có 2 phần:

 Phần 1: Nghiên cứu ví dụ về viết CPU

trong tài liệu “VHDL Programming by

Example 4th Ed” – Douglas L.Perry.

 Phần 2: Thực hiện 1 trong các đề tài sau:

Trang 53

8. MIPS I (YACC-Yet Another CPU) – Verilog.

9. Yellow Star (MIPS R3000) – Verilog.

10. OpenRISC 1000 (32/64bit RISC).

Trang 55

 Chú ý:

Nên làm cùng môn đồ án FPGA.

Trang 56

Đề tài phần 3 (ko làm)

 Nghiên cứu,tìm hiểu ngôn ngữ AMS.

Trang 57

VHDL-Yêu cầu:

 Báo cáo:

 Tìm hiểu và xây dựng lại sơ đồ khối của vđk Phân tích kỹ từng khối Thực hiện test kiểm nghiệm hoạt động.

 Tìm hiểu hoạt động trong 1 chu kỳ

đồng hồ.

 Nói rõ công việc từng người.

Trang 58

Tài liệu tham khảo

Trang 59

 Lịch bảo vệ: 17/11

 30% điểm – Không bảo vệ -> ko thi L1

 Nếu làm tốt => +10 điểm vào bài thi

 Địa điểm: bộ môn KTMT C1-322.

 Thời gian: 8h – 17h

 Y/c: Mang slide + Mã nguồn + Tài liệu TK

mô phỏng).

Ngày đăng: 12/11/2019, 13:23

TỪ KHÓA LIÊN QUAN

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

w