RISVC 单周期处理器数据路径和测试平台

问题描述 投票:0回答:1

我将所有控制信号作为输入。我似乎无法正确连接所有内容。我需要我的波形配置看起来像参考波形,但不知何故,我的波形最终包含所有

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 
verilog cpu-architecture vivado
1个回答
0
投票

有几个问题。

  1. 您尚未在提供的代码中实例化

    Adder
    Adder
    模块应派生
    PCPlus4
    ,并将其馈送到
    FlipFlop
    。您看到所有
    X
    是因为 PCPlus4 不是由任何在触发器输出处生成
    X
    的逻辑驱动,然后这些
    Xs
    传播到整个 .

  2. reg_write
    未被驱动。它应该来自测试台。同样,还有更多信号来自测试平台。请提供您的测试台以供进一步说明。

© www.soinside.com 2019 - 2024. All rights reserved.