1. Trang chủ
  2. » Công Nghệ Thông Tin

Thiết kế alu và control theo kiến trúc mips 32 bit

37 1,9K 11

Đ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 37
Dung lượng 858,04 KB

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

Nội dung

Thiết kế alu và control theo kiến trúc mips 32 bit

Trang 1

ĐẠI HỌC QUỐC GIA TP.HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN

Trang 2

Thành phố Hồ Chí Minh – Năm 2015

Trang 3

M ỤC LỤC

Mục lục 2

1 Yêu cầu thiết kế 3

2 Tổng quan về mips 3

2.1 Giới thiệu 3

2.2 Kiến trúc tập lệnh MIPs 3

2.3 Các định dạng lệnh cơ bản trong MIPs 4

3 Thiết kế 5

3.1 Phân loại các lệnh cơ bản trong kiến trúc MIPs 5

3.1.1 Các lệnh nạp ghi 5

3.1.2 Các lệnh số học và logic 5

3.1.3 Các lệnh nhảy và rẽ nhánh 6

3.2 Các thành phần của MIPs 6

3.2.1 Program Counter 6

3.2.2 Instruction Memory 7

3.2.3 Register File 9

3.2.4 ALU (Arthmetic- Logic Unit) 10

3.2.5 Data Memory 17

3.2.6 Control Unit 18

3.2.7 Các thành phần khác 19

3.3 Datapath của MIPS CPU 22

3.3.1 Datapath của các lệnh toán học và logic : 22

3.3.2 Datapath của các lệnh nạp, ghi : 24

3.3.3 Datapath của lệnh nhảy : 25

3.3.4 Datapath của MIPs 26

3.4 CPU MIPs Single Cycle 27

4 Mô phỏng 31

4.1 Tập lệnh mô phỏng 31

4.2 Mã máy 32

4.3 Testbench 32

4.4 Kết quả mô phỏng 33

Trang 4

5 Tài liệu tham khảo 36

Thiết kế một bộ Sigle Cycle MIPs 32bit thực hiện các chức năng:

 Thực hiện các phép toán Arithmetic: ADD, SUB, ADDI, SUBI,…

 Thực hiện các phép tính logic: AND, OR, NOR, XOR, SLT, ANDI, ORI, XORI,…

Các dự án về RICs đầu tiên bắt đầu từ IBM, Stanford và UC Berkeley vào cuối những năm

70, đầu những năm 80 của thế kỷ trước Hiện nay, các bộ vi xử lý phổ biết là ARM, SuperH, MIPs, SPARC, PIC, PowerPC…

MIPs – Microprocessor without Interlocked Pipeline Stages, là một kiến trúc xử lý kiểu RICs được phát triển bởi MIPS technologies Các bộ vi xử lý MIPs được phát triển như một phầncủa chương trình nghiên cứu VLSI của trường đại học Stanford đầu những năm 80 Nhóm nghiên cứu Stanford đã phát triển một bộ xử lý giảm bớt sự tác động của trình biên dịch ở cấp độphần cứng, trái ngược với sự tăng lên của phần cứng với phần mềm, nó là một bước tiến dài trong quá trình thiết kế phần cứng

Năm 1984, Hennessy rời trường Stanford rời trường Stanford và xây dựng hệ thống máy tính MIPs sau khi nhận ra nhu cầu thương mại tương lai của thiết kế này Phiên bản MIPs R2000 đầu tiên ra đời vào năm 1985 và sau đó là phiên bản MIPs R3000 năm 1988

Kiến trúc MIPs là kiến trúc thanh ghi Tất cả các phép toán số học, logic đều chỉ xoay quanh thanh ghi (hoặc ta có thể xem như một hằng số được lưu trữ như thành phần của lệnh) Kiến trúc MIPs cũng bao gồm các câu lệnh đơn dùng đề đọc dữ liệu từ bộ nhớ vào thanh ghi và ghi dữ liệu từ thanh ghi vào bộ nhớ Vì vậy, kiến trúc MIPs còn được gọi là kiến trúc nạp/lưu do chỉ có những câu lệnh nạp, lưu mới có thể truy cập vào bộ nhớ còn tất cả các câu lệnh khác chỉ

