ZYBOで遊ぶ01:簡易タイマーIPの自作(1)

ZYBOで遊んだメモ

ZYBOで遊ぶ01:簡易タイマーIPの自作(1) - ThuruThuruToru’s blog
ZYBOで遊ぶ01:簡易タイマーIPの自作(2) - ThuruThuruToru’s blog
ZYBOで遊ぶ01:簡易タイマーIPの自作(3) - ThuruThuruToru’s blog
ZYBOで遊ぶ01:簡易タイマーIPの自作(4) - ThuruThuruToru’s blog



OS: Ubuntu 12.04.5 LTS(32bit)
Vivado: v2014.4

やること

Vivadoの使い方の練習として,簡単なタイマーIPを作成する.

Xilinx SDKを使い,作成したタイマーを制御するコードを書く.
自作したIPの制御レジスタにPS部からアクセスする方法と,PL部からの割り込みを処理する方法を身につける.

1. 作成するタイマーの仕様

1.1. 入出力

  • AXI4-Lite(slave) IF
  • 1bitの割り込み出力
  • LEDにつなぐ1bitの出力

1.2. 制御レジスタ

  • 0x00:割り込みステータス
  • 0x04:ステータス/コントロール
    • bit[0]: Run(RW)
      • 1'b0:Stop/1'b1:Run
      • Default: 1'b0
  • 0x08:カウンタ値
    • bit[31:0]: 現在のカウンタ値(RW)
      • Default: 32'hFFFF_FFFF
  • 0x0C: デバッグ0
    • bit[31:0]: 読み書き可能な意味のないレジスタ(RW)
      • Default: 32'h0000_0000

1.3. 機能

  • [カウンタ値]にセットされたクロック数をカウントし,カウンタが0になったら割り込みをあげる
  • [ステータス/コントロール]bit[0]の値がLEDに出力される

1.4. 制御方法

  1. [カウンタ値]にカウントしたいクロック数を書き込む
  2. [ステータス/コントロール]のbit[0]に1'b1を書き込み,カウントを開始する
  3. カウンタの値が0になると割り込みがあがりカウントが止まるので,[割り込みステータス]bit[0]を1 Clearする
    • カウンタ値は前回Runを開始した値にリセットされるので,前回と同じ値をカウントしたい場合は手順2から実行すれば良い

2. Vivado プロジェクトを作る

Vivadoを起動してプロジェクトを作る

  • Create New Project
    • Project name: timer_project
    • Project Type:RTL Project
    • Source, IP, constraintは何も追加しない
    • Default Part: xc7z010clg400-1

3. タイマーIPを自作する

3.1. IPを新規作成する

toolバーの Edit->Create and Package New IP をクリック

  • Create a new AXI4 peripheralを選択
  • Peripheral Details
    • Name: myTimer
    • Description: My new AXI Timer IP
  • Add Interfaces
    • Enable Interrupt Supportはチェックしない
    • Name: S00_AXI_LITE
    • Data Width: 32Bits
    • Number of Registers: 4
  • Create Peripheral
    • Edit IPにチェック

3.2. 生成されたソースを修正する

生成された myTimer_v1_0_S00_AXI_LITE.v と myTimer_v1_0.v を仕様に合わせて修正する.

ざっくり以下の修正をする.

  • 出力ポートに interrupt, led を追加
  • 制御レジスタ slv_reg0~3 の処理を修正

追加する入出力信号は,「Users to add ports here」というコメントの下に書かないとIPのGUI表示がうまくいかないので注意する.

3.3. Package IP

左側に表示されているProject Manager -> Package IPをクリックし,表示された「Package IP - myTimer」タブ内のフォームを埋めていく

  • Identification
    • Vendor等を好きなように埋める
  • Compatibility
    • Life Cycle を自分の好きなステータスに変える
  • File Groups
    • ここにDriver等を追加できるようだけど,今回はいじらない
  • Customization Parameters
    • 「managed ~」 ていうのが上部に表示されていたらクリック
  • Ports and Interfaces
    • ソースコードに追加した interrupt, led が表示されていることを確認
  • Customization GUI
    • 以下の様になっていることを確認 f:id:ThuruThuruToru:20151031215007p:plain

Review and Package の Package IP をクリックすればIPの作成完了.

これ以降は,timer_project を開いているWindowでサブシステムの設計をしていく.

ZYBOで遊ぶ01:簡易タイマーIPの自作(2) - ThuruThuruToru’s blog に続く