Đồ án cấu trúc máy tính và vi xử lý

31 594 0
Đồ án cấu trúc máy tính và vi xử lý

Đ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

Đồ án cấu trúc máy tính và vi xử lý báo cáo lab 4 BÁO CÁO LAB 4 ĐỒ ÁN CẤU TRÚC MÁY TÍNH DESIGN A MIPS PIPELINED CPU  Thiết kế bộ xử lý MIPS pipelined bao gồm các lệnh: LW, SW, J, JR, BNE, XORI, ADD, SUB và SLT.  Các lệnh đều được xử lý hoàn tất trong 1 chu kỳ lệnh.  Thiết kế dựa trên các module có sẵn SingleCycle regfife, alu, instrmem và datamem.

Đồ án cấu trúc máy tính BÁO CÁO LAB 4 ĐỒ ÁN CẤU TRÚC MÁY TÍNH DESIGN A MIPS PIPELINED CPU Design a MIPS PIPELINED CPU 1 Đồ án cấu trúc máy tính Phần 1: Giới thiệu về bộ xử lý MIPS PIPELINED 1.1 Yêu cầu:  Thiết kế bộ xử lý MIPS pipelined bao gồm các lệnh: LW, SW, J, JR, BNE, XORI, ADD, SUB và SLT.  Các lệnh đều được xử lý hoàn tất trong 1 chu kỳ lệnh.  Thiết kế dựa trên các module có sẵn SingleCycle regfife, alu, instrmem và datamem.  Datapath cần có thêm các khối Fowarding, Hazard detection unit và Control Hazard để điều chỉnh những hazard về data và control bằng cách forwarding, stalling và nhận dạng sớm các lệnh branch, jump để tránh tổn hao trong trường hợp branch taken.  Trong cơ chế pipeline có trường hợp lệnh kế tiếp không thể thực hiện trong chu kỳ kế tiếp  Hazard (xung đột)  Tồn tại 3 loại hazard: - Xung đột cấu trúc : một tài nguyên được yêu cầu nhưng bận - Xung đột về dữ liệu: đợi lệnh trước hoàn tất nhiệm vụ đọc/ghi dữ liệu - Xung đột điều khiển: Quyết định bước tiếp theo phụ thuộc vào lệnh trước đó 1.2 Thực hiện: Thực hiện datapath pineline: Dựa trên single datapath đã thực hiện ở lab trước, bài lab này, ta sẽ tách một lệnh thành 5 giai đoạn để thực hiện pipeline, điều đó có nghĩa là 5 lệnh sẽ được thực hiện trong một chu kì. Ta gọi 5 giai đoạn của pipelined datapath như sau: • IF: Nhận lệnh từ Instruction Memory • ID: Giải mã lệnh và đọc thanh ghi • EX: Thực hiện tính toán • MEM: Truy cập bộ nhớ dữ liệu • WB: Ghi kết quả vào thanh ghi file Design a MIPS PIPELINED CPU 2 Đồ án cấu trúc máy tính Để các lệnh có thể sử dụng chung các phần của datapath thì ta cần các thanh ghi thêm vào để lưu trữ dữ liệu sau mỗi giai đoạn thực hiện. Các thanh ghi đươc đặt tên theo thứ tự từ trái sang phải của datapath như sau: IF/ID, ID/EX, EX/MEM, MEM/WB. Đối với tín hiệu điều khiển, có thể được chia thành 5 nhóm như sau: • IF : - PCSrc: dùng để chọn nguồn cho PC - PCWrite: cho phép ghi vào PC - IF/ID.Write: Cho phép ghi vào thanh ghi pipeline IF/ID • ID: Jump, JumpReg, ALUSrc, SignExtend, Opcode, Funct • EX: ALUOp, Funct, MemWrite, … • MEM: MemRead, MemWrite. • WB: RegWrite, MemToReg. Ngoài ra, ta còn phải thiết kế thêm các khối điều khiển Forward để xử lý data hazard, Hazard Detection Unit để xử lý structural hazard. Design a MIPS PIPELINED CPU 3 Đồ án cấu trúc máy tính Phần 2: Thiết kế phần cứng 2.1. Sơ đồ khối: 2.2 Thiết kế các module: 2.2.1 Bộ Control:  Khối điều khiển trung tâm, có nhiệm vụ giải mã lệnh dựa trên 6-bit Opcode và 6-bit function của câu lệnh thành các tín hiệu điều khiển đến các khối khác trong bộ xử lý MIPS.  Các tín hiệu điều khiển và giá trị tương ứng trong từng câu lệnh được cho trong bảng dưới.  Từ bảng trạng thái, sử dụng các cổng logic AND và OR, ta lập được các tín hiệu ra từ 6 bit Opcode.  Khối điều khiển trung tâm, có nhiệm vụ giải mã lệnh dựa trên 6-bit Opcode và 6-bit function của câu lệnh thành các tín hiệu điều khiển đến các khối khác trong bộ xử lý MIPS. Design a MIPS PIPELINED CPU 4 Đồ án cấu trúc máy tính  Các tín hiệu điều khiển và giá trị tương ứng trong từng câu lệnh được cho trong bảng dưới.  Từ bảng trạng thái, sử dụng các cổng logic AND và OR, ta lập được các tín hiệu ra từ 6 bit Opcode Main Control RegDst ALUSrc Jump MemToReg Branch RegWrite MemRead JumpReg ALUop Memwrite Aluscr Regwrite . . . . . . . Instruction [31:26] Instruction [5:0] Design a MIPS PIPELINED CPU 5 Đồ án cấu trúc máy tính  Sơ đồ khối: Ngõ vào bộ Control gồm có 6-bit Opcode và 6-bit Function. Các lệnh format R: ADD, SUB, SLT có chung các tín hiệu điều khiển ra. Riêng lệnh JR có 1 tín hiệu khác là: JumpReg. Do đó cần thiết kế riêng khối điều khiển cho lệnh JR. Các lệnh khác phân biệt với nhau bởi Opcode nên không cần dựa vào các bit function để điều khiển. Design a MIPS PIPELINED CPU 6 Đồ án cấu trúc máy tính 2.2.2 Các thanh ghi pipeline Các thanh ghi pipeline được xây dựng gồm các tín hiệu vào là các data cần lưu trữ của giai đoạn trước, và tín hiệu ra sẽ được đọc ở chu kì kế tiếp. Để việc đọc và ghi được thực hiện đồng bộ, thì các thanh ghi cần có thêm các xung clock. 2.2.2 Khối Forwarding Data hazard xảy ra khi kết quả của lệnh trước là giá trị thanh ghi rs hoặc rt của lệnh kề sau và sau nó. Kết quả chỉ được ghi lại ở giai đoạn WB, trong khi việc đọc thanh ghi của lệnh sau sẽ được đọc ở giai đoạn ID, lúc này kết quả mới chưa được cập nhật. Design a MIPS PIPELINED CPU 7 Đồ án cấu trúc máy tính Thực tế thì kết quả đã được tính toán xong ở giai đoạn EX và kết quả sẽ được lưu vào thanh ghi EX/MEM và MEM/WB ngay sau đó, do đó mà ta có thể giải quyết hazard này bằng cách forward kết quả từ thanh ghi EX/MEM hoặc MEM/WB đưa vào ngõ vào của ALU. Riêng đối với trường hợp rd là thanh ghi 0 thì ta không cần phải forward giá trị về trước. Ta xét các điều kiện xảy ra hazard như sau: - EX/MEM.RegisterRd= ID/EX.RegisterRs - EX/MEM.RegisterRd= ID/EX.RegisterRt - MEM/WB.RegisterRd= ID/EX.RegisterRs - MEM/WB.RegisterRd= ID/EX.RegisterRt Từ đó ta xây dựng khối Fowarding như sau: Design a MIPS PIPELINED CPU 8 Đồ án cấu trúc máy tính Các ngõ ra ForwardA, ForwardB để lựa chọn giá trị thích hợp để đưa vào khối ALU. Do đó ta cần phải thêm vào trước ALU các bộ MUX để lựa chọn ngõ vào cho ALU cho các trường hợp sau: - ForwardA, ForwardB = 00: giá trị rs, rt được đọc từ thanh ghi ID/EX. - ForwardA, ForwardB = 01: giá trị rs, rt được đọc từ thanh ghi EX/MEM. - ForwardA, ForwardB = 10: giá trị rs, rt được đọc từ thanh ghi MEM/WB. 2.2.3. Khối Hazard Detection unit: - Đối với lệnh load thì dữ liệu chính xác sẽ được đọc ở giai đoạn MEM, chậm hơn 1 chu kì đối với các lệnh R Format. Do đó mà để giải quyết hazard ta cần phải thêm khối Hazard detection unit ở giai đoạn ID để thêm vào một stall giữa lệnh load và các lệnh có sử dụng kết quả của nó sau đó. Việc stall đơn giản là thiết lập các tín hiệu điều khiển ở giai đoạn ID = 0 , các tín hiệu điều khiển 0 này sẽ trôi qua các thanh ghi pipeline và các giai đoạn sau đó sẽ không làm gì cả. Design a MIPS PIPELINED CPU 9 Đồ án cấu trúc máy tính Đối với PC và thanh ghi IF/ID ta chỉ cần duy trì cho nó không đổi, tức PC vẫn thực hiện gọi và đọc lại lệnh trước đó. Do đó khối Hazard detection unit cần có : - Ngõ vào là IDEX_MemRead để xác định lệnh LOAD vì chỉ có lệnh Load là có tín hiệu MemRead=1. - Giá trị ra là PCWrite,IFIDWrite,ControlWrite để đưa tới điều khiển các thanh ghi PC, IFID không đổi. ControlWrite dùng để điều khiển bộ MUX sau khối Control để lựa chọn ngõ ra là tín hiệu Control hay là các tín hiệu 0 đối với trường hợp có stall giải quyết hazard. Từ đó xây dựng khối Hazard detection unit như sau: 2.2.4. Khối Control Hazard: Design a MIPS PIPELINED CPU 10 [...]... $7, $6, $4 slt $8, $3, $4 xori $9, $8, 0x04 bne $3, $5, L2 L1: jr $0 L2: sw $3, 0x08($0) j L1 Design a MIPS PIPELINED CPU 28 Đồ án cấu trúc máy tính 2.2.7 Kết Quả Mô phỏng: Design a MIPS PIPELINED CPU 29 Đồ án cấu trúc máy tính Design a MIPS PIPELINED CPU 30 Đồ án cấu trúc máy tính Design a MIPS PIPELINED CPU 31 .. .Đồ án cấu trúc máy tính Đối với lệnh Branch và Jump thì vi c xác định lệnh kế tiếp có phải địa chỉ lệnh nhay hay không phải đợi tới giai đoạn MEM Giải pháp là giả sử lệnh Branch sẽ được không được taken và tiếp tục thực hiện lệnh kế tiếp Nếu lệnh Branch taken thì các lệnh được gọi và giải mã sẽ bị bỏ đi và thực hiện tiếp địa chi nhảy Để giảm bớt các lệnh bị xóa khi Branch taken, ta sẽ di chuyển vi c... Multiplexer input PC */ mux32_2to1 IF_Mux(IF_InputPC, PCSrc, IF_PC_4, BranchOut); /* Program counter */ PC_Register IF_PC(IF_OutputPC, IF_InputPC, reset, clk, PCWrite); Design a MIPS PIPELINED CPU 12 Đồ án cấu trúc máy tính /* Read from instruction memory */ instrmem IF_InstrMem(IF_Instruction, IF_OutputPC); /* Increment PC: PC + 4 */ ADD_ALU IF_Adder(IF_PC_4, IF_CarryOut, IF_Zero, IF_Overflow, IF_Negative,... WB_clk); /* Sign & zero extend */ UnsignExtend_32bit ID_Extend0(ID_immZero32, ID_Instruction[15:0]); SignExtend_32bit ID_Extend1(ID_immSign32, ID_Instruction[15:0]); Design a MIPS PIPELINED CPU 13 Đồ án cấu trúc máy tính mux32_2to1 ID_Extend2(ID_Extend32, ID_SignExtend, ID_immZero32, ID_immSign32); /* ALUSrc bit */ mux32_2to1 ID_Mux02(ID_ReadDataB, ID_ALUSrc, ID_ReadData2, ID_Extend32); /* Compare for BNE:... ID_MemWrite, ID_MemRead, ID_MemToReg, ID_RegWrite}; or #50 ID_Stall(Stall_True, ID_EX_Stall, ID_Flush); mux7_2to1 ID_Mux04(ID_Command, Stall_True, ID_Cmd[6:0], 7'h00); Design a MIPS PIPELINED CPU 14 Đồ án cấu trúc máy tính /* Pipeline stage ID-EX */ Stage_ID_EX ID_Stage(EX_In_Command, EX_Rs, EX_Rt, EX_Rd, EX_Funct, EX_ReadData1, EX_ReadData2, clk, reset, ID_Command, ID_Rs, ID_Rt, ID_Rd, ID_Funct, ID_ReadDataA,... EX_Mux08(EX_WriteRegister, EX_RegDst, EX_Rt, EX_Rd); /* ALU Control */ assign EX_ALUOp[1:0] = EX_In_Command[5:4]; ALU_Control EX_ControlA(EX_ALUCtrl, EX_ALUOp[1:0], EX_Funct[5:0]); Design a MIPS PIPELINED CPU 15 Đồ án cấu trúc máy tính /* Main ALU */ alu EX_ControlB(EX_ALU_Result, EX_CarryOut, EX_Zero, EX_Overflow, EX_Negative, EX_ALU_DataA, EX_ALU_DataB, EX_ALUCtrl); /* Forwarding Unit */ Forwarding_Unit Forward(ForwardA,... MEM_In_Command[1:0]; Stage_MEM_WB WB_Stage(WB_Command, WB_ReadData, WB_ALU_Result, WB_Rd, WB_clk, clk, reset, MEM_Command[1:0], MEM_ReadData, MEM_ALU_Result, MEM_Rd); Design a MIPS PIPELINED CPU 16 Đồ án cấu trúc máy tính /* ================== Fifth pipeline stage: WB ============================ */ /* Muxtiplexer: Write back data */ assign WB_MemToReg = WB_Command[1]; assign WB_RegWrite = WB_Command[0];... hazard5(hazard_true, reg_equal, d_MemRead); buf #50 hazard6(ID_EX_Stall, hazard_true); not #50 hazard7(IF_ID_Write, hazard_true); not #50 hazard8(PCWrite, hazard_true); Design a MIPS PIPELINED CPU 17 Đồ án cấu trúc máy tính endmodule /* =========================================================== * =============== Forwarding unit =============================== * ===========================================================*/... forwardA5(ForwardA[1], A2, A4, EX_MEM_RegWrite); and #50 forwardA6(ForwardB[0], A3, A4, EX_MEM_RegWrite); /* Forward from MEM/WB registers If (MEM_WB.RegWrite) Design a MIPS PIPELINED CPU 18 Đồ án cấu trúc máy tính and If (MEM_WB.Rd != 0) and If (ID_EX.Rt == MEM_WB.Rd) */ Compare_Register05 forwardB1(B1, MEM_WB_Rd, 5'h00); Compare_Register05 forwardB2(B2, ID_EX_Rs, MEM_WB_Rd); Compare_Register05 forwardB3(B3,... Input_InstrMem); endmodule /* ============================================================= * ================== Pipeline 2nd Stage: ID/EX ======================= Design a MIPS PIPELINED CPU 19 Đồ án cấu trúc máy tính * =============================================================*/ module Stage_ID_EX(Output_WB_M_EX, Output_Rs, Output_Rt, Output_Rd, Output_Funct, Output_ReadData1, Output_ReadData2, clk, . Đồ án cấu trúc máy tính BÁO CÁO LAB 4 ĐỒ ÁN CẤU TRÚC MÁY TÍNH DESIGN A MIPS PIPELINED CPU Design a MIPS PIPELINED CPU 1 Đồ án. forwardA3(A3, ID_EX_Rt, EX_MEM_Rd); not #50 forwardA4(A4, A1); and #50 forwardA5(ForwardA[1], A2, A4, EX_MEM_RegWrite); and #50 forwardA6(ForwardB[0], A3, A4, EX_MEM_RegWrite); /* Forward from MEM/WB. forwardB3(B3, ID_EX_Rt, MEM_WB_Rd); not #50 forwardB4(B4, B1); and #50 forwardB5(ForwardA[0], B2, B4, MEM_WB_RegWrite); and #50 forwardB6(ForwardB[1], B3, B4, MEM_WB_RegWrite); endmodule /* =============================================================

Ngày đăng: 13/06/2015, 21:02

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan