des00 25 30 апреля, 2020 Опубликовано 30 апреля, 2020 · Жалоба Вивадо 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 ставить, обойдя модель для моделирования/синтеза макросами. Проверил на авось, сработало) Моя похвала и уважение авторам (надеюсь в старших версиях не сломали) ЗЫ. В темплейтах вивады не нашел ничего похожего. ЗЗЫ. В квартусе не проверял) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 30 апреля, 2020 Опубликовано 30 апреля, 2020 · Жалоба Приветствую! 6 hours ago, des00 said: Вивадо 2016.4 приятно удивила ... Что ж, бывают и такие "неожиданности" А еще Vivado нормально синтезит dual-port память разной ширины и нормально распознает паттерны памяти для read-first и write-first вариантов. Но расслабляться не стоит . Точно не помню в какой версии но вроде как в какой то из 16x или 17x при попытке синтезировать простую память из упакованной структуры получал набор отдельных блоков для каждого поля структуры, а не один блок общей ширины. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 4 мая, 2020 Опубликовано 4 мая, 2020 · Жалоба On 4/30/2020 at 3:10 PM, RobFPGA said: Но расслабляться не стоит . Точно не помню в какой версии но вроде как в какой то из 16x или 17x при попытке синтезировать простую память из упакованной структуры получал набор отдельных блоков для каждого поля структуры, а не один блок общей ширины. Было похожее, с тех пор, для синтеза, я лучше руками соберу и разберу веник, на входе/выходе классической памяти). дополнительный профит, можно быстро на корку или хпм макрос перепрыгнуть) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSACPLD 9 4 мая, 2020 Опубликовано 4 мая, 2020 · Жалоба 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться