Nios® Vプロセッサー・ソフトウェア開発者ハンドブック

ID 743810
日付 10/31/2022
Public

このドキュメントの新しいバージョンが利用できます。お客様は次のことを行ってください。 こちらをクリック 最新バージョンに移行する。

ドキュメント目次

7.6. ハードウェアへのアクセス

ソフトウェアは、デバイスへのメモリー・マップド・インターフェイスを抽象化する定義済みマクロを使用してハードウェアにアクセスします。このセクションでは、各デバイスのハードウェア・インターフェイスを定義するマクロについて説明します。

すべてのコンポーネントは、デバイスのハードウェアとソフトウェアを定義するディレクトリーを提供します。たとえば、 インテル® Quartus® Primeソフトウェアで提供される各コンポーネントは、<Intel Quartus Prime installation>/ip/altera/ ディレクトリー内に独自のディレクトリーを持っています。多くのコンポーネントは、ハードウェア・インターフェイスを定義するヘッダーファイルを提供します。ヘッダーファイルの名前は <component name>_regs.hで、特定のコンポーネントのincサブディレクトリーに含まれています。たとえば、Xインテルが提供する JTAG UART コンポーネントは、ファイルの<Intel Quartus Primeinstallation>/ip/altera/sopc_builder_ip/altera_avalon_jtag_uart/inc/altera_avalon_jtag_uart_regs.hでハードウェア・インターフェースを定義します。

_regs.h ヘッダーファイルは、コンポーネントの次のアクセス マクロを定義します。

  • 操作をサポートするコンポーネント内の各レジスターに対して、読み取りマクロまたは書き込みマクロのいずれかまたは両方を提供するレジスター・アクセス・マクロ。マクロは次のとおりです。
    • IORD_ <component name> _<register name> (<component base address> )
    • IOWR_ <component name> _<register name> (<component base address> 、<data> )

      例えば、 altera_avalon_jtag_uart_regs.hは次のマクロを定義します。

    • IORD_ALTERA_AVALON_JTAG_UART_DATA()
    • IOWR_ALTERA_AVALON_JTAG_UART_DATA()
    • IORD_ALTERA_AVALON_JTAG_UART_CONTROL()
    • IOWR_ALTERA_AVALON_JTAG_UART_CONTROL()
  • コンポーネント内の各レジスターの物理アドレスを返すレジスター・アドレス・マクロ。返されるアドレス レジスターは、コンポーネントのベースアドレス + 指定されたレジスター オフセット値ですこれらのマクロの名前は、IOADDR_<component name>_<register name> (<component base address>)です。

    例えば、 altera_avalon_jtag_uart_regs.hは、次のマクロを定義します。

    • IOADDR_ALTERA_AVALON_JTAG_UART_DATA()
    • IOADDR_ALTERA_AVALON_JTAG_UART_CONTROL()

      これらのマクロは、データソースまたは宛先の特定のアドレスを必要とする関数へのパラメーターとしてのみ使用してください。たとえば、コンポーネント内の特定のソースレジスターからデータ ストリームを読み取るルーチンでは、パラメーターとしてレジスターの物理アドレスが必要になる場合があります。

  • レジスター内の個々のビット フィールドへのアクセスを提供するビット フィールド マスクとオフセット。これらのマクロには次の名前が付いています。
    • <component name>_<register name>_<name of field>_MSK—A bit-mask of the field
    • <component name>_<register name>_<name of field>_OFST—フィールドの開始位置のビット オフセット

      例えば、ALTERA_AVALON_UART_STATUS_PE_MSKおよび ALTERA_AVALON_UART_STATUS_PE_OFSTは、ステータスレジスターの peフィールドにアクセスします。

_regs.h ファイルで定義されたマクロのみを使用して、デバイスのレジスターにアクセスします。レジスターアクセス関数を使用して、デバイスの読み取りまたは書き込み時にプロセッサーがデータキャッシュ (存在する場合) をバイパスするようにする必要があります。ハードコードされた定数は使用しないでください。ハードコードされていると、ソフトウェアが基盤となるハードウェアの変更の影響を受けやすくなります。

まったく新しいハードウェア・デバイス用のドライバーを作成する場合は、_regs.h ヘッダファイルを準備する必要があります。

完全な例の詳細については、_regs.h ファイル、インテルが提供するコンポーネントのいずれかについては、<Intel Quartus Prime installation> /ip/sopc_builder_ip/altera_avalon_jtag_uart/incなどのコンポーネント・ディレクトリーを参照してください。