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

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

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

Например первая сложность в том как прописать запираемое тактирование:
(Сдвиговый регистр для приёма данных от 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

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


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

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

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

inclock_gated = inclock & inclock_en;

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

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

 

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


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

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 приемника. Только зачем там & если тактовая существует только на момент передачи данных, там скорее сложность будет сформировать корректно окончание приема слова.

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


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

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: а в целом эта часть проекта заработала... но впереди много ещё чего предстоит )

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


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

12.11.2020 в 11:16, Aleх сказал:

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

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

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


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

Все задержки пинов при переделке  трасировки меняются возможно лучше смотреть по схеме нетлиста

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


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

5 hours ago, MrGalaxy said:

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

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

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

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


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

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

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

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

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

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

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

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

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

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