人人都知道文如其人,这里的“文”对程序员来说指的就是代码,从一段代码源文件能看出很多问题,比如:
1)此人所在公司版本管理是否规范,是否有统一的代码风格。
如果一个公司没有统一的代码规范,则一个大的项目基本无法维护,无法继承,往往代码的编写者离职后,继承者需要花费大量的时间来理解,甚至无法理解。连成熟的、可复用的模块都没有,谈何效率?谈何经验积累?如果作为甲方,找这样的公司作为乙方你放心吗?
2)代码作者对HDL语言的理解程度。
笔者见过很多很多人的HDL代码,还像写C语言一样编程,像下面代码片段:
always @ (posedge clk or posedge rst)begin
if (rst)begin
command <= command_idle;
address <= 12'b0;
data_to_bu61580 <= 16'h0;
state <= 6'h0;
state_1 <= 6'h0;
rx_rd_cnt <= 0;
command_word <= 16'h0;
cmd_stk_pt_reg <= 16'h0;
upload_cnt <= 0;
int_status <= 16'h0;
data_pointer <= 16'h0;
DSP_INT6 <= 0;
dsp_int_cnt <= 0;
// chip scope trigger signals
//
end
else if (~int_n & ~bus_to_bu_occupied_by_sar)begin
case (state)
0:begin//set busy bit
rx_rd_cnt <= 0;
//serve_done <= 0;
upload_cnt <= 0;
state <= 6'h1;
state_1 <= 6'h0;/////
end
case(state_1)
0:
begin
command <= write_reg;
address <= config_reg1_addr;
data_to_bu61580 <= 16'h8f80; // set busy bit in REG #1
if(command_ack == 1)
begin
command <= command_idle;
state_1 <= 6'h1;
end
else
state_1 <= 6'h0;
end
1:
begin
if(wr_rd_state == wr_rd_idle)
begin
state_1 <= 6'h0;
state <= 6'h1;
end
else
state_1 <= 6'h1;
end
default:state_1 <= 6'h0;
endcase
end<span style="font-family:'sans serif', tahoma, verdana, helvetica;font-size:14px;line-height:1.5;"> </span>
上面的代码,交给你维护,你愿意吗?为什么这段代码不好?首先,阻塞赋值和非阻塞赋值的概念不清楚,按照顺序语句在编程;其次,不理解“不完整的if/case语句会引入不必要的锁存器或触发器”,浪费资源不说,时序的概念基本没有,还可以肯定的是STA肯定没做;再次,位宽不匹配,虽然这一点没有严格要求,但看着综合器给出的上十个警告,不心烦吗?!!!
像下面这段片段,是价值1W的一个源文件,你敢信?要不是有人出钱买了,反正我不信!看着那一排排的k、l、m、n及基本没有注释,是不是想哭了?
always @(posedge clk_hdlc or negedge reset)
if(!reset)
begin
state<=0;
data_s<=1;
count_byte<=0;
k<=0;
l<=0;
m<=0;
n<=0;
count_d<=0;
clk_rd<=0;
buff[4:0]<=0;
empty<=0;
crc_en<=0;
i<=0;
j<=0;
end
代码风格各个公司各有各自的规定,但是一条基本原则要满足:代码是给人看的!完成功能的同时,做不到赏心悦目,但至少要有人看得懂吧!