专栏首页ICSOC.TECH关于 Verilog 的 TimeScale

关于 Verilog 的 TimeScale

最近做芯片的功耗分析,需要用 PTPX 读入门级仿真写出的 VCD 文件。门级仿真的速度非常慢,所以关注了一下和速度相关的 TimeScale 的东西。

对于 TimeScale 的精确定义,可以参考 Veriog 的 1364 标准。手头的 2001 和 2005 两个版本,这方面的阐述是一样的,没有变化。

简要说,TimeScale 分 time unit 和 time precision 两部分,用符号 / 分割。TimeUnit 定义就是出现在代码中的所有时间数字的单位;Time Precision 就是这个数字的精度。通常可以把二者的比值,理解成小数点后的有效数字位数。整个 design 中可能出现多个 TimeScale 的定义,仿真器按照最近出现的 TimeScale 来解析当前的 module。除非在仿真器的命令行做强制的定义,例如 VCS 的命令行选项 -override_timescale=<time_unit>/<time_precision> 。

标准中还提到,整个 design 所有 TimeScale 定义中,最小的 time precision 参数决定了仿真过程中的 time unit 的精度。显而易见,精度越小,仿真器的负担越重,速度也越慢。VCS 在编译完所有 module,打印出 top level module 之后,会接着打印出此次仿真过程的 TimeScale 是多少。注意去掉 -q 选项,让 VCS 打印比较详细的报告信息。这个 TimeScale 并不是已有的某个 module 的 TimeScale 组合,其中的 time unit 和 time precision 分别代表了整个 design 中的最小的 time unit 和 最小的 time precision。这里的 time unit 并不影响特定 module 解析时的 TimeScale 取值,但是这里的 time precision 会影响到整个仿真过程的全局参数,例如时间打印、结束时间以及此次仿真的精度。

这里提到的 design 包括 test bench。

VCS 提供了调试 TimeScale 的命令行选项 -diag timescale 来打印出各个 module 最终采用的 TimeScale 来自哪里。也可以通过标准的系统函数 $printtimescale(module.path) 打印出关心的 module instance 采用的 TimeScale 取值。

一些体会。最好每个 module 都自己定义好 TimeScale,尽量避免强制和继承这样的做法,这样出问题容易找到对应的定义在哪里。另外不要过度定义,在允许的范围内,尽量定义成粒度较大的值, 避免给仿真器造成不必要的负担,降低整个 design 的仿真速度。仿真速度这个东西,在重要性和紧急性两个维度的事务划分中,最多算是重要不紧急的事情,在成熟固化的设计环境中,想有所提高很困难。

说到仿真速度,在 A 司的时候,还研究过 unit delay 对于仿真速度的影响。根据已有的 paper 显示,不带 unit delay 的仿真速度可以提高多少多少。为了实现这个目标,还重写了 design 中全部的 unit delay 定义。可惜也是没有见到最终的速度比较结果。

本文分享自微信公众号 - icsoc(ic-soc),作者:韩京飞

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-05-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 有限域的基本概念和质数、不可分解多项式的搜寻算法

    有限域(Finite Field)在数学上属于群论(Group Theory)的范畴,又称伽罗瓦域(Galois Field)。简单来说,就是包含有限个元素的域...

    icsoc
  • 双屏工作的小工具

    最近公司逐步给大家的电脑升级成了双显示器,一只眼睛看代码、一只眼睛看波形,效率果然提高不少

    icsoc
  • 君子善器之按行号跳转:用vim查阅verilog编译信息的一个小技巧

    前段时间请求IT把Linux服务器上的vim升级到vim7.4,一个想法是可以用vim7.0之后加入的特性gF,可以实现跳转到光标所在文件的指定行,如果文件名后...

    icsoc
  • 学习最优潮流:神经网络的最坏情况保证(CS AI)

    本文首次介绍了一种框架,以学习最佳功率流(OPF)问题为指导实例,为神经网络性能获得可证明的最坏情况保证。神经网络有可能大大减少OPF解决方案的计算时间。但是,...

    刘子蔚
  • Dubbo 的集群容错模式:Failover Cluster

    本文简单介绍 Dubbo 中的 Failover Cluster(失败自动切换)。

    LieBrother
  • 推荐8-设置Redis的LRU策略

    LRU(Least Recently Used)最近最少使用算法是众多置换算法中的一种。

    猿哥
  • 性能监控平台搭建 -- 集成Locust性能数据

    这是之前介绍过的性能监控平台的整体架构图,想要了解其它部分的搭建,可以查看相关文章《Telegraf安装与简易使用指南》、《InfluxDB安装与简易使用指南》...

    上帝De助手
  • 如何制定企业级代码规范与检查

    就从我的题目说起,本篇文章告诉你针对定制代码规范和检查这个小需求如何做出亮点?看完本文后回顾上面提到的 4 点,感觉下。

    coder_koala
  • sparklines迷你图系列4——Evolution(Area)

    今天接着分享Evolution图表类型中的Area图表。 其实就是我们常见的区域图(或者叫面积图),它与折线图(昨天讲到的)都是用来呈现时间序列中的趋势走向和波...

    数据小磨坊
  • 自定义组件——ModuleView

      ModuleView是一个模快化的View。可以快速搭建一个常用的模块页面,显示不同模块的数据内容。它的难点在于解决ScrollView与RecyclerV...

    饮水思源为名

扫码关注云+社区

领取腾讯云代金券