见程序如见人---没有代码风格还学什么FPGA
0赞
发表于 11/5/2014 4:31:43 PM
阅读(1758)
人人都知道文如其人,这里的“文”对程序员来说指的就是代码,从一段代码源文件能看出很多问题,比如:
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
上面的代码,交给你维护,你愿意吗?为什么这段代码不好?首先,阻塞赋值和非阻塞赋值的概念不清楚,按照顺序语句在编程;其次,不理解“不完整的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
代码风格各个公司各有各自的规定,但是一条基本原则要满足:代码是给人看的!完成功能的同时,做不到赏心悦目,但至少要有人看得懂吧!
