Это немного сложно, но если вы можете получить третьи часы, которые в два раза быстрее, чем самые быстрые часы между двумя, которые вам нужно обнаружить, и могут принять задержку обнаружения в один цикл (один цикл относится к третьему). часовой домен) то можно.
то, что вам нужно сделать, это настроить регистрацию для каждого домена 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