- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我必须在 std_logic_vector 上测试不同的位。实现一个单独的进程(对每一位进行 for 循环)还是使用 for-generate 实例化“n”个进程(每个进程测试一位)会更好吗?
FOR 循环
my_process: process(clk, reset) begin
if rising_edge (clk) then
if reset = '1' then
--init stuff
else
for_loop: for i in 0 to n loop
test_array_bit(i);
end loop;
end if;
end if;
end process;
用于生成
for_generate: for i in 0 to n generate begin
my_process: process(clk, reset) begin
if rising_edge (clk) then
if reset = '1' then
--init stuff
else
test_array_bit(i);
end if;
end if;
end process;
end generate;
这种情况下对 FPGA 和 ASIC 实现有何影响? CAD工具可以轻松处理什么?
编辑:只是添加我给一位帮助者的回复,以使我的问题更清楚:
例如,当我在 ISE 上使用 for 循环运行一段代码时,综合摘要给了我一个公平的结果,需要很长时间才能计算所有内容。当我重新编码我的设计时,这次使用 for-generate 和几个进程,我使用了更多的区域,但该工具能够更快地计算所有内容,并且我的计时结果也更好。那么,这是否意味着一条规则,即使用 for-generate 总是更好,但需要额外的面积和较低的复杂性,还是我必须验证每一个实现可能性的情况之一?
最佳答案
假设重置和测试函数中的逻辑相对简单(例如,相邻位之间没有交互),我预计两者都会生成相同的逻辑。
了解,由于整个 for
循环在单个时钟周期内执行,综合将展开它并为每个输入位生成一个单独的 test_array_bit
实例。因此,综合工具很有可能为两个版本生成相同的逻辑 - 至少在这个简单的示例中是这样。
在此基础上,我(稍微)更喜欢 for ...loop
版本,因为它本地化了程序逻辑,而“generate”版本则将其全局化,将其放置在 之外>处理
样板。如果您发现loop
版本更容易阅读,那么您在某种程度上会同意。
然而,对风格教条是没有好处的,你的实验说明了这一点:循环
合成了劣质硬件。综合工具是复杂且不完美的软件,就像高度优化的编译器一样,并且存在许多相同的问题。有时他们会错过“明显”的优化,有时他们会进行复杂的优化(例如在软件中),因为其大小增加破坏了缓存,因此运行速度较慢。
因此,最好尽可能以最简洁的风格进行编写,但要具有一定的灵 active ,可以解决工具限制和偶尔出现的实际工具缺陷。
不同版本的工具可以消除(有时会引入)此类缺陷。您可能会发现 ISE 的“使用新解析器”选项(对于 Spartan-6 之前的部件)或 Vivado 或 Synplicity 可以实现这一点,而 ISE 的旧解析器则无法做到这一点。 (例如,从程序中传递信号,较旧的 ISE 版本存在严重错误)。
修改示例并查看综合是否可以在最简单的情况下“正确实现”(生成相同的硬件),并重新引入复杂性,直到找到哪个构造失败,这可能会很有启发性。
如果您通过这种方式发现了一些具体的东西,值得在这里报告(通过回答您自己的问题)。 Xilinx 过去鼓励通过其 Webcase 系统报告此类缺陷;最终它们甚至被修复了!然而,在过去的一两年里,他们似乎已经停止了这种做法。
关于for-loop - 实现 FOR-LOOP 和 FOR-GENERATE 之间的实际区别是什么?什么时候使用其中一种比另一种更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31393653/
我是 Julia 的新手。 我主要用python编程。 在 python 中, 如果你想迭代大量的值, 通常构造一个所谓的生成器来节省内存使用。 这是一个示例代码: def generator(N):
这个问题很奇怪。我试图直接在 build.gradle 中添加一个字符串,因为我需要它来使用 Tray 库 ( https://github.com/grandcentrix/tray )。在我的第一
我正在尝试在我的新 symfony3 项目中使用生成 CRUD 功能。我创建了一个名为 AdminBundle 的 bundle ,其中包含生成器、实体测试以及生成器,所有这些都处理得很好。我检查了我
我尝试理解生成器,但我发现了一个我无法遵循的示例。 // First Generator function* Colors () { yield "blue"; yield* MoreColo
我将制作一款完全由程序生成的空间/交易/战斗游戏。但是,我知道将整个星系的所有细节存储在内存中是不可行的。因此,我一直认为我可以使用种子来生成太阳系,并且从该太阳系,您可以使用跳跃门前往其他太阳系。问
我在 Eclipse Helios 中使用 MyBatis Generator (MyBatis Generator 1.3.1.201101032122),但每次我自动生成持久类时,生成器都会删除属
@GenerateInterface class A {} @GenerateInterface class B { void setA(IA a) {} } 我的注释处理器应该生成这些接口(in
我刚刚在一个空目录中安装了 yeoman,它打印出一个错误。这就是我所做的: npm i yo -g npm i generator-webapp -g 之后我抛出一个错误: require('yeo
我正在使用 NReco PDFGenerator 从 HTML 字符串创建 PDF 文档。当表格被分页符拆分时,表格标题与表格中的下一行重叠(见下图)。 有想法该怎么解决这个吗? 最佳答案 我发现这是
我有这个命名空间: namespace :manage do # Directs /manage/products/* to Manage::ProductsController
我有一个 Open API 3 规范的 yaml 文件,它有一些 x- 前缀的属性。我正在尝试使用 openapi-generator-cli 生成一个 Angular Typescript SDK。
我有一个返回生成器的函数。目前它使用yield from: function foo() { $generator = getGenerator(); // some other st
我选择Symfony2 docs 。据说添加 /** * @ORM\Entity(repositoryClass="Acme\StoreBundle\Entity\ProductRepository
运行命令生成新的 rails 项目: $ rails generate controller home index 以上将创建四个新的 Rails 项目:generate、controller、hom
我们实际上已经将jvm内存增加到了256M,现在老年代看起来很小,但Perm Generation相当高,接近80%。通过 jstat 捕获的示例数据如下。高永久代意味着什么? Timestamp
class Invoice def Invoice.generate(order_id, charge_amount, credited_amount = 0.0) Invoice.new
我在写 this comparison为了帮助人们理解所有这些废话,目前看来,generator-angular 的好处和值(value)只是您使用 generator-angular-fullsta
我有一个包含以下代码段的 OpenAPI 规范文档(我无法控制): servers: - url: http://www.[someservice].com/api 我正在使用这个 OpenAPI
我正在使用 openapi-yaml 将 swagger 文件转换为开放的 API v3 文件。使用 Maven 生成器。 我想做的是将新文件直接放入某个目录。 但是会生成一些我不需要的其他文件,例如
我的生成器中有以下标准文件夹结构。我当前正在努力解决的任务是我目前有一个模板化的 _package.json ,我将其写入磁盘以用于主要生成。我想在编写的 package.json 中包含一个变量,它
我是一名优秀的程序员,十分优秀!