设计风格(一)
上一篇 /
下一篇 2006-11-10 22:03:40 / 天气: 晴朗
/ 心情: 高兴
1. 在每个源文件的开始,要注明模块的名称、作者、功能描述、日期、修改记录等。
2. 尽量多加注释。尽量对每个信号、寄存器、函数、进程都给出注释,特别是对于代码中比较复杂、难以理解的地方,要给出清楚的说明。否则,过一段时间自己也很难看懂。
3. 每行知写一条代码,每行的代码长度最好不要超过72个字符。这样的规定为了保证代码具有很好的可读性。
4. 使用缩进格式书写条件和循环部分代码,以增加代码的可读性。最好使用空格键而不是tab键,因为不同的编译器对tab的解释不一样。
5. 不要使用HDL的保留字来命名变量或信号。切记不要用VHDL的保留字用于Verilog,也不要用Verilog的保留字用VHDl。
6. 使用显示的方式来映射端口和常量,保持端口名称职间的对应。
7. 对于某个模块,如果需要为ASIC和FPGA写两套代码,则应将代码写在一个文件中,通过’ifdef来区分,如下所示:
‘ifdef ASIC
//code for ASIC
‘else
//code for FPGA
‘endif
8. 敏感列表写完整。如果always模块中的敏感列表不完整,则设计综合前的功能可能与综合后的功能不一致。还可能产生不希望的latch。
9. 在一个always进程中,如果生成一个中间信号,该信号用来生成别的信号,则中间信号的生成语句必须放在前面。例如,为了生成o=a&b|(c&d)的功能,采用下面的写法是有错误的:
module code_err(o,a,b,c,d);
output o;
input a,b,c,d;
reg o,temp;
always@(a or b or c or d)begin o=a&b|temp; temp=c&b; end endmodule
这是因为在RTL级仿真时,temp会被看作是一个锁存器。在第一次运行时,用temp的当前值生成的o,在下一周期,再将本次的c&b的结果送给temp。
10. 不要试图用function实现锁存器。Function仅用来生成组合逻辑。例如,下面的写法是错误的:
function latch;
input a,nrst,en;
if(!nrst)latch=1’b0;
else if(en)latch=a;
endfunction
摘自《数字IC系统设计》
导入论坛
收藏
分享给好友
推荐到圈子
管理
举报
TAG: