[Q2HB] PIO Core

[Altera][Q2HB][IP] PIO Core

refer to:"Volume 5: Embedded Peripherals","Section I. Off-Chip Interface Peripherals","Chapter 9, PIO Core"


Function Description

各PIOコアは最大32のI/Oポートを提供します.マイクロプロセッサのようなインテリジェントホストが,Avalon-MMインタフェースのレジスタマップに対して読み書きすることで,PIOポートを制御します.ホストの制御下において,PIOコアは入力のデータを取り込んだり,データを出力(駆動)します.PIOポートがI/O端子に直接接続されるとき,ホストはPIOコアの制御レジスタに書き込むことで,Tri-stateにすることができます.

SOPC Builderで生成した場合には,ユーザに見える2つの仕様を持ちます.

  • MMインタフェース経由で見える,data,direction,interrupt-mask,edgecaptureレジスタ
  • 1~32のI/O port(FPGA内部への接続でも,FPGA外部端子への接続も可能です.)

Instantiating the PIO Core in SOPC Builder

Basic Settings
WidthI/Oポートの幅を指定します.1~32の値が設定できます.
Direction以下に示すテーブル(Direction Settings)から機能を選択します.
Output Port Reset Value出力ポートのリセット値を指定できます.正しい値の幅は,ポート幅に依存します.

Direction Settings

Bidirectional (tristate) portsこのモードでは,PIO bitはデータの駆動と取得のためにデバイス端子を共有します.各端子の方向は独立して選択可能です.FPGA I/Oをtrie-state状態にするには,directionは入力にします.
Input ports onlyこのモードでは,PIOポートは取り込み入力のみです.
Output ports onlyこのモードでは,PIOポートは出力駆動のみです.
Both input and output portsこのモードでは,入出力ポートのバスが分離し,n bitの端方向バスとなります.
Input Options

edge-captureとIRQ生成に関する指定を行います.Basic Settingsで,入力ポートが無ければ設定できません.

Edge Capture Register(作業中)

Interrupt(作業中)

Software Programming Model

ここで紹介するAPI・マクロは,"altera_avalon_pio_regs.h"をincludeすることで使えます.
baseは,scriptによる自動生成でシステムが作ってくれる.(定義されるファイルは"system.h")

書き込みマクロ

  • IOWR_ALTERA_AVALON_PIO_DATA(base, data)
  • IOWR_ALTERA_AVALON_PIO_DIRECTION(base, data)
  • IOWR_ALTERA_AVALON_PIO_IRQ_MASK(base, data)
  • IOWR_ALTERA_AVALON_PIO_EDGE_CAP(base, data)

読み出しマクロ

  • IORD_ALTERA_AVALON_PIO_DATA(base)
  • IORD_ALTERA_AVALON_PIO_DIRECTION(base)
  • IORD_ALTERA_AVALON_PIO_IRQ_MASK(base)
  • IORD_ALTERA_AVALON_PIO_EDGE_CAP(base)

アドレス計算マクロ

  • IOADDR_ALTERA_AVALON_PIO_DATA(base)
  • IOADDR_ALTERA_AVALON_PIO_DIRECTION(base)
  • IOADDR_ALTERA_AVALON_PIO_IRQ_MASK(base)
  • IOADDR_ALTERA_AVALON_PIO_EDGE_CAP(base)

# 方言"__builtin_ldwio"が入っているので,単純に(volatile*)(ADDR)で読み出せるのかは怪しい?