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

Вивада приятно удивила

Вивадо 2016.4  приятно удивила, абсолютно корректно распознала и синтезировала DWC память, на RAMB18/36k элементах.

.....
  localparam int cDWC_FACTOR      = pWDAT_W/pRDAT_W;
  localparam int cLOG_DWC_FACTOR  = clogb2(cDWC_FACTOR);

  bit   [pRDAT_W-1 : 0] mem  [2**pRADDR_W] /* synthesis ramstyle = "no_rw_check" */;
  logic [pRDAT_W-1 : 0] rdat [2];

.....
      always_ff @(posedge iclk) begin
        if (iclkena) begin
          rdat[0] <= mem[iraddr];
          rdat[1] <= rdat[0];
          //
          if (iwrite) begin
            for (int d = 0; d < cDWC_FACTOR; d++) begin
              mem[{iwaddr, d[cLOG_DWC_FACTOR-1 : 0]}] <= iwdat[d*pRDAT_W +: pRDAT_W];
            end
          end // iwrite
        end // iclkena
      end // iclk

      assign ordat = rdat[pPIPE];
.....
endmodule

Уж было собирался xpm ставить, обойдя модель для моделирования/синтеза макросами. Проверил на авось, сработало) Моя похвала и уважение авторам (надеюсь в старших версиях не сломали) 

ЗЫ. В темплейтах вивады не нашел ничего похожего. 

ЗЗЫ. В квартусе не проверял) 

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


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

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

6 hours ago, des00 said:

Вивадо 2016.4  приятно удивила ...

Что ж,  бывают и такие "неожиданности" :biggrin:   А еще Vivado нормально синтезит dual-port  память разной ширины и нормально распознает паттерны памяти для read-first и write-first  вариантов.
Но расслабляться не стоит . Точно не помню в какой версии но вроде как в какой то из 16x или 17x  при попытке  синтезировать простую память из  упакованной структуры  получал набор  отдельных блоков для  каждого поля структуры, а не один блок  общей ширины. 

Удачи! Rob.

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


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

On 4/30/2020 at 3:10 PM, RobFPGA said:

Но расслабляться не стоит . Точно не помню в какой версии но вроде как в какой то из 16x или 17x  при попытке  синтезировать простую память из  упакованной структуры  получал набор  отдельных блоков для  каждого поля структуры, а не один блок  общей ширины. 

Было похожее, с тех пор, для синтеза, я лучше руками соберу и разберу веник, на входе/выходе классической памяти). дополнительный профит, можно быстро на корку или хпм макрос перепрыгнуть) 

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


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

On 4/30/2020 at 11:10 AM, RobFPGA said:

А еще Vivado нормально синтезит dual-port  память разной ширины и нормально распознает паттерны памяти для read-first и write-first  вариантов.

Да. Но только если память объявлена как двумерный массив.

Если сделать трехмерный, то получим кучу логики.

Причем это давняя проблема:

https://www.xilinx.com/support/answers/53507.html

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


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

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

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

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

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

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

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

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

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

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