Lab3 thiết kế bộ xử lý mips single cycle
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 ĐỒ ÁN VI XỬ LÝ VÀ MÁY TÍNH NHÓM – 10DTLT Yêu cầu thiết kế Thiết kế 32-bit MIPS Single-Cycle CPU đơn giản CPU thực lệnh : LW, SW, J, BNE, XORI, ADD, SUB JR SLT Xây dựng project có sử dụng Register File project MIPS ALU project Sử dụng file “datamem.v” “instrmem.v” để xây dựng module data memory instruction memory Bộ Control logic viết theo kiểu behavioral Quan điểm hiệu suất Chúng ta biết hiệu suất máy tính định yếu tố chính: Số lệnh (instruction count) I-Count Thời gian chu kỳ xung đồng (clock cycle time) Số chu kỳ xung đồng cho CPI Cycle lệnh (CPI) Trong đó, trình biên dịch cấu trúc tập lệnh (ISA) định số lệnh yêu cầu chương trình sẵn có Tuy nhiên trình thực xử lý lại định độ rộng clock cycle số clock cycle lệnh 32-bit MIPS Single-Cycle CPU Khối xử lý trung tâm (Central Processor Unit) có khả thực thi tập lệnh MIPS 32-bit chu kỳ máy CPU có khả thực lệnh tập lệnh MIPS bao gồm: Các lệnh tham chiếu nhớ: load word (lw) store word (sw) Các lệnh số học-luận lý: add, sub, slt, xori Câu lệnh rẽ nhánh branch not equal (bne) lệnh nhảy jump (j) jump register (jr) 32-bit MIPS Single-Cycle CPU Hai thành phần CPU: Datapath Control Unit Khối điều khiển bao gồm: Các ngõ vào, ngõ Biên dịch lệnh = nạp lệnh, giải mã thực thi lệnh Datapath bao gồm: Các khối chức = ALU, nhân, chia … Các ghi = Bộ đếm chương trình (Program Counter), ghi dịch, ghi lưu trữ Ngoài ghi, datapath chứa logic số học bao gồm bus, MUX, giải mã mạch xử lý Các thành phần của Datapath Phần tử tổng hợp 32 16 ALU, Adder Extend SignExt PC 32 32 32 Register file 32 Address ALU result overflow negative Data Memory 32 32 BusA RB BusB 32 BusW Clock 32 32 Data_out Data_in MemRead RA RegWrite 32 Address Registers RW A L U ALU control 32 Instruction Memory Instruction memory PC register select Instruction Phần tử lưu trữ Data memory 32 Immediate extender Multiplexers m u x 32 zero cout MemWrite Các tập lệnh bản của Mips Tổng quan quá trình thực hiện Đối với câu lệnh, hai bước đồng nhất: Gửi PC đến nhớ lệnh để nạp lệnh Đọc hai ghi, sử dụng trường câu lệnh để chọn ghi cần đọc Sau hai bước này, bước lại để hoàn tất câu lệnh tùy thuộc vào khuôn dạng lệnh Đối với tất khuôn dạng lệnh ngoại trừ lệnh nhảy sử dụng ALU thực chức sau: Các câu lệnh số học: tính toán toán hạng Các câu lệnh rẽ nhánh: thực so sánh Các câu lệnh tham chiếu nhớ: tính toán địa nhớ liệu Mặt khác, PC tăng lên để gửi địa đến câu lệnh Phương pháp đồ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 chu kỳ xung clock: Bắt đầu đọc nội dung phần tử trạng thái Gửi giá trị qua mạch logic tổ hợp Viết kết đến nhiều phần tử trạng thái kết thúc chu kỳ clock cycle Phương pháp đồng xung clock cho phép phần tử trạng thái đọc ghi clock cycle (ngoại trừ bus chứa liệu tức thời) Thiết kế datapath riêng phần Tập lệnh MIPS chia thành kiểu lệnh Kiểu ghi (R) – dùng ghi làm đối số Kiểu tức (I) – dùng ghi số làm đối số Kiểu nhảy (J) – dùng địa làm đối số Đối với kiểu lệnh trình thực thi lệnh giống nên ta chia phần thiết kế datapath thành phần tương ứng Datapath câu lệnh tham chiếu nhớ Data memory được thêm vào để truyền tải và lưu trữ liệu SignExt Imm16 +1 00 30 30 Instruction Memory Instruction PC 32 Rs 32 Rt Address Extender 32 BusA RA RB BusB RW BusW RegDs t MemRead ALUSrc m u x MemWrite MemtoReg ALU result 32 Registers m u Rd x ALUCtrl A L U 32 Data Memory Address 32 Data_out Data_in m 32 u x 32 RegWrite ALU tính toán địa chỉ data memory Thêm tín hiệu điều khiển: Bộ mux thứ ba dùng để chọn dữ liêu BusW là kết quả của ALU hay đầu của memory data MemRead điều khiển đối với lệnh Lw BusB được kết nối với Data_in của Data MemWrite điều khiển đối với lệnh Sw Memory đối với lệnh Lw MemtoReg để chọn dữ liệu BusW là ALU result hoặc Memory Data_out 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 Imm16 +1 00 30 30 Instruction Memory Instruction Rs 32 Rt PC 32 Address Extender 32 MemRead =1 ALUSrc =1 Registers RB BusB RW BusW RegWrite =1 m u x MemWrite =0 ALU result BusA RegDst =0 ALUCtrl = ADD 32 RA m u Rd x RegDst = ‘0’ chọn Rt là ghi đích SignExt = sign A L U 32 MemtoReg =1 Data Memory Address 32 Data_out m 32 u x Data_in 32 MemRead = ‘1’ để đọc dữ liệu từ data Memory ALUSrc = ‘1’ chọn trường mở rộng dấu đầu vào thứ hai của ALU MemtoReg = ‘1’ là nơi để đọc dữ liệu từ bộ nhớ về BusW ALUCtrl = ‘ADD’để tính toán địa chỉ của Data memory là Reg(Rs) + sign-extend(Imm16) RegWrite = ‘1’ để viết dữ liệu data Memory BusW đến ghi Rt Tín hiệu điều khiển lệnh SW SignExt = ‘sign’ để mở rộng dấu 16 to 32 bits SignExt = sign Imm16 +1 00 30 30 Instruction Memory Instruction Rs 32 Rt PC 32 Address ALUSrc =1 Registers RB BusB RW BusW RegWrite =0 m u x MemWrite =1 ALU result BusA RegDst =x 32 MemRead =0 32 RA m u Rd x RegDst = ‘x’ bởi vì không có ghi đích Extender ALUCtrl = ADD A L U 32 MemtoReg =x Data Memory Address 32 Data_out m 32 u x Data_in 32 MemWrite = ‘1’để viết dữ liệu vào data memory ALUSrc = ‘1’ để chọn trường mở rộng dấu là đầu vào thứ hai của ALU MemtoReg = ‘x’ bởi vì chúng ta không cần nơi viết dữ liệu BusW ALUCtrl = ‘ADD’ để tính toán địa chỉ của dât memory là Reg(Rs) + sign-extend(Imm16) RegWrite = ‘0’ bởi vì không có ghi nào được viết bởi lệnh store Datapath câu lệnh nhảy lệnh rẽ nhánh 30 Jump or Branch Target Address 30 30 Imm26 +1 00 Jump PC m u x 30 Imm16 Instruction Memory Instruction Rs 32 Rt Address RA BusB m u Rd x RW BusW Ext m u x MemWrite ALU result MemtoReg zero Data Memory BusA Registers RB MemRead Next PC A L U Address 32 Data_out m 32 u x Data_in 1 RegDst RegWrite ALUSrc ALUCtrl 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 = chọn Jump & Branch được thực hiện J, Bne 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ừ Datapath chưa xét đến câu lệnh jr, có thêm mux2-1 với tín hiệu điều khiển Jumpreg để chọn địa PC từ câu lệnh J hay JR Controlling the Execution of Jump 30 Jump Target Address 30 30 Next PC Imm26 Jump =1 00 +1 PC m u x 30 Imm16 Instruction Memory Instruction Rs 32 Rt Address Registers RB Ext BusB m u x m u Rd x RW BusW MemWrit e =0 ALU result MemtoReg =x zero BusA J = được chọn, Imm26 địa chỉ đích của lệnh nhảy RA MemRead =0 A L U Data Memory Address 32 Data_out m 32 u x Data_in 1 RegDst =x RegWrite =0 ExtOp =x ALUSrc ALUCtrl J = =x =x bit cao đến từ [PC+4] MemRead, MemWrite & RegWrite bằng Jump = để chọn địa chỉ đích của lệnh nhảy Chúng ta không cần RegDst, ExtOp, ALUSrc, ALUCtrl, and MemtoReg Tín hiệu điều khiển thực thi câu lệnh rẽ nhánh 30 Branch Target Address 30 30 Next PC Imm26 Jump =1 00 +1 30 Imm16 Instruction Memory Instruction PC m u x Rs 32 Rt Address Registers RB Ext BusB m u Rd x RW BusW m u x MemWrite =0 ALU result MemtoReg =x zero BusA Bne =1 RA MemRead =0 A L U Data Memory Address 32 Data_out m 32 u x Data_in 1 RegDst =x RegWrite =0 ExtOp =x ALUSrc ALUCtrl Bne = =0 = SUB Địa đích câu lệnh rẽ nhánh ngõ PC ALUSrc = ‘0’ (ngõ vào thứ ALU BusB) ALUCtrl = ‘SUB’ tạo cờ zero MemRead = MemWrite = RegWrite = PC xác định Jump dựa vào cờ Zero RegDst = ExtOp = MemtoReg = x Tín hiệu điều khiển Jumpreg xác định từ trường opcode function câu lệnh JR nên tách riêng để thuận tiện cho việc thiết kế Main Control ALU Control Op6 Input: Jumpreg A L U funct6 Jump Bne MemWrite MemtoReg MemRead RegDst Address ALUSrc Datapath 32 SignExt Instruction RegWrite Instruction Memory ALUCtrl Main Control 6-bit trường opcode field từ câu lệnh Output: tín hiệu điều khiển for datapath ALUOp for ALU Control ALUOp 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 tín hiệu điều khiển Jumpreg cho datapath Single-Cycle Datapath + Control 30 Jump or Branch Target Address 30 30 Next PC Imm26 +1 00 Jump PC m u x 30 Imm16 Instruction Memory Instruction Rs 32 Rt Address RA RB m u Rd x RW Ext BusB m u x BusW ALU result zero BusA Registers J, Bne A L U Data Memory Address 32 Data_out Data_in m 32 u x 1 RegDst RegWrite SignExt ALUSrc ALUCtrl func Op ALU Ctrl ALUOp Main Control MemRead MemWrite MemtoReg Ý nghĩa của các tín hiệu điều khiển Main Control Signal Values ALU Control Truth Table ALU Control Truth Table Nhược điểm của bộ xử lý Singcle Cycle Bộ xử lý Single Cycle cho phép thực hiện tất cả các lệnh trọng chu kỳ Tất cả các tập lệnh mất nhiều thời gian ALU Instruction Fetch Reg Read ALU Reg Write longest delay Load Instruction Fetch Reg Read ALU Memory Read Store Instruction Fetch Reg Read ALU Memory Write Branch Instruction Fetch Reg Read ALU Jump Instruction Fetch Decode Reg Write Bộ xử lý Single Cycle thiết kế đơn giản không hiệu quả MIPS Quartus ModelSim [...]... 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 ALU Instruction Fetch Reg Read ALU Reg Write longest delay Load Instruction Fetch Reg Read ALU Memory Read Store Instruction Fetch Reg Read ALU Memory Write Branch Instruction Fetch Reg Read ALU Jump Instruction Fetch Decode Reg Write Bộ xử lý Single Cycle. ..Datapath - Quá trình 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) Cải thiện: Có thể sử dụng Bộ cộng tăng PC lên 4 (Adder) PC – 30 bit và tăng PC lên 1 sau mỗi lệnh 2 bit thấp nhất của PC là ‘00’ do đó PC là bội của 4 next PC PC 32 32 30 Instruction Address Instruction Memory 32 Datapath này không... datapath ALUOp for ALU Control ALUOp 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 Single- Cycle Datapath + Control 30 Jump or Branch Target Address 30 30 Next PC Imm26 +1 00 Jump PC 0 m u x 30 Imm16 Instruction Memory Instruction Rs 5 32 Rt 5 Address RA RB 0 m u Rd x 1 5 RW Ext BusB 0 m... xác định Jump dựa vào cờ Zero RegDst = ExtOp = MemtoReg = x 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ế Main Control và ALU Control Op6 Input: Jumpreg A L U funct6 Jump Bne MemWrite MemtoReg MemRead RegDst Address ALUSrc Datapath 32 SignExt Instruction RegWrite Instruction Memory ALUCtrl Main Control... 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ừ 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 Controlling the Execution of Jump 30 Jump Target Address 30 30 Next PC Imm26 Jump =1 00 +1 PC 0 m u x 30 Imm16... khiển SignExt xác định kiểu mở rộng Thực hiện mở rộng : SignExt = 0⇒ Upper16 = 0 SignExt Upper 16 bits Upper16 = sign bit MSB Imm16 SignExt = 1⇒ Lower 16 bits Datapath của 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 SignExt Imm16 +1 00 30 30 Instruction Memory Instruction PC 32 Rs 5 32 Rt 5 Address Extender 5 32 BusA RA RB BusB RW BusW 1 RegDs... Read Store Instruction Fetch Reg Read ALU Memory Write Branch Instruction Fetch Reg Read ALU Jump Instruction Fetch Decode Reg Write Bộ xử lý Single Cycle thiết kế đơn giản nhưng không hiệu quả MIPS Quartus ModelSim