Verilog最佳实践 - 增加变量

Cor*_* G. 5 verilog

我绝不是Verilog的专家,我想知道是否有人知道这些增加价值的方法更好.对不起,如果这个问题太简单了.

方式A:

在组合逻辑块中,可能在状态机中:

//some condition
count_next = count + 1;
Run Code Online (Sandbox Code Playgroud)

然后在顺序块中的某个地方:

count <= count_next;
Run Code Online (Sandbox Code Playgroud)

或方式B:
组合块:

//some condition
count_en = 1;
Run Code Online (Sandbox Code Playgroud)

顺序块:

if (count_en == 1)
  count <= count + 1;
Run Code Online (Sandbox Code Playgroud)

我经常看到Way A.方法B的一个潜在好处是,如果你在状态机的许多地方递增相同的变量,也许它只使用一个加法器而不是许多加法器; 或者是假的?

首选哪种方法,为什么?要么有明显的缺点?

谢谢.

小智 2

方式 B 的一个潜在好处是,如果您在状态机的许多位置递增相同的变量,则可能只使用一个加法器而不是多个加法器;或者这是假的?

任何综合工具都会尝试自动资源共享。他们做得如何取决于所编写的工具和代码。这是一个描述Design Compiler的一些功能的文档。请注意,在某些情况下,面积越小意味着时机越差。

哪种方法是首选,为什么?两者都有明显的缺点吗?

这取决于。Verilog(用于综合)是实现某些逻辑电路的一种方法,但规范没有具体说明这是如何完成的。方式 A 可能与 FPGA 上的方式 B 相同,但由于无条件顺序分配,方式 A 与 ASIC 上的低功耗设计不一致。使用复位网络几乎是 ASIC 的一项要求,但由于许多 FPGA 都是在已知状态下启动的,因此如果不使用复位网络,您可以节省大量资源。