lab 3

31
NHÓM 4 – 10DTLT ĐỒ ÁN VI XỬ LÝ VÀ MÁY TÍNH TRƯỜNG ĐH BÁCH KHOA ĐÀ NẴNG KHOA ĐIỆN TỬ - VIỄN THÔNG LAB3: THIẾT KẾ BỘ XỬ LÝ MIPS SINGLE CYCLE

Upload: hoang-mai

Post on 27-Nov-2014

600 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Lab 3

NHÓM 4 – 10DTLT

ĐỒ ÁN VI XỬ LÝ VÀ MÁY TÍNH

TRƯỜNG ĐH BÁCH KHOA ĐÀ NẴNG

KHOA ĐIỆN TỬ - VIỄN THÔNG

LAB3: THIẾT KẾ BỘ XỬ LÝ MIPS SINGLE CYCLE

Page 2: Lab 3

Yêu cầu thiết kế

Thiết kế bộ 32-bit MIPS Single-Cycle CPU đơn giản.

CPU thực hiện được các lệnh : LW, SW, J, BNE, XORI,

ADD, SUB. JR và SLT.

Xây dựng project 3 có sử dụng Register File của project 1

và MIPS ALU của project 2.

Sử dụng file “datamem.v” và “instrmem.v” để xây dựng

module data memory và instruction memory.

Bộ Control logic có thể được viết theo kiểu behavioral.

Page 3: Lab 3

Quan điêm hiêu suât

Chúng ta đã biết hiệu suất của một máy tính được quyết định bởi 3 yếu tố chính:Số lệnh (instruction count)Thời gian một chu kỳ xung đồng bộ

(clock cycle time)Số chu kỳ xung đồng bộ cho mỗi

lệnh (CPI)

I-Count

CPI Cycle

Trong đó, trình biên dịch và cấu trúc tập lệnh (ISA) quyết định số lệnh yêu cầu đối với một chương trình sẵn có. Tuy nhiên quá trình thực hiện của bộ xử lý lại quyết định cả độ rộng của một clock cycle và số clock cycle trên mỗi lệnh.

Page 4: Lab 3

32-bit MIPS Single-Cycle CPU

Khối xử lý trung tâm (Central Processor Unit) có khả năng thực thi tập lệnh MIPS 32-bit trong một chu kỳ máy.

CPU có khả năng thực hiện các lệnh cơ bản của tập lệnh MIPS bao gồm:

Các lệnh tham chiếu bộ nhớ: load word (lw) và store word (sw)

Các lệnh số học-luận lý: add, sub, slt, xoriCâu lệnh rẽ nhánh branch not equal (bne) và lệnh nhảy

jump (j) hoặc jump register (jr).

Page 5: Lab 3

32-bit MIPS Single-Cycle CPU

Hai thành phần chính của CPU: Datapath và Control Unit. Khối điều khiển bao gồm:

Các ngõ vào, các ngõ ra. Biên dịch lệnh = nạp lệnh, giải mã và thực thi lệnh.

Datapath bao gồm: Các khối chức năng = ALU, các bộ nhân, bộ chia … Các thanh ghi = Bộ đếm chương trình (Program Counter), các

thanh ghi dịch, các thanh ghi lưu trữ.

Ngoài các thanh ghi, datapath còn chứa các logic số học bao gồm các bus, các bộ MUX, các bộ giải mã và các mạch xử lý.

Page 6: Lab 3

Cac thanh phần cua Datapath

DataMemory

Address

Data_in

Data_out

MemRead MemWrite

32

32

32

ALU

ALU control

ALU result

zero

32

32

32

overflow

cout

negative

mux

0

1

select

32

Address

Instruction

InstructionMemory

32

Registers

RA

RB

BusA

RegWrite

BusB

RW

5

5

5

32

32

32

BusW

Clock

PC

32 32

Extend 3216

SignExt

Phần tử tông hợp

ALU, Adder

Immediate extender

Multiplexers

Phần tử lưu trữ

Instruction memory

Data memory

PC register

Register file

Page 7: Lab 3

Cac tâp lênh cơ ban cua Mips

Page 8: Lab 3

Tông quan qua trinh thưc hiên

Đối với mỗi câu lệnh, hai bước đầu tiên là đồng nhất: Gửi PC đến bộ nhớ lệnh để nạp lệnh. Đọc một hoặc hai thanh ghi, sử dụng các trường của câu lệnh để chọn

thanh ghi cần đọc. Sau hai bước này, các bước còn lại để hoàn tất một câu lệnh tùy thuộc vào

khuôn dạng lệnh. Đối với tất cả các khuôn dạng lệnh ngoại trừ lệnh nhảy đều sử dụng ALU

thực hiện các chức năng sau: Các câu lệnh số học: tính toán các toán hạng. Các câu lệnh rẽ nhánh: thực hiện so sánh. Các câu lệnh tham chiếu bộ nhớ: tính toán địa chỉ của bộ nhớ dữ liệu.

Mặt khác, PC sẽ tăng lên 4 để gửi địa chỉ đến câu lệnh tiếp theo

Page 9: Lab 3

Phương phap đông bô dư liêu

Chúng ta giả sử xung clock kích hoạt sườn lên (positive edge-triggered clocking). Trong một chu kỳ xung clock:

Bắt đầu đọc nội dung của các phần tử trạng thái.Gửi các giá trị qua các mạch logic tô hợp.Viết kết quả đến một hoặc nhiều phần tử trạng thái khi kết thúc chu

kỳ clock cycle. Phương pháp đồng bộ xung clock cho phép một phần tử trạng thái được

đọc và ghi trong cùng một clock cycle (ngoại trừ các bus chứa dữ liệu tức thời).

Page 10: Lab 3

Thiết kế datapath riêng phần

Tập lệnh MIPS cơ bản có thể được chia thành 3 kiểu lệnh chính Kiểu thanh ghi (R) – chỉ dùng thanh ghi làm đối số. Kiểu tức thì (I) – dùng thanh ghi và các số làm đối số. Kiểu nhảy (J) – dùng địa chỉ làm đối số.

Đối với mỗi kiểu lệnh thì quá trình thực thi lệnh là giống nhau vậy nên ta cũng chia phần thiết kế datapath thành 3 phần tương ứng.

Page 11: Lab 3

Datapath - Qua trinh nạp lênh

Để tìm lệnh chúng ta cần : Thanh ghi bộ đếm chương trình (Program Counter – PC) Bộ nhớ lệnh (Instruction Memory) Bộ cộng tăng PC lên 4 (Adder)

PC

32

Address

Instruction

InstructionMemory

32

32 32

4Add

next PC

Datapath này không xét đến câu lệnh rẽ

nhánh.

2 bit thấp nhất của PC là ‘00’ do đó PC là bội của 4.

Cải thiện: Có thể sử dụng PC – 30 bit và tăng PC lên 1

sau mỗi lệnh.

32

Address

Instruction

InstructionMemory

32

30

PC

00

+1

30

Datapath sau khi cai thiên

next PC

Page 12: Lab 3

Datapath cua khuôn dạng lênh – R

Op6 Rs5 Rt5 Rd5 funct6sa5

ALU 32

32

ALUCtrl

RegWrite

Registers

RA

RB

BusA

BusB

RWBusW

5Rs

5Rt

5RdALU result

32

RA & RB đến từ trường Rs & RtRW đến từ trường RdHai đầu vào ALU đến từ BusA & BusB của RegistersĐầu ra của khối ALU được kết nối với BusW của registersTín hiệu điều khiển :

oALUCtrl được điều khiển bởi trường funct bởi vì Op=0 đối với khuôn dạng lệnh R.oRegWrite được sử dụng để kích hoạt ghi của kết quả ALU

32

Address

Instruction

InstructionMemory

32

30

PC

00

+1

30

Page 13: Lab 3

Datapath cua khuôn dạng lênh – I

Op6 Rs5 Rt5 immediate16

ALUCtrl

RegWrite

32 5

Registers

RA

RB

BusA

BusB

RWBusW

5Rs

5Rt

SignExt

32

ALU result

32

32

ALU

ExtenderImm16

Bây giờ RW đến từ trường RtĐầu vào thứ hai của ALU đến từ trường mở rộng dấu .RB & BusB không sử dụng.Tín hiệu điều khiển :

ALUCtrl được điều khiển từ trường Op. RegWrite được sử dụng để kích hoạt ghi kết quả ALU vào thanh ghi. SignExt được sử dụng để điều khiển trường mở rộng dấu 16 bit thành 32

bit.

32

Address

Instruction

InstructionMemory

32

30

PC

00

+1

30

Page 14: Lab 3

Tô hợp Datapath cua khuôn dạng – R va – I

ALUCtrl

RegWrite

SignExt

mux

0

1

RegDst

ALUSrc

mux

0

1

Bộ mux để chọn RW là Rt hay là Rd

Một bộ mux khác để chọn đầu vào của ALU được lấy từ nguồn dữ liệu của thang ghi Rt trên BusB hoặc từ trường mở rộng dấu

Tín hiệu điều khiển :

ALUCtrl được điều khiển bởi trường Op hay trường funct.

RegWrite kích hoạt ghi dữ liệu vào từ kết quả của ALU.

SignExt điều khiển trường mở rộng dấu 16 bit sang 32 bit.

RegDst chọn thanh ghi đích Rt hoặc Rd.

ALUSrc chọn hai nguồn đầu vào ALU từ BusB hoặc từ trường mở rộng dấu.

ALU

ALU result

32

32

Registers

RA

RB

BusA

BusB

RW

5

32

BusW

32

Address

Instruction

InstructionMemory

32

30

PC

00

+1

30Rs

5

Rd

ExtenderImm16

Rt

32 5

Page 15: Lab 3

Controlling ALU Instructions

Đối với khuôn lệnh R , RegDst is ‘1’ để chọn Rd trên RW và ALUSrc is

‘0’ để chọn t BusB là ngo vào thứ hai của ALU. Phần hoạt động được

biểu diên băng màu Xanh

Đối với khuôn dạng lệnh I , RegDst is ‘0’ để chọn

Rt trên RW và nd ALUSrc is ‘1’ để chọn trường mở rộng dấu là

đầu vào thứ hai của ALU. Phần hoạt động được

biểu diên băng màu Xanh

RegDst = 1

ALUSrc = 0

ALU

ALUCtrl

ALU result

32

32

Registers

RA

RB

BusA

RegWrite = 1

BusB

RW

5

32

BusW

32

Address

Instruction

InstructionMemory

32

32

PC

00

+4

32Rs

5

Rd

Extender

SignExt

Imm16

Rt

32

mux

0

1 5

mux

0

1

RegDst = 0

ALUSrc = 1

ALU

ALUCtrl

ALU result

32

32

Registers

RA

RB

BusA

RegWrite = 1

BusB

RW

5

32

BusW

32

Address

Instruction

InstructionMemory

32

30

PC

00

+1

30Rs

5

Rd

Extender

SignExt

Imm16

Rt

32

mux

0

1 5

mux

0

1

Page 16: Lab 3

Cac chi tiết cua khối mở rông 32-bit

Có hai kiểu mở rộng 32-bit: Mở rộng dấu. : Mở rộng 16-bit cao theo bit MSB của trường Imm16 Mở rộng Zero : Mở rộng 16-bit cao là bit 0

Tín hiệu điều khiển SignExt xác định kiểu mở rộng. Thực hiện mở rộng :

SignExt = 0 Upper16 = 0

..

.

SignExt

Upper16 bits

Lower16 bits

..

.

Imm16

MSB

SignExt = 1

Upper16 = sign bit

Page 17: Lab 3

Datapath cua câu lênh tham chiếu bô nhớ

Data memory được thêm vào để truyền tải và lưu trữ dữ liệu.

DataMemory

Address

Data_in

Data_out

32

32ALU

ALUCtrl

32

Registers

RA

RB

BusA

RegWrite

BusB

RW

5

BusW

32

Address

Instruction

InstructionMemory

32

30

PC

00

+1

30

Rs

5

Rd

Extender

SignExt

Imm16

Rt

mux

0

1 5

RegDst

ALUSrc

mux

0

1

32

MemRead MemWrite

32

ALU result

32

mux

0

1

MemtoReg

ALU tính toán địa chỉ data memory Bộ mux thứ ba dùng để chọn dữ liêu trên BusW là kết quả của ALU hay đầu ra của

memory data.

BusB được kết nối với Data_in của Data Memory đối với lệnh Lw.

Thêm tín hiệu điều khiển:

MemRead điều khiển đối với lệnh Lw

