FC2カウンター FPGAの部屋 AX4 Lite Slave IPの作製
fc2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

キャラクタROMをAXI4 Lite Slave として実装する4(UARTをXPSプロジェクトに追加する)

キャラクタROMをAXI4 Lite Slave として実装する3(IPをXPSプロジェクトに追加する)”の続き。

今回は、前回XPSプロジェクトに追加したキャラクタROMをAXI4 Liteバスに接続するIPをテストするために、UARTをXPSプロジェクトに追加しようと思う。こうすることで、TeraTermでアドレスを入力したらキャラクタコードを返すアプリが作れるはずだ。

・IP Catalog のCommunication Low-Speed -> AXI UART(Lite) の右クリックメニューからAdd IPを選択した。
AXI_Lite_Slave_17_120612.png

・Add IP Instance to Desgin ダイアログが出る。Yesボタンをクリックした。
AXI_Lite_Slave_18_120612.png

・XPS Core Config ダイアログが出た。Userタブはビットレートの設定だった。これはこのままとした。
AXI_Lite_Slave_19_120612.png

・XPS Core Config ダイアログのSystemタブの設定項目を示す。
AXI_Lite_Slave_20_120612.png

・XPS Core Config ダイアログのInterconnect Settings for BUSIFタブの設定項目を示す。結局デフォルトのままOKボタンをクリックした。
AXI_Lite_Slave_21_120612.png

・Instantiate and Connect IPダイアログが出るので、OKボタンをクリックした。microblaze_0 のAXI4 Liteバスに接続する。
AXI_Lite_Slave_22_120612.png

・XPSプロジェクトでaxi_uartlite_0 が追加された。Bus Interfaceタブではmicroblaze_0 のAXI4 Liteバスに接続されていた。
AXI_Lite_Slave_23_120612.png

・Portsタブをクリックした。ここでは、axi_uartlite_0 のInterrupt が未接続だったので、これを接続する。Interrupt の空いているピンクの四角の部分をダブルクリックすると、Interrupt Connection Dialog が出てくる。Unconnected Interrupt(s) のaxi_uartlite_0 を選択して、→をクリックすると、axi_uartlite_0 がConnected Inerrruput に移動した。これでaxi_uartlite_0 Interrupt が割り込みコントローラに接続できたので、Interrupt Connection Dialog をOKボタンで閉じる。
AXI_Lite_Slave_24_120612.png

・axi_uartlite_0 のInterrupt がmicroblaze_0_intc::Intr に接続された。
AXI_Lite_Slave_25_120612.png

・axi_uartlite_0 の外部入出力ピンの設定だが、すでにaxi_uartlite_0_RX_pin とaxi_uartlite_0_TX_pin がExternal Ports に接続されていた。
AXI_Lite_Slave_26_120612.png

・Addressesタブをクリックした。ここでもaxi_uartlite_0 に64Kバイトのアドレス空間が割り当てられ、0x40600000 というアドレスが割り当てられていた。
AXI_Lite_Slave_27_120612.png

・Hardware メニューからGenerate Netlist を選択して論理合成し、char_rom_axi_lite のVerilogのバグを取った。

・ProjectメニューからDesign Rule Check を選択した。エラーは無かった。
AXI_Lite_Slave_28_120612.png

・最後に、ProjectメニューからClear All Generated Files を行った。これをしておかないとPlanAheadに戻った時にエラーになることがある。

・XPSを終了し、PlanAheadに戻った。次にすることは、UARTのTX, RXポートが増えているので、トップファイルの作りなおしと、制約ファイルにUARTのTX, RXポートの制約を書くことだ。

XPSにおけるUARTの追加は、ほとんど自動化されていて、Interrupt の追加だけは自分でやったが、他は自動で接続された。結構便利だと思う。
  1. 2012年06月13日 05:50 |
  2. AX4 Lite Slave IPの作製
  3. | トラックバック:0
  4. | コメント:0

キャラクタROMをAXI4 Lite Slave として実装する3(IPをXPSプロジェクトに追加する)

キャラクタROMをAXI4 Lite Slave として実装する2(AXI4 Lite バスの勉強2)”の続き。

前回、AXI4 Liteバスのプロトコルを検討したので、実際にVerilog でキャラクタROMをAXI4 Liteバスに接続するIPを作ってみた。ファイル名は char_rom_axi_lite.v とした。使用するPlanAheadプロジェクトは、”XPS入りのPlanAhead14.1プロジェクトを作る1(プロジェクトの生成)”、”XPS入りのPlanAhead14.1プロジェクトを作る2(XPSの設定、インプリメント)”、”XPS入りのPlanAhead14.1プロジェクトを作る3(SDK)”で新規作成したXPSプロジェクト入りのPlanAheadプロジェクトを使用する。(PlanAhead14.1を使用している)

・”12.3 EDK、12.3 ISE - カスタム AXI IP コアの作成方法”に書いてあるar37425.zipをダウンロードした。

・ar37425\axi_lite_slave_v1_00_a フォルダをAtlys_EDK_test_PA\Atlys_EDK_test_PA.srcs\sources_1\edk\system\pcores にコピーした。

・フォルダ名をaxi_lite_slave_v1_00_a から char_rom_axi_lite_v1_00_a に変更した。

・Atlys_EDK_test_PA\Atlys_EDK_test_PA.srcs\sources_1\edk\system\pcores\char_rom_axi_lite_v1_00_a\data の下のファイル名を下図のように変更した。
AXI_Lite_Slave_5_120611.png

・char_rom_axi_lite_v2_1_0.mpd のBEGIN からの行を下のように変更した。

BEGIN char_rom_axi_lite

## Peripheral Options
OPTION IPTYPE = PERIPHERAL
OPTION IMP_NETLIST = TRUE
OPTION STYLE = HDL
OPTION DESC = CharROM AXI Lite Slave
OPTION LONG_DESC = Character ROM AXI4-Lite Slave
OPTION HDL = MIXED
OPTION RUN_NGCBUILD = FALSE


・char_rom_axi_lite_v2_1_0.pao の内容を下の2行に書き換えた。(コメントは残してあります)
lib char_rom_axi_lite_v1_00_a char_gen_rom.v verilog
lib char_rom_axi_lite_v1_00_a char_rom_axi_lite.v verilog

・PlanAheadプロジェクトを立ちあげて、XPSプロジェクトを起動した。まだ、IP Catalog のProject Local PCores -> USER にはCharROM AXI Lite Slave がエントリされていない。
AXI_Lite_Slave_6_120611.png

・XPSのProject メニューからRescan User Repositories を実行した。

・IP Catalog のProject Local PCores -> USER にCharROM AXI Lite Slave がエントリされた。
AXI_Lite_Slave_7_120611.png

・CharROM AXI Lite Slave を右クリックしてAdd IPした。

・Add IP Instance to Desgin ダイアログが出る。Yesボタンをクリックした。
AXI_Lite_Slave_8_120611.png

・XPS Core Config ダイアログが出るが壊れている。Cancelボタンをクリックした。
AXI_Lite_Slave_9_120611.png

やはり壊れていた。前にも”キャラクタ・ディスプレイ・コントローラをAXI4スレーブにする9(インプリメント1)”で XPS Core Config ダイアログが壊れていたが、C_USE_ADVANCED_PORTS のENTITYを追加した覚えがある。

ウィザードが先に進むので進めてからCharROM AXI Lite Slave を削除することにする。

・Instantiate and Connect IPダイアログが出るので、OKボタンをクリックした。
AXI_Lite_Slave_10_120611.png

・CharROM AXI Lite Slave が追加されたので、右クリックメニューからDelete Instance を選択する。

・Delete IP Instance ダイアログでDelete instance and all its connections(デフォルト)を選択して、OKボタンをクリックすると、CharROM AXI Lite Slaveが消えた。
AXI_Lite_Slave_11_120611.png

・Atlys_EDK_test_PA\Atlys_EDK_test_PA.srcs\sources_1\edk\system\pcores\char_rom_axi_lite_v1_00_a\data の char_rom_axi_lite_v2_1_0.mui にC_USE_ADVANCED_PORTS のENTITYを追加した。

    <!ENTITY C_S_AXI_RNG03_HIGHADDR '
    <widget id="C_S_AXI_RNG03_HIGHADDR">
        <key>C_S_AXI_RNG03_HIGHADDR</key>
        <label>Slave AXI RNG03 High Address </label>
        <tip></tip>
    </widget>
    '>
    <!ENTITY C_USE_ADVANCED_PORTS '
    <widget id="C_USE_ADVANCED_PORTS">
        <key>C_USE_ADVANCED_PORTS</key>
        <label>C_USE_ADVANCED_PORTS </label>
        <tip></tip>
    </widget>
    '>
]>


