このドキュメントの新しいバージョンが利用できます。お客様は次のことを行ってください。 こちらをクリック 最新バージョンに移行する。
2.4.1.1. 同期デザインを使用する
互いに同期するクロックはリセット信号を起動してラッチするため、適切なスラック分析のためにデータ到着時間とデータ所要時間を簡単に決定できます。同期リセットは、サイクルベースのシミュレータで使用する方が簡単です。
リセット信号がレジスターに到達する方法は2つあります。データ入力でゲートインするか、LABワイドの制御信号( synclr )を使用します。最初の方法を使用する場合、リセット信号に対応するために回路にゲート遅延を追加するリスクがあります。これにより、データ到着時間が長くなり、セットアップスラックに悪影響を及ぼします。 2番目の方法は、LAB内の各レジスターへの専用ルーティングに依存していますが、これは同じレジスターへの非同期リセットよりも低速です。
次の例は、内部同期リセットに対して行う必要のある変更を示しています。
Verilog HDL Code for Externally Synchronized Reset
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 Constraints for Externally Synchronized Reset
# 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 Code for Internally Synchronized Reset
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 Constraints for Internally Synchronized Reset
# 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周期幅未満の非同期入力リセットを拒否して、非同期入力リセットをデバウンスすることができます。