98,Verilog-2005标准篇:`timescale编译指令用法

`timescale指令指定了其后面module模块的时间单位和时间精度。时间单位是时间值(如仿真时间和延迟值)的测量单位。

要在同一设计中使用不同时间单位的模块,可以使用以下时间刻度结构:

- `timescale编译器指令用于指定设计中模块的时间计量单位和时间精度

- $printtimescale系统任务用于显示模块的时间单位和精度

- $time$realtime 系统函数、$timeformat 系统任务和 %t 格式规范,用于指定如何报告时间信息

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

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

其中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。在赋值时,时间值不四舍五入。

点赞加关注博主(ID:FPGA小飞)的博文,咱们一起系统学习verilog最终标准IEEE Std 1364-2005吧!

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值