棋子 · 2 天前

如何写出满头冒水的 RTL 代码?

虽然目前世界上都在推行可读性好、可维护性好的 RTL 编码规则,一大堆公司机构也都推出了各种各样的编码规范,网上一搜索各种好的编码规则规范一箩筐,但是当你实际打开代码后,你会发现理想很丰满,现实很骨感,你看到的代码简直比散文还要散。下面给出一些编写散装代码的建议。

1.注释中英结合

注释主打一个老外看不懂,国人也看不明白,也可以直接各语种不定长切换,反正这代码写出来也么指望让别人看懂。

GOOD

chip udut(); // zhun bei test de di you t

BAD

chip udut(); // chip instance

2.命名尽可能的浓缩

写的越多,给读你代码的人的信息也就越多,为了尽可能的晦涩难懂,我们键入的东西越少,把腾出来的时间留给读代码的人去思考

GOOD

reg [31:0] i;

BAD

reg [31:0] data_in;

3.标识符混合命名风格

为了体现代码命名的多样性,标识符也需要高低起伏沟壑万千。

GOOD

reg [31:0] rEsetN;

BAD

reg [31:0] Reset_n;

4.代码能写成一行绝对不分行

相关过程语句块中的代码要尽可能写在一行。

GOOD

always@(posedge c) if (set == 1)begin sig1 <= sig2;end else begin sig3 = clr ? sig4:sig5 end

BAD

always @(posedge clk) begin

if(rst == 1’b0) begin

dout <= 1’b0;

end else begin

dout <= din;

end

end

5.冗余代码

增加一些绝对不会运行到的代码。

GOOD

bit sig;

if (sig == 1’b0) begin

...

end else if(sig == 1’b1) begin

...

else begin

... // 冗余

end

BAD

bit sig;

if (sig == 1’b0) begin

...

else begin

...

end

6.条件嵌套层数尽可能多

如果代码一定要将各种判断条件单独列出来,逐一嵌套判断,最好每层嵌套中间夹杂一些其他语句。

GOOD

if (condition1) begin

if(condition2) beign

if(condition3) begin

...

end

end

end

BAD

if (condition1 || condition2) begin

...

end else begin

...

end

7.混合缩进

Tab 键和空格穿插使用,可以增加代码的高低不平。

8.方法、状态机能写多长写多长

不要将整体逻辑分成一些小的代码块,尽可能把相关代码都写在一个源文件中,单一文件上万行也不成问题,能一次性写成上百万行的网表水平,更能体现编码水平和工作量。

9.减少代码的复用

代码复用,会明显减少你的工作量,所以能重复绝对省着。

10.使用全局变量

面向设计全域共享变量,广泛使用全局变量,秉承你的就是我的原则。

11.不加入任何 debug 代码

设计运行错误,也不能报出任何问题,因为其他人不需要了解,主打一个悄无声息。

12.注释

/**/注释跨多行添加在代码右侧

GOOD

ecc[0] = dat_in[0] ^ dat_in[2];/* encode

ecc[1] = dat_in[1] ^ dat_in[2];*

ecc[2] = dat_in[0] ^ dat_in[1];*/

ecc[3] = dat_in[1] ^ dat_in[4];

BAD

/*encode*/

ecc[0] = dat_in[0] ^ dat_in[2];

ecc[1] = dat_in[1] ^ dat_in[2];

ecc[2] = dat_in[0] ^ dat_in[1];

ecc[3] = dat_in[1] ^ dat_in[4];

13.敏感信号列表能省就省

GOOD

always begin

reasult = d1 + d2;

end

BAD

always @(d1 or d2)begin

reasult = d1 + d2;

end

14.逻辑折叠

尽可能使用位运算和归约操作符嵌套使用

GOOD

assign dout = (|(dat_in & ‘hAA)^^{5{(&a)}})

BAD

assign dout = sel ? (dat_in &’h55): (dat_in &’hAA);

15.代码中使用换行符

GOOD

`define STATE \

2’b11

BAD

`define STATE 2’b11

16.代码无组织管理

代码尽可能分散在多个不同层次不同的文件夹中,我找不到别人也休想找得到,保密效果杠杠的。

总之,我们的目标是,没有最难懂的代码,只有更难懂代码!

END

作者:nanoty
文章来源:硅芯思见

推荐阅读

更多 IC 设计干货请关注IC 设计专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。

推荐阅读
关注数
22750
内容数
1364
主要交流IC以及SoC设计流程相关的技术和知识
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息