new123 0 28 марта, 2021 Опубликовано 28 марта, 2021 (изменено) · Жалоба Форумчане привет. Вопрос из разряда "давно хотел спросить, но стеснялся" =) Код пример reg [1:0] start; always @ (posedge clk) begin start <= start << 1; if (en) begin data <= 1234567; start [0] <= 1 end if (start[1]) begin data_1 <= data; end end Ситуация простая, использование данных data идет через 2 такта после присваивания. И я могу применить set_multicycle_path -setup -to data 2 Но правильно ли это будет, если само присваивание "data <=" длится один такт (en встает в 1 ровно на 1 такт ). Или чтобы соблюсти описанный мультицикл, я должен и присваивать 2 такта подряд? Однажды форумчанин, вскольз в другой теме сказал, что нужно присваивать, но тема была про другое и я особо не уточнял. Изменено 28 марта, 2021 пользователем new123 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dvladim 0 28 марта, 2021 Опубликовано 28 марта, 2021 · Жалоба Обычно в мультициклах set_multicycle_path 2 ставится для данных (которые изменяются 1 раз в 2 такта), а для enable, который ставится в 1'b1 на 1 такт мутьтицикл остается = 1. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 29 марта, 2021 Опубликовано 29 марта, 2021 · Жалоба 20 hours ago, new123 said: Ситуация простая, использование данных data идет через 2 такта после присваивания. И я могу применить set_multicycle_path -setup -to data 2 для мультицикла надо еще холд задавать, иначе вы опишете не то 20 hours ago, new123 said: Но правильно ли это будет, если само присваивание "data <=" длится один такт (en встает в 1 ровно на 1 такт ). Или чтобы соблюсти описанный мультицикл, я должен и присваивать 2 такта подряд? вам нужно чтобы данные на входе триггера данных устаканились, а не для enable Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 29 марта, 2021 Опубликовано 29 марта, 2021 (изменено) · Жалоба 5 hours ago, des00 said: для мультицикла надо еще холд задавать, иначе вы опишете не то это понятно, спасибо уточнение. HOLD = SETUP -1 всегда приписываю 5 hours ago, des00 said: вам нужно чтобы данные на входе триггера данных устаканились отсутствия правильной теоретической базы не дает мне возможно правильно задавать вопрос =) Тихой сапой, я уже давно понял, чтобы при таком мультицикле у меня данные должны быть стабильны 2 такта. Мой вопрос состоял в следующем. 1) Я пытаюсь выровнять времянку во всем проекте, решил некоторые сложные пути растянуть на пару тактов, там где это не критично 2) Вопрос таков: должен ли я делать присваивания 2 такта подряд при таком желаемом мультицикле или просто хватит одного присваивания на первом такте и дальше данные сами добегут? Изменено 29 марта, 2021 пользователем new123 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 29 марта, 2021 Опубликовано 29 марта, 2021 · Жалоба 25 minutes ago, new123 said: 2) Вопрос таков: должен ли я делать присваивания 2 такта подряд при таком желаемом мультицикле или просто хватит одного присваивания на первом такте и дальше данные сами добегут? зависит от вашей реализации. Если у вас enable регулярный и постоянный и вам нет разницы в какой момент получить результат присваивания, то просто присваиваете по нему. Если у вас enable формируется из какого-то не регулярного строба валидности данных, которые вы удерживаете 2 такта и вы хотите получить результат не на следующий enable, а по этому не регулярному, то нужно задержать его на эти 2 такта, хлопнуть по нему и сформировать "выходной" строб валидности Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 29 марта, 2021 Опубликовано 29 марта, 2021 · Жалоба Приветствую! 18 minutes ago, new123 said: ... 2) Вопрос таков: должен ли я делать присваивания 2 такта подряд при таком желаемом мультицикле или просто хватит одного присваивания на первом такте и дальше данные сами добегут? Правильно все же делать EN длительностью в 1 такт как для источника так и для получателя (с соответствующей задержкой). Так как мультицикл задает ограничение время за которое данные (как выше указал @des00) должны устаканится на входе получателя. Соответственно источник должен гарантировать стабильные данные требуемое число тактов. При этом если EN для получателя будет активным все время (распространения данных) то возможна ситуация возникновения метастабильности получателя, когда изменяющиеся данные на входе попадут на фронт CLK. Понятно что следующим тактом эта метастабильности схлопнется, так как буду защелкнуты стабильные данные, но куда и как распространится последствия этой метастабильности зависит от структуры конкретного дизайна, и о последствиях такого судить сложно. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dvladim 0 29 марта, 2021 Опубликовано 29 марта, 2021 · Жалоба 6 часов назад, new123 сказал: Тихой сапой, я уже давно понял, чтобы при таком мультицикле у меня данные должны быть стабильны 2 такта. Для вашего мультицикла худшим случаем должно быть: данные формирующиеся на такте "n" должны защелкиваться не ранее такта "n+2". Т.е. для set_multicycle_path -setup 2 set_multicycle_path -hold 1 данные, которые формируются на такте n не будут корректны на такте n+1 и захватывать их нельзя. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lexx 0 30 марта, 2021 Опубликовано 30 марта, 2021 · Жалоба 19 hours ago, new123 said: Тихой сапой, я уже давно понял, чтобы при таком мультицикле у меня данные должны быть стабильны 2 такта. Да. Если у вас есть нагрузка на выход, то путь сигнала на setup рассчитывается в 2 тактовых сигнала. Т.е. по сути тактовым у вас будет делитель частоты на 2, причем зависимый от основного. Но hold так и останется 1. Не проще ли в середине вставить регистр для временного хранения, с multycycle (если это не входной сигнал с длинной выдержкой) внутри проекта возможны проблемы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 30 марта, 2021 Опубликовано 30 марта, 2021 · Жалоба Всем ответившим спасибо большое. Мне теперь еще неделю вникать в каждый ответ =) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Freibier 3 25 июня, 2021 Опубликовано 25 июня, 2021 · Жалоба Решил новую тему не создавать и здесь спросить. Вот такой модуль: module abc( input clk, output reg [19:0]Q ); reg [1:0]p; always @(posedge clk) p <= p + 2'b01; reg [19:0]A,B,C; always @(posedge clk) case (p) 2'b00: begin Q <= A; A <= A + 20'b01; end 2'b01: begin Q <= B; B <= B - 20'b10; end 2'b10: begin Q <= A; A <= A + 20'b01; end 2'b11: begin Q <= C; C <= C - 20'b11; end endcase endmodule Правильно ли мультициклы описал? set_multicycle_path 2 -setup -from [get_registers abc:inst|A[*]] -to [get_registers abc:inst|A[*]] set_multicycle_path 1 -hold -from [get_registers abc:inst|A[*]] -to [get_registers abc:inst|A[*]] set_multicycle_path 4 -setup -from [get_registers abc:inst|B[*]] -to [get_registers abc:inst|B[*]] set_multicycle_path 3 -hold -from [get_registers abc:inst|B[*]] -to [get_registers abc:inst|B[*]] set_multicycle_path 4 -setup -from [get_registers abc:inst|C[*]] -to [get_registers abc:inst|C[*]] set_multicycle_path 3 -hold -from [get_registers abc:inst|C[*]] -to [get_registers abc:inst|C[*]] Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Avex 1 26 июня, 2021 Опубликовано 26 июня, 2021 · Жалоба Все верно, только с коэф. деления ошиблись. Судя по коду, на А малтисайкл 4(сетап)-3(холд), на В -8(сетап)-7(холд). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 26 июня, 2021 Опубликовано 26 июня, 2021 · Жалоба 46 минут назад, Aleх сказал: Судя по коду, на А малтисайкл 4(сетап)-3(холд), на В -8(сетап)-7(холд). Почему? A меняется раз в два такта, B и C раз в четыре. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Freibier 3 26 июня, 2021 Опубликовано 26 июня, 2021 (изменено) · Жалоба 5 часов назад, andrew_b сказал: Почему? A меняется раз в два такта, B и C раз в четыре. 1. Присоединяюсь к вопросу. 2. Меня интересовал вопрос, можно ли в качестве -from и -to одни и те же регистры указывать. В разных источниках всегда разные регистры фигурируют в примерах. Ну раз возражений нет - значит можно. Спасибо. Изменено 26 июня, 2021 пользователем Freibier Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Avex 1 26 июня, 2021 Опубликовано 26 июня, 2021 · Жалоба бес попутал :-) все верно было, деление на 2 и 4 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться