verilog代码风格——入门

代码风格——入门

A. 入门内容

总结于:https://www.bilibili.com/video/BV1uq4y1q7DJ

signal

  • Use lower case for signal name, for example
    • tx_fifo_rd √
    • Tx_Fifo_Rd ×
  • low activve reset
    • rst_ √
    • rst ×
  • 全局信号应该被清晰地命名包括源信息的名称,例如一个由dma指向mem的requset_read信号可以命名为:
    • dma_mem_req_rd √
    • mem_req_rd ×

clock

  • 所有不同模块的时钟信号应该直接来自同一个clk generation block
  • 使用posedge clk而不是negedge clk
  • 一个模块中只应该有一个clk(即同步处理)
    • 如果涉及到异步(其他输入时钟),请在另外的前面的模块中同步好,不要在一个里面用好几个clk,如果用了好几个clk在后端做时序的时候做时钟树不太友好

模块分类

  • put custom/semi=custom layout circuit into seqparate module. For ex.
    • rom ram register+file …
  • Put synthesis sensitive circuit which need to be finePut synthesis sensitive circuit which need to be fine tuned into separate modules.
  • Put non-synthesizable circuit which need to bePut non-synthesizable circuit which need to be manually edited into separate modules. For ex. pad, PLL, clk driver, delay_cell, spare_gate. For ex.
    • pad, PLL, clk driver, delay_cell, spare_gate
  • 可以通过文件夹把这些类型分开

Use separate modules for control logic and data path logic

  • 一开始模块划分时,高内聚,低耦合,模块之间的连接少一点,多一点模块内的连接

模块例化

  • 没啥要强调的

端口映射

  • 尽量名字取一样

内部测试信号要引出来

  • 引出来,不然Netlist标号后找不到

顶层模块直连就好

  • 顶层模块直联就好,不要写逻辑

图中这种在TOP中加入逻辑方法不推荐

Delay

  • 赋值时候插入delay模拟延迟

If Statement

Critical path first关键路径优先

模块复用/资源共享

使用两个加法器

只使用一个加法器,资源复用

补齐else

推荐一个always写一个reg

不能用于综合的语句

不能用于综合的运算符

  • 设计里面两个==就好了

不能用于综合的基本单元

其他不能用于综合



本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!