我有一個迷你項目,在這個項目中我需要通過Verilog實現一個MIPS單週期處理器。 這裏我寫的ALU和ALUControl和FileRegister,但我有一個問題,實施PC(程序計數器)爲此...我想這個PC支持分支和跳轉。 我需要支持分支的說明,但我不知道如何訪問指令。 請幫我實現InstructionMemory和Pc。 這裏是我的代碼:實現一個處理器(mips單週期)
module ALU(ALUctl, A, B, ALUOut, Zero);
input [3:0] ALUctl;
input [31:0] A,B;
output reg [31:0] ALUOut;
output Zero;
assign Zero = (ALUOut==0); //Zero is true if ALUOut is 0
always @(ALUctl, A, B) begin //reevaluate if these change
case (ALUctl)
0: ALUOut <= A & B;
1: ALUOut <= A | B;
2: ALUOut <= A + B;
6: ALUOut <= A - B;
7: ALUOut <= A < B ? 1 : 0;
12: ALUOut <= ~(A | B); // result is nor
default: ALUOut <= 0;
endcase
end
endmodule
module ALUControl(ALUOp, FuncCode, ALUCtl);
input [1:0] ALUOp;
input [5:0] FuncCode;
output reg [3:0] ALUCtl;
always @(ALUOp, FuncCode) begin
if (ALUOp == 2)
case (FuncCode)
32: ALUCtl<=2; // add
34: ALUCtl<=6; //subtract
36: ALUCtl<=0; // and
37: ALUCtl<=1; // or
39: ALUCtl<=12; // nor
42: ALUCtl<=7; // slt
default: ALUCtl<=15; // should not happen
endcase
else
case (ALUOp)
0: ALUCtl<=2;
1: ALUCtl<=6;
default: ALUCtl<=15; // should not happen
endcase
end
endmodule
module RegFile(ra1, rd1 , ra2 , rd2 , clk , RegWrite , wa ,wd);
input[4:0] ra1;
output[31:0] rd1;
input[4:0] ra2;
output[31:0] rd2;
input clk;
input werf ;
input[4:0] wa;
input[31:0] wd;
reg [31:0] registers[31:0];
assign rd1 = registers[ra1];
assign rd2 = registers[ra2];
[email protected] (posedge clk)
if (RegWrite)
registers[wa] <= wd;
endmodule
你可能想看看這個stackexchange網站建議:http://area51.stackexchange.com/proposals/20632/可編程邏輯和fpga設計?referrer = PHsHo2t80NaFAaI1gMp5oQ2「可編程邏輯和FPGA設計」 – 2011-06-01 07:49:25