MemWrite điều khiển đối với lệnh Sw.

MemtoReg để chọn dữ liệu trên BusW là ALU result hoặc Memory Data_out

Page 18: Lab 3

Tín hiêu điều khiên lênh LW

SignExt = ‘sign’ để thực hiện mở rộng dấu 16 to 32 bits

ALUCtrl = ‘ADD’để tính toán địa chỉ của Data memory là Reg(Rs) + sign-extend(Imm16)

ALUSrc = ‘1’ chọn trường mở rộng dấu như đầu vào thứ hai của ALU.

MemRead = ‘1’ để đọc dữ liệu từ data Memory

RegDst = ‘0’ chọn Rt là thanh ghi đích

RegWrite = ‘1’ để viết dữ liệu trên data Memory trên BusW đến thanh ghi Rt

MemtoReg = ‘1’ là nơi để đọc dữ liệu từ bộ nhớ về BusW

DataMemory

Address

Data_in

Data_out

32

32

ALU

ALUCtrl= ADD

ALU result

32

32Registers

RA

RB

BusA

RegWrite= 1

BusB

RW

5

BusW

32

Address

Instruction

InstructionMemory

32

30

PC

00

+1

30

Rs

5

Rd

Extender

SignExt = sign

Imm16

Rt

mux

0

1 5

mux

0

1

mux

0

1

32

MemRead= 1

MemWrite= 0

RegDst= 0

ALUSrc= 1

MemtoReg= 1

32

Page 19: Lab 3

Tín hiêu điều khiên lênh SW

ALUCtrl = ‘ADD’ để tính toán địa chỉ của dât memory là Reg(Rs) + sign-extend(Imm16)

ALUSrc = ‘1’ để chọn trường mở rộng dấu là đầu vào thứ hai của ALU.

MemWrite = ‘1’để viết dữ liệu vào data memory

RegDst = ‘x’ bởi vì không có thanh ghi đích.

SignExt = ‘sign’ để mở rộng dấu 16 to 32 bits

RegWrite = ‘0’ bởi vì không có thanh ghi nào được viết bởi lệnh store.

MemtoReg = ‘x’ bởi vì chúng ta không cần nơi viết dữ liệu trên BusW .

DataMemory

Address

Data_in

Data_out

32

32

32

ALU

ALUCtrl= ADD

ALU result

32

32Registers

RA

RB

BusA

RegWrite= 0

BusB

RW

5

BusW

32

Address

Instruction

InstructionMemory

32

30

PC

00

+1

30

Rs

5

Rd

Extender

SignExt = sign

Imm16

Rt

mux

0

1 5

RegDst = x

mux

0

1

mux

0

1

32

MemRead= 0

MemWrite = 1

MemtoReg= x

ALUSrc= 1

Page 20: Lab 3

Datapath cua câu lênh nhay va lênh rẽ nhanh

Thêm các tín hiệu điều khiển. J, Bne là các tập lệnh của nhảy và rẽ nhánh. Zero để kiểm tra tình trạng của ALU Jump = 1 chọn Jump & Branch được thực

hiện.

Ext

DataMemory

Address

Data_in

Data_out

MemRead MemWrite

32

ALU

ALUCtrl

ALU result

32Registers

RA

RB

BusA

RegWrite

BusB

RW

5

BusW

32

Address

Instruction

InstructionMemory

PC

00

+1

30

Rs

5

Rd

Imm26

Rt

mux

0

1 5

RegDst

ALUSrc

mux

0

1

mux

0

1

MemtoReg

mux

0

1

30

zero

30 Jump or Branch Target Address

30

Jump Imm16

J, Bne

Next

PC

Bây giờ CPU sẽ tính toán địa chỉ của lệnh nhảy hoặc địa chỉ

của lệnh rẽ nhánh.

Đối với lệnh rẽ nhánh thì ALU thực hiện một lệnh trừ.

Page 21: Lab 3

Controlling the Execution of Jump

Ext

DataMemory

Address

Data_in

Data_out 32

ALU result

32

5

Registers

RA

RB

BusA

BusB

RW BusW

32

Address

Instruction

InstructionMemory

PC

00

30

Rs

5

Rd

Imm26

Rt

mux

0

1 5

mux

0

1

mux

0

1mux

0

1

30

