インテルのみ表示可能 — GUID: mwh1409959560537
Ixiasoft
インテルのみ表示可能 — GUID: mwh1409959560537
Ixiasoft
2.3.1.1. 同期リセットの使用
互いに同期しているクロックがリセット信号を起動してラッチするため、データ到着時間とデータ所要時間を容易に特定し、適切なスラック解析を行うことができます。同期リセットは、サイクルベースのシミュレーターでの使用が簡単です。
2つの方法により、リセット信号をレジスターに届けることができます。1つはデータ入力とゲートで入力する方法、2つ目はLAB全体のコントロール信号 (synclr) を使用する方法です。最初の方法を使用する場合は、回路にゲート遅延が追加されるリスクを伴いリセット信号に対応します。よって、データ到着時間が長くなり、セットアップ・スラックに悪影響がおよびます。2番目の方法では、各レジスターに対するLAB内の専用配線に依存します。ただし、これは同じレジスターへの非同期リセットに比べて低速です。
次の例では、内部同期リセットに対して必要な変更を示しています。
外部同期リセットに対応するVerilog HDLコード
module sync_reset_ext ( input clock, input reset_n, input data_a, input data_b, output out_a, output out_b ); reg reg1, reg2 assign out_a = reg1; assign out_b = reg2; always @ (posedge clock) begin if (!reset_n) begin reg1 <= 1’b0; reg2 <= 1’b0; end else begin reg1 <= data_a; reg2 <= data_b; end end endmodule // sync_reset_ext
次の例は、外部同期リセットの制約を示しています。外部リセットは同期リセットであるため、-max および -min の set_input_delay 制約で reset_n 信号を通常の入力信号として制約するだけです。
外部同期リセットに向けたSDC制約
# Input clock - 100 MHz create_clock [get_ports {clock}] \ -name {clock} \ -period 10.0 \ -waveform {0.0 5.0} # Input constraints on low-active reset # and data set_input_delay 7.0 \ -max \ -clock [get_clocks {clock}] \ [get_ports {reset_n data_a data_b}] set_input_delay 1.0 \ -min \ -clock [get_clocks {clock}] \ [get_ports {reset_n data_a data_b}]
多くの場合、デバイスに入るリセットは非同期で、レジスターに送信される前に内部で同期する必要があります。
内部同期リセットに対応するVerilog HDLコード
module sync_reset ( input clock, input reset_n, input data_a, input data_b, output out_a, output out_b ); reg reg1, reg2 reg reg3, reg4 assign out_a = reg1; assign out_b = reg2; assign rst_n = reg4; always @ (posedge clock) begin if (!rst_n) begin reg1 <= 1’bo; reg2 <= 1’b0; end else begin reg1 <= data_a; reg2 <= data_b; end end always @ (posedge clock) begin reg3 <= reset_n; reg4 <= reg3; end endmodule // sync_reset
SDC制約は外部同期リセットに対する制約と類似していますが、入力リセットは非同期であるため制約できません。set_false_path ステートメントで入力パスを切断し、このようなパスが制約のないパスとみなされないようにします。
内部同期リセットに向けたSDC制約
# Input clock - 100 MHz create_clock [get_ports {clock}] \ -name {clock} \ -period 10.0 \ -waveform {0.0 5.0} # Input constraints on data set_input_delay 7.0 \ -max \ -clock [get_clocks {clock}] \ [get_ports {data_a data_b}] set_input_delay 1.0 \ -min \ -clock [get_clocks {clock}] \ [get_ports {data_a data_b}] # Cut the asynchronous reset input set_false_path \ -from [get_ports {reset_n}] \ -to [all_registers]
同期リセットの問題は、シンクロナイザーのフリップフロップへの非同期入力における短いパルス (1周期未満) に対する動作です。これは欠点になる場合があり、非同期リセットが最初のフリップフロップでキャプチャーされることを保証するには、少なくとも1周期幅のパルス幅が必要です。ただし、この回路ではノイズ耐性が高まるという点で、利点と考えることもできます。非同期入力での意図しないパルスは最初のフリップフロップでキャプチャーされる可能性が低くなるため、このパルスで同期リセットはトリガーされません。場合によっては、ノイズ耐性をさらに高めるために、幅が n 周期未満の非同期入力リセットを拒否することで、非同期入力リセットをデバウンスすることができます。