电子产业一站式赋能平台

PCB联盟网

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

【芯片交付】为什么RTL中避免使用#delay引入延迟

[复制链接]

384

主题

384

帖子

4538

积分

四级会员

Rank: 4

积分
4538
发表于 昨天 12:07 | 显示全部楼层 |阅读模式
编写RTL一晃十来年了,遇到了很多形形色色工程编码规范、约束和建议,故而在此阶段性汇总。本系列中所提及和讨论的verilog/sv编码建议以及一些工程的要求只是工作过程所接触和了解内容,非普适性的编码规范,也并不代表个人赞同这些规范,一家之言仅和大家探讨这些建议原因和得失。
本系列的前四篇请参见:
  • 为什么要求不在RTL中使用always
  • 为什么避免在RTL中滥用宏定义
  • 为什么避免在RTL中使用task
  • 为什么在设计中优先使用无复位寄存器[/ol]按理说,不在RTL里使用#delay引入延迟这点不需要作为专门作为一个编码规范来提,因为#delay本身就不是可综合语法嘛。验证里为了构建一些波形场景随便用别人管不着,要拿去综合的RTL代码里写这个就过分了。但是前司和前前司都将这一条拿出来说了一下,就很有意思了。既然有这个规范那说明之前肯定有人这么做过,所以我这种爱看八卦的人就必须去探究一下了。
    探究的第一个问题是,有没有公司这么写过呢(即要求写#delay)?有,比如前前司的古早代码(耳闻)以及两个前同事口中的前司(同样是耳闻)。在github上的一些开源项目里也能看到类似这样的写法比如:
    https://link.zhihu.com/?target=https%3A//github.com/risclite/ARM9-compatible-soft-CPU-core
  • always @ ( posedge clk or posedge rst )if ( rst )    reg_ans 64'd0;else if ( cpu_en )    if ( ~hold_en )            reg_ans         else if ( cmd_is_ldm )            if ( cmd_sum_m==5'b1 )                    reg_ans[6:2]             else if ( cmd[23] )                    reg_ans[6:2] 6:2] + 1'b1;            else                    reg_ans[6:2] 6:2] - 1'b1;        else;else;这个代码有一说一看得人头疼。此外根据某大佬的描述,某司的古早代码中采用的方式大概也是这样的,就是定义了一个宏使其在前端仿真和综合时定义不同:
  • `ifdef SIM_MODE  `define RTL_DELAY #1ps`else  `define RTL_DELAY //不记得这个#是在宏里面还是外面了,不影响意思倒是这样在综合时`RTL_DELAY相当于是空格完全不可见,在仿真时是#1ps参与仿真的进程。我后来想了一下,即使留着#delay综合工具是不是也会将其忽略呀?还是会报Error中断综合,记不清了之后我试试看然后把结果贴一下。
    探究的第二个问题是,为什么这么做。根据该大佬的溯源,之所以当时的代码引入的#delay是为了避免仿真中的“竞争与冒险”,因为当时部门对于仿真行为的一些特点拿捏不好,为了快刀斩乱麻规避RTL和仿真的“竞争与冒险”问题所以引入了#delay。后来在验证力量逐步完善以及大佬等人的探究下,摸清了标准的仿真行为所以后面就把#delay统一在后续的项目中删掉并且禁止在RTL中使用了。

    ifqcf3y5obq6404509405.jpg

    ifqcf3y5obq6404509405.jpg

    关于这个探究后来我也跟着完整的学习了一遍,受益颇多。

    efb2mlsdozl6404509505.jpg

    efb2mlsdozl6404509505.jpg

    q4gxfxpnbqh6404509605.png

    q4gxfxpnbqh6404509605.png

    系列文章入口
    【芯片设计】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?
    芯片搬砖日常·逼死强迫症的关键词不对齐事件
    熟人社会里,一群没有社会价值的局外人
  • 回复

    使用道具 举报

    发表回复

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

    本版积分规则


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