Jump to content

    
Sign in to follow this  
Digi

Помогите разобраться с констрейнами в Quartus

Recommended Posts

Сейчас столкнулся с тем, что не могу понять как прописать констрейны в проеке.

Например первая сложность в том как прописать запираемое тактирование:
(Сдвиговый регистр для приёма данных от 4х битного DDR для линк порта ADSP TS-201)

wire         inclock_gated = inclock & inclock_en;

  reg [11:0] 	 datain_pos;
  reg [11:0] 	 datain_neg;
  always @(posedge inclock_gated or negedge rst_n)
    if (~rst_n)
      datain_pos <= 12'b0;
    else
      datain_pos <= {datain, datain_pos[11:4]};

  always @(negedge inclock_gated or negedge rst_n)
    if (~rst_n)
      datain_neg <= 12'b0;
    else
      datain_neg <= {datain, datain_neg[11:4]};

  reg [4:0] 	 pos_edges;
  reg [4:0] 	 neg_edges;


 reg [15:0] 	 pos_data;
  reg [15:0] 	 neg_data;
  always @(posedge inclock_gated)
    if (freeze_pos)
      pos_data <= {datain, datain_pos};
 
  always @(negedge inclock_gated)
    if (freeze_neg)
      neg_data <= {datain, datain_neg};
 
  wire [31:0] shift_reg;
  assign shift_reg = {neg_data[15:12], pos_data[15:12],
		      neg_data[11:8], pos_data[11:8],
		      neg_data[7:4], pos_data[7:4],
		      neg_data[3:0], pos_data[3:0]};


Ведь нужно учесть задержку inclock_gated относительно inclock. А потом уже относительно inclock_gated прописать допустимую задержку входных сигналов datain... 

Как бы вы порекомендовали  ?

Ещё выяснил, что от внешних пинов, до регистра datain_pos сигналы приходят с разной задержкой. Как их выровнять ?

 

изображение_2020-11-11_135805.png

Share this post


Link to post
Share on other sites

Вы тут навернули довольно непростую конструкцию, которую новичку (раз спрашиваете - значит новичок) делать не стоит. Потому совет -

избавьтесь от

inclock_gated = inclock & inclock_en;

Перепишите это, добавив if (inclock_en) в разрешение всех флопов. Причем вам нужно два! inclock_en  -один делается по райзу и используется во флопах, тактируемых по райзу клока. И копия inclock_en, но для флопов по фоллу клока. Можно наверно и не раздваивать inclock_en, но так - лучше тайминг.

Сразу уйдут проблемы, и не простой вопрос "Ведь нужно учесть задержку inclock_gated относительно inclock" станет не актуальным. Наверное возникнут другие проблемы, но будут гораздо проще :-)

 

Share this post


Link to post
Share on other sites
On 11/11/2020 at 4:58 PM, Digi said:

Как бы вы порекомендовали  ?

сомневаюсь что вы работаете с древней плис, поэтому возьмите altddio компонент, сконфигурируйте в режим аппаратного DDR входного регистра и используйте.

On 11/11/2020 at 4:58 PM, Digi said:

Ещё выяснил, что от внешних пинов, до регистра datain_pos сигналы приходят с разной задержкой. Как их выровнять ?

никак, можно только минимизировать, разместив DDR регистры в IO буфере, который вы задействуете через altddio

3 hours ago, Aleх said:

избавьтесь от

не поможет ему, судя по базовому заданию

Quote

Сдвиговый регистр для приёма данных от 4х битного DDR для линк порта ADSP TS-201)

это сигнал ACKO, handshake приемника. Только зачем там & если тактовая существует только на момент передачи данных, там скорее сложность будет сформировать корректно окончание приема слова.

Share this post


Link to post
Share on other sites
13 hours ago, Aleх said:

Вы тут навернули довольно непростую конструкцию, которую новичку (раз спрашиваете - значит новичок) делать не стоит. Потому совет -

избавьтесь от


inclock_gated = inclock & inclock_en;

Перепишите это, добавив if (inclock_en) в разрешение всех флопов. Причем вам нужно два! inclock_en  -один делается по райзу и используется во флопах, тактируемых по райзу клока. И копия inclock_en, но для флопов по фоллу клока. Можно наверно и не раздваивать inclock_en, но так - лучше тайминг.

Пока на inclock_en  приходил сигнал с логики, то всё работало (до этого я не анализировал время прихода данных). Я подключил жёстко на inclock_en 1'b1 и после этого данные стали приходить не равномерно. Спасло прописать это:

set_input_delay -clock {P1_CLKO} -min 2.7  [get_ports {P1_DO[*]}]
set_input_delay -clock {P1_CLKO} -max 3.2  [get_ports {P1_DO[*]}]

P1_CLKO и P1_DO это имена сигналов в самом верхнем уровне, соответствующие inclock и datain. Насколько корректно я это сделал, не могу понять. Получается что я указал задержку распостранения сигнала по внешним цепям, а по правильному нужно указывать допустимую задержку от пина до входа триггера. Но set_max(min)_delay у меня не сработали.

14 hours ago, Aleх said:

Сразу уйдут проблемы, и не простой вопрос "Ведь нужно учесть задержку inclock_gated относительно inclock" станет не актуальным. Наверное возникнут другие проблемы, но будут гораздо проще :-)

Тем не менее вопрос для меня актуален, для общего развития (приходится переделывать старые проекты, а там часто встречались такие конструкции).

PS: а в целом эта часть проекта заработала... но впереди много ещё чего предстоит )

Share this post


Link to post
Share on other sites
12.11.2020 в 11:16, Aleх сказал:

inclock_en  -один делается по райзу и используется во флопах, тактируемых по райзу клока. И копия inclock_en, но для флопов по фоллу клока.

Кстати, почему так, а не наоборот: inclock_en по райзу и использовать во флоппах по фоллу клока?

Share this post


Link to post
Share on other sites
5 hours ago, MrGalaxy said:

Кстати, почему так, а не наоборот: inclock_en по райзу и использовать во флоппах по фоллу клока?

Для уменьшения fanout. Если сделать как я предложил (т.е. убрать клок-гейт), то inclock_en будет приходить на большое число синков, а поскольку часть этих синков работает по инверсному клоку - получаем и еще бОльшую нагрузку на inclock_en. Поэтому имеет смысл сначала синхронизировать inclock_en инверсному клоку, а потом использовать с соотв. флопами: нагрузка (на цепь inclock_en, а так же на софт - синтезатор и фиттер) снизится существенно.

Но @des00 правильно сказал - если цель ПЛИС, а не эсик, то лучше использовать готовую софт/хард корку.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this