verilog - 为什么仿真卡在 Vivado 中
问题描述
我试图开发一个备用内存代码,但模拟卡在了 vivado 中。我不能确切地说它是否被卡住,但模拟没有运行。我已经附上了我无法清楚表达的问题的图片。代码的测试平台在这里。在尝试获得模拟波形时,vivado 没有给出模拟,而它在 Icarus Verilog 中完全工作,并且在 GTK 波形中模拟波形清晰。
module trial_tb;
reg clk;
reg rst_n;
reg bist_enable;
reg we;
reg [5:0] wraddr;
reg data_in;
reg re;
reg [5:0] rdaddr;
wire data_out;
wire repair_fail;
wire repair_finish;
integer m;
integer idx;
SRAM_repair uut (clk, rst_n, bist_enable, we, wraddr, data_in, re, rdaddr, data_out, repair_fail, repair_finish);
initial
begin
clk = 0;
rst_n <= 0;
bist_enable <= 0;
rdaddr <= 'b0;
wraddr <= 'b0;
we <= 1'b0;
re <= 1'b0;
data_in <= 1'b0;
#5.0 rst_n <= 1;
#5.0 bist_enable <= 1;
#52.9 bist_enable <= 1'b0;
we <= 1'b1;
data_in <= 1'b0;
for ( m=0 ; m<=32; m=m+1) begin
wraddr <= m;
#0.2;
end
data_in <= 1'b1;
for ( m=33 ; m<=63; m=m+1) begin
wraddr <= m;
#0.2;
end
#0.2;
we <= 1'b0;
re <= 1'b1;
for ( m=0 ; m<64; m= m+1) begin
rdaddr <= m;
#0.2;
end
end
initial
begin
$dumpfile ("SRAM_repair.vcd");
$dumpvars( 0, trial_tb);
// $dumpvars( 0, trial_tb.uut.i_bisr_controller.fcr\[0\]);
// $dumpvars( 0, trial_tb.uut.i_bisr_controller.fcr\[1\]);
// $dumpvars( 0, trial_tb.uut.i_bisr_controller.fcr\[2\]);
// $dumpvars( 0, trial_tb.uut.i_bisr_controller.fcr\[3\]);
// $dumpvars( 0, trial_tb.uut.i_bisr_controller.fcr\[4\]);
// $dumpvars( 0, trial_tb.uut.i_bisr_controller.fcr\[5\]);
#90 $finish;
end
always #0.1 clk = ~clk;
endmodule
解决方案
我怀疑您没有为测试平台的延迟使用适当的时间表。来自 IEEE Std 1800-2017,第 22.7 节`timescale:
如果没有指定 `timescale 或它已被`resetall 指令重置,则默认时间单位和精度是特定于工具的。
如果未指定,我的模拟器默认为:
`timescale 1ns/1ns
我看到模拟在时间 0 挂起,就像我认为的那样。由于时间精度和时间单位是一样的(都是1ns
我用的),0.1的延迟clk
被四舍五入到0,导致clk
always
块内无限循环。
我通过在模块之前添加这个明确的时间尺度来解决这个问题:
`timescale 1ns/100ps
这设置的精度小于单位,允许clk
正确切换。
您看到的 Vivado 和 Icarus 之间的差异可能是由于使用了不同的时间尺度。要查看生效的时间刻度,请将此代码添加到您的测试平台:
initial $printtimescale;
推荐阅读
- c# - COM 互操作寄存器的问题 - 错误:找不到元素
- sh - shell脚本中给定问题的代码
- .net-core - IBM MQ 传输类型受管工作,但客户端不工作
- python - 如何仅通过给定名称获取 FTP 目录中的那些?
- reactjs - 使用状态进行反应的条件渲染
- javascript - Wasm-bindgen:u8 数组作为输入和输出,生成的 javascript 具有不同的函数签名
- powershell - 在 Get-ChildItem 中指定 *.xls 过滤器也会返回 *.xlsx 结果
- python - TypeError: Dog() 没有参数
- jquery - 从服务器重新加载数据时,Free-JQGrid 多选工具栏刷新
- c - 结构如何在 C 中动态分配成员?