mttphreak 0 14 февраля, 2012 Опубликовано 14 февраля, 2012 · Жалоба Поясните, кто может (в частности des00), как правильно делать. Можно ткнуть в какую-нибудь понятную статейку или еще чего. Когда-то я поднимал похожую тему с фифой, там дес выкладывал файлик Но понимания мне это все не добавило... Выложи RTL, я на досуге погоняю его в CDC Formal Verification Engine и опубликую :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Postoroniy_V 0 14 февраля, 2012 Опубликовано 14 февраля, 2012 · Жалоба интересная статейка Clock Domain Crossing Glitch Detection Using Formal Verification http://www.design-reuse.com/articles/28454...rification.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mttphreak 0 14 февраля, 2012 Опубликовано 14 февраля, 2012 · Жалоба интересная статейка Clock Domain Crossing Glitch Detection Using Formal Verification Спасибо прочтем. Кстати вы у себя ТАМ дошли уже до Property Specification and Theorem Proving? Если такое делаете, тоже был бы благодарен за ссылочки по темам. Причем в Property Specification интересует System Verilog Assertions Generators и др. prototyping features... Example sctipts are highly WELCOME :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
torik 0 24 сентября, 2012 Опубликовано 24 сентября, 2012 · Жалоба Добавил 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, на которые ругается таймквест? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 24 сентября, 2012 Опубликовано 24 сентября, 2012 · Жалоба 1) Квартус понимает, когда добавили пару триггерво при переходе из одного домена в другой? 2) Можно просто прописать falsepath для тех цепей pulse_synchronizer, на которые ругается таймквест? 1. С точки зрения изменений временного анализа нет не понимает, для него это обычная логика. Поэтому без корректных тактовых групп/ложных путей будет ругаться. 2. Да. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
torik 0 1 октября, 2012 Опубликовано 1 октября, 2012 · Жалоба О че заметил. Не знаю, как раньше-то это работало. Хотел с помощью pulse_synchronizer перенести сигнал reset_n из одного домена в другой. А он лишь формирует импульс. Это нормально? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 1 октября, 2012 Опубликовано 1 октября, 2012 · Жалоба Хотел с помощью 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
torik 0 1 октября, 2012 Опубликовано 1 октября, 2012 · Жалоба Огонь! Может и для синхронизации шин чё-нибудь есть (не фифо)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 1 октября, 2012 Опубликовано 1 октября, 2012 · Жалоба Может и для синхронизации шин чё-нибудь есть (не фифо)? да вроде больше и не требуется, есть еще, синхронизатор - переключатель 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 но давно им не пользовался %) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться