关于对Verilog代码的维护问题

关于对Verilog代码的维护问题,第1张

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

命名用拼音

让他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态不传播假象

assign data_out[5:0] = ({6{data_vld0}} & data0[5:0])   
  | ({6{data_vld1}} & data1[5:0]);
always @(*)begin   
  if(data_vld0)   
       data_out[5:0] = data0[5:0];  
   else if(data_vld1)     
    data_out[5:0] = data1[5:0];   
  else     
     data_out[5:0] = 6'd0; end

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

打补丁,补丁套补丁

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

设计文档描述

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

总之

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

编辑:黄飞

 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/dianzi/2711513.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-17
下一篇 2022-08-17

发表评论

登录后才能评论

评论列表(0条)

保存