Verilog可综合设计与不可综合设计如何区分?

来源:FPGA入门到精通

在Verilog设计中,并非所有代码都能转化为硬件,对于可综合设计和不可综合设计,FPGAer是必须掌握的。

本文将深入探讨Verilog中的可综合设计与不可综合设计,揭示它们之间的差异,并提供一些建议参考。

一、哪些语句可综合?

1、模块定义 ( module )
Verilog设计的基本单元。
2、端口声明 ( input ,  output ,  inout )
模块间通信的接口。
3、参数定义 ( parameter ,  localparam )
设计中的常量。
4、信号变量 ( wire ,  reg )
表示电路中的物理连接和存储元件。
5、门级原语 ( and ,  or ,  not  等)
基本的逻辑门。
6、连续赋值 ( assign )
用于创建组合逻辑。
7、过程赋值 ( always )
用于创建时序逻辑。
8、条件语句 ( if ,  case ) 和 循环语句 ( for ,  while )
控制逻辑流程
9、函数与任务(function 和 task)
二、哪些语句不可综合?
1、仿真关键字:
如 initial 块, # 延迟,系统任务( $display ,  $finish 等),它们仅用于仿真。
2、并行语句
fork ,  join ,表示仿真中的并行结构,不被综合。
3、电平敏感触发
wait ,用于仿真中信号的电平检测,不适用于硬件。
4、强制赋值
 force ,  release ,在仿真中用于阻断其他驱动源。
5、实数变量
 real ,通常用于仿真时的精确计算。
三、综合工具可能支持的语句
1、x/z条件语句
casex ,  casez ,某些工具可能支持非x/z比较逻辑。
2、不同强度的线网
wand ,  triand 等,现代数字设计中较少使用。
3、过程终止
disable ,大多数综合工具不支持。
4、循环语句
 repeat ,  while ,  forever ,在某些条件下可能可综合。
四、综合实践的一些建议
1、避免Latch
不要编写可能被综合为Latch的逻辑。
2、寄存器初始化
关键信号一定要使用复位信号而非在变量声明时赋初值。
3. 赋值方式
组合逻辑使用阻塞赋值“=”,时序逻辑使用非阻塞赋值“<=”。
组合逻辑使用assign语句或always@(*)语句。
时序逻辑使用always@(posedge clk)这样的语句。
4. 避免多驱动
同一变量不应受多个时钟或双边沿控制。
5. 逻辑值
避免使用X或Z值,大部分综合工具只识别0或1。


最新文章

最新文章