我正在使用Quartus来综合FPGA的一个组合电路。现在,我希望在不考虑资源消耗的情况下获得最佳的最大频率。当前关键路径由如下所示的乘法序列组成:
res = a * b * c *d我想知道Quartus是否有可能自动生成一个等价的组合逻辑,它具有更短的关键路径,如下所示:
ab = a * b
cd = c * d
res = ab * cd它们在关键路径上只有两个乘法器。我发现Quartus的一个在线文档提到了这是可能的,但没有说明如何做到这一点:UsingTimeQuestAnalyzer
流水线在这里不起作用,因为我不想改变这个组合电路的时序。
发布于 2016-03-07 18:23:33
像Quartus这样的综合工具通常基于HDL (VHDL/Verilog)代码构建初始内部结构,然后根据约束和面积重新组织和优化该结构,直到该工具具有操纵结构的规则。最后,该工具执行计时检查,以查看所产生的设计是否遵守计时。
对于乘法*运算符的实现,它看起来像Quartus简单地使用*的左关联属性实现a * b * c * d,因此作为((a * b) * c) * d,并且不应用关联规则来进行(a * b) * (c * d)以满足时序要求。
所以,如果你想让乘数像这样:
res = (a * b) * (c * d)你可以帮助合成工具将HDL写成(使用VHDL):
ab <= a * b;
cd <= c * d;
res <= ab * cd;请记住,制定与需求相匹配的时间约束,以检查结果实现是否满足所需的时间。对于最大延迟为12 ns的a到res,路径要求如下:
set_max_delay -from [get_ports a[*]] -to [get_ports res[*]] 12
...RTL和技术结构如下图所示:

其中像res = a * b * c * d这样的表达式提供了这样的结构:

和预期的一样,定时遵循实现。
所以你通常可以通过HDL代码的结构来控制实现,如果你通过HDL代码建议的结构将满足时序,而综合工具不能在满足时序要求的同时进一步优化面积。
https://stackoverflow.com/questions/35835744
复制相似问题