реклама на сайте
подробности

 
 
> Генерация DDS с помощью Simulink HDL Coder, Как задействовать память RAM ПЛИС для хранения таблицы LUT
Georg.A
сообщение Dec 4 2012, 11:44
Сообщение #1





Группа: Участник
Сообщений: 11
Регистрация: 4-10-10
Пользователь №: 59 910



Здравствуйте!

Пытаюсь создать проект на ПЛИС путем генерации VHDL кода из Simulink`а.

Для начала задался целью сделать квадратурный Direct Digital Syntezator разрядностью 2^13, основанный на 2х таблицах значений функции Lockup Table, синусной и косинусной, разрядность каждой 2^13 (8192 отсчета), интервал от 0 до 2пи.
В хелпе по Simulink HDL Coder есть пример реализации памяти ROM на основе таблицы (внутри подсистемы находится Lockup Table и одиночная задержка), взял его за основу.

Проект DDS состоит из аккумулятора фазы и двух ROM подсистем, внутри каждой таблица отсчетов и задержка . После генерации VHDL кода и синтеза в Xilinx ISE 13.4, синтез репорт сообщает о использовании некоторого количества процентов блоков FIFO/RAM, то есть таблицы легли туда.
Если подвешиваю в Simulink модели к выходу ROM`ов какую нибудь подсистему, например фильтр, или выход DDS перемножаю с чем либо еще, то есть расширяю свой проект, то после синтеза в Xilinx ISE, репорт сообщает о том, что проект занял только slices, IOBs, DSP48 и т.д. но FIFO/RAM никак не задействована.

Поскольку разрядность DDS приличная, то он сжирает почти всю логику, а чтобы задействовать FIFO/RAM приходится генерировать DDS отдельно от остального проекта.

Если кто-то сталкивался с подобной задачей и/или знает как ее решить, подскажите пожалуйста.

Сообщение отредактировал Georg.A - Dec 4 2012, 11:46
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Georg.A
сообщение Dec 5 2012, 08:00
Сообщение #2





Группа: Участник
Сообщений: 11
Регистрация: 4-10-10
Пользователь №: 59 910



Требуется обычный DDS, для перенесения сигнала на промежуточную и для колец ФАПЧ.
Попробовал библиотечный NCO, он получился достаточно компактным, занял 7% слайсов и 6% LUT в ПЛИС, но память RAM опять не задействована.

Если пользуюсь библиотечной LUT симулинка для DDS, то последний кладется в RAM и занимает 10%, при этом слайсы и луты ПЛИС по 0%. Но при добавлении в симулинковский проект еще каких-то модулей, после генерации кода, ISE при синтеза кладет опять все в слайсы и луты, включая DDS.

Хотелось задействовать для хранения таблиц именно RAM, поскольку проект достаточных размеров, займет много места и без DDS. Кроме того, планировал использовать в общей сложности 7 DDS. Если же не получиться класть в RAM, то придется использовать 1 или 2 DDS с мультиплексированием по времени, использовать симметричность функции для уменьшения размеров таблицы, что потребует дополнительных усилий при том, что RAM будет пустовать.

Пользуюсь версией 2011b, попробовал разобраться с настройками control file, но зайдя в хелп наткнулся на следующее:

As of release R2010b, the coder does not support the attachment of a control file to a new model. Instead, the coder now saves all non-default HDL-related model settings, block implementation selections and implementation parameter settings to the model itself. This eliminates the need to maintain a separate control file. Because the coder saves only the non-default parameter settings, the loading and saving of models is more efficient. The recommended practice is to discontinue use of control files and convert existing models. This simple process is described in the next section.

То есть, как я понял, в моей версии уже не поддерживаются control file`ы.

Из рекомендаций хелпа, следует что в этом контрол файле надо, чтобы параметр 'ResetType' в блоке задержки стоял на 'none' и установить 1 в property 'IgnoreDataChecking'.

Follow these modeling guidelines when building a ROM from Simulink:
-For an n-bit address, specify all 2^n entries of the Lookup Table data. Otherwise, your synthesis tool may not map the generated code to RAM, and the code may not match your Simulink model.
-Place the Lookup Table and Unit Delay blocks in the same model hierarchy. In addition, use the default implementation hdldefaults.LookupHDLEmission for the Lookup Table block, so that the generated code from the two blocks are also in the same HDL hierarchy.
-Support of RAM reset logic varies among FPGA devices and synthesis tools. For best synthesis result, suppress the generation of reset logic for the Unit Delay block by setting the 'ResetType' property to 'none' in the control file. Also set the 'IgnoreDataChecking' property to 1 to ignore the initial simulation mismatch caused by suppressing the reset logic.

Параметр 'ResetType' в блоке задержки у меня поставлен на 'none' через контектсное меню блока в пункте HDL Code Generation/HDL Block Properties. А вот что делать с 'IgnoreDataChecking' не знаю, поскольку не поддерживаются контрол файлы в 2011b.

Остальным требованиям мой DDS вроде отвечает (таблица и задержка в одной иерархии, число строк в таблице 2^13, адресация ведется сигналом ufix(13,0)).
Как уже говорил, проблема в том что отдельно от остальных блоков DDS кладется в RAM, а если включать его в проект то все ложится в слайсы и луты...
Возможно тут что-то с иерархией блоков, хотя пробовал по разному с одинаковым результатом:

Генерирую из subsystem1 внутри которой 2 sybsistem`ы (subsystem1/(accum и ROM)), в одной акумулятор фазы в другой LUT и задержка, все хорошо ложится в RAM.

Кладу subsystem1`у в другую пустую subsystem2 (subsystem2/subsystem1/(accum и ROM)), генерирую из subsystem2 все ложится в RAM.
Но как только добавляю что-то еще все ложится в слайсы и луты, в обоих случаях.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 13:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.01369 секунд с 7
ELECTRONIX ©2004-2016