30 Jump Target Address

30

Imm16

Next

PC

RegWrite= 0

MemRead= 0

MemWrite

= 0

J = 1

RegDst= x ALUCtrl

= xALUSrc

= x

MemtoReg= x

ExtOp= x

Jump= 1 +1 zero

ALU

Chúng ta không cần RegDst, ExtOp, ALUSrc, ALUCtrl, and MemtoReg

MemRead, MemWrite & RegWrite băng 0

J = 1 được chọn, Imm26 là địa chỉ đích của lệnh nhảy.

Jump = 1 để chọn địa chỉ đích của lệnh nhảy.

4 bit cao đến từ [PC+4]

Datapath này chưa xét đến câu lệnh jr, sẽ có thêm bộ mux2-1 với tín hiệu điều khiển Jumpreg để chọn địa chỉ PC tiếp theo là từ câu lệnh J hay JR

Page 22: Lab 3

Tín hiêu điều khiên thưc thi câu lênh rẽ nhanh

Ext

DataMemory

Address

Data_in

Data_out 32

ALU result

32

5

Registers

RA

RB

BusA

BusB

RW BusW

32

Address

Instruction

InstructionMemory

PC

00

30

Rs

5

Rd

Imm26

Rt

mux

0

1 5

mux

0

1

mux

0

1mux

0

1

30

30 Branch Target Address

30

Imm16

Next

PC

RegWrite= 0

MemRead= 0

MemWrite= 0

Bne = 1ALUCtrl= SUB

ALUSrc= 0

RegDst= x

MemtoReg= x

ExtOp= x

Jump= 1 +1 zero

ALU

RegDst = ExtOp = MemtoReg = xMemRead = MemWrite = RegWrite = 0

Bne =1

ALUSrc = ‘0’ (ngõ vào thứ 2 của ALU là BusB)ALUCtrl = ‘SUB’ tạo cờ zero

PC tiếp theo xác định Jump dựa vào cờ Zero.

Địa chỉ đích câu lệnh rẽ nhánh là ngõ ra tiếp theo của PC

Page 23: Lab 3

Main Control va ALU Control

Input: 6-bit trường opcode field từ câu lệnh

Output: 9 tín hiệu điều khiển for datapath ALUOp for ALU Control

Input:

6-bit trường function field từ câu lệnh

ALUOp từ main control

Output:

Tín hiệu ALUCtrl đến ALU

1 tín hiệu điều khiển Jumpreg cho datapath

ALUControl

MainControl

Datapath 32

Address

Instruction

InstructionMemory

ALU

Op6R

egD

st

Reg

Wri

te

Sign

Ext

AL

USr

c

Mem

Rea

d

Mem

Wri

te

Mem

toR

eg

Bne

ALUOp

ALUCtrl

func

t6

Jum

p

Jum

preg

Tín hiệu điều khiển Jumpreg được xác định từ 2 trường opcode và function của câu lệnh JR nên được tách riêng để thuận tiện cho việc thiết kế.

Page 24: Lab 3

Single-Cycle Datapath + Control

Jump

Ext

DataMemory

Address

Data_in

Data_out 32

ALU

ALU result

32

5

Registers

RA

RB

BusA

BusB

RW BusW

32

Address

Instruction

InstructionMemory

PC

00

+1

30

Rs

5

Rd

Imm26

Rt

mux

0

1 5

mux

0

1

mux

0

1mux

0

1

30

30 Jump or Branch Target Address

30

Imm16

Next

PC

zero

ALUCtrl

ALUCtrl

ALUOp

func

RegDst ALUSrcRegWrite

J, Bne

MemtoReg

MemRead

MemWrite

SignExt

MainControl

Op

Page 25: Lab 3

Ý nghia cua cac tín hiêu điều khiênNo. Tín hiệu đơn Tác động mức 0 Tác động mức 1 1 RegDst Thanh ghi đích sẽ lấy địa

chỉ từ trường rt (các bit từ 20~16)

Thanh ghi đích sẽ lấy địa chỉ từ trường rd (các bit từ 15~ 11)

2 RegWrite Không cho phép ghi dữ liệu vào tệp thanh ghi.

Cho phép dữ liệu từ Writedata được ghi vào thanh ghi.

