По умолчанию кодер представляет константы как скаляры или агрегируется в зависимости от размера и типа данных. Кодер представляет значения, которые являются меньше чем 232 – 1 как целые числа и значения, больше, чем или равный 232 – 1, как агрегируется. Следующие объявления константы VHDL являются примерами объявлений, сгенерированных по умолчанию для значений меньше чем 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
Если вы предпочитаете, чтобы постоянные значения были представлены, как агрегируется, установите Represent constant values by aggregates можно следующим образом:
Выберите вкладку Global Settings на диалоговом окне Generate HDL.
Выберите вкладку Advanced.
Выберите Represent constant values by aggregates, как показано следующая фигура.
Предыдущие объявления константы теперь появились бы можно следующим образом:
CONSTANT coeff1: signed(15 DOWNTO 0) := (5 DOWNTO 3 => '0',1 DOWNTO 0 => '0,OTHERS =>'1'); CONSTANT coeff2: signed(15 DOWNTO 0) := (7 => '0',5 DOWNTO 4 => '0',0 => '0',OTHERS =>'1');
Альтернатива командной строки: Используйте функцию generatehdl
со свойством UseAggregatesForConst
представлять константы в HDL-коде, как агрегируется.
По умолчанию кодер поддерживает циклы VHDL. Однако некоторые инструменты EDA не поддерживают их. Если вы используете такой инструмент наряду с VHDL, можно развернуть и удалить FOR
и циклы GENERATE
из сгенерированного кода VHDL. Код Verilog уже развернут.
Развернуть и удалить FOR
и циклы GENERATE
,
Выберите вкладку Global Settings на диалоговом окне Generate HDL.
Выберите вкладку Advanced. Панель Advanced появляется.
Выберите Loop unrolling, как показано в следующей фигуре.
Альтернатива командной строки: Используйте функцию generatehdl
со свойством LoopUnrolling
развернуть и удалить циклы из сгенерированного кода VHDL.
Кодер может сгенерировать два стиля кода VHDL для проверки возрастающие ребра, когда фильтр работает с регистрами. По умолчанию сгенерированный код проверяет на событие часов, как показано в операторе ELSIF
следующего блока процесса VHDL.
Delay_Pipeline_Process : PROCESS (clk, reset) BEGIN IF reset = '1' THEN delay_pipeline(0 TO 50) <= (OTHERS => (OTHERS => '0')); ELSEIF 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 ;
Если вы предпочитаете, кодер может произвести код VHDL, который применяет VHDL функция rising_edge
вместо этого. Например, оператор ELSIF
в предыдущем блоке процесса был бы заменен следующим оператором:
ELSIF rising_edge(clk) THEN
Использовать функцию rising_edge
,
Нажмите Global Settings в диалоговом окне Generate HDL.
Выберите вкладку Advanced. Панель Advanced появляется.
Выберите Use 'rising_edge' for registers, как показано в следующем диалоговом окне.
Альтернатива командной строки: Используйте функцию generatehdl
со свойством UseRisingEdge
использовать VHDL функция rising_edge
, чтобы проверять на возрастающие ребра во время операций регистра.
Настройки VHDL могут быть или встроенными с остальной частью кода VHDL для сущности или внешними в отдельных исходных файлах VHDL. По умолчанию кодер включает настройки для фильтра в рамках сгенерированного кода VHDL. Если вы создаете свои собственные конфигурационные файлы VHDL, подавляете генерацию встроенных настроек.
Подавить генерацию встроенных настроек,
Выберите вкладку Global Settings на диалоговом окне Generate HDL.
Выберите вкладку Advanced. Панель Advanced появляется.
Очистите Inline VHDL configuration, как показано в следующей фигуре.
Альтернатива командной строки: Используйте функцию generatehdl
со свойством InlineConfigurations
подавить генерацию встроенных настроек.
В VHDL конкатенация нулей может быть представлена в двух формах синтаксиса. Одна форма, '0' & '0'
, безопасна с точки зрения типов. Этот синтаксис является значением по умолчанию. Альтернативный синтаксис, "000000...
", может быть легче считать и более компактен, но может привести к неоднозначным типам.
Использовать синтаксис "000000...
" для конкатенированных нулей,
Выберите вкладку Global Settings на диалоговом окне Generate HDL.
Выберите вкладку Advanced. Панель Advanced появляется.
Очистите Concatenate type safe zeros, как показано в следующей фигуре.
Альтернатива командной строки: Используйте функцию generatehdl
со свойством SafeZeroConcat
использовать синтаксис "000000...
" для конкатенированных нулей.
По умолчанию сгенерированный HDL-код работает с входными данными с помощью типов данных, как задано проектом фильтра, и затем преобразовывает результат в заданный тип результата.
Типичные процессоры DSP вводят входные данные броска к типу результата прежде, чем работать с данными. В зависимости от операции результаты могут отличаться. Если вы хотите, чтобы сгенерированный HDL-код обработал результат, вводящий таким образом, используйте опцию Cast before sum можно следующим образом:
Выберите вкладку Global Settings на диалоговом окне Generate HDL.
Выберите вкладку Advanced. Панель Advanced появляется.
Выберите Cast before sum, как показано в следующей фигуре.
Альтернатива командной строки: Используйте функцию generatehdl
со свойством CastBeforeSum
бросить входные значения к типу результата для операций сложения и операций вычитания.
Опция Cast before sum связана с установкой Filter Designer для опции квантования Cast signals before sum можно следующим образом:
Некоторые типы объекта фильтра не имеют свойства Cast signals before sum. Для таких объектов фильтра Cast before sum эффективно выключен, когда HDL-код сгенерирован; это не относится к фильтру.
Где объект фильтра действительно имеет свойство Cast signals before sum, кодер по умолчанию следует за установкой Cast signals before sum в объекте фильтра. Эта установка видима в пользовательском интерфейсе. Если вы изменяете настройки Cast signals before sum, кодер обновляет установку Cast before sum.
Однако явным образом установкой Cast before sum, можно заменить установку Cast signals before sum, переданную в от Filter Designer.
В Verilog кодер генерирует директивы масштаба времени (ˋtimescale)
по умолчанию. Эта директива компилятора обеспечивает способ задать различные значения задержки для нескольких модулей в файле Verilog.
Подавить использование ˋtimescale
директив,
Выберите вкладку Global Settings на диалоговом окне Generate HDL.
Выберите вкладку Advanced. Панель Advanced появляется.
Очистите Use Verilog ˋtimescale directives, как показано в следующей фигуре.
Альтернатива командной строки: Используйте функцию generatehdl
со свойством UseVerilogTimescale
подавить использование директив масштаба времени.
Кодер поддерживает комплексные коэффициенты и комплексные входные сигналы.
Чтобы сгенерировать порты и пути прохождения сигнала для действительных и мнимых компонентов комплексного входного сигнала, установите Input complexity на Complex
. Настройкой по умолчанию для Input complexity является Real
, отключая генерацию портов для комплексных входных данных.
Соответствующим свойством командной строки является InputComplex
. По умолчанию InputComplex
установлен в 'off'
, отключив генерацию портов для комплексных входных данных. Чтобы включить генерацию портов для комплексных входных данных, установите InputComplex
на 'on'
, как в следующем примере кода:
filt = design(fdesign.lowpass,'equiripple','Filterstructure','dffir','SystemObject',true); generatehdl(filt,numerictype(1,16,15),'InputComplex','on')
Следующая выборка VHDL кода показывает определение сущности, сгенерированное предыдущими командами:
ENTITY firfilt IS PORT( clk : IN std_logic; clk_enable : IN std_logic; reset : IN std_logic; filter_in_re : IN std_logic_vector(15 DOWNTO 0); -- sfix16_En15 filter_in_im : IN std_logic_vector(15 DOWNTO 0); -- sfix16_En15 filter_out_re : OUT std_logic_vector(37 DOWNTO 0); -- sfix38_En31 filter_out_im : OUT std_logic_vector(37 DOWNTO 0) -- sfix38_En31 ); END firfilt;
В выборке кода имена порта, сгенерированные для действительных компонентов комплексных сигналов, имеют постфиксный '_re'
по умолчанию, и имена порта, сгенерированные для мнимых компонентов комплексных сигналов, имеют постфиксный '_im'
по умолчанию.
Два свойства генерации кода позволяют вам настроить соглашения о присвоении имен для действительных и мнимых компонентов комплексных сигналов в сгенерированном HDL-коде. Эти свойства:
Опция Complex real part postfix (соответствующий свойству командной строки ComplexRealPostfix
) задает вектор символов, который будет добавлен к именам, сгенерированным для действительной части комплексных сигналов. Постфиксом по умолчанию является '_re'
.
Опция Complex imaginary part postfix (соответствующий свойству командной строки ComplexImagPostfix
) задает вектор символов, который будет добавлен к именам, сгенерированным для мнимой части комплексных сигналов. Постфиксом по умолчанию является '_im'
.