我绝不是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 都是在已知状态下启动的,因此如果不使用复位网络,您可以节省大量资源。