Main Content

グローバル リセット信号の IP コア クロック領域への同期

HDL DUT IP コアと、HDL IP コアの AXI4 スレーブ インターフェイス ラッパーのアドレス デコーダー ロジックは、グローバル リセット信号によって駆動されます。AXI4 スレーブ インターフェイスをもたない HDL IP コアを生成する場合、HDL Coder™ は AXI4 スレーブ インターフェイス ラッパーを生成しません。グローバル リセット信号は IP コア リセット信号と同じになり、DUT の HDL IP コアを駆動します。AXI4 スレーブ インターフェイスをもたない IP コアを生成する方法の詳細については、ボードに依存しない HDL IP コアの Simulink モデルからの生成を参照してください。

HDL IP コアで AXI4 スレーブ インターフェイスを生成する際、グローバル リセット信号は、IP コア外部リセット、AXI インターコネクトのリセット信号、および IPCore_Reset AXI レジスタへの書き込み時にアサートされるソフト リセットの 3 つのリセット信号によって駆動されます。詳細については、カスタム IP コア レポートを参照してください。この場合のグローバル リセット信号は DUT の HDL IP コアと AXI4 スレーブ ラッパーのアドレス デコーダー ロジックを駆動します。

IPCore_Clk および AXILite_ACLK は、同じクロック ソースに接続されていなければなりません。IPCore_RESETN および AXILite_ARESETN は、同じリセット ソースに接続されていなければなりません。

これらのリセット信号は、同期でも非同期でもかまいません。非同期リセット信号を使用すると問題が生じる可能性があり、リセットがクロックのラッチ ウィンドウ内でデアサートすると、フリップフロップでの潜在的なメタスタビリティの問題につながります。リセット信号を結合する際に準安定値が生成される可能性を回避するため、HDL Coder は、Reset Sync ブロックによって示されているように、リセット同期ロジックを自動的に挿入します。リセット同期ロジックはグローバル リセット信号を IP コア クロック領域に同期します。このロジックは HDL ワークフロー アドバイザーを開いて IP Core Generation ワークフローの [RTL コードと IP コアの生成] タスクを実行する際に挿入されます。

リセット同期ロジックには IPCore_CLK 信号と同期した 2 つの連続したフリップフロップが含まれています。このフリップフロップにより、IPCore_CLK 信号が高位の場合の 2 クロック サイクル後にリセット信号のデアサーションが必ず発生するようになります。この同期デアサーションにより、準安定値の可能性があるグローバル リセット信号の生成が回避されます。

このロジックは、モデルで [リセット タイプ][同期] または [非同期] のどちらに指定するかによって、異なる動作をします。[リセット タイプ][非同期] の場合、同期ロジックはリセット信号を非同期でアサートし、リセット信号を同期的にデアサートします。たとえば、このコードは、非同期リセットの IP コアを生成するときに、生成されたリセット同期ロジックの Verilog® コードを示します。

... 
...

reg_reset_pipe_process : PROCESS (clk, reset_in)
  BEGIN
    IF reset_in = '1' THEN
      reset_pipe <= '1';
    ELSIF clk'EVENT AND clk = '1' THEN
      IF enb = '1' THEN
        reset_pipe <= const_0;
      END IF;
    END IF;
  END PROCESS reg_reset_pipe_process;


  reg_reset_delay_process : PROCESS (clk, reset_in)
  BEGIN
    IF reset_in = '1' THEN
      reset_out <= '1';
    ELSIF clk'EVENT AND clk = '1' THEN
      IF enb = '1' THEN
        reset_out <= reset_pipe;
      END IF;
    END IF;
  END PROCESS reg_reset_delay_process;


END rtl;

[リセット タイプ][同期] の場合、同期ロジックはリセット信号を同期的にアサートおよびデアサートします。たとえば、このコードは、同期リセットの IP コアを生成するときに、生成されたリセット同期ロジックの Verilog コードを示します。

...
...

reg_reset_pipe_process : PROCESS (clk)
  BEGIN
    IF clk'EVENT AND clk = '1' THEN
      IF reset_in = '1' THEN
        reset_pipe <= '1';
      ELSIF enb = '1' THEN
        reset_pipe <= const_0;
      END IF;
    END IF;
  END PROCESS reg_reset_pipe_process;


  reg_reset_delay_process : PROCESS (clk)
  BEGIN
    IF clk'EVENT AND clk = '1' THEN
      IF reset_in = '1' THEN
        reset_out <= '1';
      ELSIF enb = '1' THEN
        reset_out <= reset_pipe;
      END IF;
    END IF;
  END PROCESS reg_reset_delay_process;


END rtl;

関連するトピック