В этом примере показано, как использовать Altera ® DSP Builder Advanced Blockset с HDL- Coder™.
Использование блока Altera ® DSP Builder Advanced Blockset Subsystem или блока DSPBA Subsystem позволяет моделировать проекты с помощью блоков Simulink ® и Altera ®, и автоматически генерировать интегрированный HDL-код. HDL Coder™ генерирует HDL-код из блоков Simulink ® и использует Altera ® DSP Builder для генерации HDL-кода из блоков Подсистемы DSPBA.
В этом примере проект, или подсистема генерации кода, содержит две части: одну с собственными блоками Simulink ® и одну с расширенными блоками Altera ® DSP Builder. Блоки Altera ® сгруппированы в Подсистему DSPBA (hdlcoder_sldspba/SLandDSPBA/DSPBA Subsystem). Altera ® DSP Builder оптимизирует эти блоки для Altera ® FPGAs. В остальной части проекта блоки Simulink ® и HDL- Coder™ предлагают много функции, основанных на модели, таких как распределённая конвейеризация и балансировка задержек, для выполнения оптимизации уровня модели.
open_system('hdlcoder_sldspba'); open_system('hdlcoder_sldspba/SLandDSPBA');
Чтобы использовать блок Altera ® DSP Builder Advanced Blockset Subsystem, необходимо настроить Altera ® Quartus II с Simulink ®. Для получения информации о совместимости версий см. документацию HDL Coder.
Создание подсистемы DSPBA:
Поместите блоки Altera ® в одну подсистему и установите ее архитектуру на «Module» (значение по умолчанию).
Поместите блок Device на верхний уровень подсистемы. Вы можете иметь иерархию подсистем в Подсистеме DSPBA, но должен быть блок Device на верхнем уровне иерархии.
open_system('hdlcoder_sldspba/SLandDSPBA/DSPBA Subsystem');
В этом примере диаграмма Stateflow генерирует канал и действительные сигналы для управления подсистемой DSPBA.
open_system('hdlcoder_sldspba/SLandDSPBA/Simulink Subsystem');
Для генерации HDL-кода можно использовать makehdl в командной строке или HDL Workflow Advisor. Чтобы использовать makehdl:
makehdl('hdlcoder_sldspba/SLandDSPBA');
Можно также сгенерировать тестовый график, моделировать и синтезировать проект так же, как для любой другой модели.
Симуляция Подсистемы DSPBA может не совпадать с поведением ее сгенерированного кода, когда действительный сигнал не утвержден при определенных обстоятельствах, например, когда включена опция сворачивания как в hdlcoder_sldspba/SLandDSPBA/DSPBA Подсистеме/ChannelIn, так и в hdlcoder_sldspba/SLandDSPBA/DSPBA Подсистеме/ChannelOut. Несоответствие влияет на нисходящий проект Simulink и вызывает испытательный стенд отказа симуляции.
Чтобы увидеть несоответствие, можно включить настройку складывания на блоках ChannelIn и ChannelOut:
set_param('hdlcoder_sldspba/SLandDSPBA/DSPBA Subsystem/ChannelIn', 'FoldingEnabled', 1); set_param('hdlcoder_sldspba/SLandDSPBA/DSPBA Subsystem/ChannelOut', 'FoldingEnabled', 1);
Затем сгенерируйте HDL-код и снова протестируйте стенд:
makehdl('hdlcoder_sldspba/SLandDSPBA'); makehdltb('hdlcoder_sldspba/SLandDSPBA');
После симуляции сгенерированного кода и испытательного стенда можно увидеть, что выходы HDL-кодера совпадают с эталонными данными только при утверждении действительного сигнала.
Как указывает сообщение от испытательного стенда, ожидается несоответствие.
Чтобы избежать этого несоответствия симуляции, вставьте активированную подсистему в выходные сигналы DSPBA Subsystem, прежде чем они достигнут части Simulink вашего проекта или выходных портов общего проекта. Следующая подсистема показывает, как соединить сигналы с включенной подсистемой.
open_system('hdlcoder_sldspba/SLandDSPBA2');