首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

timescale使用

timescale使用

'timescale是Verilog HDL中的一种时间尺度预编译指令,它用来定义模块仿真时的时间单位和时间精度。
格式如下
'timescale   仿真时间单位/时间精度

注意:用于说名仿真时间单位和时间精度的数字只能是1、10、100,不能为其它数字。而且时间精度不能比时间单位大。
最多两者一样大。比如,下面定义都是对的:
`timescale 1ns / 1ps

`timescale 100ns / 100ns

下面的定义是错的
`timescale 100ns / 100ns

时间精度就是模块仿真时间和延时的精确程度,比如:定义时间精度为10ns,那么时序中所有的延时至多能精确到10ns,而8ns或者18ns是不可能做到的。
‘timescale 100ns/10ns


module muti_delay(

din,


dout1

);
input din;
output dout1;
wire din;
reg dout1;
always @(din)
#3.14  dout1 = din;
endmodule
仿真波形如下:


我们可以看到,本意是要延时100*3.14=314ns后将din的值赋给dout1,但是它在310ns的时候就赋值了,为什么呢?这就是时间精度的问题了。时间精度定义为10ns,因此不能精确到4ns,经过四舍五入后,”#3.14“变成了”#3.1“。当然就是在310ns的时候赋值了。

在书写testbench时,一定要注意`timescale所定义的模块仿真时间单位和时间精度。
对于可以除尽的时钟,可以不用考虑;
对于除不尽的时钟,在用always定义时钟时,时钟间隔一定要定义到时间精度所精确的位数,否则会出现时钟异步的问题。
举例说明:
`timescale 1ns / 1ps

always # 6.25
DCONV_CLK_80 = ~ DCONV_CLK_80 ; //60M*4/3 = 80M  80M的时钟可以除尽

always # 8.3  CLK_60M = ~  CLK_60M;  //60MHZ     8.3ns

always # 8.333  CLK_60M = ~  CLK_60M;  //60MHZ  8.333ns

8.3ns和8.333ns在仿真时对仿真结果的影响特别大。
返回列表