パスにレジスタを追加して組み合わせロジックを複数のサイクルに分割することを「パイプライン処理」と呼びます。パイプライン処理すると、パイプライン パスにレイテンシが追加されるので、レジスタ間のパフォーマンスが向上します。パイプライン処理が機能するかどうかは、デザインのレイテンシ許容度によります。次の図に、RAMB36E1 から 2 つの LUT6 セルを介して FF に到達するクリティカル パスの回路図を示します。パイプライン段を追加すると、このクリティカル パスのタイミングを向上できます。これは、ネットリストを変更することにより達成できます。
図 1. パイプライン レジスタを追加する前の回路図
次の Tcl スクリプトは、2 つの LUT6 セルの間にパイプライン レジスタを追加します。このレジスタは、ロード レジスタと同じ制御信号を付けてインプリメントされます。
create_cell -reference [get_lib_cells -of [get_cells {wbOutputData_reg[29]}]] ECO_pipe_stage[29]
foreach control_pin {C CE R} {
connect_net -net [get_nets -of [get_pins wbOutputData_reg[29]/${control_pin}]] \
-objects [get_pins ECO_pipe_stage[29]/${control_pin}]
}
disconnect_net -objects \
{egressLoop[4].egressFifo/buffer_fifo/infer_fifo.block_ram_performance.fifo_ram_reg/DOBDO[ 29]}
create_net {egressLoop[4].egressFifo/buffer_fifo/ECO_pipe_stage[29]_in} connect_net -hierarchical -net
{egressLoop[4].egressFifo/buffer_fifo/ECO_pipe_stage[29]_in} -objects \ [list \
{ECO_pipe_stage[29]/D} \
{egressLoop[4].egressFifo/buffer_fifo/infer_fifo.block_ram_performance.fifo_ram_reg/DOBDO[ 29]}]
connect_net -hierarchical -net {egressLoop[4].egressFifo/buffer_fifo/dout2_in[29]}
-objects [list \ {ECO_pipe_stage[29]/Q}]
次の図に、論理ネットリストの変更が反映された回路図を示します。
図 2. パイプライン レジスタを追加した後の回路図
ネットリストを変更したら、論理的な変更を確定する必要があります。これには、place_design
および route_design
コマンドを使用します。