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

20 minutes ago, fguy said:

В атаче вхдл ядра копировщика между двумя акси-мастерами (64 бит данные) с управлением по акси лайт. Читаемость кода у хлс синтезатора еще та - ну сами напросились.

благодарю, то что надо) 

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


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

13 minutes ago, RobFPGA said:

Вообще чтобы  на HSL начать писать RTL  эффективный код надо изнасиловать в себе как программиста С/С++ так и RTLщика.

До кучи желательно понимать как все работает и не требовать какой-нибудь фантастики.

Ну и стрим у вас описан мягко говоря неправильно от слова совсем - это не стрим, а хз знает что.

Все ж просто - читаете из стрима в переменную и второй строкой пишите ее в память, а то что у вас в пайплайн не ляжет. Так имеет смысл делать только если стрим медленный и сброс буфера будет много быстрее чем его накопление. Ну и для ддр-а шина пошире должна быть - желательно в берст.

 

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


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

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

1 minute ago, fguy said:

Ну и стрим у вас описан мягко говоря неправильно от слова совсем - это не стрим, а хз знает что.

Приведете правильный вариант, а мы поучимся. :scratch_one-s_head:

Удачи! Rob. 

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


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

2 minutes ago, RobFPGA said:

Приведете правильный вариант, а мы поучимся. :scratch_one-s_head:

+100. давно смотрю на ХЛС, в контексте разработки стекового/списочного декодера полярных кодов, но пока только смотрю))) 

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


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

2 minutes ago, RobFPGA said:

Приведете правильный вариант, а мы поучимся. 

Я до недавнего времени и сам писал по старинке (как было принято в первых версиях HLS 2014) пока новый синтезатор не начал посылать. Оба варианта можно посмотреть в моем вопросе к кзаленсу https://forums.xilinx.com/t5/High-Level-Synthesis-HLS/Cycle-synthesis-error-in-Vivado-HLS-2018-2-amp-3/m-p/951573

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


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

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

9 minutes ago, fguy said:

Оба варианта можно посмотреть

Ну так посылать и я умею - по ссылке :biggrin:

И разницы  особой  я там не увидел  (для данного пример DMA). Покажите как в при помощи правильного описания стрима добиться pipeline  трансфера в данном примере. 

Удачи! Rob. 

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


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

55 minutes ago, RobFPGA said:

И даже в симе работает. Но с эффективность 50%. То ест сначала из стрима в буфер,  а потом уж из буфера на m_axi. Чтобы  все в pieline работало надо наверное разносить  чтение из стрима и вывод в m_axi  в отдельные функции которые объединять в основной через flip-floop буфер.  Ну и с pragma возиться.  

 

Правильно ли я понимаю, что эффективность  50% означает, мегабайт 20-30 в секунду оно сможет?

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


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

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

Вот картинка с сима  для данного примера с 50%.  Общая скорость будет зависеть  как от частоты так и от  ширины  шин входа и выхода. Для 100 MHz и 32 бит получается ~200 MByte/s. 

Удачи! Rob.

sim_a.png

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


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

30 minutes ago, RobFPGA said:

И разницы  особой  я там не увидел  (для данного пример DMA). Покажите как в при помощи правильного описания стрима добиться pipeline  трансфера в данном примере. 

Удачи! Rob. 

Вряд ли вам кто объяснит как с помощью "правильного описания стрима добиться pipeline  трансфера" - это никак не связанные вещи. Стрим (AXI-Stream) это тип шины ввода-вывода.

Пайплайн обеспечивается циклом и прагмами к этому циклу, ну и в данном примере периодом записи слов в ддр - если период будет большой, то пайплайна с берстом не будет.

27 minutes ago, Dr.Sys said:

мегабайт 20-30 в секунду оно сможет?

скажите с какой скоростью вам надо писать и какая память ддр (частота, ширина и контролер цпу или плис) и я вам скажу успеете или нет

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


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

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

Переделал все "правильно"  

#include <hls_stream.h>
#include <iomanip>
#include <cstdlib>
#include <stdint.h>

using namespace std;

//void hls_dma (uint32_t dst_len, hls::stream<uint32_t> &s_axis,  volatile uint32_t *m_axi) {
void hls_dma (uint32_t dst_len, volatile uint32_t *s_axis,  volatile uint32_t *m_axi) {
  #pragma HLS INTERFACE s_axilite port=return      bundle=BUS_A
  #pragma HLS INTERFACE s_axilite port=dst_len     bundle=BUS_A
  
  #pragma HLS INTERFACE axis port=s_axis

  #pragma HLS INTERFACE m_axi depth=64 port=m_axi offset=slave \
  num_read_outstanding=4 num_write_outstanding=4 max_read_burst_length=16 max_write_burst_length=16

  sou : for (int ii=0; ii<dst_len; ++ii) {
    *m_axi++ = *s_axis; //s_axis.read();
  }
}

Что с hls::stream<uint32_t> &s_axis что volatile uint32_t *s_axis картинка на симе радует глаз.  Так что можно в продакшен пихать :biggrin:

Удачи! Rob.

sim_c.png

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


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

20 minutes ago, RobFPGA said:

Так что можно в продакшен пихать

А где пайплайн? Что будет во время регенерации ддр?

И каким образом задается адрес в памяти?

Отчет по синтезу положите сюда - обсудим если интересно...

Изменено пользователем fguy

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


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

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

1 hour ago, fguy said:

А где пайплайн? Что будет во время регенерации ддр?

Это же не RTL - тут как с сусликом -  пайплайн не виден, но он есть! :search: 

На картинке  для wready стоит 20%  максимума пропускной, а задержка для awready рандомом 0...16 тактов

Удачи! Rob.

 

sim_d.png

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


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

45 minutes ago, RobFPGA said:

Это же не RTL - тут как с сусликом -  пайплайн не виден, но он есть! 

Крокодилы летают - нызэнько-нызэнько...

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


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

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

Увернувшись  от пролетающих  крокодилов полазил  внутри генерированного  кода DMA.  Как и предполагалось вся магия пересылки там делается внутри RTL IP коки  ocl_axi_addone_v1_1 которая находится (вместе с другими)  в папочке ...\Vivado\2019.1\data\rsb\iprepos\....   Поторопился - эти корки тоже вроде как из HSL генеренные

Удачи! Rob.

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


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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...