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 1Nộ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 23.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 43.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 53.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 63.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 7Khai 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 83.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 103.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 113.1.1 Signal
Ví dụ về phạm vi tác động của signal
A
B
C
Trang 123.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 133.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 143.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 17So sánh giữa Signal & Variable
Trang 183.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 193.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 203.2 Các kiểu dữ liệu VHDL
Trang 213.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 22Kiể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 24Kiể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 26ENTITY 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 27Kiể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 28Kiể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 29PACKAGE 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 303.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 31Kiể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 32Kiể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 33Kiểu mảng (Array Types)
Trang 34Kiể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 35Kiể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 36Ví 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 37Ví 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 38Kiể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 39Kiể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 40Ví 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 41Kiể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 42Kiể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 43Kiể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 44Kiể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 45Kiể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 46Kiể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 47Kiể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 48VARIABLE 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 49Cá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 538. 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 57VHDL-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 58Tà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).