模拟寄存器文件时Modelsim中的Verilog编译器错误
Verilog compiler errors in Modelsim when simulating register file
我正在尝试编写一些 verilog 代码来创建一个包含 32 个 32 位寄存器的寄存器文件。
Register File Input/Output
下面是我的代码:
module regfile (clk, we, ra1, ra2, wa, wd, rd1, rd2);
input logic we,
input logic clk,
input logic [4:0] ra1, ra2, wa,
input logic [31:0] wd,
output logic [31:0] rd1, rd2;
logic [31:0] rf[31:0];
always @ (posedge clock)
begin
rd1 = rf[ra1];
rd2 = rf[ra2];
end
always_comb
begin
if(we == 1)
rf[wa] = wd;
rf[0] = 0;
end
endmodule
上面的代码是我根据一些教程文件建模的,所以我很困惑为什么Modelsim会报编译错误。
语法有明显错误吗?
当运行CMD中命令:vsim -do regfile.do
我怎样才能让它输出详细的警告,这样我才能真正看到导致问题的原因?
您使用的是 2001 年之前的语法和 post-2001 语法的奇怪组合。我为您的端口推荐 post-2001 语法:
module regfile (
input logic we,
input logic clk,
input logic [4:0] ra1, ra2, wa,
input logic [31:0] wd,
output logic [31:0] rd1, rd2
);
我正在尝试编写一些 verilog 代码来创建一个包含 32 个 32 位寄存器的寄存器文件。
Register File Input/Output
下面是我的代码:
module regfile (clk, we, ra1, ra2, wa, wd, rd1, rd2);
input logic we,
input logic clk,
input logic [4:0] ra1, ra2, wa,
input logic [31:0] wd,
output logic [31:0] rd1, rd2;
logic [31:0] rf[31:0];
always @ (posedge clock)
begin
rd1 = rf[ra1];
rd2 = rf[ra2];
end
always_comb
begin
if(we == 1)
rf[wa] = wd;
rf[0] = 0;
end
endmodule
上面的代码是我根据一些教程文件建模的,所以我很困惑为什么Modelsim会报编译错误。
语法有明显错误吗?
当运行CMD中命令:vsim -do regfile.do
我怎样才能让它输出详细的警告,这样我才能真正看到导致问题的原因?
您使用的是 2001 年之前的语法和 post-2001 语法的奇怪组合。我为您的端口推荐 post-2001 语法:
module regfile (
input logic we,
input logic clk,
input logic [4:0] ra1, ra2, wa,
input logic [31:0] wd,
output logic [31:0] rd1, rd2
);