des00 25 17 мая, 2019 Опубликовано 17 мая, 2019 · Жалоба 2 minutes ago, Doka said: для меня это имеет смылс только если эти регистры: ram[waddr] <= wdata; rdata <= ram[raddr]; dat2out <= rdata; используются встроенны в блочную память, поскольку соль всей задумки: поджать дизайн немного по регистрами логике за счёт переноса сдвиговых регистров из SLR+FF в BRAM а вы проверьте ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 17 мая, 2019 Опубликовано 17 мая, 2019 · Жалоба только смещение учтите) что если delay =0, по факту задержка 3 такта( запись и два чтения) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 35 17 мая, 2019 Опубликовано 17 мая, 2019 · Жалоба Приветствую! 26 minutes ago, Doka said: вопрос - как бы так описать, чтобы он распознавал, грешил было на то, что двумерный верктор у меня - но переделал на одномерный в качестве эксперимента - результата не дало. У меня это отдельный модуль типа dual_ram_shift внутри которого уже идет разбор параметров длинны задержки и выбор типа реализации. Внутри для RAM идет обычное шаблонное описание, вернее даже не так - модуль памяти dual_port_ram описан отдельно. И в нем уже в зависимости от вендора, типа FPGA стоят шаблонные описания на память. Как кстати и на счетчик адреса. Так как например реализация счетчика на LSFR, а не на инкременте иногда очень помогает при разводке. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 20 мая, 2019 Опубликовано 20 мая, 2019 · Жалоба On 5/17/2019 at 5:04 PM, RobFPGA said: Так как например реализация счетчика на LSFR, а не на инкременте иногда очень помогает при разводке А чем плох счётчик инкрементации с CSA? Мне просто интересно, не подумайте ничего плохого. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 35 20 мая, 2019 Опубликовано 20 мая, 2019 · Жалоба Приветствую! 1 hour ago, Nick_K said: А чем плох счётчик инкрементации с CSA? Мне просто интересно, не подумайте ничего плохого. Счетчик на инкременте обычно выстраивается в вертикальную линию при P&R так как использует аппаратный caryy-chain. При высоком fanout к адресам памяти могут возникать проблемы при разводке. LSFR счетчик caryy-chain не использует и может быть "размазан" по кристаллу что делает проще P&R особенно на высоких частотах и большом проценте использования логики. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 20 мая, 2019 Опубликовано 20 мая, 2019 · Жалоба 9 minutes ago, RobFPGA said: LSFR счетчик caryy-chain не использует и может быть "размазан" по кристаллу что делает проще P&R особенно на высоких частотах и большом проценте использования логики. только у него есть минусы, относительно обычного счетчика. и не стоит о них забывать ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 35 20 мая, 2019 Опубликовано 20 мая, 2019 · Жалоба Приветствую! 18 minutes ago, des00 said: только у него есть минусы, относительно обычного счетчика. и не стоит о них забывать ;) Понятное дело за все надо платить. Это ведь не универсальное решение. Но иногда такие решения позволяют выжать последние 5 капель MHz Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kluwer 0 22 мая, 2019 Опубликовано 22 мая, 2019 · Жалоба On 5/17/2019 at 4:12 PM, Doka said: разве прагма (* srl_style = "block" *) не должна работать принудительно? https://fpgawiki.intel.com/wiki/Mapping_SRLs_to_registers,_MLABs,_or_Block_RAMs Никогда не мог понять желание всё подряд писать руками и обвешивать атрибутами синтеза, к-рые, на самом деле синтезатор Квартуса игнорит только в путь. Для таких задач специально сделаны удобные и вылизанные IP-коры или мегафункции. Всё можно настроить как из удобного gui, так и скриптом. Всё грамотно подключается и прописывается, генерятся примеры, поддержка в Моделсиме уже на готове. Зачем каждый раз велосипед изобретать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 35 22 мая, 2019 Опубликовано 22 мая, 2019 · Жалоба Приветствую! 7 minutes ago, Kluwer said: Никогда не мог понять желание всё подряд писать руками и обвешивать атрибутами синтеза, к-рые, на самом деле синтезатор Квартуса игнорит только в путь. Для таких задач специально сделаны удобные и вылизанные IP-коры или мегафункции. Всё можно настроить как из удобного gui, так и скриптом. Всё грамотно подключается и прописывается, генерятся примеры, поддержка в Моделсиме уже на готове. Зачем каждый раз велосипед изобретать? Ах, наивная молодежжжжж. Вылизанные IP-коры ... , GUI ..., генерируются..., А теперь все то же самое повторить для других параметров корок (которые к тому же часто автоматом рассчитываться при синтезе), для другого чипа, для другого вендора FPGA. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexadmin 0 22 мая, 2019 Опубликовано 22 мая, 2019 · Жалоба 44 minutes ago, Kluwer said: Никогда не мог понять желание всё подряд писать руками и обвешивать атрибутами синтеза, к-рые, на самом деле синтезатор Квартуса игнорит только в путь. Для таких задач специально сделаны удобные и вылизанные IP-коры или мегафункции. Всё можно настроить как из удобного gui, так и скриптом. Всё грамотно подключается и прописывается, генерятся примеры, поддержка в Моделсиме уже на готове. Зачем каждый раз велосипед изобретать? Был у меня буфер для сохранения вэйвформ и вычитывания процессором. Двухпортовая память, разные разрядности все дела. Сгенерил IP. Потом понадобился буфер под другую разрядность. Сгенерил IP. Потом еще. Потом доза все больше и больше. Наконец плюнул на это дело, переписал на чистом HDL с параметрами. Жизнь стала чуть светлее... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kluwer 0 22 мая, 2019 Опубликовано 22 мая, 2019 · Жалоба 14 minutes ago, RobFPGA said: Приветствую! Ах, наивная молодежжжжж. Вылизанные IP-коры ... , GUI ..., генерируются..., А теперь все то же самое повторить для других параметров корок (которые к тому же часто автоматом рассчитываться при синтезе), для другого чипа, для другого вендора FPGA. Удачи! Rob. За "молодёжь", спасибо за комплимент, но увы :( 20 лет уже плисоводством занимаюсь и на Альтере и на Ксайлинксе и даже других вендоров успел попробовать. Много раз приходилось портировать проект с семейства на семейство, но ни разу за всю карьеру не встречался с необходимостью поменять вендора под один и тот же проект. А с семейства на семейство, например, в новых версиях Квартуса вообще автоматически происходит апдейт всех кор, проблем практически не возникает. Всю свою карьеру даже для элементарных вещей (типа сумматоров, счётчиков или постоянных) генерю корки - всё прекрасно работает. А рядом тут как раз работает любитель "да всё надо писать руками, мы уже 15 лет ... и никаких проблем". Ага, только сейчас товарищч впервые в жизни столкнулся реально с высокими клоками, натанцевался, наползался по кристаллу в "Чип Планере", увидел как у меня то же самое с мегафункциями взлетает на раз и ... сдулся: "да, наверное, ты был прав ..." :)) Но, в прочем, никому не навязываю - каждый ходит по своим граблям. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kluwer 0 22 мая, 2019 Опубликовано 22 мая, 2019 · Жалоба 7 minutes ago, alexadmin said: Был у меня буфер для сохранения вэйвформ и вычитывания процессором. Двухпортовая память, разные разрядности все дела. Сгенерил IP. Потом понадобился буфер под другую разрядность. Сгенерил IP. Потом еще. Потом доза все больше и больше. Наконец плюнул на это дело, переписал на чистом HDL с параметрами. Жизнь стала чуть светлее... А кто мешал вам, простите, параметры прямо в корке менять? Корка чем и хороша, что она генерит, в т.ч. на указанном вами языке "шапку". Копируйте эту шапку себе в проект и параметризуйте как вам угодно. Вот, например, подмодуль стэка с переменной глубиной и разрядностью, первоначально сгенерённый в gui мегавизарда module FIFO_template #( parameter WIDTH_U = 14, parameter WIDTH_D = 16 ) ( input aclr, input clock, input [(WIDTH_D-1):0] data, input rdreq, input wrreq, // ----------------------------------- output [(WIDTH_D-1):0] q, output [(WIDTH_U-1):0] usedw ); scfifo scfifo_component (.aclr (aclr), .clock (clock), .data (data), .rdreq (rdreq), .wrreq (wrreq), .usedw (usedw), .q (q), .almost_empty (), .almost_full (), .empty (), .full (), .sclr ()); defparam scfifo_component.add_ram_output_register = "OFF", scfifo_component.intended_device_family = "Stratix III", scfifo_component.lpm_numwords = 2**WIDTH_U, scfifo_component.lpm_showahead = "OFF", scfifo_component.lpm_type = "scfifo", scfifo_component.lpm_width = WIDTH_D, scfifo_component.lpm_widthu = WIDTH_U, scfifo_component.overflow_checking = "ON", scfifo_component.underflow_checking = "ON", scfifo_component.use_eab = "ON"; endmodule Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexadmin 0 22 мая, 2019 Опубликовано 22 мая, 2019 · Жалоба 22 minutes ago, Kluwer said: А кто мешал вам, простите, параметры прямо в корке менять? Корка чем и хороша, что она генерит, в т.ч. на указанном вами языке "шапку". Копируйте эту шапку себе в проект и параметризуйте как вам угодно. Мысль интересная, но в данном конкретном случае это был Xilinx, и у него внутри все выглядит совсем не так красиво. Там и портов и параметров раз в 5 поболее. Я не отрицаю, что тоже можно было бы сделать, но чем ковыряться во всем этом (плюс получить опять проблемы при использовании на другом семействе) - нагляднее, лаконичнее и быстрее было описать поведенчески на базе готового темплейта. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 35 22 мая, 2019 Опубликовано 22 мая, 2019 · Жалоба Приветствую! 7 hours ago, Kluwer said: Много раз приходилось портировать проект с семейства на семейство, но ни разу за всю карьеру не встречался с необходимостью поменять вендора под один и тот же проект. Мигрировать целый проект на другого вендора может быть и не придется. Но вот отдельные функциональные модули очень даже часто. И что? Каждый раз лазать по коду? Перегенирируя все корки и верифицируя все каждый раз по полной? Вот есть например у меня мой модуль поточно-паралельного FFT. В нем как раз активно используются лини задержки данных. В зависимости от параметров FFT модуля, вендора и опций оптимизации автоматом выбирается оптимальная структура реализации (регистр, LUTRAM, BRAM, DUAL_BRAM, тип счетчика, etc). И у меня не болит голова что, будет если вдруг поменяют набор портов или поведение в какой-либо вендровской корке типа shr_delay. Тоже касается и основного набора базовых блоков RAM, ROM, FIFO, mult, add, .... И я всегда знаю как мои модули работают, и они в большинстве случаев равны или лучше "вылизанных IP-корок". Так как на внутренности некоторых IP-корок смотреть без слез не получатся. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Doka 4 23 мая, 2019 Опубликовано 23 мая, 2019 (изменено) · Жалоба On 5/22/2019 at 11:43 AM, Kluwer said: 20 лет уже плисоводством занимаюсь и на Альтере и на Ксайлинксе и даже других вендоров успел попробовать. Много раз приходилось портировать проект с семейства на семейство, но ни разу за всю карьеру не встречался с необходимостью поменять вендора под один и тот же проект. FPGA <-> ASIC How do you like it, Elon Musk? (с) Изменено 23 мая, 2019 пользователем Doka How do you like it, Elon Musk? (с) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться