プリミティブ : Input SERial/DESerializer with bitslip
概要
7 シリーズ FPGA に含まれる ISERDESE2 は、高速ソース同期アプリケーションのインプリメンテーションに特化したクロッ クおよびロジック機能を持つ、専用シリアル/パラレル コンバーターです。 FPGA でデシリアライザーを設計する際の複 雑なタイミング問題を回避できます。 ISERDESE2 には、次の機能があります。
• 専用デシリアライザー、シリアル/パラレル コンバーター
ISERDESE2 デシリアライザーを使用すると、FPGA ファブリックが入力データ周波数に一致していなくても、高速 データ転送が可能になります。 このコンバーターでは、シングル データ レート (SDR) モードとダブル データ レート (DDR) モードがサポートされます。 SDR モードでは 2、3、4、5、6、7、または 8 ビット幅のパラレル ワードが作成さ れ、 DDR モードでは 4、6、8、10、または 14 ビット幅のパラレル ワードが作成されます。
• Bitslip サブモジュール
FPGA ファブリックに入力するパラレル データ ストリームのシーケンスを並べ替えます。 トレーニング パターンを含 むトレーニング ソース同期インターフェイスに使用できます。
• ストローブ ベース メモリ インターフェイスの専用サポート
ISERDESE2 には、ストローブから FPGA クロック ドメインへの切り替えを処理する専用回路 (OCLK 入力ピンを含 む) が含まれています。 これにより、パフォーマンスが向上し、インプリメンテーションが簡略化されます。
• ネットワーク インターフェイスの専用サポート
• メモリ インターフェイスの専用サポート
ポートの説明
ポート名 タイプ 幅 機能
BITSLIP 入力 1 BITSLIP ピンがアサートされると (アクティブ High)、CLKDIV に同期して ビットスリップ処理が実行されます。 ビットスリップ処理が実行されるごとに、
バレル シフタと同様、Q1 ~ Q8 出力ポートのデータが 1 ずつシフトします (DDR と SDR では動作が異なる)。
CE1、CE2 入力 1 各 ISERDESE2 ブロックには、入力クロック イネーブル モジュールが含まれ ています。 NUM_CE = 1 の場合、CE2 入力は使用されず、CE1 入力がアク ティブ High のクロック イネーブルとして ISERDESE2 の入力レジスタに直接 接続されます。 NUM_CE = 2 の場合、CE1 および CE2 入力の両方が使用 され、CLKDIV の半サイクル CE1 がイネーブルとして使用され、残りの半サ イクルは CE2 がイネーブルとして使用されます。 この場合、クロック イネー ブル モジュールは 2:1 シリアル/パラレル コンバーターとして使用され、
CLKDIV によりクロックが供給されます。 クロック イネーブル モジュール は、ISERDESE2 を DDR モードで 1:4 デシリアル化をコンフィギュレーション する際、双方向メモリ インターフェイスに必要です。 NUM_CE = 2 の場合、
クロック イネーブル モジュールがイネーブルになり、CE1 および CE2 ポー トの両方が使用できるようになります。 NUM_CE = 1 の場合は、CE1 のみが 使用可能で、通常のクロック イネーブルとして機能します。
CLK 入力 1 入力シリアル データ ストリームの入力に使用される高速クロック入力
CLKB 入力 1 入力シリアル データ ストリームの入力に使用される高速セカンダリ クロック
入力。 MEMORY_QDR 以外のモードでは、CLKB を CLK を反転したク ロックに接続します。 MEMORY_QDR モードでは、CLKB を固有の位相シ フトされたクロックに接続する必要があります。
CLKDIV 入力 1 分周クロック入力。通常は CLK を分周したクロックです (インプリメントされ たデシリアライザーの幅による)。 シリアル/パラレル コンバーターの出力、
Bitslip サブモジュール、および CE モジュールを駆動します。
CLKDIVP 入力 1 パラレル データに使用する分周クロック
D 入力 1 ISERDESE2 のシリアル (高速) データ入力ポート。 7 シリーズ FPGA の IOB リソースと使用した場合にのみ機能します。
DDLY 入力 1 ISERDESE2 のシリアル (高速) データ入力ポート。 7 シリーズ FPGA の IDELAYE2 リソースと使用した場合にのみ機能します。
DYNCLKDIVSEL 入力 1 CLKDIV の反転を動的に選択
DYNCLKSEL 入力 1 CLK、CLKB、および OCLK の反転を動的に選択
O 出力 1 組み合わせ出力。ISERDESE2 モジュールのレジスタを介さない出力で、
データ入力 (D) または IDELAYE2 を介したデータ入力 (DDLY) が直接 出力されます。
OCLK 入力 1 ストローブ ベース メモリ インターフェイスのデータ転送を同期化します。
INTERFACE_TYPE が MEMORY に設定されている場合にのみ使用さ れます。
OCLKB 入力 1 ストローブ ベース メモリ インターフェイスのデータ転送を同期化します。
INTERFACE_TYPE が MEMORY に設定されている場合にのみ使用さ れます。
OFB 入力 1 ISERDESE2 のシリアル (高速) データ入力ポート。 7 シリーズ FPGA の OSERDESE2 の OFB ポートと使用した場合にのみ機能します。
Q1 ~ Q8 出力 1 ISERDESE2 モジュールのレジスタ付き出力。 1 つの ISERDESE2 ブロックで
最大 8 ビット (1:8 デシリアル化) までサポートできます。 8 ビットより広い幅
(14 ビットまで) もサポート可能です。
ポート名 タイプ 幅 機能
RST 入力 1 CLK および CLKDIV ドメインのすべてのデータ フリップフロップの出力を非
同期で Low に駆動します。 ISERDESE2 回路が CLK ドメインで動作してお り、タイミングがクリティカルな場合は、内部専用回路を使用して RST 入力 のタイミングを調整し、CLK ドメインに同期したリセット信号を生成してくださ い。 同様に、CLKDIV ドメインに同期したリセット信号を生成する RST 入力 のタイミングを調整する専用回路があります。 ISERDESE2 は非同期でリセッ トされますが、クロックに同期してリセット状態から戻るので、CLKDIV ドメイ ンへの同期リセットとして扱い、CLKDIV の 1 サイクル以上パルスする必要 があります。 複数の ISERDESE2 ポートを含むインターフェイスを構築する場 合は、すべての ISERDESE2 ポートを同期化する必要があります。 RST 入 力の内部タイミングは、同じリセット パルスを受信するすべての ISERDESE2 ブロックがお互いに同期してリセット状態から戻るように調整されます。
SHIFTIN1/
SHIFTIN2
入力 1 ISERDES_MODE が "SLAVE" の場合は、マスターの SHIFTOUT1 と SHIFTOUT2 出力に接続します。 それ以外の場合は、これらのピンをグラ ンドに接続する必要があります。
SHIFTOUT1/
SHIFTOUT2
出力 1 ISERDES_MODE が "MASTER" に設定されており、2 つの ISERDESE2 をカスケード接続する場合は、スレーブの SHIFTIN1 と SHIFTIN2 入力 に接続します。
デザインの入力方法
インスタンシエーション 可
推論 不可
CORE Generator™ およびウィザード 不可
マクロのサポート 不可
使用可能な属性
属性 タイプ 値 デフォルト 説明
DATA_RATE 文字列 "DDR"、"SDR" "DDR" 入力データ ストリームをシングル データ レート (SDR) またはダブル データ レー ト (DDR) のいずれで処理するかを指定 します。
DATA_WIDTH 10 進数 4、2、3、5、6、7、8、10、
14
4 シリアル/パラレル コンバーターの幅を
指定します。 有効な値は、DATA_RATE 属性 (SDR または DDR) によって異なり ます。 設定可能な値は、 DATA_RATE が "DDR" の場合は 4、6、8、10、14、
DATA_RATE が "SDR" の場合は 2、3、
4、5、6、7、8 です。
DYN_CLK_INV_
EN 文字列 "FALSE"、"TRUE" "FALSE" "TRUE" の場合、DYNCLKINVSEL の 反転がイネーブルになり、CLK および CLKB ピンの HDL 反転がディスエーブ ルになります。
DYN_CLKDIV_
INV_EN 文字列 "FALSE"、"TRUE" "FALSE" "TRUE" の場合、DYNCLKDIVINVSEL の反転がイネーブルになり、CLKDIV ピ ンの HDL 反転がディスエーブルになり ます。
INIT_Q1 2 進数 1’b0 ~ 1’b1 1’b0 Q1 出力のコンフィギュレーション後の初
期値を指定します。
属性 タイプ 値 デフォルト 説明
INIT_Q2 2 進数 1’b0 ~ 1’b1 1’b0 Q2 出力のコンフィギュレーション後の初
期値を指定します。
INIT_Q3 2 進数 1’b0 ~ 1’b1 1’b0 Q3 出力のコンフィギュレーション後の初
期値を指定します。
INIT_Q4 2 進数 1’b0 ~ 1’b1 1’b0 Q4 出力のコンフィギュレーション後の初
期値を指定します。
INTERFACE_
TYPE 文字列 "MEMORY" 、
"MEMORY_DDR3"、
"MEMORY_QDR"、
"NETWORKING"、
"OVERSAMPLE"
"MEMORY" メモリ、ネットワーク、またはオーバーサン プリング インターフェイス タイプの使用モ デルを選択します。
IOBDELAY 文字列 "NONE"、"BOTH"、
"IBUF"、"IFD"
"NONE" ISERDES モジュールの入力ソースを指定 します。
NUM_CE 10 進数 2、1 2 クロック イネーブル数を指定します。
OFB_USED 文字列 "FALSE"、"TRUE" "FALSE" OLOGIC、OSERDES の OFB ピンから ISERDES の OFB ピンへのパスをイネー ブルにし、 D 入力ピンの使用をディス エーブルにします。
SERDES_MODE 文字列 "MASTER"、"SLAVE" "MASTER" データ幅を拡張する場合に ISERDESE2 モジュールがマスターかスレーブかを指 定します。
SRVAL_Q1 2 進数 1’b0 ~ 1’b1 1’b0 Q1 出力のセット/リセット値を指定します。
SRVAL_Q2 2 進数 1’b0 ~ 1’b1 1’b0 Q2 出力のセット/リセット値を指定します。
SRVAL_Q3 2 進数 1’b0 ~ 1’b1 1’b0 Q3 出力のセット/リセット値を指定します。
SRVAL_Q4 2 進数 1’b0 ~ 1’b1 1’b0 Q4 出力のセット/リセット値を指定します。
VHDL 記述 (インスタンシエーション)
次の 2 つの文が存在しない場合は、コピーしてエンティティ宣言の前に貼り付けます。
Library UNISIM;
use UNISIM.vcomponents.all;
-- ISERDESE2: Input SERial/DESerializer with bitslip
-- 7 Series
-- Xilinx HDL Libraries Guide, version 13.1 ISERDESE2_inst : ISERDESE2
generic map (
DATA_RATE => "DDR", -- "SDR" or "DDR"
DATA_WIDTH => 4, -- Parallel data width (2-8, 10, 14)
DYN_CLKDIV_INV_EN => "FALSE", -- Enable DYNCLKDIVINVSEL inversion (TRUE/FALSE) DYN_CLK_INV_EN => "FALSE", -- Enable DYNCLKINVSEL inversion (TRUE/FALSE) -- INIT_Q1 - INIT_Q4: Initial value on the Q outputs (0/1)
INIT_Q1 => ’0’, INIT_Q2 => ’0’, INIT_Q3 => ’0’, INIT_Q4 => ’0’,
INTERFACE_TYPE => "MEMORY", -- "MEMORY", "MEMORY_DDR3", "MEMORY_QDR", "NETWORKING", or "OVERSAMPLE"
IOBDELAY => "NONE", -- "NONE", "IBUF", "IFD", "BOTH"
NUM_CE => 2, -- Number of clock enables (1 or 2) OFB_USED => "FALSE", -- Select OFB path (TRUE/FALSE) SERDES_MODE => "MASTER", -- "MASTER" or "SLAVE"
-- SRVAL_Q1 - SRVAL_Q4: Q output values when SR is used (0/1) SRVAL_Q1 => ’0’,
SRVAL_Q2 => ’0’, SRVAL_Q3 => ’0’, SRVAL_Q4 => ’0’
)
port map (
O => O, -- 1-bit output: Combinatorial output -- Q1 - Q8: 1-bit (each) output: Registered data outputs
Q1 => Q1, Q2 => Q2, Q3 => Q3, Q4 => Q4, Q5 => Q5, Q6 => Q6, Q7 => Q7, Q8 => Q8,
-- SHIFTOUT1-SHIFTOUT2: 1-bit (each) output: Data width expansion output ports SHIFTOUT1 => SHIFTOUT1,
SHIFTOUT2 => SHIFTOUT2,
BITSLIP => BITSLIP, -- 1-bit input: The BITSLIP pin performs a Bitslip operation synchronous to -- CLKDIV when asserted (active High). Subsequently, the data seen on the -- Q1 to Q8 output ports will shift, as in a barrel-shifter operation, one -- position every time Bitslip is invoked (DDR operation is different from -- SDR).
-- CE1, CE2: 1-bit (each) input: Data register clock enable inputs CE1 => CE1,
CE2 => CE2,
CLKDIVP => CLKDIVP, -- 1-bit input: TBD
-- Clocks: 1-bit (each) input: ISERDESE2 clock input ports
CLK => CLK, -- 1-bit input: High-speed clock input
CLKB => CLKB, -- 1-bit input: High-speed secondary clock input CLKDIV => CLKDIV, -- 1-bit input: Divided clock input
OCLK => OCLK, -- 1-bit input: High speed output clock input used when -- INTERFACE_TYPE="MEMORY"
-- Dynamic Clock Inversions: 1-bit (each) input: Dynamic clock inversion pins to switch clock polarity DYNCLKDIVSEL => DYNCLKDIVSEL, -- 1-bit input: Dynamic CLKDIV inversion input
DYNCLKSEL => DYNCLKSEL, -- 1-bit input: Dynamic CLK/CLKB inversion input -- Input Data: 1-bit (each) input: ISERDESE2 data input ports
D => D, -- 1-bit input: Data input
DDLY => DDLY, -- 1-bit input: Serial input data from IDELAYE2 OFB => OFB, -- 1-bit input: Data feedback input from OSERDESE2
OCLKB => OCLKB, -- 1-bit input: High speed negative edge output clock input RST => RST, -- 1-bit input: Active high asynchronous reset input -- SHIFTIN1-SHIFTIN2: 1-bit (each) input: Data width expansion input ports
SHIFTIN1 => SHIFTIN1, SHIFTIN2 => SHIFTIN2 );
-- End of ISERDESE2_inst instantiation
Verilog 記述 (インスタンシエーション)
// ISERDESE2: Input SERial/DESerializer with bitslip
// 7 Series
// Xilinx HDL Libraries Guide, version 13.1 ISERDESE2 #(
.DATA_RATE("DDR"), // "SDR" or "DDR"
.DATA_WIDTH(4), // Parallel data width (2-8, 10, 14)
.DYN_CLKDIV_INV_EN("FALSE"), // Enable DYNCLKDIVINVSEL inversion (TRUE/FALSE) .DYN_CLK_INV_EN("FALSE"), // Enable DYNCLKINVSEL inversion (TRUE/FALSE) // INIT_Q1 - INIT_Q4: Initial value on the Q outputs (0/1)
.INIT_Q1(1’b0), .INIT_Q2(1’b0), .INIT_Q3(1’b0), .INIT_Q4(1’b0),
.INTERFACE_TYPE("MEMORY"), // "MEMORY", "MEMORY_DDR3", "MEMORY_QDR", "NETWORKING", or "OVERSAMPLE"
.IOBDELAY("NONE"), // "NONE", "IBUF", "IFD", "BOTH"
.NUM_CE(2), // Number of clock enables (1 or 2) .OFB_USED("FALSE"), // Select OFB path (TRUE/FALSE)
.SERDES_MODE("MASTER"), // "MASTER" or "SLAVE"
// SRVAL_Q1 - SRVAL_Q4: Q output values when SR is used (0/1) .SRVAL_Q1(1’b0),
.SRVAL_Q2(1’b0), .SRVAL_Q3(1’b0), .SRVAL_Q4(1’b0) )
ISERDESE2_inst (
.O(O), // 1-bit output: Combinatorial output
// Q1 - Q8: 1-bit (each) output: Registered data outputs .Q1(Q1),
.Q2(Q2), .Q3(Q3), .Q4(Q4), .Q5(Q5), .Q6(Q6), .Q7(Q7), .Q8(Q8),
// SHIFTOUT1-SHIFTOUT2: 1-bit (each) output: Data width expansion output ports .SHIFTOUT1(SHIFTOUT1),
.SHIFTOUT2(SHIFTOUT2),
.BITSLIP(BITSLIP), // 1-bit input: The BITSLIP pin performs a Bitslip operation synchronous to // CLKDIV when asserted (active High). Subsequently, the data seen on the Q1 // to Q8 output ports will shift, as in a barrel-shifter operation, one // position every time Bitslip is invoked (DDR operation is different from // SDR).
// CE1, CE2: 1-bit (each) input: Data register clock enable inputs .CE1(CE1),
.CE2(CE2),
.CLKDIVP(CLKDIVP), // 1-bit input: TBD
// Clocks: 1-bit (each) input: ISERDESE2 clock input ports
.CLK(CLK), // 1-bit input: High-speed clock input
.CLKB(CLKB), // 1-bit input: High-speed secondary clock input .CLKDIV(CLKDIV), // 1-bit input: Divided clock input
.OCLK(OCLK), // 1-bit input: High speed output clock input used when // INTERFACE_TYPE="MEMORY"
// Dynamic Clock Inversions: 1-bit (each) input: Dynamic clock inversion pins to switch clock polarity .DYNCLKDIVSEL(DYNCLKDIVSEL), // 1-bit input: Dynamic CLKDIV inversion input
.DYNCLKSEL(DYNCLKSEL), // 1-bit input: Dynamic CLK/CLKB inversion input // Input Data: 1-bit (each) input: ISERDESE2 data input ports
.D(D), // 1-bit input: Data input
.DDLY(DDLY), // 1-bit input: Serial input data from IDELAYE2 .OFB(OFB), // 1-bit input: Data feedback input from OSERDESE2
.OCLKB(OCLKB), // 1-bit input: High speed negative edge output clock input .RST(RST), // 1-bit input: Active high asynchronous reset input // SHIFTIN1-SHIFTIN2: 1-bit (each) input: Data width expansion input ports .SHIFTIN1(SHIFTIN1),
.SHIFTIN2(SHIFTIN2) );
// End of ISERDESE2_inst instantiation