Digi 0 11 ноября, 2020 Опубликовано 11 ноября, 2020 · Жалоба Сейчас столкнулся с тем, что не могу понять как прописать констрейны в проеке. Например первая сложность в том как прописать запираемое тактирование: (Сдвиговый регистр для приёма данных от 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 сигналы приходят с разной задержкой. Как их выровнять ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Avex 1 12 ноября, 2020 Опубликовано 12 ноября, 2020 · Жалоба Вы тут навернули довольно непростую конструкцию, которую новичку (раз спрашиваете - значит новичок) делать не стоит. Потому совет - избавьтесь от inclock_gated = inclock & inclock_en; Перепишите это, добавив if (inclock_en) в разрешение всех флопов. Причем вам нужно два! inclock_en -один делается по райзу и используется во флопах, тактируемых по райзу клока. И копия inclock_en, но для флопов по фоллу клока. Можно наверно и не раздваивать inclock_en, но так - лучше тайминг. Сразу уйдут проблемы, и не простой вопрос "Ведь нужно учесть задержку inclock_gated относительно inclock" станет не актуальным. Наверное возникнут другие проблемы, но будут гораздо проще :-) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 12 ноября, 2020 Опубликовано 12 ноября, 2020 · Жалоба 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 приемника. Только зачем там & если тактовая существует только на момент передачи данных, там скорее сложность будет сформировать корректно окончание приема слова. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Digi 0 12 ноября, 2020 Опубликовано 12 ноября, 2020 · Жалоба 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: а в целом эта часть проекта заработала... но впереди много ещё чего предстоит ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrGalaxy 9 16 ноября, 2020 Опубликовано 16 ноября, 2020 · Жалоба 12.11.2020 в 11:16, Aleх сказал: inclock_en -один делается по райзу и используется во флопах, тактируемых по райзу клока. И копия inclock_en, но для флопов по фоллу клока. Кстати, почему так, а не наоборот: inclock_en по райзу и использовать во флоппах по фоллу клока? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aldec 0 16 ноября, 2020 Опубликовано 16 ноября, 2020 · Жалоба Все задержки пинов при переделке трасировки меняются возможно лучше смотреть по схеме нетлиста Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Avex 1 16 ноября, 2020 Опубликовано 16 ноября, 2020 · Жалоба 5 hours ago, MrGalaxy said: Кстати, почему так, а не наоборот: inclock_en по райзу и использовать во флоппах по фоллу клока? Для уменьшения fanout. Если сделать как я предложил (т.е. убрать клок-гейт), то inclock_en будет приходить на большое число синков, а поскольку часть этих синков работает по инверсному клоку - получаем и еще бОльшую нагрузку на inclock_en. Поэтому имеет смысл сначала синхронизировать inclock_en инверсному клоку, а потом использовать с соотв. флопами: нагрузка (на цепь inclock_en, а так же на софт - синтезатор и фиттер) снизится существенно. Но @des00 правильно сказал - если цель ПЛИС, а не эсик, то лучше использовать готовую софт/хард корку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться