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

ĐỒ án cấu TRÚC máy TÍNH LAB3 DESIGN a MIPS 32 BIT SINGLE CYCLE CPU

27 578 4

Đ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 27
Dung lượng 1,32 MB

Nội dung

ĐỒ án cấu TRÚC máy TÍNH LAB3 DESIGN a MIPS 32 BIT SINGLE CYCLE CPU

Trang 1

PHÂN CÔNG CÔNG VIỆC

ĐỒ ÁN CẤU TRÚC MÁY TÍNH LAB3: DESIGN A MIPS 32-BIT SINGLE - CYCLE CPU

1 Công việc cụ thể

ST

T

+ Tìm hiểu lại LAB 1: Thiết kế RegisterFile 32 by 32

+Tìm hiểu hoạt động và thiết kế : Khối Control, Khối dịch trái, Khối

mở rộng + Slide: phần I.

30%

+ Tìm hiểu lại LAB2: Thiết kế bộ tính toán ALU.

+Tìm hiểu hoạt động và thiết kế:

Thanh ghi PC, Khối JR_Control, Các khối Multiplexor

+ Slide: phần II 1,2.

30%

+ Tìm hiểu lại chương 4 sách COD Tìm hiểu hoạt động và thiết kế:

ALUControl, MIPS, Khối mô phỏng Stimulate

- Tìm hiểu tài liệu theo nhiệm vụ được giao.

- Thảo luận nhóm thống nhất sơ đồ khối cần thực hiện.

- Viết Code cho từng khối.

- Chia sẻ hiểu biết của từng thành viên trong nhóm về phần mình thiết kế.

- Ghép nối các khối với nhau, hiệu chỉnh thiết kế.

- Mô phỏng trên ModelSim và sơ đồ khối ở Quartus.

Trang 2

Lab3: Design a MIPS 32-bit Single-Cycle CPU

I Yêu c u thi t k : ầu thiết kế: ết kế: ết kế:

1 Yêu c u chung: ầu thiết kế:

- Thi t k b x lý trung tâm MIPS chu kì đ n 32-bit th c hi n các ết kế bộ xử lý trung tâm MIPS chu kì đơn 32-bit thực hiện các ết kế bộ xử lý trung tâm MIPS chu kì đơn 32-bit thực hiện các ộ xử lý trung tâm MIPS chu kì đơn 32-bit thực hiện các ử lý trung tâm MIPS chu kì đơn 32-bit thực hiện các ơn 32-bit thực hiện các ực hiện các ện các

l nh: ện các

ADD, SUB, SLT, JR, LW, SW, BNE, XORI, J

- Các c ng logic không có quá 4 ngõ vào, v i delay 50ps ổng logic không có quá 4 ngõ vào, với delay 50ps ới delay 50ps.

- Các kh i đi u khi n logic có th dùng c u trúc l nh behavioral ối điều khiển logic có thể dùng cấu trúc lệnh behavioral ều khiển logic có thể dùng cấu trúc lệnh behavioral ển logic có thể dùng cấu trúc lệnh behavioral ển logic có thể dùng cấu trúc lệnh behavioral ấu trúc lệnh behavioral ện các

Trang 3

LW rt, imm16(rs): Reg[rt] = Mem[Reg[rs] + Sign_ext(Imm16)].

SW rt, imm16(rs): Mem[Reg[rs] + Sign_ext(Imm16)] = Reg[rt].

XORI rt, rs, imm16: Reg[rt] = Reg[rs] XOR Zero_ext(Imm16).

- L nh JUMP: ện các

J target: PC = { PC[31:28], target, 00 }

Trang 4

II Xây d ng SingleClock CPU: ựng SingleClock CPU:

Trang 5

- T s đ kh i t ng quát c a CPU, thi t k 1 CPU đ n chu kì yêu ừ sơ đồ khối tổng quát của CPU, thiết kế 1 CPU đơn chu kì yêu ơn 32-bit thực hiện các ồ khối tổng quát của CPU, thiết kế 1 CPU đơn chu kì yêu ối điều khiển logic có thể dùng cấu trúc lệnh behavioral ổng logic không có quá 4 ngõ vào, với delay 50ps ủa CPU, thiết kế 1 CPU đơn chu kì yêu ết kế bộ xử lý trung tâm MIPS chu kì đơn 32-bit thực hiện các ết kế bộ xử lý trung tâm MIPS chu kì đơn 32-bit thực hiện các ơn 32-bit thực hiện các

c u: ầu:

+ Thanh ghi l nh PC ện các + B nh l nh ộ xử lý trung tâm MIPS chu kì đơn 32-bit thực hiện các ới delay 50ps ện các + B thanh ghi ộ xử lý trung tâm MIPS chu kì đơn 32-bit thực hiện các + B tính toán ALU ộ xử lý trung tâm MIPS chu kì đơn 32-bit thực hiện các + B nh d li u ộ xử lý trung tâm MIPS chu kì đơn 32-bit thực hiện các ới delay 50ps ữ liệu ện các + B đi u khi n trung tâm ộ xử lý trung tâm MIPS chu kì đơn 32-bit thực hiện các ều khiển logic có thể dùng cấu trúc lệnh behavioral ển logic có thể dùng cấu trúc lệnh behavioral.

+ B đi u khi n kh i ALU ộ xử lý trung tâm MIPS chu kì đơn 32-bit thực hiện các ều khiển logic có thể dùng cấu trúc lệnh behavioral ển logic có thể dùng cấu trúc lệnh behavioral ối điều khiển logic có thể dùng cấu trúc lệnh behavioral.

+ B đi u khi n l nh JR ộ xử lý trung tâm MIPS chu kì đơn 32-bit thực hiện các ều khiển logic có thể dùng cấu trúc lệnh behavioral ển logic có thể dùng cấu trúc lệnh behavioral ện các + B m r ng d u ộ xử lý trung tâm MIPS chu kì đơn 32-bit thực hiện các ở rộng dấu ộ xử lý trung tâm MIPS chu kì đơn 32-bit thực hiện các ấu trúc lệnh behavioral.

+ B d ch trái ộ xử lý trung tâm MIPS chu kì đơn 32-bit thực hiện các ịch trái + B multiplexor ộ xử lý trung tâm MIPS chu kì đơn 32-bit thực hiện các

2 B nh l nh: ộ nhớ lệnh: ớ lệnh: ệnh:

Trang 6

- B nh l nh nh n ngõ ra c a PC làm đ a ch c a l nh ti p theo ộ xử lý trung tâm MIPS chu kì đơn 32-bit thực hiện các ới delay 50ps ện các ận ngõ ra của PC làm địa chỉ của lệnh tiếp theo ủa CPU, thiết kế 1 CPU đơn chu kì yêu ịch trái ỉ của lệnh tiếp theo ủa CPU, thiết kế 1 CPU đơn chu kì yêu ện các ết kế bộ xử lý trung tâm MIPS chu kì đơn 32-bit thực hiện các

always @(address)

begin

Trang 7

2 ngõ ra d li u (Read Data 1 và Dead Data 2) ữ liệu ện các

+ Có 1 ngõ vào ch n thanh ghi đ ghi d li u (Write register) , 1 ngõ vào ọn thanh ghi đọc (Read Register 1 và Read Register 2) và ển logic có thể dùng cấu trúc lệnh behavioral ữ liệu ện các cho phép ghi (RegWrite) và1 ngõ vào d li u (Write Data) khi ghi vào ữ liệu ện các file thanh ghi.

S đ kh i: ơ đồ khối: ồ khối: ối:

Trang 8

module RegisterFile(RD1,RD2,WD,RR1,RR2,WR,RW,reset,clk); // RR : Read Register

input [4:0]RR1,RR2,WR; // WR : Write Register

input [31:0]WD ; // WD : Write Data

input RW,clk,reset; // RW : RegWrite

output [31:0]RD1,RD2; // RD : Read Data

wire [31:0]x; // x : ngõ ra cua bo decoder5_32

wire[31:0]R0,R1,R2,R3,R4,R5,R6,R7,R8,R9,R10,R11,R12,R13,R14,R15,R16,R17,R18,R19,R20,R21, R22,R23,R24,R25,R26,R27,R28,R29,R30,R31;

decoder5_32 d(WR,x[31:0],RW); // chọn thanh ghi đích

mux32x32_32

m1(RD1,RR1,R31,R30,R29,R28,R27,R26,R25,R24,R23,R22,R21,R20,R19,R18,R17,R16,R15,R14,R13,R12,R11,R10,R9,R8,R7,R6,R5,R4,R3,R2,R1,R0); // chọn thanh ghi nguồn Rs

mux32x32_32

m2(RD2,RR2,R31,R30,R29,R28,R27,R26,R25,R24,R23,R22,R21,R20,R19,R18,R17,R16,R15,R14,R13,R12,R11,R10,R9,R8,R7,R6,R5,R4,R3,R2,R1,R0); // chọn thah ghi nguồn Rt

4 B tính toán – ALU: ộ nhớ lệnh:

