参加工作已经半年,所做的项目也到了测试阶段,之前做的一个子模块已集成到系统,由于是第一个设计,所以模块的健壮性很不好,别人看我的代码估计会吐血,就连现在叫我自己去看,可能好多地方一时半会都看不明白,而且设计的时候除了specification就没其他文档,整个项目过程中版本控制做的很不好,项目完成之后也没做什么总结就忙着参与到第二个项目中,以前一直用verilog HDL,而这个项目要用VHDL,所以得边学边做,不过还好,项目难度系数不大。扯远了,该总结了。通过第一个项目,coding的一些经验:
1. 代码风格很重要,他直接决定设计的健壮性及可靠性,好的编码风格以后维护起来也很方便,同时也方便交流。
2. 写spec的时候,端口信号的命名,内部模块之间的连接信号都要定义好,而且确定下来之后,尽量不要改动。另外,信号及变量名要有意义,以提高代码的可读性,方便与同事交流。
3. 如果可能,尽量采用同步设计,尽量一个模块采用一个时钟,如果有data或pulse需要同步,则单独用一个同步模块来同步。后面我或总结一些同步设计的方法,把设计当中用到的同步方法都总结出来(主要是快时钟域到慢时钟域及慢时钟域到快时钟域的同步)。
4. 尽量采用多的注释,大家一看都知道怎么回事的地方就不用注释了。
5. “时序是设计出来的,不是凑出来的”,虽然知道这个道理,但做第一个设计的时候还是没有遵守这个规则,以至于到后来设计完了,总感觉很多时序都是在仿真中不断的修改,凑出来的。这样就导致设计健壮性差,可维护性也很差。以后的设计一定要注意,写完整个设计的spec之后,还应该有一个design details specification,把各国模块之间的时序以及模块内部一些关键信号的时序详细的设计出来。后面coding喝simulation的工作量会减少很多。
6. coding完之后,编写testbench也是一个至关重要的环节,尽量把所有case都考虑进去。
7. 设计的容错处理很重要,比如接收数据超时处理等。
8. 设计能采用状态机尽量采用状态机设计。
9. 接到task之后,制定一个清晰的schedule很重要,并且严格按照schedule执行。
【未完待续】
用户1113192 2011-2-9 17:32