3 ALUSrc Toán hạng thứ hai của ALU được lấy từ ngõ ra thứ hai của tệp thanh ghi (Read data 2).

Toán hạng thứ hai của ALU là kết quả được mở rộng zero/dấu từ 16 bit thấp của câu lệnh (Imm16bit)

4 Branch PC= PC+4 PC=PC+4+Sign ext(Imm16)<<2

5 MemRead Không cho phép đọc từ bộ nhớ dữ liệu.

Nội dung bộ nhớ dữ liệu chỉ định bởi địa chỉ ngõ vào được đặt vào ngõ ra Read data.

6 MemWrite Không cho phép ghi vào bộ nhớ dữ liệu.

Nội dung bộ nhớ dữ liệu chỉ định bởi địa chỉ ngõ vào sẽ được thay thế bởi giá trị ở ngõ vào Write data.

7 MemtoReg Giá trị ở ngõ vào Write data của tệp thanh ghi được lấy từ kết quả ngõ ra của ALU.

Giá trị ở ngõ vào Write data của tệp thanh ghi được lấy từ bộ nhớ dữ liệu.

8 Jump PC=PC+4 hoặc PC=PC+4+Sign ext(Imm16)<<2

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

9 Jumpreg PC=PC+4 Hoặc PC=PC+4+Sign ext(Imm16)<<2 Hoặc PC={PC[31:28],target,00}.

PC=Reg[rs]

10 SignExt Mở rộng zero Mở rộng dấu

Page 26: Lab 3

Main Control Signal Values

Page 27: Lab 3

ALU Control Truth Table

Từ Lab2, Ta đã thiết kế khối ALU có khả năng thực hiện 4 phép tính cơ bản: Add, Sub, Xor và SLT với 2 bit điều khiển ALUctrl[1:0]. Tùy vào chức năng của mỗi câu lệnh mà ALU sẽ thực hiện 1 trong 4 phép tính này. Cụ thể như sau: Instructions Operation ALUctrl[1:0] add, lw, sw Add 00 xori Xor 01 sub,bne Sub 10 slt Slt 11 Ngõ vao: 6 bit thấp của mã lệnh hay Function[5:0] và 2 bit điều khiển từ khối điều khiển chính hay ALUOp[1:0]. Trong đó 2 bit điều khiển ALUOp1 và ALUOp0 được định nghĩa như sau: ALUOp[1:0] Chức năng ALU 00 Add 01 Subtract 10 Phụ thuộc trường Function 11 Xor từng bit

Page 28: Lab 3

ALU Control Truth Table

Ngõ ra: ALUctrl[1:0] sẽ điều khiển chức năng ALU.

I/O Signal name add sub slt xori lw sw bne j jr

I

Funct5 1 1 1 x x x x x 0 Funct4 0 0 0 x x x x x 0 Funct3 0 0 1 x x x x x 1 Funct2 0 0 0 x x x x x 0 Funct1 0 1 1 x x x x x 0 Funct0 0 0 0 x x x x x 0 ALUOp1 1 1 1 1 0 0 0 x x ALUOp0 0 0 0 1 0 0 1 x x

O ALUctrl1 0 1 1 0 0 0 1 x x ALUctrl0 0 0 1 1 0 0 0 x x

Page 29: Lab 3

Nhược điêm cua bô xư ly Singcle Cycle

Bộ xử lý Single Cycle cho phép thực hiện tất cả các lệnh trọng 1 chu kỳ.

Tất cả các tập lệnh mất nhiều thời gian.

Instruction Fetch Reg Read ALU Reg Write

Memory ReadInstruction Fetch

longest delay

ALUReg Read Reg Write

Instruction Fetch ALU Memory WriteReg Read

Instruction Fetch Reg Read ALU

Instruction Fetch Decode

ALU

Load

Store

Branch

Jump

Bộ xử lý Single Cycle thiết kế đơn giản nhưng không hiệu quả.

Page 30: Lab 3

MIPS

Quartus ModelSim

Page 31: Lab 3

NGUYỄN HỒNG QUÂNLÊ THỊ NI NA

MAI XUÂN HOÀNGNGUYÊN MINH HỔ

TRẦN NGỌC TRỌNGLÊ THỊ HỒNG DUNG

TRẦN VŨ QUANG HƯNGLÊ THỊ KIM CẨM