从 Quartus 启动的 Modelsim 仿真无法正常工作
Simulation of Modelsim launching from Quartus doesn't work properly
这是测试台
`timescale 1 ps/ 1 ps
module sum_fix_vlg_tst();
reg select;
reg [7:-8] valor_a;
reg [7:-8] valor_b;
// wires
wire [8:-8] result_fx;
sum_fix i1 (
.result_fx(result_fx),
.select(select),
.valor_a(valor_a),
.valor_b(valor_b)
);
initial
$monitor ("valor_a = %b, valor_b = %b, result_fx = %b", valor_a,
valor_b,result_fx);
initial
begin
#10
select = 1;
valor_a = 32'b0000000011111111;
valor_b = 32'b0000000011111111;
#20
valor_a = 32'b1111111111111111;
valor_b = 32'b1111111111111111;
#30
valor_a = 32'b1001100111001000;
valor_b = 32'b0001111000111101;
end
endmodule
这是uut
`timescale 1 ps/ 1 ps
module sum_fix (valor_a,valor_b,result_fx,select);
input [7:-8] valor_a,valor_b;
output reg [8:-8] result_fx;
input select;
always@ (valor_a or valor_b)
begin
if (select==1)
result_fx = valor_a + valor_b;
else
result_fx = valor_a - valor_b;
end
endmodule
在Quartus中编译良好。然后我像这样启动 Modelsim:Tools > RTL simulation。它启动了 Modelsim,但它只给了我很多 zzzzzzzzzzzzz 的输入和 xxxxxxxxxxxxxx 的输出,而 wave 中没有任何东西。
我想说我不确定我是否将这个测试平台正确添加到项目中。我是初学者。我所做的是:Assignments > Settings > Compile Test:点击 Test Benches > new,查找文件并添加,然后确定。我不确定这是正确的方法,因为它看起来太复杂了。请帮忙解决这个问题。
另外,我评论说我在quartus中启动了test bench writer模板,但是我结束了从文件中更改所有内容,最终结果是上面的代码。
所以,我在 EDAPlayrgound (http://www.edaplayground.com/x/Cyc) 上尝试了你的代码,我觉得它很好。 (如果你愿意,你可以给自己一个 运行)。
您看到 X
是因为在时间 0,您没有为任何输入指定值(因为您在分配任何内容之前延迟了 10 个时间步长)。考虑删除第一个 #10
,或在其之前放置一些作业。
(X
= 未知值;Z
= 高阻抗,这意味着输入既不是 1 也不是 0。
至于在Quartus中设置,你的方法是正确的。
这是测试台
`timescale 1 ps/ 1 ps
module sum_fix_vlg_tst();
reg select;
reg [7:-8] valor_a;
reg [7:-8] valor_b;
// wires
wire [8:-8] result_fx;
sum_fix i1 (
.result_fx(result_fx),
.select(select),
.valor_a(valor_a),
.valor_b(valor_b)
);
initial
$monitor ("valor_a = %b, valor_b = %b, result_fx = %b", valor_a,
valor_b,result_fx);
initial
begin
#10
select = 1;
valor_a = 32'b0000000011111111;
valor_b = 32'b0000000011111111;
#20
valor_a = 32'b1111111111111111;
valor_b = 32'b1111111111111111;
#30
valor_a = 32'b1001100111001000;
valor_b = 32'b0001111000111101;
end
endmodule
这是uut
`timescale 1 ps/ 1 ps
module sum_fix (valor_a,valor_b,result_fx,select);
input [7:-8] valor_a,valor_b;
output reg [8:-8] result_fx;
input select;
always@ (valor_a or valor_b)
begin
if (select==1)
result_fx = valor_a + valor_b;
else
result_fx = valor_a - valor_b;
end
endmodule
在Quartus中编译良好。然后我像这样启动 Modelsim:Tools > RTL simulation。它启动了 Modelsim,但它只给了我很多 zzzzzzzzzzzzz 的输入和 xxxxxxxxxxxxxx 的输出,而 wave 中没有任何东西。
我想说我不确定我是否将这个测试平台正确添加到项目中。我是初学者。我所做的是:Assignments > Settings > Compile Test:点击 Test Benches > new,查找文件并添加,然后确定。我不确定这是正确的方法,因为它看起来太复杂了。请帮忙解决这个问题。
另外,我评论说我在quartus中启动了test bench writer模板,但是我结束了从文件中更改所有内容,最终结果是上面的代码。
所以,我在 EDAPlayrgound (http://www.edaplayground.com/x/Cyc) 上尝试了你的代码,我觉得它很好。 (如果你愿意,你可以给自己一个 运行)。
您看到 X
是因为在时间 0,您没有为任何输入指定值(因为您在分配任何内容之前延迟了 10 个时间步长)。考虑删除第一个 #10
,或在其之前放置一些作业。
(X
= 未知值;Z
= 高阻抗,这意味着输入既不是 1 也不是 0。
至于在Quartus中设置,你的方法是正确的。