Jump to content

    

Опять переход из одного клокового домена в другой

Поясните, кто может (в частности des00), как правильно делать. Можно ткнуть в какую-нибудь понятную статейку или еще чего. Когда-то я поднимал похожую тему с фифой, там дес выкладывал файлик

 

Но понимания мне это все не добавило...

 

Выложи RTL, я на досуге погоняю его в CDC Formal Verification Engine и опубликую :laughing:

Share this post


Link to post
Share on other sites
интересная статейка Clock Domain Crossing Glitch Detection Using Formal Verification

 

Спасибо прочтем. Кстати вы у себя ТАМ дошли уже до Property Specification and Theorem Proving? :help: Если такое делаете, тоже был бы благодарен за ссылочки по темам.

Причем в Property Specification интересует System Verilog Assertions Generators и др. prototyping features... Example sctipts are highly WELCOME :laughing:

Share this post


Link to post
Share on other sites

Добавил pulse_synchronizer в свой код. Таким образом я передаю, можно сказать, сигнал сброса из одного клокового домена в другой.

И таймквест перестал выдавать критический варнинг с руганью на передаваемый сигнал. Однако он все же ругается на pulse_synchronizer:

-1.377    qsys1:qsys_inst|VGA_Controller:vga_controller_0|pulse_synchronizer:valid_synchronizer|level    qsys1:qsys_inst|VGA_Controller:vga_controller_0|pulse_synchronizer:valid_synchronizer|dffout[0]    qsys_inst|altpll_dvi|sd1|pll7|clk[0]

И на некоторые другие.

В связи с этим вопросы:

1) Квартус понимает, когда добавили пару триггерво при переходе из одного домена в другой?

2) Можно просто прописать falsepath для тех цепей pulse_synchronizer, на которые ругается таймквест?

 

Share this post


Link to post
Share on other sites
1) Квартус понимает, когда добавили пару триггерво при переходе из одного домена в другой?

2) Можно просто прописать falsepath для тех цепей pulse_synchronizer, на которые ругается таймквест?

 

1. С точки зрения изменений временного анализа нет не понимает, для него это обычная логика. Поэтому без корректных тактовых групп/ложных путей будет ругаться.

2. Да.

Share this post


Link to post
Share on other sites

О че заметил. Не знаю, как раньше-то это работало.

 

Хотел с помощью pulse_synchronizer перенести сигнал reset_n из одного домена в другой. А он лишь формирует импульс.

Это нормально?

post-10359-1349072260_thumb.jpg

Share this post


Link to post
Share on other sites
Хотел с помощью pulse_synchronizer перенести сигнал reset_n из одного домена в другой. А он лишь формирует импульс.

Это нормально?

дык, модуль же называется "импульсный синхронизатор", а не синхронизатор уровней

 

для сброса я использую другой компонент

module reset_synchronizer
#(
 parameter int pLENGTH = 4
)
(
 clk             ,
 reset_carry_in  ,
 reset_in        ,
 reset_out
);

 //------------------------------------------------------------------------------------------------------
 //
 //------------------------------------------------------------------------------------------------------

 input  logic  clk           ;
 input  logic  reset_in      ;
 input  logic  reset_carry_in;
 output logic  reset_out     ;

 //------------------------------------------------------------------------------------------------------
 //
 //------------------------------------------------------------------------------------------------------

 logic [pLENGTH-1:0] reset_srl;

 //------------------------------------------------------------------------------------------------------
 //
 //------------------------------------------------------------------------------------------------------

 always_ff @(posedge clk or posedge reset_in) begin : reset_shift_register
   if (reset_in)
     reset_srl <= '1;
   else
     reset_srl <= (reset_srl << 1) | reset_carry_in;
 end

 assign reset_out = reset_srl[$high(reset_srl)];

endmodule

Share this post


Link to post
Share on other sites

Огонь!

Может и для синхронизации шин чё-нибудь есть (не фифо)?

Share this post


Link to post
Share on other sites
Может и для синхронизации шин чё-нибудь есть (не фифо)?

да вроде больше и не требуется, есть еще, синхронизатор - переключатель

module toggle_synchronizer
(
 clkin	,
 resetin  ,
 sin	  ,
 clkout   ,
 resetout ,
 sout
);

 //------------------------------------------------------------------------------------------------------
 //
 //------------------------------------------------------------------------------------------------------

 input  logic  clkin  ;
 input  logic  resetin;
 input  logic  sin	;
 input  logic  clkout ;
 input  logic  resetout;
 output logic  sout   ;

 //------------------------------------------------------------------------------------------------------
 //
 //------------------------------------------------------------------------------------------------------

 logic level		; // RS level triger for input pulses
 logic level_clrin  ;
 logic level_clrout ;

 logic [2:0] dffout; // clkin -> clkout syncronizer for level

 //------------------------------------------------------------------------------------------------------
 // Input converter edge/level clkin -> level clkin
 //------------------------------------------------------------------------------------------------------

 always_ff @(posedge clkin or posedge resetin) begin
if (resetin)
  level <= 1'b0;
else if (sin)
  level <= ~level;
 end

 //------------------------------------------------------------------------------------------------------
 // Forward syncronizer level clkin -> edge clkout
 //------------------------------------------------------------------------------------------------------

 always_ff @(posedge clkout or posedge resetout) begin
if (resetout)
  dffout <=0;
else
  dffout <= {dffout[1:0], level};
 end

 assign sout = dffout[2] ^ dffout[1];

endmodule

но давно им не пользовался %)

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