Skip to content
Snippets Groups Projects
README.md 13.4 KiB
Newer Older
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
# kc705-gtx-demo-2022

Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
目的:Vivadoの使い方になれるのをFixed Latencyトランシーバー実装を通じて行う。Fixed Latencyでのトランシーバーの実装の仕方を学ぶ。
また、IP Core GeneratorでつくってフラットなHDLコードで実装する技術はこの例のユニークなところで、その技術も学ぶ。
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
(広く配布を意図したものではなく、間違いがあった時などに責任をもつものではないですので、ご了承ください。)
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed

## 参考資料
- KC705 ユーザーズ・ガイド:[ug810_KC705_Eval_Bd.pdf](/uploads/33f3eaa6904d1b14a28ecd439b3b391f/ug810_KC705_Eval_Bd.pdf)
- KC705 回路図:[kc705_Schematic_xtp132_rev1_1.pdf](/uploads/0a432d78b91315dff3471c73a4bc11ac/kc705_Schematic_xtp132_rev1_1.pdf)
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
- 図表 [transceiver_lecture.pdf](/uploads/2767f29298dfaf26648223d8d57e0ef6/transceiver_lecture.pdf)
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
- 青木くん(東大博士課程学生)のATLS Phase-2 Upgarade 会合での発表資料 (https://indico.cern.ch/event/1020010/contributions/4304939/attachments/2221347/3761830/aoki_20210407_FixedLatency.pdf) (protected)
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
- YouTube動画(その1) https://www.youtube.com/watch?v=l3EDor-2qt0 (最初はGTトランシーバー一般についてのまとめ、その後に、作業を実演。51:47分頃より)
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
- YouTube動画(その2) https://www.youtube.com/watch?v=i39lgt6y_pY

Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
## すでに準備されたものをとりあえず使ってみたい人向け
- \# 2020.1 の vivado をセットアップ
- cd kc705-transceiver-fixed-latency-test/
- cd projects
- vivado -source project_1/project_1.tcl
- \# あとは立ち上がったプロジェクトでcompileなりsimulationなりをやってみてください。
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
## スクラッチから作って実験をする (動画)

Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
実演開始箇所への直リンク: https://youtu.be/l3EDor-2qt0?t=3107
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
やる手順:
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
1. IP Core Generator で GT transceiver を作って example design をつくる。
2. Example designは閉じたループバックの試験になっているので、自分のprojectにインテグレートするような形になっていないので、若干の修正をする。
3. 必要なファイルをリストする。IPコアとして使うわけではなく、すっぴんのHDLコードを全部抜き出すというのが味噌なので注意。
4. 自分のプロジェクトをつくって、integrateする。
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
5. 作ったビットファイルを download して正常動作を実機で確認する。
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed

### テストファームウェアのデザイン
- KC705 ユーザーズ・ガイド:[ug810_KC705_Eval_Bd.pdf](/uploads/33f3eaa6904d1b14a28ecd439b3b391f/ug810_KC705_Eval_Bd.pdf)参照
- トランシーバーの設定
   - BANK117 MGTREFCLK0 (125MHz clock)
   - BANK117 (0から数えて2channel目) X0Y10 (SFP+に接続している) 
- SYSTEM clock
   - SYSCLK 200 MHz を transceiver reference clock とは独立なクロックとして使う
   - 200 は "DFP クロック"としては選べないので、60MHzとしておく (後で追加するトップモジュールで200->60に分周する部分を含む)

Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
### 1: IP Core Generator の Transceiver Wizard 機能を使って GT トランシーバーのコアを作る
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
- 動画時間指定リンク: https://youtu.be/l3EDor-2qt0?t=3107
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
- 'Manage IP' 機能から GT transceiver のコアを作る
   - 適切な directory にいって Vivado 起動
   - `Manage IP` -> `New IP Location`
   - `Manage IP Settings` で以下を設定してIP作成プロジェクトを生成
      - Part: `xc7k325tffg900-2`
      - Target Language: `VHDL`
      - Target Simulator: `Vivado Simulator`
      - Simulator Language: `Mixed`
      - IP location: `適切にディレクトリパスを記述(適切なディレクトリでvivadoを実行したならデフォルトで適切なパスがはいっていると思う)`
   - `Transceiver Wizard` でGTトランシーバーのコアを作成
      - `Search`で、`Transceiver`を検索し、その中で`7 Series FPGA Transceiver`を選択
      - 名前は`gtwizard_0`のままでokay
      - GT Selection タブ
         - GT Type: `GTX` (強制的に選択)
         - Shared Logic: `Include Shared Logic in example design` (selected by default)
      - Line Rate, RefClk Selection タブ
          - Protocol: `Start from scratch`
          - TX
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
              - Line Rate `3.125` Gbps (本当は`125x40=5Gbps`がよいデモなのですが、ちょっと練習でなぜかうまくいっていないので、デバッグする時間もないのでとりあえず今回のデモはこの実績があるこちらで。)
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
              - Reference Clock `125` MHz
          - RX (TXと同じ設定)
          - PLL Selection:
              - TX `CPLL` 
              - RX `CPLL`
          - 左のマップで使うGT channelの選択
              - X0Y0のGTXの選択を解除 ([] User GTX 0Y0 というチェックボックスをuncheckする)
              - X0Y10のGTXを選択
                  - TX Clock Source `REFCLK0 Q2`
                  - RX Clock Source `REFCLK0 Q2` (強制的に選択)
              - 他のチャンネルは選択ていないことを確認 
      - Encoding and Clocking タブ
          - TX 
              - External Data Width `32` Bits
              - Encoding `8B10B`
              - Internal Data Width `40` Bits
          - RX (TXと同じ設定)
          - DRP/System Clock Frequency `60` MHz (defaultのまま修正せず)
          - Optional Port `RXCHARISK` のみ強制的にチェックされている状態。その他はdefaultのまま修正せず
          - Synchronization and Clocking
              - Enable TX Buffer [Checked] (defaultのまま修正せず)
              - TXUSRCLK Source [TXOUTCLK] (強制的に選択)
              - TXOUCTLK Source: Use TXPLLREFCLK [Unchecked] (defaultのまま修正せず)
              - Enable RX Buffer [Checked] (defaultのまま修正せず)
              - RX Buffer Bypass Mode [Auto] (強制的に選択)
              - RXUSRCLK Source [RXOUTCLK] (修正)
              - RXOUCTLK Source: Use RXPLLREFCLK [Unchecked] (defaultのまま修正せず)
          - Optional Ports: RXPMARESETのみが強制的にチェックされている状態。defaultのまま修正せず。
      - Comma Alignment and Equalizationタブ
          - RXCOMMA detection: 
          - Use comma detectionが強制的にチェックされている状態          
              - Comma Value: `K28.5` (default)
              - Comma Mask: `11111111` (default) 
              - Decode valid comma only `unchecked` (default)
              - Align to: `Four Byte Boundaries` (修正特に意味はないと思っているけど、一応こっちにしておきます)
              - Combine plus/minus commas `unchecke` (default)`
          - Optional Ports:
              - RXSLIDE [checked] = 必須 (defaultでついている)
              - RXBYTEISALIGN [checked] (必須ではないけど、今回のデモではモニターのために enable しましょう。)
              - RXBYTEREALIGN [checked] (必須ではないけど、今回のデモではモニターのために enable しましょう。)
              - RXCOMMADET [checked] (必須ではないけど、今回のデモではモニターのために enable しましょう。)
          - Termination and Equalization 
              - Differential Swing and Emphasis Mode: `Custom`
              - RX Equalization: Mode: `LPM-Auto`
              - Automatic Gain Control: `Auto`
              - RX Termination:Voltage: `Programmable`
              - Trim Value: `800` mV
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
              - Optional Ports: RXDFELPMRESETだけ強制的にチェックがかかっている状態、その他はdefaultのまま修正せず。
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
      - PCIe, SATA, PRBS タブ [No change]
      - CB and CC Sequence [No change]
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
   - [OK] => Generate ("out of context per IP", "On local host" で Generate) 
   - Design Runs のタブで Out-of-Context Module Runs をモニターして `gtwizard_0_synth_1` が完了するのをまつ (終わったら右下に `Run Successfully Completed` とでてくる) 
   - Generate が完了するのをまって、`Open example design` (右クリックででてくる)。 exampleデザインを展開するディレクトリを決めて作成。
   - 新しいProjectのGUIが立ち上がるので、それを放置して次の手続きへいく。
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
### 2: Example designを修正する。
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
- 動画時間指定リンク:https://youtu.be/l3EDor-2qt0?t=4865 /
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
- example designを修正
   - gtwizard でできた example design の以下のファイルを編集 (不要な部分を消して、そとに信号を出すようにする & fixed latency のためのパラメタの変更)
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
      - `gtwizard_0_ex/gtwizard_0_ex.srcs/sources_1/ip/gtwizard_0/gtwizard_0_gt.vhd` (https://gitlab.cern.ch/okumura/kc705-gtx-demo-2022/-/blob/master/gtwizard_0/gtwizard_0_gt.vhd.diff) 
      - `gtwizard_0_ex/gtwizard_0_ex.srcs/sources_1/imports/example_design/gtwizard_0_exdes.vhd` (https://gitlab.cern.ch/okumura/kc705-gtx-demo-2022/-/blob/master/gtwizard_0/gtwizard_0_exdes.vhd.diff)
      - '.diff' の拡張子がついたファイルは、emacs でみるとうまく色がついてくれてよいです。
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
   - 編集後、syntax error がないことは vivado project 中で確認
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
   - 不要なモジュール/data fileを project から削除 (simulationの用のソースも消しておくと、わかりやすくなって良いと思います。)
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
### 3: Example designからファイルをリストする
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
- 動画時間指定リンク:https://youtu.be/l3EDor-2qt0?t=6191
(補足:最初にリストしたファイルには一つ足りないものがあったことをあとのパートで気がつきました。気がつく部分はこちら https://youtu.be/l3EDor-2qt0?t=7796 )
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
- その上で、tclスクリプトを作成  `File` -> `Project` -> `Write Tcl`
- tcl ファイル内をみて add fileすべきファイルをリストする。これらが自分のプロジェクトにインテグレートしたいファイル。
   - sources_1/imports/example_design/support/gtwizard_0_common.vhd
   - sources_1/imports/example_design/support/gtwizard_0_common_reset.vhd 
   - sources_1/imports/example_design/support/gtwizard_0_gt_usrclk_source.vhd
   - sources_1/imports/example_design/support/gtwizard_0_support.vhd                    
   - sources_1/imports/example_design/gtwizard_0_exdes.vhd
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
   - constrs_1/imports/example_design/gtwizard_0_exdes.xdc (これについては、実は全部自分のプロジェクトのトップに移動させているので、本質的には不要です。) (https://gitlab.cern.ch/okumura/kc705-gtx-demo-2022/-/blob/master/constrs/gtwizard_0_exdes.xdc.diff)
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
- 一方、xci はこの場合は使いません。xciの中で "手で修正をする必要がある"ためです。 **sources_1/ip/gtwizard_0/gtwizard_0.xci はインテグレートしません**。
   - xci でできあいのIPとして組み込む代わりに、すべての必要な記述がはいっているコードを xci の代わりにインテグレートします。
   - 逆に、そのまま使える場合はこのxciを組み込めばよいです。
- xciの代わりに組み込むフラットなHDLコードをリストしますgtwizard_0_ex.srcs/sources_1/ip/gtwizard_0/gtwizard_0.xml と、GUI中でみることができるツリーを参考にしながら足すファイルを決めます。   
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
   - stubというファイルは不要- simというファイルも不要HDLのコードと制約ファイルを vhd, v, xdc (**xdcファイルも組み込みが必要なので注意**) ファイルを注意してリストします。
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
   - `gtwizard_0_ex/gtwizard_0_ex.srcs/sources_1/ip/gtwizard_0/`内のファイル
   - `gtwizard_0_ex/gtwizard_0_ex.srcs/sources_1/ip/gtwizard_0/gtwizard_0/example_design/`内のファイル
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
### 4: 自分のプロジェクトをつくって、integrateする。
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
- 動画時間指定リンク:https://youtu.be/l3EDor-2qt0?t=7036
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
- `mkdir constrs gtwizard_0 sources simulations projects` で準備
- 別で準備してあった top module 等 HDL ファイルを sources に追加 (git からとってくる)
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
- 別で準備してあった top module 用の xdc ファイルを constrs に追加 (exampleコードのトップのxdcから情報をmigrateしているのでよく注意する)
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
- gtwizard_0 に上で作ったファイルを追加
- 制約ファイルを準備する。gtwizard_0に先程作ったトランシーバーまわりのファイル群を置くconstrs に gtwizard_0.xdc と、gtwizard_0_exdes.xdc をもってくる。example design の top モジュールの xdc であった gtwizard_0_exdes.xdc については、別で準備した kc705_top.xdc にマージするため全部コメントアウトしてある。
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
- 別で準備してあった simulation 用のテストベンチファイルを simulations に追加
- `cd projects` をして `mkdir project_1; cd project_1` そこで、vivado をたちあげて、新しい projects をvivadoでつくる。`xc7k325tffg900-2`がパーツ番号。
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
### 5. 作ったビットファイルをKC705実機にダウンロードして正常動作を確認する
- 動画リンク:https://youtu.be/i39lgt6y_pY
- bitstreamをHardware managerでダウンロードする。
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
- LEDが光るのをみる。(LED0, 1, 2, 3, 4 が点灯状態)、LED5, 6, 7がカウントアップで動作
Yasuyuki Okumura's avatar
Yasuyuki Okumura committed
- TX comma pulseとRX comma pulseの間がfixed latencyとなっていることを確認する。(パルス幅は12.8ns, パルス間隔は12.8nsx8words=102.4ns。これがこうなることは手で計算をしてみてください。)