alexPec 3 1 августа, 2021 Опубликовано 1 августа, 2021 · Жалоба Всем доброго дня. Только погружаюсь в таинства верилога и прошу помощи у опытных товарищей :) Есть такой модуль (приложил файлом). Он уже был готовый и у меня в тестбенче (RTL) ведет себя отлично, без проблем. Но когда собираю проект с этим модулем в реальном чипе, то тайминг анализер ругается на то, что регистры под always @(*) - например Phase1R0w, Phase1R1w, Phase1C0w и т.д. (всего 88 цепей) не имеют клока. И собственно вроде тайминг анализер прав - вроде как сигналы-то регистрятся только в регистрах под always @(posedge clk or negedge rst), например Phase1R0r- это регистр. А вышеупомянутые Phase1R0w... и т.д. - это комбинационная логика. Как не поломав логику скорректировать код, чтобы тайминг анализер корректно рассчитал и учел все эти пути. Т.к. этот блок похоже глючит, но редко - выловить трудно. И длина комбинационной цепи там вроде немалая, т.е. я подозреваю это одно из узких мест в тайминге. jpeg_idctx.v Заранее благодарен! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 56 2 августа, 2021 Опубликовано 2 августа, 2021 · Жалоба always @(*) begin case(Phase1Page) 3'd0:begin case(Phase1Count) 3'd0: begin Phase1R0w <= Data00In; Phase1R1w <= Data04In; end 3'd1: begin Phase1R0w <= Data02In; Phase1R1w <= Data06In; end ... Замените <= на =. В комбинационных блоках рекомендуется использовать блокирующие присваивания. Вообще, настоятельно советую навести ясность с блокирующими и неблокирующими присваиваниями. Это один из "столпов" Верилога. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 2 августа, 2021 Опубликовано 2 августа, 2021 · Жалоба 2 часа назад, dxp сказал: Замените <= на =. В комбинационных блоках рекомендуется использовать блокирующие присваивания. С чего это? @alexPec У вас там латчей полно. Phase1Count (и др.) 3-разрядный, то есть 8 значений, а в case описано только 4. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 56 2 августа, 2021 Опубликовано 2 августа, 2021 · Жалоба 4 минуты назад, andrew_b сказал: С чего это? А вы не знали? С того, что обычно хотят, чтобы результат симуляции соответствовал результату синтеза. Приведите причину, зачем в комбинационном блоке нужны неблокирующие присваивания? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
one_eight_seven 6 2 августа, 2021 Опубликовано 2 августа, 2021 · Жалоба 8 minutes ago, andrew_b said: С чего это? С того, что они ведут себя так, как должна вести комбинаторная логика. Можно сделать комбинаторику и с неблокирующими присваиваниями, но зачем? А вот то, что в приведённом примере всё-равно не будет комбинаторики - это да. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 56 2 августа, 2021 Опубликовано 2 августа, 2021 · Жалоба Если имеете в виду, что защёлки сгенерируются, так это не полный пример, это я выдрал кусок. Там в оригинальном портянка на несколько экранов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
one_eight_seven 6 2 августа, 2021 Опубликовано 2 августа, 2021 (изменено) · Жалоба 4 minutes ago, dxp said: Если имеете в виду, что защёлки сгенерируются, так это не полный пример, это я выдрал кусок. Там в оригинальном портянка на несколько экранов. Нет. Мы имеем в виду, что в комбинаторном always должне быть определены все случаи, и в них переменной должно быть присвоено новое значение (возможно, оно будет тем же самым, но должно браться откуда-то снаружи, а не присвоение переменной самой себе). В противном случае, значение нужно запомнить, значит, будет latch, поскольку нет тактирования. Конкретно здесь - кейсы на 8 значений, а обрабатывается 4, и так - несколько раз. Тут не код менять надо, а ДНК, или хотя бы почитать что-то полезное. Поиграться в песочнице с кодом на 4 строки, потом на 16. А не тащить портянку, не понимая что это - и сразу на форум. Изменено 2 августа, 2021 пользователем one_eight_seven Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 56 2 августа, 2021 Опубликовано 2 августа, 2021 · Жалоба А, в этом смысле. Согласен. Самое простое было бы присвоить перед case значения по умолчанию, и никаких защёлок. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
attaboy 0 2 августа, 2021 Опубликовано 2 августа, 2021 (изменено) · Жалоба Интересно. Всегда считал, что это аксиома Верилога - неблокирующие присваивания в always @ (posedge clk) и блокирующие присваивания в always @ (sensititvity_list). В стандартах допускается использование обеих вариантов, но в практических руководствах рекомендуют использовать именно так. Вот например: http://www.sunburst-design.com/papers/CummingsSNUG2000SJ_NBA.pdf Вот например выдержка из этого документа: I Quote t is better to develop the habit of coding all sequential always blocks, even simple single-block modules, using nonblocking assignments as shown in Example 14. Изменено 2 августа, 2021 пользователем attaboy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexPec 3 2 августа, 2021 Опубликовано 2 августа, 2021 · Жалоба 6 часов назад, dxp сказал: Замените <= на =. Спасибо, попробовал, но не помогло. Вивадо в тайминг анализе все так же ругается на то, что "Register/latch with no clock...". 6 часов назад, andrew_b сказал: У вас там латчей полно. Phase1Count (и др.) 3-разрядный, то есть 8 значений, а в case описано только 4. Вот это в точку, спасибо, не обратил внимания. Добавил дефолтный кейс везде (хотя по логике он бесполезен, других значений не бывает), и вся цепочка от входа до регистра синтезировалась как комбинационная логика, и вивадо сейчас тайминги считает от регистра до регистра, без всяких предупреждений. 3 часа назад, one_eight_seven сказал: Тут не код менять надо, а ДНК, или хотя бы почитать что-то полезное. Поиграться в песочнице с кодом на 4 строки, потом на 16. А не тащить портянку, не понимая что это - и сразу на форум. Не понятна мне ваша агрессия и переход на личности. ДНК своей вполне доволен и менять ее не собираюсь. Наигрался уже много, давно уже занимаюсь конкретными задачами. Но (в отличии от вас, генетически предрасположенного) всех тонкостей верилога не знаю и не скрываю этого. Тем более что модуль чужой - я не заметил латчей, а кто-то вот заметил. Если вы не обратили внимания, то на форум обратился не за общей теорией (это к тому что "почитать"), а с конкретной проблемой, когда в теории явно не описана именно моя проблема. "Портянку" притащил, чтобы участникам можно было посмотреть модуль целиком и иметь общую картину конкретной проблемы. Ну и да, посмотрел, попробовал, потыкался сам - не получается, и "сразу на форум" - разве не для этого форум создан, чтобы общими усилиями, ДОБРОВОЛЬНО помогать решать чьи-то (мои, ваши, других участников) проблемы? А то после вашего поста складывается впечатление, что я замучил вас своими вопросами и требую от вас ответа. Не хотите - не отвечайте, можно просто почитать и закрыть. Тем более что вы всего лишь подтвердили опубликованное предположение andrew_b. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
one_eight_seven 6 2 августа, 2021 Опубликовано 2 августа, 2021 · Жалоба 3 minutes ago, alexPec said: Не понятна мне ваша агрессия и переход на личности. ДНК своей вполне доволен и менять ее не собираюсь Это отсылка к довольно известному в индустрии анекдоту. 3 minutes ago, alexPec said: . Наигрался уже много, давно уже занимаюсь конкретными задачами. Оно и видно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 2 августа, 2021 Опубликовано 2 августа, 2021 · Жалоба 37 minutes ago, alexPec said: Добавил дефолтный кейс везде (хотя по логике он бесполезен, других значений не бывает) Это очевидно для Вас. Увы синтезатор не настолько понимающий и во многих местах сильно тупит, посему приходится разжовывать многое. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dr.Alex 0 2 августа, 2021 Опубликовано 2 августа, 2021 · Жалоба 9 minutes ago, Nick_K said: Это очевидно для Вас. Увы синтезатор не настолько понимающий и во многих местах сильно тупит, посему приходится разжовывать многое. Отнюдь. Отсутствие дефолтного кейса - даст ЗАКОННЫЙ ЛАТЧ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 2 августа, 2021 Опубликовано 2 августа, 2021 · Жалоба 2 minutes ago, Dr.Alex said: Отнюдь. Отсутствие дефолтного кейса - даст ЗАКОННЫЙ ЛАТЧ. Отнюдь) Для проектирования ASIC-ов нет дефолтных кейсов совсем (ну не бывает такого) и Летчи делаются неколько по-другому Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dr.Alex 0 2 августа, 2021 Опубликовано 2 августа, 2021 · Жалоба 1 minute ago, Nick_K said: Отнюдь) Для проектирования ASIC-ов нет дефолтных кейсов совсем (ну не бывает такого) и Летчи делаются неколько по-другому А вы точно пишете RTL? Засомневался что-то. Оказывается, в асиках HDL работает не так как в фпга? Это что-то новенькое :-))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться