HDL Construct Properties

Настройка HDL- конструкций в сгенерированном коде

Со свойствами HDL- конструкции можно настроить VHDL и Verilog конструкций в сгенерированном коде.

Задайте эти свойства как аргументы имя-значение для generatehdl функция. Name - имя свойства и Value - соответствующее значение. Можно задать несколько аргументов имя-значение в любом порядке как 'Name1',Value1,...,'NameN',ValueN.

Для примера:

fir = dsp.FIRFilter('Structure','Direct form antisymmetric');
generatehdl(fir,'InputDataType',numerictype(1,16,15),'CastBeforeSum','off');

Стиль HDL-кодирования

расширить все

Типовое литье перед сложением или вычитанием, заданное как одно из следующего:

  • 'on' - Сгенерированный тип кода - приводит входные значения операций сложения и вычитания к требуемому типу результата перед работой со значениями. Этот параметр дает числовые результаты, которые типичны для процессоров DSP.

  • 'off' - Сгенерированный код сохраняет входные типы значений во время операций сложения и вычитания, а затем преобразует результат в требуемый тип.

По умолчанию кодер устанавливает CastBeforeSum на основе настройки Cast signals before sum Filter Designer объекта фильтра. Используйте это свойство для переопределения унаследованного параметра, см. Раздел «Отношение с приведением до суммы» в Filter Designer. Для системных объектов настройка по умолчанию зависит от типа и структуры фильтра.

Сгенерируйте встроенные строения VHDL, заданные как одно из следующего:

  • 'on' - Кодер включает строения объекта фильтра в сгенерированный VHDL код.

  • 'off' - Кодер опускает генерацию строений. Используйте эту опцию, если вы создаете свои собственные файлы строения VHDL.

Размотка цикла в сгенерированных кодах VHDL, заданная как одно из следующего:

  • 'off' - Кодер включает FOR и GENERATE циклы в сгенерированном коде VHDL.

  • 'on' - Кодер разворачивает и опускает FOR и GENERATE циклы в сгенерированном коде VHDL. Используйте эту опцию, если инструмент EDA не поддерживает GENERATE циклы.

Синтаксис типа safe для конкатенированных нулей, заданный как один из следующих:

  • 'on' - Кодер использует '0' & '0' синтаксис для конкатенированных нулей. Этот синтаксис рекомендуется, поскольку он однозначен.

  • 'off' - Кодер использует "000000..."синтаксис для конкатенированных нулей. Этот синтаксис может быть легче читаем и более компактен, но может привести к неоднозначным типам.

Представление постоянных значений по агрегатам, заданное как одно из следующего:

  • 'off' - Кодер представляет константы менее 32 битов в виде скаляров и константы, большие или равные 32 битам в виде агрегатов. В следующем примере показано скалярное объявление по умолчанию для констант менее 32 биты.

    CONSTANT coeff1: signed(15 DOWNTO 0) := to_signed(-60, 16); -- sfix16_En16
    CONSTANT coeff2: signed(15 DOWNTO 0) := to_signed(-178, 16); -- sfix16_En16
    

  • 'on' - Кодер представляет константы по агрегатам, включая константы шириной менее 32 битов. В следующем примере показаны константы размером менее 32 битов, объявленные в виде агрегатов.

    CONSTANT c1: signed(15 DOWNTO 0):= (5 DOWNTO 3 =>'0',1 DOWNTO 0 => '0',OTHERS =>'1');
    CONSTANT c2: signed(15 DOWNTO 0):= (7 => '0',5 DOWNTO 4 =>'0',0 => '0',OTHERS =>'1');
    

Стиль VHDL-кодирования для проверки на возрастающие ребра при работе с регистрами, указанный как одно из следующего:

  • 'off' - Сгенерированный код проверяет на наличие событий синхроимпульса при работе с регистрами. Для примера:

    Delay_Pipeline_Process : PROCESS (clk, reset)
    BEGIN
      IF reset = '1' THEN
        delay_pipeline(0 TO 50) <= (OTHERS => (OTHERS => '0'));
      ELSIF clk'event AND clk = '1' THEN
        IF clk_enable = '1' THEN
          delay_pipeline(0) <= signed(filter_in);
          delay_pipeline(1 TO 50) <= delay_pipeline(0 TO 49);
        END IF;
      END IF;
    END PROCESS Delay_Pipeline_Process ;
    
  • 'on' - Сгенерированный код использует VHDL rising_edge функция для проверки на восходящие ребра при работе с регистрами. Для примера:

    Delay_Pipeline_Process : PROCESS (clk, reset)
    BEGIN
      IF reset = '1' THEN
        delay_pipeline(0 TO 50) <= (OTHERS => (OTHERS => '0'));
      ELSIF rising_edge(clk) THEN
        IF clk_enable = '1' THEN
          delay_pipeline(0) <= signed(filter_in);		
          delay_pipeline(1 TO 50) <= delay_pipeline(0 TO 49);
        END IF;
      END IF;
    END PROCESS Delay_Pipeline_Process ;
    

Когда часы переходят от 'X' на '1'два стиля кодирования имеют разное поведение симуляции.

Использование ˋ<reservedrangesplaceholder0> Verilog директива компилятора, заданная как 'on' или 'off'. The ˋ<reservedrangesplaceholder0> директива предоставляет способ определения различных значений задержки для нескольких модулей в файле Verilog. Когда для этого свойства задано значение 'off'кодер исключает директиву в сгенерированном коде Verilog.

Совет

Если вы используете fdhdltool для генерации HDL-кода можно задать соответствующие свойства на вкладке Global Settings > Advanced в диалоговом окне Генерация HDL.