微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 关于verilog 中timescale的讨论

关于verilog 中timescale的讨论

时间:10-02 整理:3721RD 点击:
在verilog中是没有默认timescale的。一个没有指定timescale的verilog模块就有可能错误的继承了前面编译模块的无效timescale参数。
所以在verilog的LRM中推荐“在每个module的前面指定`timescale,并且相应的在最后加一个`resetall来确保timescale的局部有效”
为了确认这种用法,我编写了一个小小的包含两个模块module_a和module_b的testbench,其中module_a,module_b与testbench指定了不同的timescale精度。通过simulation的波形可以发现,Simulator的确在不同的module中使用了不同的times精度。
代码如下:
文件名:module_a.v
`timescale 100ps/1ps
module a (clk) ;
input clk;
wire clk_a ;
assign #5 clk_a = clk;
endmodule
`resetall
文件名:module_b.v
`timescale 10ps/1ps
module b (clk) ;
input clk;
wire clk_b ;
assign #5 clk_b = clk;
endmodule
`resetall
文件名:testbench.v
`timescale 1ns/10ps
module tb();
reg clk;
initial begin
clk = 0;
end
initial
begin
$fsdbDumpvars;
#12500 $finish;
end

always begin
#10 clk = ~clk;
end
a a_inst(clk);
b b_inst(clk);
endmodule
波形如下:

结论:
从上面的波形中可以看出,虽然使用了相同的delay表述:
assign #5 clk_a(b) = clk;
但由于在module中指定的timescale精度不同,在实际的simulation中delay的长度是不同的,但都是等于5×timescale最小精度。

牛逼啊



    呵呵!
有研究价值!

一看就知道小编没仔细看过reference manual,建议看看英文原版的。英文的是既知其然,又知其所以然。

研究下

学习啦.
谢谢大家
谢谢小编分享

为什么我在module前定义了`timescale 1ns/100ps,但我用#延迟时,程序就跑不动了呢?


原来这样

若不写resetall,小编是否试过呢?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top