Jump to content

    

DMA IP Core

20 minutes ago, fguy said:

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

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

Share this post


Link to post
Share on other sites
13 minutes ago, RobFPGA said:

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

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

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

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

 

Share this post


Link to post
Share on other sites

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

1 minute ago, fguy said:

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

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

Удачи! Rob. 

Share this post


Link to post
Share on other sites
2 minutes ago, RobFPGA said:

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

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

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites

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

9 minutes ago, fguy said:

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

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

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

Удачи! Rob. 

Share this post


Link to post
Share on other sites
55 minutes ago, RobFPGA said:

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

 

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

Share this post


Link to post
Share on other sites

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

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

Удачи! Rob.

sim_a.png

Share this post


Link to post
Share on other sites
30 minutes ago, RobFPGA said:

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

Удачи! Rob. 

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

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

27 minutes ago, Dr.Sys said:

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

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

Share this post


Link to post
Share on other sites

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

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

#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

Share this post


Link to post
Share on other sites
20 minutes ago, RobFPGA said:

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

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

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

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

Edited by fguy

Share this post


Link to post
Share on other sites

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

1 hour ago, fguy said:

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

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

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

Удачи! Rob.

 

sim_d.png

Share this post


Link to post
Share on other sites
45 minutes ago, RobFPGA said:

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

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

Share this post


Link to post
Share on other sites

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

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

Удачи! Rob.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now