我正在实现32位RegFile(包含32个寄存器)。现在,对于组合部分,我计划根据输入寄存器编号使用开关盒来输出32位寄存器的读取值。这导致了一个具有32个案例和默认情况的开关盒。有没有其他方法来优化代码?约束是我的输出需要是一个寄存器,因此我无法使用以下语句(包含assign):
pygame.draw.rect(screen,black,(self.x,self.y,self.w,self.h),4)
TypeError: Rect argument is invalid
代码:
assign rdDataA = rdAddrA == 0 ? reg0
更新: 我发现了一种优化代码的方法。我希望这会奏效......欢迎任何其他建议
module RegFile(input [4:0] src_rd_1,
input [4:0] src_rd_2,
input [4:0] des_wr_1,
input [31:0] data,
input clk,
input reset,
input wr_en,
output reg rd_val_1,
output reg rd_val_2
);
reg [31:0] register[31:0];
always_comb begin
case(src_rd_1)
5'd0:begin
rd_val_1=register[0];
end
5'd1:begin
rd_val_1=register[1];
end
5'd2:begin
rd_val_1=register[2];
end
5'd3:begin
rd_val_1=register[3];
end
5'd4:begin
rd_val_1=register[4];
//and so on...
end
任何建议都会有所帮助。 TIA
答案 0 :(得分:0)
模拟工具允许以下内容:
always_comb begin
rd_val_1 = register[src_rd_1];
end
您必须尝试一下,看看您的综合工具是否支持此功能。
答案 1 :(得分:0)
使用reg
并不意味着它将合成到寄存器。要合成寄存器,应在顺序始终块中分配reg
(或用于SystemVerilog preferably
逻辑`)。
always_ff @(posedge clk) begin
rd_val_1 <= register[src_rd_1];
end
翻转输出使其成为干净,无干扰的输出,并且不会增加任何接收模块的组合传播延迟。