非同期乗換え1

概要

(詳細記述予定)

動作確認

ツール バージョン 結果
ncverilog 未確認
VCS-MX 未確認
ModelSim 未確認

テストコード

(記述予定)

  1. initial begin
  2. wait(CHECK_START);
  3.  
  4. DAT1 = 0;
  5. repeat (100)begin
  6. @(posedge CLK1);
  7. DAT1 = $random;
  8. end
  9.  
  10. repeat(10)@(posedge CLK1);
  11.  
  12. $display("");
  13. $display("NOTE : [%m] Main Task is completed. -- %t", $time);
  14. TASKS[0] = 1;
  15. end

ソースコード

低速→高速で使用する。
低速側のパルスをレベルに変換し、高速側でエッジ検出によりパルスに戻す。

  1. module ASYNC(
  2. CLK1,
  3. RST,
  4. CLK2,
  5. DAT1,
  6. DAT2
  7. );
  8.  
  9. input CLK1;
  10. input RST;
  11. input CLK2;
  12. input DAT1;
  13. output DAT2;
  14.  
  15. reg r1_async_tgl;
  16. reg [1:0] r2_asbuf;
  17. reg r2_tgl;
  18.  
  19. always @(posedge CLK1 or posedge RST)begin
  20. if(RST)begin
  21. r1_async_tgl <= 0;
  22. end else begin
  23. if(DAT1)begin
  24. r1_async_tgl <= ~r1_async_tgl;
  25. end else begin
  26. r1_async_tgl <= r1_async_tgl;
  27. end
  28. end
  29. end
  30.  
  31. always @(posedge CLK2)begin
  32. r2_asbuf[1:0] <= {r2_asbuf[0],r1_async_tgl};
  33. r2_tgl <= r2_asbuf[1];
  34. end
  35.  
  36. assign DAT2 = r2_tgl ^ r2_asbuf[1];
  37. endmodule


Top > 言語 > verilog > Tips > 非同期乗換え1
link_pdfプラグインはご利用いただけなくなりました。























-

最終更新:2010年03月11日 17:02