非同期乗換え1
概要
(詳細記述予定)
動作確認
ツール |
バージョン |
結果 |
ncverilog |
|
未確認 |
VCS-MX |
|
未確認 |
ModelSim |
|
未確認 |
テストコード
(記述予定)
initial begin
wait(CHECK_START);
DAT1 = 0;
repeat (100)begin
@(posedge CLK1);
DAT1 = $random;
end
repeat(10)@(posedge CLK1);
$display("");
$display("NOTE : [%m] Main Task is completed. -- %t", $time);
TASKS[0] = 1;
end
ソースコード
低速→高速で使用する。
低速側のパルスをレベルに変換し、高速側でエッジ検出によりパルスに戻す。
module ASYNC(
CLK1,
RST,
CLK2,
DAT1,
DAT2
);
input CLK1;
input RST;
input CLK2;
input DAT1;
output DAT2;
reg r1_async_tgl;
reg [1:0] r2_asbuf;
reg r2_tgl;
always @(posedge CLK1 or posedge RST)begin
if(RST)begin
r1_async_tgl <= 0;
end else begin
if(DAT1)begin
r1_async_tgl <= ~r1_async_tgl;
end else begin
r1_async_tgl <= r1_async_tgl;
end
end
end
always @(posedge CLK2)begin
r2_asbuf[1:0] <= {r2_asbuf[0],r1_async_tgl};
r2_tgl <= r2_asbuf[1];
end
assign DAT2 = r2_tgl ^ r2_asbuf[1];
endmodule
最終更新:2010年03月11日 17:02