芯学长 | 掌握芯资讯,引领芯未来

您当前所在位置:首页 > 芯片设计 > 数字IC前端

如何写出让同事无法维护的Verilog代码?

发布时间:2024-03-25来源:硅农 0

对,你没看错,本文就是教你怎么写出让同事无法维护的代码。

命名用拼音

让他Google翻译也不知道这个单词是什么意思,(怎么可能有人定义信号用拼音,对,我见过),这只是先跟他开个玩笑,重点在后面。

assign语句尽量要写的长

assign flag = data_vld && mode_sel && enable_flag && (data_num[3:0] > 4'd7) && (ram_addr[4:0] > 4'd15) && ((cur_state != STATE_A) && (next_state == STATE_A)) 

    || ((cur_state != STATE_B) && (next_state == STATE_B));

类似于这样,相信我,他看代码的时候,收集覆盖率的时候都会哭的。

if里面的条件尽量写长些,else-if的分支尽量写多些

always @(*)begin  
if(data_vld && mode_sel && enable_flag && (data_num[3:0] > 4'd7) && (ram_addr[4:0] > 4'd15) && ...)
 else if(enable_flag && (data_num[3:0] > 4'd7) && (ram_addr[4:0] > 4'd15))...    ...

效果同上

计数器不清零

在不容易被发现的计数器的部分,别给这个计数器清零,让他自己上溢,然后再从0开始计数,这样还可以在满足功能的情况下通过很多case,甚至可能到最后都不会验出错。但是冷不丁的什么时候出现问题,惊出他一身冷汗。

状态机命名没有含义

最简单的方法是,S0,S1,S2,S3。直接让他懵逼

高级一点的方法是,CAL_PRE,代表计算前一个状态,最后在这个状态把所有的计算都一干。

NORM、PROC,这两个状态本来是连续跳转的,但在NORM状态啥都别干,空等一拍出来,然后在PROC状态把NORM和PROC状态的事情通通干掉,直接让他两眼瞪直。

计数器等于常数比较判断

状态机跳转出来的使能条件为把一个计数器计数到一个固定值,比如cnt == 147,状态机跳出当前状态,相信我如果没有记录,最后不光他忘了,你也会忘记这个数是什么意思。

信号命名尽量相似

a_size,a_size_num,a_norm_size,a_special_size

cnt1,cnt2,cnt3,谁知道这几个cnt分别是干嘛的

这样一套组合拳,直接把他打趴。

制造X态不传播假象

image

第一种写法,如果data_vld0是X态,会在仿真的时候直接暴露出来,但是换第二种写法,就不一定了。是因为if-else和case不能传播不定态,有的EDA工具有X态传播选项,可以强行传播,一般也需要license,但并不是所有的EDA工具都有这个功能。所以,如果深谙这样的操作,甚至可以直接把芯片搞废,让他直接原地爆炸。

打补丁,补丁套补丁

调试代码的过程中遇到棘手的bug,反复修改了多次问题都无法收敛,千万别想着重写,采用打补丁的方式,补丁套补丁,补丁的代码甚至要多过原代码,这样他才无法继续维护。

设计文档描述

设计文档描述关键的地方一笔带过,尽量别详细。

总之

总之,我们的口号是—— *Write Everywhere, Read Nowhere*

最后

感谢那些给我们留下填不完的坑的前同事,因为有了你们我们才更加顽强!

评论区支持盖楼了,关于这个坑你还有什么好的方法挖出来的,欢迎评论区留言。

相关推荐:

数字IC验证 IP和SOC方向,该如何选?

IC设计|机械转数字IC验证,年薪30W+!

芯片设计中的功耗挑战和低功耗设计

【免责声明】:本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。

原文标题:
如何写出让同事无法维护的Verilog代码?
文章来源:
https://mp.weixin.qq.com/s/iYoHImb9Z1M45a6ljUaMew

文章评价

-   全部 0 条 我要点评

有疑惑?
在线客服帮您
029-81122100

立即咨询 >