XGMIIインタフェース
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[ASAP Top]]
XGMIIはPMCのチップとのインタフェースを担うインタフェース。
これを使うにはDCMとODDR,ISERDES, OSERDESを活用する必要が...
ここにはそのヒントを書き残す。
参考ページをまず2つ。
[1] http://www.google.co.jp/url?sa=t&source=web&ct=res&c...
[2] http://www.google.co.jp/url?sa=t&source=web&ct=res&c...
([2]はI/Oパッドの仕組みとして 322と353ページも必見です)
出力の場合、送信クロックのエッジにデータが乗っている状態...
あらかじめDCMでシステムクロックに対して位相を90度ずらし...
-DCMの使い方
1. Core generator で生成する。
生成した.vファイルはそのまま合成にかけられるため、便利。
2. 自分でプリミティブを宣言して使う。
-ODDRの使い方
[2]の356ページ。
クロックの出力に使う。
156Mの信号を90度ずらして、ODDRのクロックに突っ込むとよい。
具体的には次の感じにする。
ODDR #(
.DDR_CLK_EDGE("SAME_EDGE"),
.INIT(1'd0), // FFの初期値
.SRTYPE("SYNC") // リセットの入力手法、SYNCの方が高い性...
) oddrPrimitive (
.Q( hoge0), // 出力信号
.C( hoge1), // 入力クロック
.CE( hoge2), // イネーブル信号
.D1(1'b1), //1!
.D2(1'b0), // 0!
.R( reset ), // Active High のリセット
.S( 1'b0)); // set signal , 基本的には 0 推奨
この出力の方法はプリミティブ名の違いはあれど、他のデバイ...
厳密にはこの後に hoge0 をOBUFプリミティブ(247ページ)に通...
-SERDESの使い方~
Virtex4以降SERDES( Serializer Deserializer)がサポートされ...
データの送信が以前に比べ楽になっている。
(以前はpararelのデータをいちいちODDR/IDDRを使ってシリアル...
まずはOSERDESの使い方について書く。
--OSERDES
[2]の380ページ以降参照
以下のようにプリミティブを使う。
OSERDES # (
.DATA_RATE_OQ("DDR"), // double clock edge
.DATA_RATE_TQ("DDR"), // double clock edge
.DATA_WIDTH(4), // データ幅を4に
.INIT_OQ(1'd0), // 初期値
.INIT_TQ(1'd0), // TQの初期値
.SERDES_MODE("MASTER"), // もし単一OSERDES...
.SRVAL_OQ(1'd0), // 謎です。初期値は0らし...
.SRVAL_TQ(1'd0), // 同じく謎。
.TRISTATE_WIDTH(4) // トライステートバッフ...
)
oserdesTest (
.CLK(CLK), // bit 幅4 なら CLK...
.CLKDIV(CLK_DIV), // 基本クロック
.D1(dataIn[0]),
.D2(dataIn[1]),
.D3(dataIn[2]),
.D4(dataIn[3]),
.D5(1'b0),
.D6(1'b0),
.OCE(1'b1), // クロックイネーブルず...
.REV(1'b0), // 謎。使わない?
.SHIFTIN1(1'b0), // SLAVEモードも合...
.SHIFTIN2(1'b0), // 同上
.SR( ~RST_), // Active High の非同期...
.TCE(1'b1), // トライステートバッフ...
.T1(1'b0),
.T2(1'b0),
.T3(1'b0),
.T4(1'b0),
.OQ(dataOut), // もし databit が4な...
.SHIFTOUT1(), // SLAVEモードも合わせ...
.SHIFTOUT2(), // 同上
.TQ() // もしOBUFにトライステートバ...
);
基本的に言うことはないす。
一回波形を追ってみるとこの挙動がわかりやすいかなぁと。
終了行:
[[ASAP Top]]
XGMIIはPMCのチップとのインタフェースを担うインタフェース。
これを使うにはDCMとODDR,ISERDES, OSERDESを活用する必要が...
ここにはそのヒントを書き残す。
参考ページをまず2つ。
[1] http://www.google.co.jp/url?sa=t&source=web&ct=res&c...
[2] http://www.google.co.jp/url?sa=t&source=web&ct=res&c...
([2]はI/Oパッドの仕組みとして 322と353ページも必見です)
出力の場合、送信クロックのエッジにデータが乗っている状態...
あらかじめDCMでシステムクロックに対して位相を90度ずらし...
-DCMの使い方
1. Core generator で生成する。
生成した.vファイルはそのまま合成にかけられるため、便利。
2. 自分でプリミティブを宣言して使う。
-ODDRの使い方
[2]の356ページ。
クロックの出力に使う。
156Mの信号を90度ずらして、ODDRのクロックに突っ込むとよい。
具体的には次の感じにする。
ODDR #(
.DDR_CLK_EDGE("SAME_EDGE"),
.INIT(1'd0), // FFの初期値
.SRTYPE("SYNC") // リセットの入力手法、SYNCの方が高い性...
) oddrPrimitive (
.Q( hoge0), // 出力信号
.C( hoge1), // 入力クロック
.CE( hoge2), // イネーブル信号
.D1(1'b1), //1!
.D2(1'b0), // 0!
.R( reset ), // Active High のリセット
.S( 1'b0)); // set signal , 基本的には 0 推奨
この出力の方法はプリミティブ名の違いはあれど、他のデバイ...
厳密にはこの後に hoge0 をOBUFプリミティブ(247ページ)に通...
-SERDESの使い方~
Virtex4以降SERDES( Serializer Deserializer)がサポートされ...
データの送信が以前に比べ楽になっている。
(以前はpararelのデータをいちいちODDR/IDDRを使ってシリアル...
まずはOSERDESの使い方について書く。
--OSERDES
[2]の380ページ以降参照
以下のようにプリミティブを使う。
OSERDES # (
.DATA_RATE_OQ("DDR"), // double clock edge
.DATA_RATE_TQ("DDR"), // double clock edge
.DATA_WIDTH(4), // データ幅を4に
.INIT_OQ(1'd0), // 初期値
.INIT_TQ(1'd0), // TQの初期値
.SERDES_MODE("MASTER"), // もし単一OSERDES...
.SRVAL_OQ(1'd0), // 謎です。初期値は0らし...
.SRVAL_TQ(1'd0), // 同じく謎。
.TRISTATE_WIDTH(4) // トライステートバッフ...
)
oserdesTest (
.CLK(CLK), // bit 幅4 なら CLK...
.CLKDIV(CLK_DIV), // 基本クロック
.D1(dataIn[0]),
.D2(dataIn[1]),
.D3(dataIn[2]),
.D4(dataIn[3]),
.D5(1'b0),
.D6(1'b0),
.OCE(1'b1), // クロックイネーブルず...
.REV(1'b0), // 謎。使わない?
.SHIFTIN1(1'b0), // SLAVEモードも合...
.SHIFTIN2(1'b0), // 同上
.SR( ~RST_), // Active High の非同期...
.TCE(1'b1), // トライステートバッフ...
.T1(1'b0),
.T2(1'b0),
.T3(1'b0),
.T4(1'b0),
.OQ(dataOut), // もし databit が4な...
.SHIFTOUT1(), // SLAVEモードも合わせ...
.SHIFTOUT2(), // 同上
.TQ() // もしOBUFにトライステートバ...
);
基本的に言うことはないす。
一回波形を追ってみるとこの挙動がわかりやすいかなぁと。
ページ名: