首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Quartus优化组合逻辑?

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

Stack Overflow用户
提问于 2016-03-07 11:34:41
回答 1查看 517关注 0票数 0

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

代码语言:javascript
复制
res = a * b * c *d

我想知道Quartus是否有可能自动生成一个等价的组合逻辑,它具有更短的关键路径,如下所示:

代码语言:javascript
复制
ab  = a * b
cd  = c * d
res = ab * cd

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

流水线在这里不起作用,因为我不想改变这个组合电路的时序。

EN

回答 1

Stack Overflow用户

发布于 2016-03-07 18:23:33

像Quartus这样的综合工具通常基于HDL (VHDL/Verilog)代码构建初始内部结构,然后根据约束和面积重新组织和优化该结构,直到该工具具有操纵结构的规则。最后,该工具执行计时检查,以查看所产生的设计是否遵守计时。

对于乘法*运算符的实现,它看起来像Quartus简单地使用*的左关联属性实现a * b * c * d,因此作为((a * b) * c) * d,并且不应用关联规则来进行(a * b) * (c * d)以满足时序要求。

所以,如果你想让乘数像这样:

代码语言:javascript
复制
res = (a * b) * (c * d)

你可以帮助合成工具将HDL写成(使用VHDL):

代码语言:javascript
复制
ab <= a * b;
cd <= c * d;
res <= ab * cd;

请记住,制定与需求相匹配的时间约束,以检查结果实现是否满足所需的时间。对于最大延迟为12 ns的ares,路径要求如下:

代码语言:javascript
复制
set_max_delay -from [get_ports a[*]] -to [get_ports res[*]] 12
...

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

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

和预期的一样,定时遵循实现。

所以你通常可以通过HDL代码的结构来控制实现,如果你通过HDL代码建议的结构将满足时序,而综合工具不能在满足时序要求的同时进一步优化面积。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35835744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档