bitart

见程序如见人---没有代码风格还学什么FPGA

0
阅读(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

     代码风格各个公司各有各自的规定,但是一条基本原则要满足:代码是给人看的!完成功能的同时,做不到赏心悦目,但至少要有人看得懂吧!