虽然目前世界上都在推行可读性好、可维护性好的 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)加入技术交流群,请备注研究方向。