现代编译器(如C / C ++,Fortran,Julia等)的一个更实用的功能是它们在生成二进制代码之前对代码进行优化的能力。如果我要编写一个Verilog函数以创建FPGA“硬件”特殊功能,那么编译器会执行任何优化吗?以具体示例来说,假设我想设置一个多项式求值器,它使用Estrin方案进行并行求值,并且某些系数为0,编译器会看到并优化掉有效的NOOPs吗?
是的。你示例中的优化被称为“常量传播”。当涉及到优化布尔或算术表达式时,所有编译器的技术都是相同的。编译器将简化任何它可以简化的表达式。另一个优化是“死代码消除”。如果分支条件最终变成了一个常量,则未选择的分支可以被消除,并且所选取的分支就变成无条件的。但是,在RTL转换为硬件表示之后,优化过程与软件编译器非常不同。
Verilog在generate语句中有循环,这些循环在综合时总是完全展开的。