Đồ án Thiết kế Risc Microcontroller dùng VHDL

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

pdf65 trang | Chia sẻ: lethao | Lượt xem: 2117 | Lượt tải: 5download
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:

  • pdfThiết kế Risc Microcontroller dùng VHDL.pdf