我将所有控制信号作为输入。我似乎无法正确连接所有内容。我需要我的波形配置看起来像参考波形,但不知何故,我的波形最终包含所有
X
和Z
。我该如何解决这个问题?
我的波形:
参考波形:
RISC架构:
参数和输入输出是给定的,不能编辑,所以我没有包含它们。
wire [7:0] d;
wire [7:0] q;
wire [7:2] PC;
wire [7:0] PCPlus4;
wire MemRead;
wire MemWrite;
wire [8:2] addr;
wire [31:0] write_data;
wire [31:0] read_data;
wire [31:0] instruction;
wire [4:0] rg_rd_addr1, rg_rd_addr2, rg_wrt_addr;
wire Sel;
wire [31:0] D1;
wire [31:0] D2;
wire [31:0] Y;
wire [31:0] A_in;
wire [31:0] B_in;
wire [3:0] ALU_Sel;
wire [31:0] ALU_Out;
wire Carry_Out;
wire Zero;
wire Overflow;
wire [31:0] WriteBack_Data;
wire [31:0] InstCode; // Instruction input to ImmGen
wire [31:0] ImmOut;
FlipFlop flipflop_instance (
.d(PCPlus4),
.clk(clk),
.reset(reset),
.q(PC)
);
InstMem instruction_memory (
.addr(PC[9:4]),
.instruction(instruction)
);
assign rg_rd_addr1 = instruction[19:15];
assign rg_rd_addr2 = instruction[24:20];
assign rg_wrt_addr = instruction[11:7];
assign opcode = instruction[6:0];
assign funct3 = instruction[14:12];
assign funct7 = instruction[31:25];
// Instantiate RegFile
RegFile reg_file (
.clk(clk),
.reset(reset),
.rg_wrt_en(reg_write),
.rg_rd_addr1(instruction[19:15]),
.rg_rd_addr2(instruction[24:20]),
.rg_wrt_addr(instruction[11:7]),
.rg_rd_data1(Reg1),
.rg_rd_data2(Reg2)
);
ImmGen immediate_generator (
.InstCode(InstCode),
.ImmOut(ExImm)
);
Mux_32_To_1 mux_1 (
.S(alu_src),
.D1(Reg2),
.D2(ExtImm),
.Y(SrcB)
);
alu_32 my_alu (
.A_in(Reg1),
.B_in(SrcB),
.ALU_Sel(ALU_Sel),
.ALU_Out(alu_result),
.Carry_Out(Carry_Out),
.Zero(Zero),
.Overflow(OverFlow)
);
DataMem data_memory (
.MemRead(mem_read),
.MemWrite(mem_write),
.addr(alu_result),
.write_data(write_data),
.read_data(D2)
);
Mux_32_To_1 mux_2 (
.S(mem2reg),
.D1(Reg2),
.D2(ExtImm),
.Y(WriteBack_Data)
);
endmodule
有几个问题。
您尚未在提供的代码中实例化
Adder
。 Adder
模块应派生PCPlus4
,并将其馈送到FlipFlop
。您看到所有 X
是因为 PCPlus4 不是由任何在触发器输出处生成 X
的逻辑驱动,然后这些 Xs
传播到整个 .
reg_write
未被驱动。它应该来自测试台。同样,还有更多信号来自测试平台。请提供您的测试台以供进一步说明。