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

Задержка сигнала на Verilog

2 minutes ago, Doka said:

для меня это имеет смылс только если эти регистры:


        ram[waddr]  <= wdata;
        rdata       <= ram[raddr];
        dat2out     <= rdata;

используются встроенны в блочную память,

поскольку соль всей задумки: поджать дизайн немного по регистрами логике за счёт переноса сдвиговых регистров из SLR+FF в BRAM

а вы проверьте ;)

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


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

только смещение учтите) что если delay =0, по факту задержка 3 такта( запись и два чтения)

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


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

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

26 minutes ago, Doka said:

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

У меня это отдельный модуль типа dual_ram_shift   внутри которого уже идет разбор параметров длинны задержки и выбор типа реализации.

Внутри для RAM идет обычное шаблонное описание, вернее даже не так - модуль памяти dual_port_ram описан отдельно. И в нем уже в зависимости от вендора, типа FPGA стоят шаблонные описания на память.  Как кстати и на счетчик адреса. Так как например реализация счетчика на  LSFR, а не на инкременте иногда очень помогает при разводке. 

Удачи! Rob.

 

 

 

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


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

On 5/17/2019 at 5:04 PM, RobFPGA said:

Так как например реализация счетчика на  LSFR, а не на инкременте иногда очень помогает при разводке

А чем плох счётчик инкрементации с CSA? Мне просто интересно, не подумайте ничего плохого.

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


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

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

1 hour ago, Nick_K said:

А чем плох счётчик инкрементации с CSA? Мне просто интересно, не подумайте ничего плохого.

Счетчик на инкременте обычно выстраивается в вертикальную линию при P&R так как использует аппаратный caryy-chain. При высоком fanout к адресам памяти могут возникать проблемы при разводке.

 

LSFR счетчик caryy-chain не использует и может быть "размазан" по  кристаллу  что делает проще P&R особенно на высоких частотах и большом проценте использования логики.  

 

Удачи! Rob.

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


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

9 minutes ago, RobFPGA said:

LSFR счетчик caryy-chain не использует и может быть "размазан" по  кристаллу  что делает проще P&R особенно на высоких частотах и большом проценте использования логики. 

только у него есть минусы, относительно обычного счетчика. и не стоит о них забывать ;)

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


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

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

18 minutes ago, des00 said:

только у него есть минусы, относительно обычного счетчика. и не стоит о них забывать ;)

Понятное дело за все надо платить. Это ведь не универсальное решение. Но иногда такие решения позволяют выжать последние 5 капель  MHz  :smile:

Удачи! Rob.

 

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


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

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, так и скриптом. Всё грамотно подключается и прописывается, генерятся примеры, поддержка в Моделсиме уже на готове. Зачем каждый раз велосипед изобретать?

 

Shifter.jpg

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


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

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

7 minutes ago, Kluwer said:

Никогда не мог понять желание всё подряд писать руками и обвешивать атрибутами синтеза, к-рые, на самом деле синтезатор Квартуса игнорит только в путь. Для таких задач специально сделаны удобные и вылизанные IP-коры или мегафункции.

Всё можно настроить как из удобного gui, так и скриптом. Всё грамотно подключается и прописывается, генерятся примеры, поддержка в Моделсиме уже на готове. Зачем каждый раз велосипед изобретать?

Ах, наивная молодежжжжж.  Вылизанные IP-коры ... :cray2:,  GUI ..., генерируются...,  :bad:  А теперь  все то же самое повторить для других параметров корок (которые к тому же часто автоматом рассчитываться при синтезе),  для другого чипа, для другого вендора FPGA. :mega_shok:

Удачи! Rob.

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


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

44 minutes ago, Kluwer said:

Никогда не мог понять желание всё подряд писать руками и обвешивать атрибутами синтеза, к-рые, на самом деле синтезатор Квартуса игнорит только в путь. Для таких задач специально сделаны удобные и вылизанные IP-коры или мегафункции.

Всё можно настроить как из удобного gui, так и скриптом. Всё грамотно подключается и прописывается, генерятся примеры, поддержка в Моделсиме уже на готове. Зачем каждый раз велосипед изобретать?

 

Был у меня буфер для сохранения вэйвформ и вычитывания процессором. Двухпортовая память, разные разрядности все дела. Сгенерил IP. Потом понадобился буфер под другую разрядность. Сгенерил IP. Потом еще. Потом доза все больше и больше. Наконец плюнул на это дело, переписал на чистом HDL с параметрами. Жизнь стала чуть светлее...

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


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

14 minutes ago, RobFPGA said:

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

Ах, наивная молодежжжжж.  Вылизанные IP-коры ... :cray2:,  GUI ..., генерируются...,  :bad:  А теперь  все то же самое повторить для других параметров корок (которые к тому же часто автоматом рассчитываться при синтезе),  для другого чипа, для другого вендора FPGA. :mega_shok:

Удачи! Rob.

За "молодёжь", спасибо за комплимент, но увы :(

20 лет уже плисоводством занимаюсь и на Альтере и на Ксайлинксе и даже других вендоров успел попробовать. Много раз приходилось портировать проект с семейства на семейство, но ни разу за всю карьеру не встречался с необходимостью поменять вендора под один и тот же проект. А с семейства на семейство, например, в новых версиях Квартуса вообще автоматически происходит апдейт всех кор, проблем практически не возникает. Всю свою карьеру даже для элементарных вещей (типа сумматоров, счётчиков или постоянных) генерю корки - всё прекрасно работает.

А рядом тут как раз работает любитель "да всё надо писать руками, мы уже 15 лет ... и никаких проблем". Ага, только сейчас товарищч впервые в жизни столкнулся реально с высокими клоками, натанцевался, наползался по кристаллу в "Чип Планере", увидел как у меня то же самое с мегафункциями взлетает на раз и ... сдулся: "да, наверное, ты был прав ..." :))

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

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


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

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
 

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


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

22 minutes ago, Kluwer said:

А кто мешал вам, простите, параметры прямо в корке менять? Корка чем и хороша, что она генерит, в т.ч. на указанном вами языке "шапку". Копируйте эту шапку себе в проект и параметризуйте как вам угодно.

Мысль интересная, но в данном конкретном случае это был Xilinx, и у него внутри все выглядит совсем не так красиво. Там и портов и параметров раз в 5 поболее. Я не отрицаю, что тоже можно было бы сделать, но чем ковыряться во всем этом (плюс получить опять проблемы при использовании на другом семействе) - нагляднее, лаконичнее и быстрее было описать поведенчески на базе готового темплейта.

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


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

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

7 hours ago, Kluwer said:

Много раз приходилось портировать проект с семейства на семейство, но ни разу за всю карьеру не встречался с необходимостью поменять вендора под один и тот же проект.

Мигрировать целый проект на другого вендора может быть и не придется. Но вот отдельные функциональные модули очень даже часто. И что? Каждый раз лазать по коду? Перегенирируя все корки и верифицируя все каждый раз по полной? 

 

Вот есть например у меня мой модуль поточно-паралельного FFT.  В нем как раз активно используются лини задержки данных. В зависимости от параметров FFT модуля, вендора и опций оптимизации автоматом выбирается оптимальная структура реализации (регистр, LUTRAM, BRAM, DUAL_BRAM, тип счетчика, etc). И у меня не болит голова что, будет если вдруг поменяют набор портов или поведение в какой-либо вендровской корке типа shr_delay. 

 

Тоже  касается и основного набора базовых блоков RAM, ROM, FIFO, mult, add, ....

И я всегда знаю как мои модули работают, и они в большинстве случаев равны или лучше "вылизанных IP-корок". Так как на внутренности некоторых IP-корок смотреть без слез не получатся. 

 

Удачи! Rob.

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


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

On 5/22/2019 at 11:43 AM, Kluwer said:

20 лет уже плисоводством занимаюсь и на Альтере и на Ксайлинксе и даже других вендоров успел попробовать. Много раз приходилось портировать проект с семейства на семейство, но ни разу за всю карьеру не встречался с необходимостью поменять вендора под один и тот же проект.

FPGA <-> ASIC

 

How do you like it, Elon Musk? (с)

Изменено пользователем Doka
How do you like it, Elon Musk? (с)

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


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

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

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

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

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

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

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

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

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

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