![](/img/trans.png)
[英]If no functions included in a header file are used, does the compiler still compile this file?
[英]VHDL - Do Functions used only in the architecture header take up FPGA logic?
如果我有这样的代码:
...
architecture behaviour of ExampleEntity is
-- type definitions
type Matrix is array(0 to 1,0 to 1) of signed(NumOfBitsForSignals_1 downto 0);
-- function definitions
function TransposeMatrix(MatrixArg : Matrix) return Matrix is
-- variable decleration
variable Result : Matrix;
begin
-- behaviour
for columnNo in Result'range loop
for rowNo in Result'range loop
Result(columnNo, rowNo) := MatrixArg(rowNo, columnNo);
end loop;
end loop;
return Result;
end function;
-- constant definitions
constant A00 : std_logic_vector(NumOfBitsForSignals_1 downto 0) := "A00Value";
constant A01 : std_logic_vector(NumOfBitsForSignals_1 downto 0) := "A01Value";
constant A10 : std_logic_vector(NumOfBitsForSignals_1 downto 0) := "A10Value";
constant A11 : std_logic_vector(NumOfBitsForSignals_1 downto 0) := "A11Value";
constant A : Matrix := ((signed(A00), signed(A01)),
constant A_Transpose : Matrix := TransposeMatrix(A);
...
并且TransposeMatrix函数在该位置仅使用一次,该函数是否仍在合成?或者编译器会为A_Transpose分配适当的值,然后从合成中删除该函数吗? 如果不是这种情况,并且它合成了转置函数,则最好删除此函数并手动转置矩阵并输入?
通常,综合工具会尽力降低生成的网表的复杂性。 这包括计算具有恒定输入的函数的结果,即使这些输入本身是由其他函数生成的,也取决于generic
参数等。这些工具在此过程中非常出色,以至于代码中的一个简单错误都可能导致设计的整个部分都被优化了。
在这种情况下,是否仅在声明性区域中调用该函数实际上并不重要。 无论在何处调用函数,综合工具都将进行任何可能的简化或优化。
某些工具确实有局限性,例如,如果函数从文件中读取,或者在某些情况下,如果函数包含带有由参数确定的界限的循环。 但是,与网络列表中的额外逻辑相反,这将倾向于导致错误或警告。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.