基于FPGA/CPLD应用设计的23点经验总结——关于VHDL代码风格

摘自《FPGA/CPLD应用设计200例》

  1. 对所有的信号名、变量名和端口名都用小写,对常量名和由用户定义的类型用大写。
  2. 使用有意义的信号名、变量名、端口名和参数名。
  3. 信号名长度不要太长,力求简洁明了。
  4. 对于时钟信号使用clk作为信号名或信号名的前缀(当设计中存在多个时钟时)。
  5. 对来自同一驱动源的信号,在不同的子模块中采用相同的名字。这要求在芯片总体设计时就定义好顶层子模块间连线的名称,端口和连接端口的信号尽可能采用相同的名字。
  6. 对于低电平有效的信号,应该以一个下划线加一个小写字母b或n表示,如a2b_reg_n。
  7. 对于复位信号,用rst作为信号名。如果是低电平有效,则是rst_b或rst_n。
  8. 尽量遵守业界已经习惯的一些约定。如*_r表示寄存器输出,*_a表示异步信号,*_pn表示多周期路径第n个周期使用的信号,*_nxt表示锁存前的信号,*_z表示三态信号等。
  9. 在源文件、批处理文件的开始处应该包含一个文件头。一般包含以下内容:文件名、设计者、模块名、模块的实现功能概述、使用的仿真软件以及软件运行的平台、使用的综合工具以及工具运行的平台,文件创建时间,文件的修改时间。
  10. 使用适当简短的语句注释所有的进程、函数、端口含义、信号含义、变量含义及信号组、变量组的意义等。
  11. 每一行语句独立成行。
  12. 采用缩进以提高续行和嵌套语句的可读性。
  13. 在RTL源码的设计中任何元素的命名都不能取VHDL和Verilog的保留字。
  14. 在进行模块的端口声明时,建议使用以下顺序:输入信号的clk, rst , enables other control signals, data and address signals,然后是输出信号的clk, rst , enables other control signals, data and address signals。
  15. 在例化模块时,使用名字显式映射而不是采用位置相关的映射,这样可以提高代码的可读性和避免编译连线错误。
  16. 如果同一段代码要重复多次,应尽可能使用函数;如果有可能,将函数通用化。
  17. 尽可能使用循环语句和寄存器组来提高源代码的可读性。
  18. 代码编写时的数据类型只使用IEEE定义的标准。
  19. 在设计中不要直接使用数字,作为例外,可以使用0和1。建议采用参数定义代替直接的数字。
  20. 不要在源代码中使用嵌入式的dc_shell综合命令。
  21. 在设计中避免实例化具体的门级电路。
  22. 避免冗长的逻辑和表达式。
  23. 避免采用内部三态电路,建议用多路选择电路代替内部三态电路。

你可能感兴趣的:(基于FPGA/CPLD应用设计的23点经验总结——关于VHDL代码风格)