Jump to content

    

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

2 minutes ago, Doka said:

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


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

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

26 minutes ago, Doka said:

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

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

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

Удачи! Rob.

 

 

 

Share this post


Link to post
Share on other sites
On 5/17/2019 at 5:04 PM, RobFPGA said:

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

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

Share this post


Link to post
Share on other sites

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

1 hour ago, Nick_K said:

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

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

 

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

 

Удачи! Rob.

Share this post


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

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

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

Share this post


Link to post
Share on other sites

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

18 minutes ago, des00 said:

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

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

Удачи! Rob.

 

Share this post


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

Share this post


Link to post
Share on other sites

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

7 minutes ago, Kluwer said:

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

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

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

Удачи! Rob.

Share this post


Link to post
Share on other sites
44 minutes ago, Kluwer said:

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

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

 

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

Share this post


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

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

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

Удачи! Rob.

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

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

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

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

Share this post


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

Share this post


Link to post
Share on other sites
22 minutes ago, Kluwer said:

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

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

Share this post


Link to post
Share on other sites

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

7 hours ago, Kluwer said:

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

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

 

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

 

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

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

 

Удачи! Rob.

Share this post


Link to post
Share on other sites
On 5/22/2019 at 11:43 AM, Kluwer said:

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

FPGA <-> ASIC

 

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

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

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