- Cấu tạo MIPS ALU:

+ 2 ngõ vào BusA và BusB 32 bit

+ 1 ngõ ra Output 32 bit

Trang 9

+ Các cờ ngõ ra: zero, overflow, carryout, negative

 Cờ zero: được set khi kết quả bằng 0

 Cờ overflow (tràn khi thực hiện cộng trừ với số có dấu): đươc set khi xảy ra tràn

 Cờ carryout (tràn khi thực hiện cộng trừ với số không dấu): xảy ra khi có nhớ (mượn) từ MSB

 Cờ negative: được set nếu kết quả âm

+ Ngõ vào điều khiển ALUcontrol gồm 2 bit xác định phép toán mà ALU cần thực hiện:

Bảng 1 Tín hiệu điều khiển ALU

module ALU(out,a,b,carry, zero, overflow,negative , AluControl);

Trang 11

5 Bộ nhớ dữ liệu – Data Memory:

- Nhận kết quả của bộ ALU làm địa chỉ ngõ vào.

- Nếu có thao tác đọc dữ liệu ra ( lệnh LW) thì MemRead được set 1 ( cho phép đọc dữ liệu ra).

- Nếu có thao tác ghi dữ liệu vào bộ nhớ (lệnh SW) thì MemWrite được set lên

1 ( cho phép ghi dữ liệu vào).

Code:

module DataMem(readdata, address, writedata, writeenable,MemRead,clk);

input [31:0] address, writedata;

input writeenable,MemRead, clk;

output [31:0] readdata;

reg [7:0] datamem[1023:0];

Trang 12

reg [31:0] temp;

buf #1000

buf0(readdata[0],temp[0]),

buf1(readdata[1],temp[1]),buf2(readdata[2],temp[2]),buf3(readdata[3],temp[3]),buf4(readdata[4],temp[4]),buf5(readdata[5],temp[5]),buf6(readdata[6],temp[6]),buf7(readdata[7],temp[7]),buf8(readdata[8],temp[8]),buf9(readdata[9],temp[9]),buf10(readdata[10],temp[10]),buf11(readdata[11],temp[11]),buf12(readdata[12],temp[12]),buf13(readdata[13],temp[13]),buf14(readdata[14],temp[14]),buf15(readdata[15],temp[15]),

buf16(readdata[16],temp[16]),buf17(readdata[17],temp[17]),buf18(readdata[18],temp[18]),buf19(readdata[19],temp[19]),buf20(readdata[20],temp[20]),buf21(readdata[21],temp[21]),buf22(readdata[22],temp[22]),buf23(readdata[23],temp[23]),buf24(readdata[24],temp[24]),buf25(readdata[25],temp[25]),buf26(readdata[26],temp[26]),buf27(readdata[27],temp[27]),buf28(readdata[28],temp[28]),buf29(readdata[29],temp[29]),buf30(readdata[30],temp[30]),buf31(readdata[31],temp[31]);always @(posedge clk)

6 Khối điều khiển trung tâm – Control Unit:

- Tạo ra các tín hiệu điều khiển:

+ RegDst: Chọn thanh ghi đích cho RegisterFile.

RegDst = 0: Rt là thanh ghi đích, lệnh loại I.

RegDst = 1: Rd là thanh ghi đích, lệnh loại R.

+ Jump: Cho phép thực hiện lệnh nhảy JUMP.

+ Branch: Cho phép thực hiện lệnh nhảy BNE.

+ MemRead: Cho phép đọc từ bộ nhớ dữ liệu.

+ MemWrite Cho phép ghi dữ liệu vào DataMemory.

+ ALUSrc: Chọn ngõ vào thứ 2 cho bộ ALU.

Trang 13

ALUSrc = 0: Ngõ vào là giá trị của thanh ghi nguồn ( lệnh loại R).

ALUSrc = 1: Ngõ vào là giá 32-bit mở rộng dấu hoặc mở rộng không + RegWrite: Cho phép ghi dữ liệu vào thanh ghi đích.

+ MemtoReg:Chọn giá trị ghi của RegisterFile là kết quả của bộ ALU hoặc dữ liệu từ Data Memory.

MemtoReg = 0: đưa về kết quả của bộ ALU MemtoReg = 1: đưa về dữ liệu từ DataMemory.

+ SignZero: Mở rộng dấu hoặc mở rộng không

SignZero = 0: Mở rộng dấu SignZero = 1: Mở rộng không + ALUop: Cho biết phép toán thực hiện là cộng (01) đối với LW và SW, trừ (01) đối với BNE, lệnh loại R (10) hoặc lệnh XORI (11).

B ng 2 Giá tr đi u khi n c a Control_Unit ảng 2 Giá trị điều khiển của Control_Unit ịch trái ều khiển logic có thể dùng cấu trúc lệnh behavioral ển logic có thể dùng cấu trúc lệnh behavioral ủa CPU, thiết kế 1 CPU đơn chu kì yêu Code:

module Control_Unit( RegDst, ALUSrc, MemtoReg, RegWrite, MemRead, MemWrite, Branch, ALUop, Jump, SignZero z,OpCode);

input [5:0]OpCode;

Trang 14

output Jump,RegDst,ALUSrc,MemtoReg,RegWrite,MemRead,MemWrite,Branch,SignZero; output [1:0]ALUop;

reg Jump,RegDst,ALUSrc,MemtoReg,RegWrite,MemRead,MemWrite,Branch,SignZero; reg [1:0]ALUop;

Trang 16

7 ALU_Control_Unit :

- K t h p giá tr c a tín hi u đi u khi n ALUop t b đi u khi n trung tâm ết kế bộ xử lý trung tâm MIPS chu kì đơn 32-bit thực hiện các ợc thực ịch trái ủa CPU, thiết kế 1 CPU đơn chu kì yêu ện các ều khiển logic có thể dùng cấu trúc lệnh behavioral ển logic có thể dùng cấu trúc lệnh behavioral ừ sơ đồ khối tổng quát của CPU, thiết kế 1 CPU đơn chu kì yêu ộ xử lý trung tâm MIPS chu kì đơn 32-bit thực hiện các ều khiển logic có thể dùng cấu trúc lệnh behavioral ển logic có thể dùng cấu trúc lệnh behavioral.

và 6-bit Function giãi mã t l nh đ t o ra tín hi u đi u khi n ừ sơ đồ khối tổng quát của CPU, thiết kế 1 CPU đơn chu kì yêu ện các ển logic có thể dùng cấu trúc lệnh behavioral ại R: ện các ều khiển logic có thể dùng cấu trúc lệnh behavioral ển logic có thể dùng cấu trúc lệnh behavioral.

ALUControl cho b tính toán ALU ộ xử lý trung tâm MIPS chu kì đơn 32-bit thực hiện các

B ng 3 Giá tr c a ALUop và ALUControl ảng 2 Giá trị điều khiển của Control_Unit ịch trái ủa CPU, thiết kế 1 CPU đơn chu kì yêu

Trang 17

- K t h p giá tr c a tín hi u đi u khi n ALUop t b đi u khi n trung tâm ết kế bộ xử lý trung tâm MIPS chu kì đơn 32-bit thực hiện các ợc thực ịch trái ủa CPU, thiết kế 1 CPU đơn chu kì yêu ện các ều khiển logic có thể dùng cấu trúc lệnh behavioral ển logic có thể dùng cấu trúc lệnh behavioral ừ sơ đồ khối tổng quát của CPU, thiết kế 1 CPU đơn chu kì yêu ộ xử lý trung tâm MIPS chu kì đơn 32-bit thực hiện các ều khiển logic có thể dùng cấu trúc lệnh behavioral ển logic có thể dùng cấu trúc lệnh behavioral.

và 6-bit Function giãi mã t l nh đ t o ra tín hi u JR_Control cho phép ừ sơ đồ khối tổng quát của CPU, thiết kế 1 CPU đơn chu kì yêu ện các ển logic có thể dùng cấu trúc lệnh behavioral ại R: ện các

th c hi n l nh JUMP REGISTER ực hiện các ện các ện các

- Đ a ch c a lênh JumpRegister chính là d li u trong thanh ghi Rs ịch trái ỉ của lệnh tiếp theo ủa CPU, thiết kế 1 CPU đơn chu kì yêu ữ liệu ện các

Trang 18

module JR_Control_Unit(ALUop,Funct,JRControl);

input [5:0]Funct; // 6 bit function cua lenh

input [1:0] ALUop; // 2 bit ALU Opcode tu khoi dieu khien ALU

output JRControl; // dieu khien chon dia chi cho PC

reg JRControl;

wire [7:0]x;

assign x = {ALUop,Funct};

/* ALUop = 10 va function = 01000 => JRControl = 1

cac truong hop khac JRControl = 0 */

9 B m r ng d u – Extender: ộ nhớ lệnh: ở rộng dấu – Extender: ộ nhớ lệnh: ấu – Extender:

