Това е някак сложно, но ако можете да получите трети часовник, който е два пъти по-бърз от най-бързия часовник между двата, които трябва да откриете и можете да приемете едно забавяне на откриването на цикъл (единият цикъл е по отношение на третия часовников домейн), тогава е възможно.
това, което ще трябва да направите, е да настроите да се регистрира за всеки clk домейн по следния начин:
input clk1, clk2'
...
reg clk1_in, clk1_out;
reg clk2_in, clk2_out;
wire clk1_posedge, clk2_posedge;
//take in the clock value, you should register this so that way jitter on the line does not mess with it
always@(posedge clk3)begin
clk1_in <= clk1;
clk2_in <= clk2;
end
always@(posedge clk3)begin
clk1_out <= clk1_in;
clk2_out <= clk2_in;
end
//now you need to detect the posedge for each signal independently, you can use and and gate for this
assign clk1_posedge = (~clk1_out && clk1_in);
assign clk2_posedge = (~clk2_out && clk2_in);
// now just and the two together
assign pulse_detected = clk1_posedge && clk2_posedge
имате нужда от clk 3, за да бъде два пъти по-бърз, в противен случай получавате псевдоним (потърсете nyquist freq)
така че това, което се случва, е, че първият регистър за домейна на часовника ще бъде висок и ако е този, който току-що става висок, тогава вторият регистър все още ще бъде нисък за този цикъл.
person
alex_milhouse
schedule
14.06.2013