lab 3
TRANSCRIPT
![Page 1: Lab 3](https://reader033.vdocuments.mx/reader033/viewer/2022061200/5477012fb4af9f74098b46a6/html5/thumbnails/1.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022061200/5477012fb4af9f74098b46a6/html5/thumbnails/2.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022061200/5477012fb4af9f74098b46a6/html5/thumbnails/3.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022061200/5477012fb4af9f74098b46a6/html5/thumbnails/4.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022061200/5477012fb4af9f74098b46a6/html5/thumbnails/5.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022061200/5477012fb4af9f74098b46a6/html5/thumbnails/6.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022061200/5477012fb4af9f74098b46a6/html5/thumbnails/7.jpg)
Cac tâp lênh cơ ban cua Mips
![Page 8: Lab 3](https://reader033.vdocuments.mx/reader033/viewer/2022061200/5477012fb4af9f74098b46a6/html5/thumbnails/8.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022061200/5477012fb4af9f74098b46a6/html5/thumbnails/9.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022061200/5477012fb4af9f74098b46a6/html5/thumbnails/10.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022061200/5477012fb4af9f74098b46a6/html5/thumbnails/11.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022061200/5477012fb4af9f74098b46a6/html5/thumbnails/12.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022061200/5477012fb4af9f74098b46a6/html5/thumbnails/13.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022061200/5477012fb4af9f74098b46a6/html5/thumbnails/14.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022061200/5477012fb4af9f74098b46a6/html5/thumbnails/15.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022061200/5477012fb4af9f74098b46a6/html5/thumbnails/16.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022061200/5477012fb4af9f74098b46a6/html5/thumbnails/17.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022061200/5477012fb4af9f74098b46a6/html5/thumbnails/18.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022061200/5477012fb4af9f74098b46a6/html5/thumbnails/19.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022061200/5477012fb4af9f74098b46a6/html5/thumbnails/20.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022061200/5477012fb4af9f74098b46a6/html5/thumbnails/21.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022061200/5477012fb4af9f74098b46a6/html5/thumbnails/22.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022061200/5477012fb4af9f74098b46a6/html5/thumbnails/23.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022061200/5477012fb4af9f74098b46a6/html5/thumbnails/24.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022061200/5477012fb4af9f74098b46a6/html5/thumbnails/25.jpg)
Ý 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](https://reader033.vdocuments.mx/reader033/viewer/2022061200/5477012fb4af9f74098b46a6/html5/thumbnails/26.jpg)
Main Control Signal Values
![Page 27: Lab 3](https://reader033.vdocuments.mx/reader033/viewer/2022061200/5477012fb4af9f74098b46a6/html5/thumbnails/27.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022061200/5477012fb4af9f74098b46a6/html5/thumbnails/28.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022061200/5477012fb4af9f74098b46a6/html5/thumbnails/29.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022061200/5477012fb4af9f74098b46a6/html5/thumbnails/30.jpg)
MIPS
Quartus ModelSim
![Page 31: Lab 3](https://reader033.vdocuments.mx/reader033/viewer/2022061200/5477012fb4af9f74098b46a6/html5/thumbnails/31.jpg)
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