・XPSのProject メニューからRescan User Repositories を実行した。

・CharROM AXI Lite Slave を右クリックしてAdd IPした。Add IP Instance to Desgin ダイアログが出てから、XPS Core Config ダイアログが出た。今度はエラーはない。
AXI_Lite_Slave_12_120612.png

・XPS Core Config ダイアログのSystemタブで、S_AXI -> Slave AXI Supports Write の手のマークをクリックしてAutoを外してチェックを外した。CharROM AXI Lite Slave では、ReadのみでWriteは使用しないためだ。
AXI_Lite_Slave_13_120612.png

・前と同様に、Instantiate and Connect IPダイアログが出るので、OKボタンをクリックした。

・XPSプロジェクトにCharROM AXI Lite Slave が追加された。ポートの接続もされているし、アドレスも割り振られていた。
AXI_Lite_Slave_14_120612.png

AXI_Lite_Slave_15_120612.png

AXI_Lite_Slave_16_120612.png
  1. 2012年06月11日 05:41 |
  2. AX4 Lite Slave IPの作製
  3. | トラックバック:0
  4. | コメント:0

キャラクタROMをAXI4 Lite Slave として実装する2(AXI4 Lite バスの勉強2)

キャラクタROMをAXI4 Lite Slave として実装する1(AXI4 Lite バスの勉強)”の続き。

今回はAXI4 Lite バスのWriteとReadトランザクションのタイミングチャートを書いてみた。

最初にWriteの2つのトランザクションのタイミングチャートを書いてみた。下の図に示す。
AXI_Lite_Slave_3_120609.png

最初のWriteアクセスは最速の場合を示している。次のWriteアクセスはWrite address channel が1クロックWaitして、Writeデータ出てくるまでに1クロック遅延し、Writeデータが出てきた後も1クロック遅延している。

次にReadの2つのトランザクションのタイミングチャートを書いてみた。下の図に示す。
AXI_Lite_Slave_4_120609.png

Write同様、最初のReadアクセスは最速の場合を示している。次のReadアクセスはRead address channel が1クロックWaitして、Readデータ出てくるまでに1クロック遅延し、Readデータが出てきた後も1クロック遅延している。

AXI4 LiteはAXI4のシングル転送しか出来ない簡易版と言う感じだ。次からは、キャラクタROMをインスタンスしてAXI4 Lite Slave IPを作っていこうと思う。
  1. 2012年06月09日 18:10 |
  2. AX4 Lite Slave IPの作製
  3. | トラックバック:0
  4. | コメント:0

キャラクタROMをAXI4 Lite Slave として実装する1(AXI4 Lite バスの勉強)

だいぶ間が開いてしまったが、”AXI4バスでDVI表示回路を作る(仕様の検討)”でキャラクタ・ディスプレイ・コントローラのキャラクタROMをAXI4 Lite Slave として実装することにした。今回はそのためのAXI4 Liteバスの仕様を勉強することにする。

AXI4バスに対してのAXI4 Liteバスの特徴を下に示す。(AMBA ® AXI ™ and ACE ™ Protocol Specification ARM IHI 0022D (ID102711) を参考にしている)

・すべてのトランザクションの転送長が1
・データバス幅は32または64ビット、Xilinxの仕様では32ビット幅
・すべてのアクセスが Non-modifiable, Non-bufferable
・排他的アクセスは無し


下にaxi_slave_v1_00_aのVerilogのテンプレートとaxi_lite_slave_v1_00_aのVerilogテンプレートをWinMerge で比較した結果を下に示す。
AXI_Lite_Slave_1_120606.png
AXI_Lite_Slave_2_120606.png

左がaxi_slave_v1_00_aのVerilogのテンプレート、右がaxi_lite_slave_v1_00_aのVerilogテンプレートだ。左に比べて、右が格段に信号が少ないことがわかる。例えば、S_AXI_AWLENやS_AXI_AWSIZE、S_AXI_AWBURST、S_AXI_ARLENやS_AXI_ARSIZE、S_AXI_ARBURST は転送数が1と決まっていれば必要ないはずだ。この様に、AXI4 Lite は、AXI4の簡易版になっているようだ。
  1. 2012年06月06日 21:22 |
  2. AX4 Lite Slave IPの作製
  3. | トラックバック:0
  4. | コメント:0