问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Verilog-2005标准中`timescale编译指令详解

创作时间:
作者:
@小白创作中心

Verilog-2005标准中`timescale编译指令详解

引用
CSDN
1.
https://m.blog.csdn.net/FPGA_LOVE/article/details/141403193

`timescale指令用于指定其后module模块的时间单位和时间精度。时间单位是时间值(如仿真时间和延迟值)的测量单位。要在同一设计中使用不同时间单位的模块,可以使用以下时间刻度结构:

  • `timescale编译器指令用于指定设计中模块的时间计量单位和时间精度
  • $printtimescale系统任务用于显示模块的时间单位和精度
  • $time和**$realtime系统函数、$timeformat**系统任务和 %t 格式规范,用于指定如何报告时间信息

timescale编译器指令指定了时间和延迟值的测量单位,以及在读取另一条timescale编译器指令之前,该指令后续所有模块中延迟的精确度。如果没有指定timescale编译器指令,或该指令已被resetall指令重置,则时间单位和精度取决于仿真器。如果一个系统中某些模块指定了`timescale,而其他模块没有,这将是一个错误。

`timescale指令的语法如下表所示:

时间单位
时间精度
time_unit
time_precision

其中time_unit参数指定时间和延迟的测量单位。time_precision参数指定在仿真中使用延迟值之前的四舍五入方式。即使设计中其他地方的time_precision参数更小,所使用的值也会精确到此处指定的时间单位。设计中所有`timescale编译器指令的最小time_precision参数决定仿真时间单位的精度。time_precision参数的精度至少应与time_unit参数的精度相同,不能指定比time_unit更长的时间单位。这些参数中的整数指定了数值大小的数量级,有效整数为1、10和100。字符串代表度量单位;有效字符串为s、ms、us、ns、ps和fs。

下表列出了这些字符串指定的测量单位:

例如下面的示例展示了如何使用该指令:

`timescale 1 ns / 1 ps

在这里,由于time_unit参数为“1 ns”,因此指令后面模块中的所有时间值都是1 ns的倍数。由于time_precision参数为“1 ps”或纳秒的千分之一,因此延迟值被四舍五入为小数点后三位的实数,或精确到纳秒的千分之一。

请看下面的示例:

`timescale 10 us / 100 ns

由于time_unit参数为“10 us”,因此该指令后面的模块中的时间值都是10 us的倍数。由于time_precision参数为“100 ns”,即十分之一微秒,因此延迟被四舍五入到十分之一微秒以内。

下面的示例显示了模块中的`timescale指令:

编译器指令 `timescale 10 ns / 1 ns 指定模块测试的时间单位为 10 ns。因此,模块中的时间值都是 10 ns 的倍数,四舍五入到最接近的 1 ns;因此,参数 d 中存储的值按比例放大到 16 ns 的延迟。换句话说,在仿真时间 16 ns(1.6 × 10 ns)时,值 0 被分配给变量set,而在仿真时间 32 ns 时,值1被分配给变量set。无论采用何种时间尺度,参数 d 都会保留其值。

上述例子的仿真时间确定方法如下:

a) 根据时间精度,参数 d 的值从 1.55 四舍五入到 1.6。
b) 模块的时间单位为 10 ns,精度为 1 ns,因此参数 d 的延迟时间按比例从 1.6 调整为 16。
c)在仿真时间 16 ns时,值0被分配给变量set;在仿真时间 32 ns时,值1被分配给变量set。在赋值时,时间值不四舍五入。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号