良好的逻辑风格

主要参考了:华为Code Style;Verilog 基本电路设计指导书 华为;Qian's WorldCSDN博客 Verilog代码风格《Verilog 编程艺术》(魏家明 电子工业出版社)

总的规则

Rule No.1 永远不要稍后再调整代码,因为 Later equals never

Rule No.2 去除、合并冗余代码,如果一个代码会被用在多个地方(>=2),都应该提出来做成模块、函数或者Task——Less is more

一个 Tab = 4 个空格

代码要求

  • 设计时要写好文档。在文档中记录设计思路、端口、数据通路和实现细节。在《Verilog 编程艺术》中,作者要求代码需要评审之后再开始编写,对于小型工程没有必要,但是设计文档还是需要的。
  • 有 IP 可用的时候尽量使用 IP,对于 IP 可以使用原语的时候就使用原语,这样移植工程会更简单
  • 每个模块单独放在一个文件里面,文件名和模块名要一致;top层模块名应该加上后缀 "_top";仿真文件加上后缀 "_tb";最 Top 层模块名为 FPGA_Top
  • 不要使用 "/synopsys full_case parallel case" (参见这篇文章 Cummings, Clifford E. "" full_case parallel_case", the Evil Twins of Verilog Synthesis." Proc Synopsys Users Group (SNUG) (1999).)

代码划分

  • 高内聚、低耦合的原则
  • 每个模块只完成一个功能,隐藏内部细节提供一个干净的接口
  • 也存在一个模块就需要做很多事的情况,否则会增加非常多的模块,这个时候就用一个模块反而更好
  • 低耦合的意思是减少模块之间的连线,避免大量连线信号
  • 关键路径逻辑和非关键路径逻辑放在不同的模块,分为速度优化和面积优化
  • 提取公共代码或者常用的代码,形成模块、函数或任务
  • 相关代码紧挨着,形成逻辑块,每个逻辑块上方写注释

命名

  • 严格遵守本节最后的命名缩写规则
  • 使用有意义的命名
  • 不要使用 Pascal 命名,因为在 VHDL 中大小写不敏感!!!
  • 模块中的变量使用小写,下划线分割。Pascal 命名是个好东西,写软件代码用这种命名方式。
  • 即使非用大写不可,也要在一个模块里面统一,不要大小写混合,否则在 Verilog 中会引起阅读困难,在 VHDL 中会造成查找困难
  • `define、parameter、localparam、const、enum 用大写字母
  • 同一个信号在每个子模块中的名字要一致
  • FPGA 的输入输出管脚要在后面加上_Pin 或者_Pout 表示输入或者输出;管脚名字全部用大写
  • 输入输出信号要在后面加前缀_i或者_o:比如 usb_data_rden_o, usb_data_wren_o, usb_data_i
  • 内部定义的寄存器要在后面加后缀_r 比如:trigger_sync_r
  • 内部定义的 wire 在信号名后面加_w
  • VHDL 中定义 SIGNAL 在信号名后面加_s

常用信号的缩写如下表所示

name short name short name short
acknowledge ack error err ready rdy
adress addr enable en receive rx
arbiter arb frame frm request req
check chk generate gen resest rst
clock clk grant gnt segment seg
config cfg increase inc source src
control ctrl input in statistic stat
counter cnt length len switcher sf
data in din output out timer tmr
data out dout packet pkt tmporary tmp
decode de priority pri transmit tx
decrease dec pointer ptr valid vld
delay dly read rd write enable wren
disable dis read enbale rden write wr

results matching ""

    No results matching ""