2017-02-16 2 views
1

Если у меня есть некоторый код, например, так: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 и удалить эту функцию из синтеза ? Если это не так, и он синтезировал функцию транспонирования, было бы лучше удалить эту функцию и перенести матрицу вручную и ввести ее?

+1

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

ответ

4

Как правило, инструмент синтеза попробует сделать все, чтобы уменьшить сложность сгенерированного списка сетей. Это включает в себя разработку результатов функций, которые имеют постоянные входы, даже если эти входы сами генерируются другими функциями, зависят от параметров generic и т. Д. Инструменты настолько хороши в этом процессе, что простая ошибка в коде может привести к целые части вашего дизайна оптимизированы.

В этом случае на самом деле не имеет значения, вызывается ли функция только в декларативной области; независимо от того, где вызывается функция, любые упрощения или оптимизации могут быть выполнены инструментом синтеза.

Некоторые инструменты имеют ограничения, например, если ваша функция читается из файлов или в некоторых сценариях, если она содержит цикл с ограничениями, которые определяются параметрами. Однако это приведет к ошибке или предупреждению, в отличие от дополнительной логики в списке сетей.

Смежные вопросы