có thể truy cập tới thanh ghi

2.2 KIẾN TRÚC TẬP LỆNH MIPS

Kiến trúc tập lệnh MIPs định nghĩa một tập các câu lệnh 32bit và 64bit để đảm bảo tương thích với mọi bộ xử lý áp dụng kiến trúc MIPs

Trang 5

Kiến trúc tập lệnh MIPs (ISA) được phát triển từ kiến trúc tập lệnh MIPsI đến kiến trúc MIPsV Vào cuối những năm 1990, kiến trúc MIPs được thiết kế xung quanh hai kiên trúc cơ bản sau:

 MIPs32 cho kiến trúc 32 bit: kiến trúc này dựa vào tập lệnh MIPsII cùng với một vài lệnhđược thêm vào từ tập lệnh MIPsIII, MIPsIV và MIPsV

 MIPs64 cho kiến trúc 64 bit: kiến trúc này chủ yếu dựa vào tập lệnh của kiến trúc MIPsVTập lệnh MIPs bao gồm tổng cộng 111 câu lệnh ở hệ 32bit

Máy tính làm việc bằng cách lấy lệnh từ bộ nhớ, giải mã và tính toán chúng Lệnh và các giá trị sẽ được tính toán và mã hóa thành mã nhị phân Máy tính chỉ làm việc với các gia trị nhị phân

Để thực hiện xây dựng một kiến trúc máy tính sử dụng kiến trúc MIPs thì các thành phần

cơ bản phải bao gồm:

 Program Counter (PC): Con trỏ chương trình

 Instruction Memory: Bộ nhớ lệnh

 Data Memory: Bộ nhớ

 Register File: Tập thanh ghi

 ALU: Bộ tính toán số học và logic

 Control Unit: Khối điều khiển

Tất cả các thành phần ngoại trừ Control Unit đều được kết nối với nhau bằng bus Bus là tập hợp đường dẫn điện tử với sự khác nhau về thiết lập giá trị nhị phân được vận chuyển trên đường dẫn đó Hầu hết các bus trong kiến trúc MIPs đều có bề rộng 32bit

2.3 CÁC ĐỊNH DẠNG LỆNH CƠ BẢN TRONG MIPS

Có 3 loại lệnh trong MIPs là:

 Register (R-type)

 Immediate (I-type)

 Jump (J-type)

Trang 6

Các lệnh sử dụng các trường sau:

opcode 6bit Xác định mã lệnh

rs 5bit Xác định thanh ghi nguồn

rt 5bit Xác định thanh ghi tạm (nguồn/đích) hoặc

dùng để chỉ ra các hàm trong phạm vi REGIMM của opcode

rd 5bit Xác định thanh ghi đích

Immediate 5bit Dùng cho các toán hạng logic, phép toán có

dấu, nạp/nhớ các byte độ lệch dữ liệu và các dấu hiệu rẽ nhánh

Instr_index 26bit Chỉ số dịch trái 2bit để cung cấp 28 bit thấp

của địa chỉ đích trong lệnh Jump

 Bao gồm các lệnh: LW, SW,…

3.1.2 Các lệnh số học và logic

Thực hiện các phép tính số học, logic, dịch chuyển trên các giá trị của các thanh ghi.Các lệnh này bao gồm lệnh có định dạng Register (R-type) và định dạng kiểu Immediate (I-type)

 Các lệnh R-type: Add, Sub, SLT, And, Or, Xor, Nor,

 Các lệnh I-type: AddI, SubI, AndI, OrI, XorI,…

Trang 7

3.1.3 Các lệnh nhảy và rẽ nhánh

Các lệnh nhảy và rẽ nhánh (Jump and Branch Instructions) là các lệnh thay đổi dòng kiểm soát của một chương trình Lệnh nhảy luôn được làm đến một trang, dạng địa chỉ tuyệt đối bởi một biên dịch địa chỉ 26-bit, với các bit cao của con trỏ chương trình (kiểu J-type) hoặc địa chỉ thanh ghi (dạng R-type) Các lệnh rẽ nhánh có bù 16-bit liên quan đến con trỏ chương trình (dạng I-type)

Sau một chu kỳ, Program Counter sẽ được tăng lên để có được địa chỉ của lệnh cần thực hiện tiếp theo Trong trường hợp các lệnh thông thường, địa chỉ lưu trong Program Counter sẽ được cộng thêm 4, còn đối với các lệnh nhảy và rẽ nhánh, địa chỉ lưu trong Program Counter sẽ được thay đổi tương ứng với địa chỉ lấy được từ lệnh

Cấu tạo cơ bản của Program Counter là một thanh ghi 32bit Ta có thể xây dựng một Program Counter với 32 D-FlipFlop

module D_FF(q, d, reset, clk, en);

output q;

input d, reset, clk, en;

reg q;

wire clock;

`And and_clk (clock, clk, en);

always@(posedge clock or posedge reset)

Trang 8

module Instruction_Memory(Inst_out, Addr_in);

Trang 9

temp[31:24] = Inst_Mem [(Addr_in)]; temp[23:16] = Inst_Mem [(Addr_in+1)];

temp[15:8] = Inst_Mem [(Addr_in+2)]; temp[7:0] = Inst_Mem [(Addr_in+3)];

end

endmodule

Trang 10

3.2.3 Register File

MIPS hỗ trợ 32 thanh ghi đánh số từ $0 - $31, mỗi thanh ghi có kích thước là 32 bit Trong

đó, 8 thanh ghi thường được sử dụng để thực hiện các phép tính được đánh số $16 - $23

$0 $zero Hằng số 0

$1 $at Assembler Temporary

$2 -> $3 $v0 » $v1 Giá trị trả về của hàm hoặc biểu thức

$4 -> $7 $a0 » $a3 Các tham số của hàm

$8 -> $15 $t0 » $t7 Thanh ghi tạm (không giữ giá trị trong quá trình gọi

module Register_File(Read_Data1, Read_Data2, Write_Data, Write_Addr, Reg_Write, clk, Read_Addr1, Read_Addr2);

input [4:0] Read_Addr1; Read_Addr2;

input [4:0] Write_Addr;

input [31:0] Write_Data;

input Reg_Write;

Trang 11

input clk;

output [31:0] Read_Data1, Read_Data2;

// Register File: 32 Register, moi Register 32 bit

Regs_File[i] = 0;

end end

//Read

assign Read_Data1 = Regs_File[Read_Addr1];

assign Read_Data2 = Regs_File[Read_Addr2];

endmodule

3.2.4 ALU (Arthmetic- Logic Unit)

Bộ số học và logic là nơi thực hiện các phép toán số học và logic trong kiến trúc MIPs Đốivới các lệnh thuộc nhóm lệnh toán học và logic, khối ALU được sử dụng để thực hiện các phép tính Các lệnh nạp, ghi sử dụng khối để tính toán địa chỉ bộ nhớ Lệnh BNE sử dụng khối này để

so sánh Lệnh J,JR không sử dụng khối này

Cấu tạo MIPs ALU gồm:

 Hai ngõ vào 32bit: BusA, BusB

 Một ngõ ra 32bit: Output

Trang 12

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

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

 Cờ overflow: được set khi xảy ra tràn khi thực hiện các phép cộng trừ các số có dấu

 Cờ carryout: được set khi có nhớ từ MSB

 Cờ negative: được set khi kết quả âm

Sau khi tối thiểu hóa, ta được phương trình trạng thái:

 Sum = A xor B xor Cin

`Xor xor_0 (temp1,A,B);

