Перейти к содержанию

    

HLS синтез с C/C++, Quartus HLS vis Vivado HLS

Приветствую!

 

В очережной раз лень не дает жить спокойно - пытаюсь освоить Quartus HLS (17.1).

До этого в Vivado вроде уже использовал периодически куски на HLS для разных модулей. Чтобы получить более менее работаюший модуль естественно приходится ломать стериотипы написания С/C++ кода.

 

А тут все по новой! Первый этап (после настройки окружения компиляции) разобратся с интерфейсами и атрибутами.

Тут у Qu сразу же отличия по сравнения с Vivado набор интерфейсов в RTL уже и более "абстрактен".

Например (как я понял) нельзя сделать raw интерфейс к внешней BRAM памяти. Можно только Avalon MM мастер.

Можно сделать память внутри модуля а снаружи иметь доступ к ней по Avalon MM slave. Но у меня не получается при этом сделать большой блок (>= 256KB) вылетает с ошибкой при компиляции. Да и не понятно как при этом можно применять атрибуты по управлению разбиения этой памяти на банки.

 

Успехов! Rob.

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я-то, наивный, полдня пытался реализовать Simple Dual-Port Block RAM..

Из общения на форуме ксайлинка:

Re: How to read and write to the same BRAM concurrently?

An: It's definitely possible, but with limitations.

(1) Apart from dataflow FIFOs, HLS will only connect a RAM to one function at a time. That function can do simultaneous reads/writes to the RAM. You cannot have one function writing to a RAM while another reads from

it. You can't have two functions writing to the same RAM. I don't think you can even persuade HLS to let two functions read from the same ROM simultaneously.

(2) For AXI Lite ports that connect to a BRAM (ie arrays on AXI Lite), one RAM port is permanently connected to the AXI Lite interface. This only leaves one port available for other tasks.

(3) HLS has to understand your access pattern. If you write randomly and read randomly, HLS is not going to be able to achieve II=1. This is because after HLS has set a value to be written, the RAM takes at least one cycle to store that before it can be read out again. On the other hand, if you have a loop where you write to value and read from value [i-10] then HLS will easily achieve II=1 (although in this case a shift register may be more appropriate).

Лёгким движением руки разработчика Vivado HLS двухпортовая память превращается в однопортовую! Ничего не скажешь - эффективно! :smile3009:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация