FPGA语言的编译器是否执行优化?

4
现代编译器(如C / C ++,Fortran,Julia等)的一个更实用的功能是它们在生成二进制代码之前对代码进行优化的能力。如果我要编写一个Verilog函数以创建FPGA“硬件”特殊功能,那么编译器会执行任何优化吗?以具体示例来说,假设我想设置一个多项式求值器,它使用Estrin方案进行并行求值,并且某些系数为0,编译器会看到并优化掉有效的NOOPs吗?
2个回答

6

是的。你示例中的优化被称为“常量传播”。当涉及到优化布尔或算术表达式时,所有编译器的技术都是相同的。编译器将简化任何它可以简化的表达式。另一个优化是“死代码消除”。如果分支条件最终变成了一个常量,则未选择的分支可以被消除,并且所选取的分支就变成无条件的。但是,在RTL转换为硬件表示之后,优化过程与软件编译器非常不同。


如果一个循环有适度且固定的迭代次数,编译器会将其展开为硬件吗?似乎在这种语言中,存在标准并行展开(当循环独立时)和串行展开(当每个迭代修改某个值时)的潜力。 - Sean Lake
2
硬件中不存在循环。事实上,硬件中也不存在过程语句。RTL代码中的循环如何在硬件中实现是一个太广泛的话题,不适合在本论坛讨论。 - dave_59
那不可能是真的,对吧?我不是硬件专家,所以我可能错了,但我可以想象硬件应该能够实现重复运行,只要一个递减计数器非零并且“准备进行下一次迭代”的标志被设置。这些不可能吗,或者在某种程度上不切实际(即不稳定)? - Sean Lake
1
我认为我们正在涉及术语细微差别。如果没有对你编写的HDL代码如何合成为AND、OR和NOT逻辑门结构的正确理解,我们将无法取得太大进展。尽管FPGA中有“可编程”一词,但FPGA并不像编译软件在主机处理器上运行那样运行已编译程序。 - dave_59
我现在想我看到问题所在了 - 我所描述的很可能不可避免地会导致硬件中的竞争条件。 - Sean Lake

0

Verilog在generate语句中有循环,这些循环在综合时总是完全展开的。


1
你在 Verilog 中编写的任何循环,无论是 generate-for 还是 procedural-for,都必须展开为硬件。 - dave_59

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接