电子产业一站式赋能平台

PCB联盟网

搜索
查看: 22|回复: 0
收起左侧

【芯片交付】为什么自研代码的filelist避免-y和-v索引

[复制链接]
匿名  发表于 昨天 12:33 |阅读模式
编写RTL一晃十来年了,遇到了很多形形色色工程编码规范、约束和建议,故而在此阶段性汇总。本系列中所提及和讨论的verilog/sv编码建议以及一些工程的要求只是工作过程所接触和了解内容,非普适性的编码规范,也并不代表个人赞同这些规范,一家之言仅和大家探讨这些建议原因和得失。
本系列的前五篇请参见:
  • 为什么要求不在RTL中使用always
  • 为什么避免在RTL中滥用宏定义
  • 为什么避免在RTL中使用task
  • 为什么在设计中优先使用无复位寄存器
  • 为什么RTL中避免使用#delay引入延迟[/ol]这篇是关于filelist的内容,之前对于嵌套的规则已经写过一些探究,参见“阅读原文”,那篇文章里主要是研究了一下-f和-F套娃情况下的解析方式,里面关于-y和-v的讨论直接一句话略过了。当时感觉这两个语法也没可深究的地方吧,不过最近的问题倒是让我意识到不对,这里也有坑。回到编码规范这个系列,这一项感觉不应该算编码规范,不过既然filelist也是大家自己写的所以就放一起吧。前司自研IP RTL的filelist提供给SOC时会以全展开的形式交付,当然了db库文件这类是不展开的仍以incdir和-y等方式索引。这样最后的filelist里自研IP RTL部分不仅-y和-v没有,连-f/-F都没有就纯给展开了。
    对这个要求当时没啥感觉,反正最后的filelist不是我出。觉得这项规范纯粹是为了加速TOP层的编译速度,因为TOP那边集成很多子系统,编译一次据说几十分钟甚至到小时级别都有可能(这个是听说,毕竟没编译过TOP,不知道夸张与否),所以子系统的filelist能帮忙加加速就帮一下。
    但是最近了解了一些bug让我觉得,这项建议应该是否还隐含着避免打乱编译顺序进而引发其他问题的考量?先提前声明一下,-y和-v的存在是非常有必要的尤其在库文件和生成的综合/仿真模型索引时,因此这里讨论的只是自研代码部分的filelist,工艺库、模型等不在此讨论之内。
    前一段时间注意到,-y和-v的编译点并不是按照在filelist里写的地方而确定的,而是以被例化和被使用的时间节点来确定编译点(或者确定是否被编译)。或者说其编译顺序就是在最后,在构建这个inst tree时才会被用到。通过之前某个虚拟项目的filelist做一下实验确认下。原本的filelist是这样的:

    此时的编译结果是和filelist组织顺序完全一致的:

    而如果将rtl的filelist以-y的方式进行索引:

    这样编译顺序就是先编译其他的部分,最后编译-y的目录并进行按需使用:

    也就是说,filelist里-y的存在引入了编译顺序的改变,而对编译顺序比较敏感的语法可能存在风险了。对编译顺序敏感的语法有哪些呢,最容易想到的当然就是宏定义了。这个就没必要做实验了,当然一般不应该有多个文件定义相同的宏(除非确实需要覆盖),如果有那个人认为错在同名宏定义而不在编译顺序打乱上。那还有没有对编译顺序敏感的地方呢?
    这就要说到另外一个前几天发现的问题。这个事情需要结合在很早之前做验证时总结的另外一个corner点一起看。总结的内容在另外一篇文章里,见“阅读原文”。在此摘录核心部分,对编译顺序敏感的地方如下图:

    纠正下原文里我的笔记有错误(#1000应该是#10),因此重新写一遍:
    实际行为是#100ns先根据-timescale=10ns/1ps转为#10(100ns/10ns),而后(在没有设置unit_timescale时)再根据理他最近的`timescale 1ns/1ps把#10转为#10ns。看下面的例子:


    打印结果:

    波形上test信号反馈的结果:

    不知道某些VCS版本中是否还存在这个问题,如果仍有这个问题而验证环境又没有通过-unit_timescale“保护好”class,那可能会把使用方仿真环境的#延迟给弄乱。当然了,这个你能说完全是filelist的锅吗?个人觉得也不合理,毕竟验证环境没有做好自我保护。

    系列文章入口
    【芯片设计】SoC 101(一):绪论【芯片设计】FIFO漫谈(零)从无处不在的FIFO开始说起【芯片设计】计算机体系结构(一)虚拟内存【芯片设计】深入理解AMBA总线(零)绪论
    【芯片设计】握手协议的介绍与时序说明【芯片设计】复位那些小事 —— 复位消抖【芯片设计】快速入门数字芯片设计(一)Introduction【芯片验证】UVM源码计划(零)下定决心读源码前的自测环节
    【芯片设计】异步电路碎碎念(一) 到底什么是异步电路
    【芯片设计】从RTL到GDS(一):Introduction
    【芯片设计】系统中的可维可测状态记录寄存器设计
    其他文章链接
    【芯片验证】sva_assertion: 15道助力飞升的断言练习【芯片验证】可能是RTL定向验证的巅峰之作【芯片验证】RTL仿真中X态行为的传播 —— 从xprop说起【芯片验证】年轻人的第一个systemVerilog验证环境全工程与解析
    【芯片设计】verilog中有符号数和无符号数的本质探究
    【芯片设计】论RTL中always语法的消失术
    【芯片设计】代码即注释,注释即代码
    【芯片设计】700行代码的risc处理器你确实不能要求太多了
    入职芯片开发部门后,每天摸鱼之外的时间我们要做些什么呢
    如何计算系统的outstanding 和 burst length?
    芯片搬砖日常·逼死强迫症的关键词不对齐事件
    熟人社会里,一群没有社会价值的局外人
  • 本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x
    回复

    使用道具

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则


    联系客服 关注微信 下载APP 返回顶部 返回列表