これはちょっと難しいですが、検出する必要がある 2 つの間の最速のクロックの 2 倍の速さの 3 番目のクロックを取得でき、検出の 1 サイクルの遅延を受け入れることができる場合 (1 サイクルは 3 番目のクロックを基準にしています)クロック ドメイン) であれば可能です。
次のように、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 を 2 倍の速度にする必要があります。そうしないと、エイリアシングが発生します (ナイキスト周波数を調べます)。
そのため、クロックドメインの最初のレジスターがハイになり、それがちょうどハイになっている場合、2番目のレジスターはそのサイクルの間ローのままです。