`And and_0 (temp2,A,B);

`And and_1 (temp3,temp1,Cin);

`Xor Sum_Result (Sum,temp1,Cin);

`Or Cout_Result (Cout,temp2,temp3);

endmodule

Trang 13

Bộ cộng 32 bit được thiết kế bằng cách sử dụng 32 bộ 1bit:

Add_1bit bit0 (Sum[0] ,C_out[0] ,A[0] ,B[0] ,Cin);

Add_1bit bit1 (Sum[1] ,C_out[1] ,A[1] ,B[1] ,C_out[0]); Add_1bit bit2 (Sum[2] ,C_out[2] ,A[2] ,B[2] ,C_out[1]);

Add_1bit bit31(Sum[31],Cout ,A[31],B[31],C_out[30]);

//Overflow = Cout[31] xor Cout[30]

 B_select = B xor Select

Trang 14

`Xor Xor0(Xor_32[0], A[0], B[0]);

`Xor Xor1(Xor_32[1], A[1], B[1]);

`Xor Xor2(Xor_32[2], A[2], B[2]);

module Logic(Logic_result, A,B,Select);

output reg [31:0] Logic_result;

Trang 15

output reg [31:0]ALU_result;

output Zero, Overflow, Cout, Negative;

end else begin

SLT_result = $signed(A) < $signed(B); end

//chon ket qua alu // - s -

if (Funct[5:2] == 4'b1000) begin

ALU_result = Add_Sub_result;

Trang 16

end else if (Funct[5:2] == 4'b1001) begin

`Nor32 zero_result(zero, ALU_result, 'b00000000000000000000000000000000);

assign Zero = zero;

assign Negative = ALU_result[31];

assign Cout = C_out;

assign Overflow = Of;

endmodule

3.2.4.4 ALU Control

Bộ ALU Control kết hợp tín hiệu điều khiển của Control Unit và 6bit Function từ mã lệnh,

để tạo tín hiệu điều khiển cho bộ ALU

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

module ALU_Ctrl(ALU_Funct,Opcode, funct_in);

output reg [5:0]ALU_Funct;

input [5:0]Opcode;

input [5:0]funct_in;

Trang 17

// Constants

localparam ALU_DONT_CARE = 6'b000000; localparam R_TYPE = 6'd0;

Trang 18

begin

ALU_Funct = FANDI;

end ORI:

begin

ALU_Funct = FORI;

end XORI:

begin

ALU_Funct = FXORI;

end endcase end

end

endmodule

3.2.5 Data Memory

Là nơi lưu trữ dữ liệu

Nhận kết quả của ALU làm địa chỉ tại ngõ vào

Khi tín hiệu MemWrite=1 thì dữ liệu mới sẽ được ghi vào

Khi tín hiệu MemRead=1 thì khối này đọc dữ liệu, trong quá trình đọc dữ liệu khối này

“phản ứng” theo combination logic

module Data_Memory(Read_Data, Addr, Write_Data,

Write_En, Read_En, clk);

output [31:0]Read_Data;

input [31:0]Addr, Write_Data;

input Write_En, Read_En;

input clk;

reg [31:0]Data_Mem[1023:0];

Trang 19

Các tín hiệu điều khiển:

 RegDst: chọn thanh ghi đích cho Register File

 RegDst = 0 đối với lệnh loại I, rt là thanh ghi đích

 RegDst = 0 đối với lệnh loại R, rd là thanh ghi đích

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

 Branch: Cho phép thực hiện lệnh rẽ nhánh BNE

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

 MemWrite: Cho phép ghi dữ liệu vào bộ nhớ

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

 ALUSrc = 0: ngõ vào là giá trị của thanh ghi rt

 ALUSrc = 1: ngõ vào là giá trị Immediate đã được mở rộng thành 32bit

 RegWrite: Cho phép ghi dữ liệu vào thanh ghi đích

 MemtoReg: Chọn giá trị để ghi vào Register File

 MemtoReg = 0: ghi dữ liệu từ kết quả ALU vào Register File

 MemtoReg = 1: ghi dữ liệu từ bộ nhớ vào Register File

 SignZero: xác định phương thức mở rộng bit

Trang 20

ALU Src

Reg Write

Mem

to Reg

SignZero

ALU opcode

Kết hợp giá trị của tín hiệu điều khiển ALU opcode từ Control Unit và 6 bit Function giải

mã từ lệnh để tạo ra tín hiệu JR_ctrl điều khiển thực hiện lệnh Jump Register

Địa chỉ lệnh Jump Register chính là dữ liệu lưu trong thanh ghi Rs

module JR_control(JR_ctr, Funct, ALU_Opcode);

case(temp) 12'b000000001000: JR_ctr = 1'b1;

Trang 21

default: JR_ctr = 1'b0; endcase

end

endmodule

Trang 22

3.2.7.2 Extender

Dùng để mở rộng 16bit Immediate

Dữ liệu vào 16 bit sẽ được mở rộng thành 32 bit Tùy thuộc vào tín hiệu điều khiển SignZero từ Control Unit mà dữ liệu vào sẽ được mở rộng với các giá trị 0 hoặc với bit thứ 16 của dữ liệu vào

Trang 23

3.3 DATAPATH CỦA MIPS CPU

Tổng quát việc thực thi lệnh bao gồm các bước sau:

PC thành PC+4 để chỉ đến lệnh tiếp theo Tiếp theo câu lệnh sẽ được đưa đến khối Control Unit

và Register File để giải mã câu lệnh, xác định thanh ghi nào cần sử dụng, mục đích của câu lệnh

là thực hiện nhiệm vụ gì

Các bước tiếp theo của quá trình thực thi lệnh phụ thuộc vào các cấu trúc của từng lệnh Chúng ta sẽ xem xét các khuôn dạng lệnh để thiết kế các datapath cho từng lệnh sao cho phù hợp

3.3.1 Datapath của các lệnh toán học và logic :

 ADD, SUB, AND, OR, XOR, NOR, SLT :

Các lệnh này thuộc khuôn dạng lệnh R-type :

Các toán hạng của các phép toán là các giá trị chứa trong các thanh ghi có địa chỉ nằm trong trường rs,rt Trường op và func cho biết chính xác chúng ta phải thực hiện phép toán nào Kết quả tính toán được sẽ được lưu vào thanh ghi trong Register File có địa chỉ nằm trong trườngrd

Trang 24

 ADDI, ANDI, ORI, XORI :

Lệnh này thuộc dạng I- type :

Lệnh này thực hiện phép toán XOR giữa một giá trị được chứa trong thanh ghi( thanh ghi này có địa chỉ chứa trong trường rs ) với một giá trị hằng Giá trị hằng này chứa trong câu lệnh là16bit nhưng nó sẽ được mở rộng thành giá trị 32 bit Kết quả của phép toán sẽ được lưu vào thanh ghi trong Register File, thanh ghi này có địa chỉ nằm trong trường rt

Trang 25

3.3.2 Datapath của các lệnh nạp, ghi :

Các lệnh LW và SW thuộc khuôn dạng lệnh I-type Trong khuôn dạng lệnh I-type trường

address 16bit tương ứng với offset và trường rs tương ứng với base register trong câu lện LW,

SW Đối với lệnh LW thì trường rt là địa chỉ đến và đối với lệnh SW thì trường này là nguồn

 LW :

Các offset 16 bit sẽ được mở rộng dấu thành 32 bit Khối ALU được sử dụng để tính tổng giữa offset đã được mở rộng với giá trị chứ trong thanh ghi mà base register chỉ đến Kết quả của phép tính này được xem là địa chỉ của vị trí nhớ trong Data memory Giá trị của ô nhớ này sẽ được ghi lại vào trong Register File, vào thanh ghi có địa chỉ nằm trong trường rt

 SW :

Các offset 16 bit sẽ được mở rộng dấu thành 32 bit Khối ALU được sử dụng để tính tổng giữa offset đã được mở rộng với giá trị chứ trong thanh ghi mà base register chỉ đến Kết quả của phép tính này được xem là địa chỉ của vị trí nhớ trong Data memory Giá trị trong thanh ghi có địa chi nằm trong trường rs sẽ được ghi vào vị trí nhớ này

Trang 26

3.3.3 Datapath của lệnh nhảy :

 BNE:

Lệnh này thuộc khuôn dạng lệnh I-type Giá trị của thanh ghi có địa chỉ nằm trong trương rs,rt sẽ được so sánh với nhau Nếu hai giá trị này không bằng nhau thi nhảy đến địa chỉ có giá trị address (32 bit)+ PC+4 Trường address 16 bit sẽ được mở rộng thành 32 bit

PC= PC+4 + Sign_ext (Imm16)<<2;

 J:

Lệnh này thuộc khuôn lệnh J-type :

op (6 bit ) target (26 bit) PC={PC[31:28], target, 00}

Trang 27

 JR:

Lệnh này có khuôn lệnhnhư sau :

op (6 bit ) rs (5 bit ) 0 (15 bit ) 8PC= Reg{rs}

3.3.4 Datapath của MIPs

Sau khi thiết kế datapath cho từng lệnh riêng, ta ghép chúng lại để có được datapath của MIPS CPU như sau :

Trang 28

3.4 CPU MIPS SINGLE CYCLE

Kết nối các khối đã thiết kế theo datapath của MIPs đã xác định

module SingleCycleMips(input clk, reset);

/*********

*Khai Báo*

*********/

//Khoi Program Counter

wire [31:0]PC_in, PC_out; //Dia chi ngo vao & rawire [31:0]PC_4, //Dia chi lenh tiep theo

PC_BNE, //Dia chi neu thuc hien lenh Branch Not Equal

PC_Jump, //Dia chi neu thuc hien lenh Jump

PC_Jr, //Dia chi neu thuc hien lenh Jump Register

assign Funct = Instruction[5:0];

assign Imm16 = Instruction[15:0];

//Khoi Control Unit

wire Reg_Dst, ALU_Src, MemtoReg, Reg_Write, Mem_Read, Mem_Write, Branch, Jump, SignZero;

Trang 29

wire [31:0]Extend_out;

//Khoi Register File

wire [31:0]Reg_Read_Data1, Reg_Read_Data2;

wire [31:0]Reg_Write_Data;

wire [4:0] Reg_Write_Addr;

//Khoi Data Memory

wire [31:0]Mem_Read_Data, Mem_Addr, Mem_Write_Data;

Ngày đăng: 06/03/2017, 11:17

HÌNH ẢNH LIÊN QUAN

Bảng chân trị - Thiết kế alu và control theo kiến trúc mips 32 bit
Bảng ch ân trị (Trang 11)
Bảng chân trị trên cho ta thấy rõ hơn việc lựa chọn giá trị của B và Cin để thực hiện phép  toán (với B_select là giá trị B được lựa chọn) - Thiết kế alu và control theo kiến trúc mips 32 bit
Bảng ch ân trị trên cho ta thấy rõ hơn việc lựa chọn giá trị của B và Cin để thực hiện phép toán (với B_select là giá trị B được lựa chọn) (Trang 13)
Bảng tín hiệu điều khiển ALU - Thiết kế alu và control theo kiến trúc mips 32 bit
Bảng t ín hiệu điều khiển ALU (Trang 16)

TỪ KHÓA LIÊN QUAN

w