p.socrat 0 16 мая, 2018 Опубликовано 16 мая, 2018 · Жалоба Запутался в основах. Разбираюсь с setup and hold. Очевидно, что защелкивание данных по клоку должно производиться в момент времени, когда данные уже установились. В этом примитивном примере входные данные устанавливаются по фронту, а защелкиваются и обрабатываются по спаду. Проблем никаких нет. always @ (posedge clk) begin in <= in + 8'd1; end always @ (negedge clk) begin out <= in « 3; end Но внезапно стало непонятно, а почему не возникает проблем с setup and hold в конструкции ниже? Здесь все выполняется по фронту. В один момент времени в регистр in записываются данные, и считываются из него always @ (posedge clk) begin in <= in + 8'd1; out <= in « 3; end Прошу люто тапками не кидаться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
StewartLittle 41 16 мая, 2018 Опубликовано 16 мая, 2018 · Жалоба Но внезапно стало непонятно, а почему не возникает проблем с setup and hold в конструкции ниже? Потому, что существует такой параметр, как Tco (Clock to Output) :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 16 мая, 2018 Опубликовано 16 мая, 2018 · Жалоба Потому, что существует такой параметр, как Tco (Clock to Output) :) И это Tco больше, чем Th. Поэтому выход предыдущего триггера еще не успевает измениться, как его захватит следующий триггер. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 16 мая, 2018 Опубликовано 16 мая, 2018 · Жалоба Обычно хорошо помогает следующая методика: 1. Прочитать про все временные параметры триггера. 2. Взять листок бумаги. 3. Вручную нарисовать диаграммы. И тогда будет сразу видно и понятно что: И это Tco больше, чем Th. Поэтому выход предыдущего триггера еще не успевает измениться, как его захватит следующий триггер. И отсюда сразу становится понятно, прочему работа по двум фронтам одного клока хуже чем по одному :smile3046: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 16 мая, 2018 Опубликовано 16 мая, 2018 · Жалоба И отсюда сразу становится понятно, прочему работа по двум фронтам одного клока хуже чем по одному :smile3046: Просто времени в 2 раза меньше. :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
p.socrat 0 17 мая, 2018 Опубликовано 17 мая, 2018 · Жалоба Тогда должен ли работать такой код? (У нас не работает). always @ (posedge clk) begin in <= in + 8'd1; end always @ (posedge clk) // negedge сменил на posedge begin out <= in « 3; end Мне не ясны различия в двух представлениях: 1 - когда все в одном aways; 2 - в разных always. Разве эта структура не должна преобразоваться в конструкцию ниже? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
one_eight_seven 3 17 мая, 2018 Опубликовано 17 мая, 2018 (изменено) · Жалоба В каком смысле "не работает"? То, что вы описали и то, что нарисовали - это разные вещи. Вы нарисовали: always @ (posedge clk) begin in <= in + 8'd1; temp <= in + 8'd1; end always @ (posedge clk) // negedge сменил на posedge begin out <= temp « 3; end И второй комбинаторный "прямоугольник" - это не in << 3, а temp <<3 Изменено 17 мая, 2018 пользователем one_eight_seven Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
p.socrat 0 17 мая, 2018 Опубликовано 17 мая, 2018 · Жалоба То, что вы описали и то, что нарисовали - это разные вещи. Действительно, не то нарисовал. В каком смысле "не работает"? При временном моделировании после синтеза возникают неопределенные состояния, которые не устраняются даже понижением тактовой частоты. Я вроде начал понимать. Поправьте если не так. В первом посте я немного слукавил (сам того не осознавая). В нашем примитивном эксперименте часть кода располагалась в testbecnh: always #3333 clk=!clk; begin always @ (posedge clk) begin in <= in + 8'd1; end А другая часть в синтезируемом модуле: always @ (posedge clk) begin out <= in « 3; end И получается, что в testbecnh сигнал in выставлялся мгновенно с клоком, и попадал в интервал Ts - Th, вызывая неопределенное состояние. Т.е. разбивание одного блока always на несколько в пределах одного синтезируемого модуля не должно приводить к конфликтам Setup and Hold? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
one_eight_seven 3 17 мая, 2018 Опубликовано 17 мая, 2018 · Жалоба Т.е. разбивание одного блока always на несколько в пределах одного синтезируемого модуля не должно приводить к конфликтам Setup and Hold? для этого ещё необходимы условия: 1. Заданные ограничения (constraints) 2. Успешное закрытие после "топологии" (не могу вспомнить, как это в ПЛИС называется). Кстати, для Gate Level Simulation очень удобно использовать в тестбенче clocking blocks, но это уже в SystemVerilog: при использовании clocking block'ов очень удобно задавать setup и clock-to-output, так, что тестбенч будет считывать сигнал, установленный за setup до прихода идеального тестбенчного клока, а устанавливать сигналы на своих выходах через clock-to-output после. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Shivers 0 17 мая, 2018 Опубликовано 17 мая, 2018 · Жалоба Главное, что надо знать про холд и сетап, это то, что холд проверяется в текущем такте, а сетап в следующем. Из чего следует, что при нарушении сетапа надо просто понизить частоту, а при нарушении холда - можно выбросить микросхему(эсик) в помойку. Если же хочется разобраться в вопросе более подробно, стоит прочитать это https://habr.com/post/302806/ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
honinbo 1 18 мая, 2018 Опубликовано 18 мая, 2018 · Жалоба Просто времени в 2 раза меньше. :rolleyes: Если бы только, а то ведь еще и требования к стабильности формы клока. По одному фронту - важен наклон активного фронта и период. Наклон второго фронта не важен, форма строго 50/50 тоже не важна. А по двум? :crying: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
baumanets 12 29 мая, 2018 Опубликовано 29 мая, 2018 · Жалоба Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться