如何使用Quartus优化组合逻辑?

时间:2016-03-07 03:34:41

标签: fpga multiplication synthesis quartus

我正在使用Quartus将组合电路合成到FPGA。现在我想在不考虑资源消耗的情况下获得最佳的最大频率。当前的关键路径由一系列乘法组成,如下所示:

res = a * b * c *d

我想知道Quartus是否有可能自动生成具有较短关键路径的等效组合逻辑:

ab  = a * b
cd  = c * d
res = ab * cd

关键路径上只有两个乘数。我发现Quartus的在线文档提到这是可能的,但没有关于如何做的说明:UsingTimeQuestAnalyzer

由于我不想改变这种组合电路的时序,所以流水线在这里不起作用。

1 个答案:

答案 0 :(得分:1)

像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;

并记住制定符合要求的时序约束,以检查生成的实现是否满足所需的时序。路径要求可以类似于ares,最长延迟为12 ns:

set_max_delay -from [get_ports a[*]] -to [get_ports res[*]] 12
...

RTL和技术结构如下图所示:

enter image description here

res = a * b * c * d之类的表达式给出了这种结构:

enter image description here

按照预期实施时间顺序。

因此,如果您通过HDL代码建议的结构将满足时序,则通常可以通过HDL代码的结构来控制实现,并且综合工具无法在满足时序要求的情况下进一步优化区域。