Yuri124 1 17 сентября, 2018 Опубликовано 17 сентября, 2018 (изменено) · Жалоба Добрый день. В проекте (Cyclone V) есть такой кусок (очень упрощенно): input wire sys_clk; // тактовая частота input wire [31:0] data_in; // входные данные output reg [31:0] reg_out; // выходные данные reg [31:0] reg_in_1, reg_in_2, reg_in_3, reg_in_4; // регистры для хранения принятых данных вначале автомат по некоторому закону принимает входные данные в регистры, где они довольно долго (микросекунды) хранятся. always @ (posedge clock_sys) begin ... STATE_IN1: reg_in_1 <= data_in; STATE_IN2: reg_in_2 <= data_in; STATE_IN3: reg_in_3 <= data_in; STATE_IN4: reg_in_4 <= data_in; ... end через некоторое время содержимое этих регистров необходимо подать на выход (в другой регистр). Это делает другой автомат. always @ (posedge clock_sys) begin ... STATE_OUT1: reg_out <= reg_in_1; STATE_OUT2: reg_out <= reg_in_2; STATE_OUT3: reg_out <= reg_in_3; STATE_OUT4: reg_out <= reg_in_4; ... end Время между записью входных данных и передачей их на выход настолько большое, что, казалось бы, можно на эти пути прописать set_false_path Но - между выходами reg_in_х и входами reg_out Quartus поставит коммутатор. Т.е. на самом деле можно не анализировать пути от выходов reg_in_х до входов этого коммутатора, а вот время пробега данных от момента выбора с какого входа этого коммутатора данные передаются на входы регистра reg_out не должно превышать такта тактовой частоты clock_sys. Вопрос - как правильно прописать констрейнты для такого случая (как найти этот коммутатор). Можно, конечно, изменить проект и явно задать этот коммутатор, или добавить промежуточный регистр в цепочку передачи данных, но не хотелось бы... Нашел такую команду: # Cut timing from a mode_select register, which is static in the design, to all of its destinations: set_false_path -from [get_keepers *|mode_select] Оно поможет? Изменено 17 сентября, 2018 пользователем Yuri124 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться