I > Giới Thiệu đềtài 4
II> KHÁI QUÁT VỀ RISCVÀ CISC 5
III> TẬP LỆNH 6
IV > PIPELINE PROCESSING 12
V> SƠ ĐỒ KHỐI CỦA THIẾT KẾRISC14
VI> THIẾT KẾ ĐƯỜNG DỮLIỆU (DATAPATH) 16
VII> THIẾT KẾ ĐƠN VỊ ĐIỀU KHIỂN (CONTROL UNIT) 25
VIII> CHƯƠNG TRÌNH VHDL VÀ KẾT QUẢMÔ PHỎNG28
65 trang |
Chia sẻ: lethao | Lượt xem: 2117 | Lượt tải: 5
Bạn đang xem trước 20 trang tài liệu Đồ án Thiết kế Risc Microcontroller dùng VHDL, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
dụng), Data bus, giá trị hằng số
cho trong từ lệnh, giá trị 01H (được sử dụng trong lệnh INC, DEC) . Tín hiệu BSEL có 2 bit để
điều khiển chọn giá trị nạp cho tóan hạng B (xem bảng 6.1).
Hình 6.9 Đơn vị tìm nạp tóan hạng
ASEL ORA BSEL ORB
00 RA 00 RB
01 Not RA 01 Data Bus
10 00h 10 Immediate
11 Data Bus 11 01h
Bảng 6.1: tìm nạp tóan hạng
5.2 Đơn vị thao tác lệnh
Như đã đề cập, ALU phải thực thi 5 nhóm lệnh(ADD, SUBCP, RIGHT, DIR,
LOGIC) Nên đơn vị thao tác lệnh cũng được chia thành 4 khối chức năng nhỏ mỗi khối đảm
nhiệm 1 thao tác riêng và có các đường điều khiển riêng: đơn vị tóan học, đơn vị logic, đơn vị
dịch, đơn vị định hướng dữ liệu.
Đơn vị tóan học thưc hiện phép cộng, trừ trên 2 tóan hạng, có tín hiệu điều
khiển ADD nếu ADD = 1 thực hiện phép cộng, ngược lại thực hiện phép trừ, tín hiệu WCARRY
cho phép có sử dụng cờ nhớ vào hay không(xem bảng 6.2).
RA
NOT RA
0000 0000
Data Bus
ORA
ASEL (1..0)
RB
Data Bus
Immediate
0000 0001
ORB
BSEL (1..0)
ĐAMH Điện Tử Viễn Thông II ___________________________________ GVHD: Hồ Trung Mỹ
_____________________________________*******______________________________________
Thiết kế RISC microcontroller _________________________________ SVTH: Phạm Hưng Thịnh
_____________________________________*******______________________________________
23
Đơn vị Logic thực thi các lệnh logic cơ bản.trên ORA, ORB như AND, OR,
EXOR, và NOT ORA. Được điều khiển bởi tín hiệu LOGICSEL (xem bảng 6.2).
Đơn vị dịch thực thi các lệnh dịch bit tác động lên tóan hạng ORA như: dich
trái, xoay, dịch trái số học. Được điều khiển bởi tín hiệu LOGICSEL (xem bảng 6.2).
Đơn vị định hướng dữ liệu (DIR) thực hiện việc kết nối dữ liệu vào và ra với
bit điều khiển DIR. Nếu DIR =’0’ thì kết quả là ORB, ngược lại kết quả là SWAP ORA.
Kết quả thực thi của ALU sẽ được chọn từ kết quả của các đơn vị con này
dựa trên tín hiệu điều khiển ALU_SEL.
ALU_SEL Group Instruction Extra Signal WRE ORA ORB Flags
ADD ADD 9 HSVNZC
ADC WCARRY 9 HSVNZC
00 ADD
INC ADD 9 One SVNZC
SUB 9 HSVNZC
SUBI 9 Imm HSVNZC
SBC WCARRY 9 HSVNZC
SBCI WCARRY 9 Imm HSVNZC
CP HSVNZC
CPC WCARRY HSVNZC
CPI Imm HSVNZC
DEC 9 One SVNZ
00 SUBCP
COM ADD 9 Not RA 1 HSVNZC
AND LOGICSEL = 00 9 SVNZC
ANDI LOGICSEL = 00 9 Imm SVNZC
OR LOGICSEL = 01 9 SVNZC
ORI LOGICSEL = 01 9 Imm SVNZC
EOR LOGICSEL = 10 9 SVNZC
01 LOGIC
NEG LOGICSEL = 11 9 SVNZC
LSR RIGHTSEL = 00 9 SVNZC
ROR RIGHTSEL = 01 9 SVNZC
10 RIGHT
ASR RIGHTSEL = 10 9 SVNZC
MOV DIRSEL = 0 9
LDI DIRSEL = 0 9 Imm
11 DIR
SWAP DIRSEL = 1 9
WRE là tín hiệu cho phép kết quả ghi ngược lại thanh ghi đích
ORA,ORB mặc định là 2 thanh ghi tóan hạng RA, RB
Bảng 6.2 nhóm lệnh cơ bản của ALU
ĐAMH Điện Tử Viễn Thông II ___________________________________ GVHD: Hồ Trung Mỹ
_____________________________________*******______________________________________
Thiết kế RISC microcontroller _________________________________ SVTH: Phạm Hưng Thịnh
_____________________________________*******______________________________________
24
5.3 Đơn vị cập nhật cờ trạng thái
Đơn vị này có chức năng cập nhập cờ trạng thái theo kết quả lệnh đươc thực
hiện. ALU sẽ gửi giá trị của 5 cờ trạng thái tới cho SR. Tuy nhiên việc cập nhật các cờ này còn
phải phụ thuộc vào lệnh đang thực thi là lệnh nào nên SR cũng nhận các cho phép cập nhật cờ
tương úng từ đon vị giải mã lệnh.
Các giá trị cập nhật của cờ:
Cờ Z lên 1 khi kết qủa phép tính bằng 0.
Cờ N (Negative) có giá trị trùng với bit MSB của kết quả phép tính.
Cờ V được cập nhật khi thực hiện nhóm lệnh số học, và được xóa khi gặp
lệnh LOGIC, hàm bool của cờ V = N-flag xor C-flag.
Cờ C được cập nhật khi thực hiện nhóm lệnh số học, là cờ nhớ của lệnh cộng,
trừ
Cờ H cập nhật khi gặp lệnh số học. H= A3B3 + B3(C3’ ) + (C3)’A3 vói A là
ORA, B là ORB và C là kết quà.
ĐAMH Điện Tử Viễn Thông II ___________________________________ GVHD: Hồ Trung Mỹ
_____________________________________*******______________________________________
Thiết kế RISC microcontroller _________________________________ SVTH: Phạm Hưng Thịnh
_____________________________________*******______________________________________
25
VII> THIẾT KẾ ĐƠN VỊ ĐIỀU KHIỂN (CONTROL UNIT)
Đơn vị điều khiển có nhiệm vụ nhận mã lệnh thực thi từ IR vào để giải mã,
tạo ra các tín hiệu điều khiển cho các đơn vị của đường dữ liệu(datapath) để nó thực thi chính xác
các chức năng của lệnh đang được thực thi. Đơn vị Điều khiển được chia làm 2 đơn vị con: đơn vị
giải mã lệnh và đơn vị điều khiển thực thi.
Đơn vị giải mã lệnh sẽ tạo ra các tín hiệu điều khiển xác lập các chức năng cụ
thể từng đơn vị của đương dữ liệu phù hợp với lệnh đang thực thi. Đơn vị điều khiển thực thi sẽ
tạo ra các tín hiệu điều khiển đồng bộ để điều khiển các đơn vị hoạt động theo đúng thứ tự.
1. Đơn vị giải mã lệnh
Đơn vị giải mã lệnh là 1 hệ tổ hợp có đầu vào là mã máy và ra các tín
hiệu điều khiển, dùng để xác lập các chức năng cụ thể từng đơn vị của đường dữ liệu phù hợp với
lệnh đang thực thi. Ứng với 1 giá trị mã máy đầu vào nó sẽ cho 1 tổ hợp các tín hiệu điều khiển
ngỏ ra xác định. Bảng 7.1 liệt kê các tín hiệu điều khiển ngỏ ra.
Đơn vị đường dữ liệu Tín hiệu điều khiển
ALU IMM_VALUE[7..0]; ASEL[1..0]; BSEL[1..0]; WCARRY
ADD; LOGICSEL[1..0]; RIGHTSEL[1..0]; DIRSEL
ALU_SEL[1..0]
Thanh ghi đa dụng AddA[3..0]; AddB[3..0]; AddW[3..0]
WRE; INC_ZP; DEC_ZP
Program Counter Offset[8..0]; SPC; PUSH; POP; LD_C
RAM WR_RAM
Data mux DATAMUX[2..0]
State Register M_SR[5..0]; LD_M; SEL_BIT[2..0]
I/O Register IO_SEL[1..0]
Các chức năng của tín hiệu đã được nêu ở trên
Bảng 7.1 các tín hiệu điều khiển
2. Đơn vị điều khiển thực thi
Đơn vị điều khiển của RISC thường là hệ tuần tự sử dụng các cổng logic và
D flip-flop thay vì sử dụng đơn vị điều khiển vi chương trình, chứa trong ROM, như cấu trúc
CISC. CISC có tập lệnh với các chiều dài lệnh chu kỳ lệnh khác nhau nên đơn vị điều khiển sử
dụng ROM vi chương trình để thực hiện thiết kế dễ dàng và mềm dẻo nhưng bất lợi của vi chương
trình là làm chậm khả năng thục thi lệnh. Đối với RISC, các lệnh có chiều dài cố định và thực thi
ĐAMH Điện Tử Viễn Thông II ___________________________________ GVHD: Hồ Trung Mỹ
_____________________________________*******______________________________________
Thiết kế RISC microcontroller _________________________________ SVTH: Phạm Hưng Thịnh
_____________________________________*******______________________________________
26
trong 1 chu kỳ xung clock nên đơn vị điều khiển thường được thiết kế gồm các cổng logic và flip-
flop để tăng tốc độ thực thi lệnh.
Trong thiết kế này, Đơn vị điều khiển thực thi là hệ tuần tự đồng bộ dạng
More. nhận ngỏ vào là tín hiệu INS_ TYPE, kiểu lệnh, được đưa từ đơn vị giải mã lệnh, cho biết
lệnh đang thực thi là lệnh gì để tạo các tổ hợp tín hiệu ngỏ ra theo đúng trình tự thực hiện lệnh.
Ngỏ ra của đơn vị điều khiển thực thi là các tín hiệu điều khiển việc đồng bộ của các đơn vị
đường dữ liệu như:clkpp, clkpc, clklatch, clkInstr, clkWr. xem đồ hình trạng thái của đơn vị điều
khiển thực thi ở hình 7.1.
tín hiệu clkpp thực hiện đồng bộ việc Push Pop của vùng Stack.
tín hiệu clkpc thực hiện đồng bộ việc đếm và nạp gia trị PC.
tín hiệu clkinstr thực hiện đồng bộ việc chốt và giải mã lệnh.
tín hiệu clklatch thực hiện đồng bộ việc chốt kết quả thực thi lệnh.
tín hiệu clkwr thực hiện đồng bộ việc ghi kết quả thực thi.
Hình 7.1 đồ hình trạng thái của đơn vị điều khiển thực thi
Một chu kỳ lệnh sẽ được chia thành 3 pha nhỏ, đơn vị điều khiển thực thi
gồm 9 trạng thái, mỗi trạng thái có một tổ hợp ngỏ ra xác định. Do quá trình xử lý theo đường ống
nên tìm nạp lệnh và thực thi lệnh diễn ra song song vì vậy mỗi trạng thái đều thực hiện 2 quá trình
này độc lập.
S0/
11111
S1/
11101
S2/
01111
S6/
01110
S7/
10111
S4/
01011
S3/
11111
S8/
01111
S5/
11110
Input: Reset - INS_TYPE
0XXX
1XXX
1XXX
1XXX
1XXX 1XXX
1XXX 1100
1101 1100 1101
1100
1001 1010
1000
1101
1110
Output:clkpp, clkpc, clklatch, clkInstr, clkWr
ĐAMH Điện Tử Viễn Thông II ___________________________________ GVHD: Hồ Trung Mỹ
_____________________________________*******______________________________________
Thiết kế RISC microcontroller _________________________________ SVTH: Phạm Hưng Thịnh
_____________________________________*******______________________________________
27
S0 trạng thái reset
S1 trạng thái nạp và giải mã lệnh
S2 trạng thái tìm nạp lệnh mới
S3 trạng thái rãnh
S4 trạng thái chốt kết quả và tìm nạp lệnh mới
S5 trạng thái ghi kết quả
S6 trạng thái ghi kết quả và tìm nạp lệnh mới
S7 trạng thái cất và lấy địa chỉ quay về
S8 trạng thái tìm nạp lệnh rẽ nhánh.
Ví dụ:
khi RISC thực hiện nhóm lệnh ADD. Tại pha đầu trạng thái S0 lệnh đã tìm nạp
được đưa vào giải mã lệnh các chức năng đơn vị đường dữ liệu được xác lập, kết quả được tính
toán, ngỏ vào của đơn vị điều khiển INS_TYPE= ”001”, tại pha thứ 2 trạng thái sẽ là S4 kết quả
thực thi được chốt lại, PC tìm nạp lệnh mới. Tại pha cuối kết quả được ghi vào thanh ghi đích.
Khi RISC thực hiện lệnh NOP hoặc rẽ nhánh. Tại pha đầu trạng thái S0 lệnh đã tìm
nạp được đưa vào giải mã lệnh các chức năng đơn vị đường dữ liệu được xác lập, địa chỉ PC mới
được tính toán, ngỏ vào của đơn vị điều khiển INS_TYPE= ”000” cho lệnh NOP và “110” cho
lệnh rẽ nhánh, tại pha thứ 2 trạng thái sẽ là S2, PC tìm nạp lệnh mới. Tại pha cuối là trạng thái
rãnh.
Khi RISC thực hiện lệnh gọi hàm RCALL. Tại pha đầu trạng thái S0 lệnh đã tìm
nạp được đưa vào giải mã lệnh các chức năng đơn vị đường dữ liệu được xác lập, địa chỉ PC mới
được tính toán, ngỏ vào của đơn vị điều khiển INS_TYPE= ”100” , tại pha thứ 2 trạng thái sẽ là
S7 địa chỉ quay về được cất vào Stack. Tại pha cuối trạng thái S8 PC được nạp địa chỉ lệnh mới.
Khi RISC thực hiện lệnh RET. Tại pha đầu trạng thái S0 lệnh đã tìm nạp được đưa
vào giải mã lệnh các chức năng đơn vị đường dữ liệu được xác lập, địa chỉ PC mới được tính toán,
ngỏ vào của đơn vị điều khiển INS_TYPE= ”101”, tại pha thứ 2 trạng thái sẽ là S8 địa chỉ quay về
được nạp vào PC để tìm nạp lệnh mới. Tại pha cuối trạng thái S7 địa chỉ quay về được POP ra
khỏi vùng Stack.
Khi RISC thực hiện nhóm lệnh LD, ST. tại pha đầu trạng thái S0 lệnh đã tìm nạp
được đưa vào giải mã lệnh các chức năng đơn vị đường dữ liệu được xác lập, dữ liệu từ nguồn
đưa đến đích, ngỏ vào của đơn vị điều khiển Ins_TYPE= ”010”, tại pha thứ 2 trạng thái sẽ là S6
thực hiện ghi dữ liệu và PC tìm nạp lệnh mới. Tại pha cuối trạng thái S3 là trạng thái rãnh.
ĐAMH Điện Tử Viễn Thông II ___________________________________ GVHD: Hồ Trung Mỹ
_____________________________________*******______________________________________
Thiết kế RISC microcontroller _________________________________ SVTH: Phạm Hưng Thịnh
_____________________________________*******______________________________________
28
VIII> CHƯƠNG TRÌNH VHDL VÀ KẾT QUẢ MÔ PHỎNG.
1. Chương trình VHDL mô tả thanh ghi
-----------------------////////////////////////////////////////////////////////////////////-------------------------
-----------------------//-- DO AN DIEN TU - VIEN THONG II --//---------------------------
----------------------//-- THAY HUONG DAN: HO TRUNG MY --//------------------------
-----------------------//-- SINH VIEN: PHAM HUNG THINH--//-----------------------------
----------//--DE TAI: THIET KE RISC 8 BIT MICROCONTROLLER --//----------------
---------////////////////////////////////////////////////////////////////////////////////////////////////----------------
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY REG IS
PORT(
DI:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
CLR,CLK: IN STD_LOGIC;
DO:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)
);
END REG;
ARCHITECTURE BEV OF REG IS
SIGNAL DATA: STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
PROCESS(CLK,CLR)
BEGIN
IF CLR='0' THEN
DATA<="00000000";
ELSE
IF(CLK'EVENT AND CLK='0')THEN
DATA<=DI;
END IF;
END IF;
END PROCESS;
DO<=DATA AFTER 0 ns;
-- KET QUA THOI GIAN TRE 6.4 ns ~ 7 ns
END BEV;
---------------/////////////////////////////////////////////////////-------------------
ĐAMH Điện Tử Viễn Thông II ___________________________________ GVHD: Hồ Trung Mỹ
_____________________________________*******______________________________________
Thiết kế RISC microcontroller _________________________________ SVTH: Phạm Hưng Thịnh
_____________________________________*******______________________________________
29
Kết quả mô phỏng:
2. Chương trình VHDL mô tả bộ mux 8Æ1
-----------------------////////////////////////////////////////////////////////////////////-------------------------
-----------------------//-- DO AN DIEN TU - VIEN THONG II --//---------------------------
----------------------//-- THAY HUONG DAN: HO TRUNG MY --//------------------------
-----------------------//-- SINH VIEN: PHAM HUNG THINH--//-----------------------------
----------//--DE TAI: THIET KE RISC 8 BIT MICROCONTROLLER --//----------------
---------////////////////////////////////////////////////////////////////////////////////////////////////----------------
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY MUX8T1V8 IS
PORT(
IN0,IN1,IN2,IN3,IN4,IN5,IN6,IN7: IN STD_LOGIC_VECTOR (7 DOWNTO 0);
SEL :IN STD_LOGIC_VECTOR(2 DOWNTO 0);
OUTPUT: OUT STD_LOGIc_VECTOR(7 DOWNTO 0)
);
END MUX8T1V8;
ARCHITECTURE MULTIPLEX OF MUX8T1V8 IS
BEGIN
WITH SEL SELECT
OUTPUT<= IN0 WHEN "000",
IN1 WHEN "001",
IN2 WHEN "010",
IN3 WHEN "011",
IN4 WHEN "100",
IN5 WHEN "101",
IN6 WHEN "110",
ĐAMH Điện Tử Viễn Thông II ___________________________________ GVHD: Hồ Trung Mỹ
_____________________________________*******______________________________________
Thiết kế RISC microcontroller _________________________________ SVTH: Phạm Hưng Thịnh
_____________________________________*******______________________________________
30
IN7 WHEN OTHERS;
END MULTIPLEX;
---------------/////////////////////////////////////////////////////-------------------
Kết quả mô phỏng:
3. Chương trình VHDL mô tả ROM
-----------------------////////////////////////////////////////////////////////////////////-------------------------
-----------------------//-- DO AN DIEN TU - VIEN THONG II --//---------------------------
----------------------//-- THAY HUONG DAN: HO TRUNG MY --//------------------------
-----------------------//-- SINH VIEN: PHAM HUNG THINH--//-----------------------------
----------//--DE TAI: THIET KE RISC 8 BIT MICROCONTROLLER --//----------------
---------////////////////////////////////////////////////////////////////////////////////////////////////----------------
library ieee;
use ieee.std_logic_1164.all;
entity effrom is
port( pc : in std_logic_vector(8 downto 0);
instruction : out std_logic_vector(15 downto 0));
end effrom;
architecture rom of effrom is
ĐAMH Điện Tử Viễn Thông II ___________________________________ GVHD: Hồ Trung Mỹ
_____________________________________*******______________________________________
Thiết kế RISC microcontroller _________________________________ SVTH: Phạm Hưng Thịnh
_____________________________________*******______________________________________
31
component LPM_ROM
generic (
LPM_WIDTH: integer := 16;
LPM_WIDTHAD: integer := 9;
LPM_NUMWORDS: integer := 512;
LPM_FILE: string := "program.mif";
LPM_ADDRESS_CONTROL: string := "UNREGISTERED";
LPM_OUTDATA: string := "UNREGISTERED"
);
port (
ADDRESS: in STD_LOGIC_VECTOR(LPM_WIDTHAD-1 downto 0);
inclock: IN STD_LOGIC := '0';
outclock: IN STD_LOGIC := '0';
memenab: IN STD_LOGIC := '1';
Q: out STD_LOGIC_VECTOR(LPM_WIDTH-1 downto 0)
);
end component;
signal gnd, vcc : std_logic;
begin
vcc <= '1';
gnd <= '0';
v1 : LPM_ROM
port map (address => pc, memenab => vcc, q => instruction);
end rom;
---------------/////////////////////////////////////////////////////-------------------
Kết quả mô phỏng:
ĐAMH Điện Tử Viễn Thông II ___________________________________ GVHD: Hồ Trung Mỹ
_____________________________________*******______________________________________
Thiết kế RISC microcontroller _________________________________ SVTH: Phạm Hưng Thịnh
_____________________________________*******______________________________________
32
4. Chương trình VHDL mô tả RAM
-----------------------////////////////////////////////////////////////////////////////////-------------------------
-----------------------//-- DO AN DIEN TU - VIEN THONG II --//---------------------------
----------------------//-- THAY HUONG DAN: HO TRUNG MY --//------------------------
-----------------------//-- SINH VIEN: PHAM HUNG THINH--//-----------------------------
----------//--DE TAI: THIET KE RISC 8 BIT MICROCONTROLLER --//----------------
---------////////////////////////////////////////////////////////////////////////////////////////////////----------------
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity ram is
port( addr : in std_logic_vector(7 downto 0);
DATAWR: in std_logic_vector(7 downto 0);
wr_ram,clkW: in std_logic;
--clrn : in std_logic;
c : out std_logic_vector(7 downto 0)
);
end entity;
architecture Sram of ram is
component lpm_ram_dq
generic( lpm_width: positive := 8;
lpm_widthad: positive := 8;
lpm_numwords: natural := 256;
lpm_file: string := "ram.mif";
lpm_indata: string := "registered";
lpm_address_control: string := "registered";
lpm_outdata: string := "unregistered"
);
port( data: in std_logic_vector(lpm_width-1 downto 0);
address: in std_logic_vector(lpm_widthad-1 downto 0);
we: in std_logic;
inclock: in std_logic := '0';
outclock: in std_logic := '0';
q: out std_logic_vector(lpm_width-1 downto 0)
ĐAMH Điện Tử Viễn Thông II ___________________________________ GVHD: Hồ Trung Mỹ
_____________________________________*******______________________________________
Thiết kế RISC microcontroller _________________________________ SVTH: Phạm Hưng Thịnh
_____________________________________*******______________________________________
33
);
end component;
signal mar, mbr, ram_out : std_logic_vector(7 downto 0);
signal wr,wre: std_logic;
begin
mar <= addr;
mbr <= datawr;
wre <= not wr_ram;
wr <= not clkW;
sram: lpm_ram_dq
port map(data => mbr, address => mar, we => wre, inclock =>wr, q =>
ram_out);
c <= ram_out;
end Sram;
---------------/////////////////////////////////////////////////////-------------------
Kết quả mô phỏng:
5. Chương trình VHDL mô tả thanh ghi IO
-----------------------////////////////////////////////////////////////////////////////////-------------------------
-----------------------//-- DO AN DIEN TU - VIEN THONG II --//---------------------------
----------------------//-- THAY HUONG DAN: HO TRUNG MY --//------------------------
-----------------------//-- SINH VIEN: PHAM HUNG THINH--//-----------------------------
----------//--DE TAI: THIET KE RISC 8 BIT MICROCONTROLLER --//----------------
---------////////////////////////////////////////////////////////////////////////////////////////////////----------------
ĐAMH Điện Tử Viễn Thông II ___________________________________ GVHD: Hồ Trung Mỹ
_____________________________________*******______________________________________
Thiết kế RISC microcontroller _________________________________ SVTH: Phạm Hưng Thịnh
_____________________________________*******______________________________________
34
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
ENTITY I_O IS
PORT(
DATA: IN STD_LOGIC_VECTOR(7 DOWNTO 0);
IO_SEL: IN STD_LOGIC_VECTOR(1 DOWNTO 0); --"00": A ; "01":
B ; "10": C
CLK_WR: IN STD_LOGIC;
CLRN: IN STD_LOGIC;
A: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
B: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
C: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)
);
END I_O;
ARCHITECTURE BEV OF I_O IS
SIGNAL REGA: STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL REGB: STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL REGC: STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
PROCESS(CLRN,CLK_WR)
BEGIN
IF (CLRN='0') THEN
REGA <= X"00";
REGB <= X"00";
REGC <= X"00";
ELSIF CLK_WR'EVENT AND CLK_WR='0' THEN
CASE IO_SEL IS
WHEN "00"=>
REGA <= DATA;
WHEN "01"=>
REGB <= DATA;
WHEN "10" =>
REGC <= DATA;
WHEN OTHERS =>
END CASE;
END IF;
END PROCESS;
ĐAMH Điện Tử Viễn Thông II ___________________________________ GVHD: Hồ Trung Mỹ
_____________________________________*******______________________________________
Thiết kế RISC microcontroller _________________________________ SVTH: Phạm Hưng Thịnh
_____________________________________*******______________________________________
35
A <= REGA;
B <= REGB;
C <= REGC;
END BEV;
---------------/////////////////////////////////////////////////////-------------------
Kết quả mô phỏng:
6. Chương trình VHDL mô tả tập thanh ghi đa dụng
-----------------------////////////////////////////////////////////////////////////////////-------------------------
-----------------------//-- DO AN DIEN TU - VIEN THONG II --//---------------------------
----------------------//-- THAY HUONG DAN: HO TRUNG MY --//------------------------
-----------------------//-- SINH VIEN: PHAM HUNG THINH--//-----------------------------
----------//--DE TAI: THIET KE RISC 8 BIT MICROCONTROLLER --//----------------
---------////////////////////////////////////////////////////////////////////////////////////////////////----------------
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity gpreg is
port( data : in std_logic_vector(7 downto 0);
wre, inc_zp, dec_zp : in std_logic;
addA, addB, addW : in std_logic_vector(3 downto 0);
ĐAMH Điện Tử Viễn Thông II ___________________________________ GVHD: Hồ Trung Mỹ
_____________________________________*******______________________________________
Thiết kế RISC microcontroller _________________________________ SVTH: Phạm Hưng Thịnh
_____________________________________*******______________________________________
36
clkW,clrn : in std_logic;
RA, RB, ZP : out std_logic_vector(7 downto 0)
);
end gpreg;
architecture gpr of gpreg is
type regfiletype is array (0 to 15) of std_logic_vector(7 downto 0);
signal reg : regfiletype;
begin
ZP <= reg(14);
RA <= reg(CONV_INTEGER(addA));
RB <= reg(CONV_INTEGER(addB));
process(clkW, clrn)
begin
if clrn = '0' then
for i in 0 to 15 loop
reg(i) <= "00000000";
end loop;
elsif clkW'event and clkW = '0' then
if wre = '0' then
reg(conv_integer(addW)) <= data;
end if;
if inc_zp = '0' then
reg(14) <= reg(14) + 1;
elsif dec_zp = '0' then
reg(14) <= reg(14) - 1;
end if;
end if;
end process;
end gpr;
---------------/////////////////////////////////////////////////////-------------------
ĐAMH Điện Tử Viễn Thông II ___________________________________ GVHD: Hồ Trung Mỹ
_____________________________________*******______________________________________
Thiết kế RISC microcontroller _________________________________ SVTH: Phạm Hưng Thịnh
_____________________________________*******______________________________________
37
Kết quả mô phỏng:
7. Chương trình VHDL mô tả thanh ghi Trạng thái
-----------------------////////////////////////////////////////////////////////////////////-------------------------
-----------------------//-- DO AN DIEN TU - VIEN THONG II --//---------------------------
----------------------//-- THAY HUONG DAN: HO TRUNG MY --//------------------------
-----------------------//-- SINH VIEN: PHAM HUNG THINH--//-----------------------------
----------//--DE TAI: THIET KE RISC 8 BIT MICROCONTROLLER --//----------------
---------////////////////////////////////////////////////////////////////////////////////////////////////----------------
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY STATUS_REG IS
PORT(
FR_ALU,M_SR:IN STD_LOGIC_VECTOR(5 DOWNTO 0); --FR_ALU
CONNECT TO TOSR SIGNAL
DATA_BUS: IN STD_LOGIC_VECTOR(7 DOWNTO 0);
LD_M,CLK: IN STD_LOGIC; --LOAD ='1'
MODIFY='0'
SEL_BIT: IN STD_LOGIC_VECTOR(2 DOWNTO 0);
ĐAMH Điện Tử Viễn Thông II ___________________________________ GV
Các file đính kèm theo tài liệu này:
- Thiết kế Risc Microcontroller dùng VHDL.pdf