- T ngõ vào 10-bit m r ng thành ngõ ra 32-bit v i tín hi u đi u khi n ừ sơ đồ khối tổng quát của CPU, thiết kế 1 CPU đơn chu kì yêu ở rộng dấu ộ xử lý trung tâm MIPS chu kì đơn 32-bit thực hiện các ới delay 50ps ện các ều khiển logic có thể dùng cấu trúc lệnh behavioral ển logic có thể dùng cấu trúc lệnh behavioral SignZero.

Code:

module Extender ( out, in, select);

output [31:0] out;

input [15:0] in;

input select; // select = 0: Sign_Extend

reg [31:0]out; // select = 1: Zero_Extend

always @(in or select)

begin

if (select)

begin

Trang 19

10 B d ch trái – ShiftLeft2: ộ nhớ lệnh: ịch trái – ShiftLeft2:

- D ch tín hi u 32-bit qua trái 2 bit đ th c hi n phép nhân v i 4 ịch trái ện các ển logic có thể dùng cấu trúc lệnh behavioral ực hiện các ện các ới delay 50ps.

- B multiplexor 2x5_5 ch n thanh ghi đích cho RegisterFile ộ xử lý trung tâm MIPS chu kì đơn 32-bit thực hiện các ọn thanh ghi đọc (Read Register 1 và Read Register 2) và

- B multiplexor 2x32_32 ch n ngõ vào th 2 cho b ALU, d li u ghi v ộ xử lý trung tâm MIPS chu kì đơn 32-bit thực hiện các ọn thanh ghi đọc (Read Register 1 và Read Register 2) và ứ 2 cho bộ ALU, dữ liệu ghi về ộ xử lý trung tâm MIPS chu kì đơn 32-bit thực hiện các ữ liệu ện các ều khiển logic có thể dùng cấu trúc lệnh behavioral RegisterFile và ch n l a đ a ch c a l nh ti p theo đ ọn thanh ghi đọc (Read Register 1 và Read Register 2) và ực hiện các ịch trái ỉ của lệnh tiếp theo ủa CPU, thiết kế 1 CPU đơn chu kì yêu ện các ết kế bộ xử lý trung tâm MIPS chu kì đơn 32-bit thực hiện các ược thực c th c hi n ực hiện các ện các

Trang 20

Code Verilog cho MIPS:

// MIPS 32BIT - SINGLE - CYLCE - CPU

module MIPS(clk, reset);

// KHAI BAO DIA CHI

wire [31:0] PCin,PC; // PCin: dia chi ngo vao cua thanh ghi PC

wire [31:0] PC_4, // PC_4 : Dia chi lenh tiep theo

PC_Bne, // PC_Bne : Dia chi neu thuc hien lenh Branch

PC_Jump, // PC_Jump: Dia chi neu thuc hien lenh Jump

PC_JR, // PC_JR : Dia chi neu thuc hien lenh Jump Register

Bne_Address, // Bne_Address: Dia chi Branch

Jump_Address, // Jump_Address: Dia chi Jump

JR_Address; // JR_Address: Dia chi Jump Register ( = ReadData1)

// KHAI BAO INSTRUCTION MEMORY

wire [31:0] Instruction; // Lenh dang xu ly

Trang 21

assign Imm16 = Instruction[15:0];

// KHAI BAO ALU

wire [31:0] ALUin1, // 2 ngo vao cua bo ALU

wire JR_Control; // Tin hieu dieu khien lenh Jump Register

wire Bne_Control; // Tin hieu dieu khien lenh BNE

wire [1:0] ALU_Control; // Tin hieu ra cua ALU_Control_Unit

wire [31:0] Extend; // 32bit mo rong dau cua 16bit immediate

// KHAI BAO REGISTER FILE

wire [31:0] ReadData1,ReadData2; // Gia tri cac thanh ghi

wire [31:0] Reg_WriteData; // Gia tri ghi vao thanh ghi dich

wire [4:0] WriteRegister; // Thanh ghi dich

// KHAI BAO DATA MEMORY

wire [31:0] Mem_ReadData, // Du lieu xuat ra tu bo nho

Mem_Address, // Dia chi DataMemory

Mem_WriteData; // Du lieu ghi vao bo nho ( = ReadData2)

// KHAI BAO SHIFTER

wire [31:0] Bne_shift_in, // Ngo vao bo dich trai (BNE)

Bne_shift_out, // Ngo ra bo dich trai (BNE)

Jump_shift_in, // Ngo vao bo dich trai (JUMP)

Jump_shift_out; // Ngo ra bo dich trai (JUMP)

/************************************

********* CAU TRUC MIPS ************

Ngày đăng: 21/07/2015, 15:37

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w