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:割り込みステータス
- bit[0]:タイムアウト(RW1C)
- Default: 1'b0
- bit[0]:タイムアウト(RW1C)
- 0x04:ステータス/コントロール
- bit[0]: Run(RW)
- 1'b0:Stop/1'b1:Run
- Default: 1'b0
- bit[0]: Run(RW)
- 0x08:カウンタ値
- bit[31:0]: 現在のカウンタ値(RW)
- Default: 32'hFFFF_FFFF
- bit[31:0]: 現在のカウンタ値(RW)
- 0x0C: デバッグ0
- bit[31:0]: 読み書き可能な意味のないレジスタ(RW)
- Default: 32'h0000_0000
- bit[31:0]: 読み書き可能な意味のないレジスタ(RW)
1.3. 機能
- [カウンタ値]にセットされたクロック数をカウントし,カウンタが0になったら割り込みをあげる
- [ステータス/コントロール]bit[0]の値がLEDに出力される
1.4. 制御方法
- [カウンタ値]にカウントしたいクロック数を書き込む
- [ステータス/コントロール]のbit[0]に1'b1を書き込み,カウントを開始する
- カウンタの値が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
- 以下の様になっていることを確認
Review and Package の Package IP をクリックすればIPの作成完了.
これ以降は,timer_project を開いているWindowでサブシステムの設計をしていく.
ZYBOで遊ぶ01:簡易タイマーIPの自作(2) - ThuruThuruToru’s blog に続く