Jump to content

    

Правильное описание constraint

Форумчане, день добрый. Помогите правильно описать путь пжлст.

Очень упрощенно имею такой код.

assign x = (a == 16'd49000)? 1'b0: 1'b1;
assign z = {...., x, ....};
            
always @ (posedge clk) begin
  a <= ...
end

Хочу помочь квартусу не напрягаться. И сказать что расчет Z мне актуален после трех тактов, как получу A. То есть, чтобы он не напрягался и не пробовал все уложить в один такт.

set_multicycle_path подойдет? Если да, не могли бы привезти точный пример, как его точно прописать в данной задаче, у меня как то с ним не сложилось.

Или может в таких условиях вообще set_false_path подойдет?

 

Заранее спасибо.

Share this post


Link to post
Share on other sites
29 minutes ago, new123 said:

set_multicycle_path подойдет? Если да, не могли бы привезти точный пример, как его точно прописать в данной задаче, у меня как то с ним не сложилось.

Или может в таких условиях вообще set_false_path подойдет?

https://embedders.org/content/timequest-dlya-chainikov-prilozhenie-3-dobryi-i-zlobnyi-multicycle

мультициклы можно накладывать только между регистрами. в целом ложный путь тоже пойдет. 

Share this post


Link to post
Share on other sites

Меня в таких случаях тянет завести несколько CE разнесённых по фазе на несколько клоков.

Интересно, если так сделать - надо будет думать о constraint или квартус/вивадо - сам поймёт?

Share this post


Link to post
Share on other sites

Приветствую!

Если логику z  как-то  фиксировать, например (* keep *) чтобы при синтезе она не оптимизировалась, то тогда можно попробовать задать 

set_multicycle_path 3 -start -setup -from [get_pins path_name/a_reg|q*]  -through [get_cells  path_name/z]

set_multicycle_path 2 -start  -hold  -from [get_pins path_name/a_reg|q*]  -through [get_cells  path_name/z]

Ну или нужен такой код, чтобы можно было явно задавать set_multicycle_path конкретно до z

assign x = (a == 16'd49000)? 1'b0: 1'b1;
            
always @ (posedge clk) begin
  a <= ...
  z <= {...., x, ....};
end

set_multicycle_path 3 -end -setup -from [get_pins path_name/a_reg|q*]  -to [get_pins path_name/z_reg|d*]

set_multicycle_path 2 -end -hold   -from [get_pins path_name/a_reg|q*]  -to [get_pins path_name/z_reg|d*] 

Удачи! Rob.

Share this post


Link to post
Share on other sites
36 minutes ago, des00 said:

https://embedders.org/content/timequest-dlya-chainikov-prilozhenie-3-dobryi-i-zlobnyi-multicycle

мультициклы можно накладывать только между регистрами. в целом ложный путь тоже пойдет. 

спасибо, я об этом не подумал. Надо в Time Analyzer поковырять мне пути.

4 minutes ago, RobFPGA said:

Ну или нужен такой код, чтобы можно было явно задавать set_multicycle_path конкретно до z

спасибо.

Всем спасибо большое, как всегда, быстро и профессионально

32 minutes ago, _4afc_ said:

надо будет думать о constrain

я конечно особо не мастак, но у меня сложилось мнение, чем больше опишешь, тем лучше. У меня уже чип скоро под завязку, квартусу все тяжелее и тяжелее. А более детальные констрейны выручать начинают.

Share this post


Link to post
Share on other sites

False path  лучше не использовать - при синтезе не  будет никаких  констрейнов, только логика. 

Share this post


Link to post
Share on other sites

Приветствую!

59 minutes ago, lexx said:

False path  лучше не использовать - при синтезе не  будет никаких  констрейнов, только логика.

Не могли бы пояснить что вы имели в виду?

Успехов! Rob.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this