Если у меня есть некоторый код, например, так:VHDL - Do Функции, используемые только в заголовке архитектуры, занимают логику FPGA?
...
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 и удалить эту функцию из синтеза ? Если это не так, и он синтезировал функцию транспонирования, было бы лучше удалить эту функцию и перенести матрицу вручную и ввести ее?
IEEE Std 1076-2008 6.4.2.2 Объявления констант, * para 3 * "Если символ контировки": = ", за которым следует выражение, присутствует в объявлении константы, выражение указывает значение константы, тип выражение должно быть константой. Значение константы не может быть изменено после разработки декларации ». A_Transpose является глобально статическим, см. 9.4 Статические выражения, 9.4.1, 9.4.2 - e) вызов TransposeMatrix (A) не является локально статическим, 9.4.3 - i), но является вызовом чистой функции с глобально статическими параметрами. Никакой логики. – user1155120