• 検索結果がありません。

Cyclove V、 Volume 3、第16章:DMAコントローラ

N/A
N/A
Protected

Academic year: 2021

シェア "Cyclove V、 Volume 3、第16章:DMAコントローラ"

Copied!
60
0
0

読み込み中.... (全文を見る)

全文

(1)

cv_54016-1.1

© 2012 Altera Corporation. All rights reserved. ALTERA, ARRIA, CYCLONE, HARDCOPY, MAX, MEGACORE, NIOS, QUARTUS and STRATIX words and logos are trademarks of Altera Corporation and registered in the U.S. Patent and Trademark Office and in other countries. All other words and logos identified as trademarks or service marks are the property of their respective holders as described at www.altera.com/common/legal.html. Altera warrants performance of its semiconductor products to current specifications in accordance with Altera's standard warranty, but reserves the right to make changes to any products and services at any time without notice. Altera assumes no responsibility or liability arising out of the application or use of any information, product, or service described herein except as expressly agreed to in writing by Altera. Altera customers are advised to obtain the latest version of device specifications before relying on any published information and before placing orders for products or services.

ISO 9001:2008 Registered この章では、ハード・プロセッサ・システム(HPS)に含まれているダイレクト・メ モリ・アクセス・コントローラ(DMAC)を説明します。 DMA コントローラは、メモ リやペリフェラルおよびシステム内のその他のメモリ・ロケーションの間でデータ

を転送するために使用されます。 DMA コントローラは、ARM® Corelink™ DMA

Controller(DMA-330)のインスタンスです。

f ARM の DMA-330 コントローラについて詳しくは、ARM ウェブサイト

(infocenter.arm.com) から入手可能な CoreLink DMA Controller DMA-330 Revision: r1p1 Technical Reference Manual を参照してください。

DMA コントローラの機能

HPS は、マイクロプロセッサ・ユニット(MPU)サブシステムからこの作業をオフ ロードし、メモリ・マップド・ペリフェラルとメモリ間のデータ転送を処理する 1 つの DMAC を提供します。 DMAC はメモリ・ツー・ メモリ、メモリ・ツー・ ペリフェ ラル、およびペリフェラル・ツー・ メモリへの転送をサポートしています。 DMAC は サービス要件のさまざまなレベルのための 8 つの論理チャネルをサポートします。 そ れは、ペリフェラル・ハードウェア・フロー・コントロールのための最大 31 ペリ フェラル・ハンドシェイク・インタフェースを提供します。 DMA コントローラには命令処理ブロックが含まれているため、DMA 転送を制御する プログラム・コードを処理することができます。 また、命令キャッシュにシステム・

メモリからプログラム・コードをフェッチするために AMBA®(ARM Advanced

Microcontroller Bus Architecture ) の AXI™(Advanced eXtensible Interface)マスタ・イン

タフェース・ユニットが含まれています。AXI マスタ・インタフェースも同様に DMA データ転送を実行するために使用されます。 DMA 命令の実行エンジンは、命令 キャッシュからプログラム・コードを実行し、それぞれの命令キューを介して、 リードまたはライト AXI 命令をスケジュールします。 また、DMA 転送中に、読み出 しまたはライト・データを格納するために使用するマルチ FIFO(MFIFO)データ・ バッファを内蔵しています。 November 2012 cv_54012-1.2

(2)

DMAC は、MPU のサブシステムへのイベントの効率的な通信をイネーブルするため に 11 の割り込み出力を提供します。 ペリフェラル要求インタフェースは、プロセッ サからの介入なしに、メモリ・ツー・ペリフェラルやペリフェラル・ツー・メモリ への転送が発生することをイネーブルする DMA 対応ペリフェラルの接続をサポート しています。 HPS が ARM DMA のペリフェラル・インタフェース・プロトコルに準拠 していないいくつかのペリフェラル機器をサポートしているので、アダプタはこれ らのペリフェラルが DMAC と動作できるようにするために追加されます。 次のペリ フェラル・インタフェース・プロトコルがサポートされています。 ■ Synopsys プロトコル

■ Serial peripheral interface (SPI)

■ Universal asynchronous receiver/transmitter (UART)

■ Inter-integrated circuit (I2C) ■ FPGA

■ ARM プロトコル

■ Quad SPI flash controller

■ System trace macrocell (STM™)

■ Bosch プロトコル

■ Controller area network (CAN)

デュアル・スレーブ・インタフェースは、DMA コントローラの動作を保護状態と非 保護状態に分割することイネーブルします。 保護トランザクションだけが保護インタ フェースに確実にアクセスできるため、ネットワーク・インタコネクトをコンフィ ギュレーションする必要があります。スレーブ・インタフェースは、ステータス・ レジスタをアクセスすることができます。また、直接 DMA コントローラの命令を実 行することもできます。 DMAC は以下の特長を備えています。 ■ DMA の動作を指定するための柔軟な方法を提供する小さな命令セットです。 この

アーキテクチャでは、LLI(Linked-List Item)ベースの DMA コントローラの固定能 力よりも高い柔軟性を提供します。 ■ 複数の転送タイプをサポートしています。 ■ Memory-to-memory ■ Memory-to-peripheral ■ Peripheral-to-memory ■ Scatter-gather ■ 最大 8 個の DMA チャネルまでサポートしています。 ■ 最大 8 つの未処理の AXI 読み出しトランザクションおよび 8 つの未処理の AXI ライ ト・トランザクションまでサポートしています。 ■ ソフトウェアは16未解決の読み出しと16未処理の書き込み命令までスケジュール することがイネーブルされています。

(3)

■ MPU のサブシステムに 11 の割り込みラインをサポートしています。 ■ DMA スレッド・停止の場合は 1 ■ イベントの場合は 8 ■ MFIFO バッファ ECC の場合は 2 ■ 31 ペリフェラル要求インタフェースをサポートしています。 ■ FPGA の場合は 4 ■ FPGA または CAN の場合は 4 シェア ■ I2C の場合は 8 ■ SPI の場合は 8 ■ クワッド SPI の場合は 2

■ System Trace Macrocell の場合は 1

■ UART の場合は 4

DMA コントローラのブロック図とシステム統合

図 16–1には、 DMAC のブロック図、および他の HPS システムに組み込まれる方法を 示します。 図 16‒1. DMA コントローラの接続 DMA Controller MFIFO 512x64

Write Instruction Queue Read Instruction Queue

Instruction Execution Engine Instruction Cache A X I-64 M a s te r In te rf a c e Interrupt Control CSRs Secure Slave Interface Non-Secure Slave Interface Reset Initialization Interface MPU Subsystem Generic Interrupt Controller System Manager

UART / SPI / I2C Peripheral Interfaces STM / Quad SPI Peripheral Interfaces CAN Peripheral Interfaces Clock Crossing Synopsis Adapter and Clock Crossing Bosch Adapter and Clock Crossing Peripheral Request Interface [30:0]

Level 4 Main Bus

Le

(4)

DMA コントローラは、コントローラ・ロジックだけでなく、すべてのインタフェー スで使用されている l4_main_clk クロックによって駆動されています。 DMA コント ローラは、64 ビットの AXI マスタ・インタフェースを持つレベル 3(L3)のメイン・ スイッチにアクセスします。 DMA コントローラは、以下のスレーブ・インタフェースを提供しています。 ■ 無保護のスレーブ・インタフェース ■ 保護スレーブ・インタフェース DMA コントローラの機能を制御するレジスタをアクセスするために、これらのス レーブ・インタフェースを使用することができます。 DMA コントローラは、1 インタ フェースが Secure 状態で動作し、もう一つは Non-secure 状態で動作している TrustZone®セキュア・テクノロジーを実装しています。

DMA コントローラの機能説明

この項では、DMAC の主要なインタフェースとコンポーネント、および動作方法につ いて説明します。

概要

DMAC は DMA 転送を制御するプログラム・コードを処理することが可能になり、命 令処理ブロックが含まれています。 プログラム・コードは、DMAC がその AXI マス タ・インタフェースを使用してアクセスされるシステム・メモリの領域に格納され ています。 内部キャッシュに一時的に DMAC 命令を格納します。 DMAC は、DMA 動作のシングル同時スレッドをサポートすることができる各チャネ ルが 8 個の DMA チャネルでコンフィギュレーションされています。 さらに、シング ル DMA マネージャ・スレッドが存在し、DMA チャネル・スレッドを初期化するため に使用することができます。 DMAC は 1 クロック・サイクルあたり 1 命令まで実行し ます。 それは定期的に各アクティブ・スレッドを実行するため、DMA マネージャ・ スレッド、その後 DMA チャネル・スレッドを処理することにより、交互に実行しま す。 実行するには、次のアクティブな DMA チャネル・スレッドを選択するとき、そ れはラウンド・ロビン方式を使用しています。 DMAC は 1 ~ 6 のバイトで構成される可変長の命令を使用します。 それは各 DMA チャネルに独立したプログラム・カウンタ(PC)レジスタを提供しています。 スレッ ドがアドレスから命令を要求すると、キャッシュが検索を実行します。 キャッシュ・ ヒットが発生した場合、キャッシュは直ちに命令を提供しています。 それ以外の場 合、DMAC はキャッシュ・ライン・フィルを実行するための AXI マスタ・インタ フェースを使用しながら、スレッドが停止されます。 命令がキャッシュ・ラインの終 わりにまたがる場合、DMAC は命令をフェッチするために複数のキャッシュ・アクセ スを実行します。 1 キャッシュ・ライン・フィルが進行中である場合、DMAC はキャッシュにアクセスす る他のスレッドをイネーブルしますが、別のキャッシュ・ミスが発生した場合、最 初のライン・フィルが完了するまで、パイプラインをストールさせます。

(5)

DMA チャネル・スレッドがロードまたはストア命令を実行すると、DMAC は関連 リードまたはライト・キューに命令を追加します。 DMAC は AXI の命令を発行する前 に、命令ストレージ・バッファとして、これらのキューを使用しています。また、 DMAC は DMA 転送中に読み出されるデータまたは書き込まれるデータを格納するた めに使用する MFIFO データ・バッファが含まれています。 DMAC は外部マイクロプロセッサへのイベントの効率的な通信をイネーブルするため に複数の割り込み出力を提供します。 ペリフェラル要求インタフェースは、マイクロ プロセッサからの介入なしに、メモリ・ツー・ペリフェラルおよびペリフェラル・ ツー・メモリの DMA 転送が発生するようにイネーブルするには、DMA 対応ペリフェ ラルの接続をサポートしています。 デュアル・スレーブ・インタフェースは、Secure 状態と Non-secure 状態に分割する DMAC の動作をイネーブルします。 スレーブ・インタフェースを使用すると、ステー タス・レジスタにアクセスして、DMAC 内の命令を直接実行することができます。

動作状態

図 16–2に、DMA マネージャ・スレッドと DMA チャネル・スレッドのためのオペ レーティング状態間の遷移を示します。 DMAC は、スレッドごとに独立したステート・マシンを提供しています。 図 16‒2. スレッドの動作状態 Executing Cache miss Updating PC Waiting for event At barrier Waiting for peripheral Completing Faulting completing Faulting Stopped C C C C C C C C M Killing C C C

(6)

1 図 16–2で 、DMAC が以下のことを許可します。 ■ 唯一の DMA チャネル・スレッドは図 16–2での灰色に示す状態を使用すること ができます。 ■ レター・デザイネータなしの円弧は DMA マネージャと DMA チャネル・スレッ ドの状態遷移を示し、それ以外の使用は、次のように制限されています。 ■ C—DMA チャネル・スレッドのみ。M—DMA マネージャ・スレッドのみ。

■ 点線内の状態は、Faulting completing、Faulting、または Killing に遷移することが

できます。

リセットから DMAC の終了後、Stopped 状態にすべての DMA チャネル・スレッドを 設定し、DMA マネージャ・スレッドは Stopped 状態に移行します。 以下の項はステートについて説明しています。 ■ 16–6 ページの「Stopped」 ■ 16–6 ページの「Executing」 ■ 16–7 ページの「Cache miss」 ■ 16–7 ページの「Updating PC」

■ 16–7 ページの「Waiting For Event」

■ 16–7 ページの「At Barrier」

■ 16–8 ページの「Waiting For Peripheral」

■ 16–8 ページの「Faulting Completing」 ■ 16–8 ページの「Faulting」 ■ 16–8 ページの「Killing」 ■ 16–8 ページの「Completing」

Stopped

スレッドは無効な PC を持っており、それが命令をフェッチされていません。 スレッ ドの種類に応じて、次のいずれかの方法で Executing 状態に移行するためにスレッド を引き起こす可能性があります。 ■ DMA マネージャ・スレッド — スレーブ・インタフェースを介して DMAGO 命令を発 行します。

■ DMA チャネル・スレッド — 停止状態に DMA チャネル・スレッドの DMAGO を実行す

るために DMA マネージャ・スレッドをプログラムします。

Executing

スレッドが有効な PC を持っているため、DMAC は調停するときにスレッドが含まれ ています。 スレッドは、以下の条件で次のいずれかの状態に変更することができま す。 ■ Stopped—DMA マネージャ・スレッドが DMAEND を実行する場合。

(7)

■ Cache miss— 命令キャッシュが DMA マネージャ・スレッドまたは DMA チャネル・ スレッドのどちらかのために次の命令が含まれていない場合。

■ Updating PC—DMAC がキャッシュ内の次のアクセスのアドレスを計算するとき。

■ Waiting for event— スレッドが DMAWFE を実行する場合。

■ At barrier—DMA チャネル・スレッドが次のいずれかの場合。

■ DMARMB、DMAWMB、または DMAFLUSHP を実行する場合。

■ アップデートがアラインメントに影響を与えるコントロール・レジスタを更

新するとき( 16–27 ページの「DMA サイクル中の DMA チャネル・コントロー

ル・レジスタの更新」)。

■ Waiting for peripheral—DMA チャネルスレッドが DMAWFP を実行する場合。

■ Killing—DMA チャネル・スレッドが DMAKILL を実行する場合。 ■ Faulting completing—DMA チャネル・スレッドのいずれかの場合。 ■ スレッドが未定義または無効な命令を実行する場合 ■ AXI エラーが命令フェッチまたはデータ転送中に発生する場合 ■ Faulting—DMA マネージャ・スレッドが次のいずれかの場合。 ■ スレッドが未定義または無効な命令を実行する場合 ■ AXI エラーが命令フェッチに発生する場合 ウォッチドッグ・タイムアウト中断が発生したときの DMA チャネル・スレッド の場合。 ■ Completing—DMA チャネル・スレッドが DMAEND を実行する場合。

Cache miss

スレッドが停止され、DMAC はキャッシュ・ライン・フィルを実行しています。 キャッシュ・フィルを終了すると、スレッドは Executing 状態に戻ります。

Updating PC

DMAC は、キャッシュ内の次のアクセスのアドレスを計算しています。 PC を計算し た後、スレッドは Executing 状態に戻ります。

Waiting For Event

スレッドが停止され、DMAC が対応するイベント番号を使用して DMASEV を実行する ことを待っています。 対応するイベントが発生した後、スレッドは Executing 状態に 戻ります。

At Barrier

DMA チャネル・スレッドが停止され、DMAC は AXI 上のトランザクションが完了す るまでを待っています。 AXI トランザクションが完了した後、スレッドは Executing 状 態に戻ります。

(8)

Waiting For Peripheral

DMA チャネル・スレッドが停止され、DMAC は、要求されたデータを提供するため に、ペリフェラルを待っています。 ペリフェラルがデータを提供した後、スレッドは Executing 状態に戻ります。

Faulting Completing

DMA チャネル・スレッドは未処理のロードまたはストアのトランザクションが完了 していることをシグナルさせるために AXI マスタ・インタフェースを待っています。 トランザクションが完了した後、スレッドは Faulting 状態に移行します。

Faulting

スレッドが無期限に停止されています。 スレッドの DMAKILL を実行するために DMAC を指示する DBGCMD レジスタを使用すると、スレッドは Stopped 状態に移行します。

Killing

DMA チャネル・スレッドは、未処理のロードまたはストアのトランザクションが完 了していることを知らせるために AXI マスタ・インタフェースを待っています。 トラ ンザクションが完了した後、スレッドは Stopped 状態に移行します。

Completing

DMA チャネル・スレッドは、未処理のロードまたはストアのトランザクションが完 了していることを知らせるために AXI マスタ・インタフェースを待っています。 トラ ンザクションが完了した後、スレッドは Stopped 状態に移行します。

DMAC の初期化

リセットが終了した後、DMAC は、その動作状態を初期化するいくつかのメモリ・ マップされたコントロール信号を提供します。 DMAC のリセットが終了したら、それ が自動的にコードの実行を開始しないように設定されています。 3 メモリ・マップさ れたコントロール信号は、システム・マネージャによって制御されます。

f 詳細は、「Cyclone®Vデバイス・ハンドブック Volume 3の「 System Manager」の章を 参照してください。

DMA マネージャのセキュリティの状態を設定する方法

boot_manager_ns 信号が DMA マネージャのセキュリティの状態を設定するための唯 一の方法です。

DMAC がリセットから終了すると、boot_manager_ns 信号の状態を読み出し、DMA マ ネージャのセキュリティを設定します 。

1 設定すると、dma_rst_n 信号上の状態遷移が DMAC をリセットするまで、各 irq[x] の

セキュリティ状態は一定のままです。

DMA マネージャのセキュリティの状態は、DMAC の動作をどのように影響するにつ

いて詳しくは、16–21 ページの「Secure 状態での DMA マネージャ・スレッド」およ

び 16–22 ページの「Non-Secure 状態の DMA マネージャ・スレッド」を参照してくだ さい。

(9)

割り込み出力のセキュリティの状態を設定する方法

DMAC は、各 irq[x] を割り当てるようにセキュリティ状態に boot_irq_ns[7:0] 信 号を提供しています 。 boot_irq_ns[7:0] 信号は、システム・マネージャに接続されています。 リセットか ら DMA を取り出す前に、割り込みビットが安全であるかを制御するために、システ ム・マネージャを介して boot_irq_ns[7:0] 信号をプログラムする必要があります。 1 DMAC は、リセットから復帰した後これらのビットをサンプルして、次のリセットま でそれらを無視します。

設定すると、dma_rst_n 信号上の状態遷移が DMAC をリセットするまで、各 irq[x] のセキュリティ状態は一定のままです。

irq[x] 信号のセキュリティ状態は、DMAC が DMAWFE と DMASEV 命令を実行する方法にど

のように影響するかについての説明は、16–21 ページの「セキュリティの使用」を参 照してください。

ペリフェラル要求インタフェースのセキュリティの状態を設定する方

DMAC は、セキュリティ状態に各ペリフェラル要求インタフェースを割り当てるよう に boot_periph_ns[31:0] 信号を提供します。 boot_periph_ns[31:0] 信号は、システム・マネージャに接続されています。 リセッ トから DMA を取り出す前に、ペリフェラル機器インタフェースが安全であるかを制 御するために、システム・マネージャを介して boot_periph_ns[31:0] 信号をプログ ラムする必要があります。 1 DMAC は、リセットから復帰した後これらのビットをサンプルして、次のリセットま でそれらを無視します。設定すると、dma_rst_n 信号上の状態遷移が DMAC をリセッ トするまで、各ペリフェラルの要求インタフェースのセキュリティ状態は一定のま まです。 ペリフェラル要求インタフェースのセキュリティ状態は、DMA チャネル・スレッド が DMAWFP、DMALDP、DMASTP、または DMAFLUSHP 命令を実行する方法に影響するかに ついての説明は、16–21 ページの「セキュリティの使用」を参照してください。

スレーブ・インタフェースを使用した場合

スレーブ・インタフェースは、レベル 4(L4)メインバスに DMAC を接続し、レジス タにアクセスするためにマイクロプロセッサをイネーブルしてください。 これらのレ ジスタを使用すると、マイクロプロセッサは、以下を実行できます。 ■ DMA マネージャ・スレッドのステータスにアクセスします。 ■ DMA チャネル・スレッドの状態を与えます。 ■ 割り込みをイネーブルまたはクリアします。 ■ イベントをイネーブルします。

(10)

■ 次のデバッグ・レジスタをプログラムすることにより、実行する DMAC の命令を 発行して下さい。 ■ DBGCMD レジスタ ■ DBGINST0 レジスタ ■ DBGINST1 レジスタ

スレーブ・インタフェースを使用して DMAC への命令の発行

DMAC が動作している場合、次の限定された命令のサブセットのみ発行することがで きます。

■ DMAGO— 指定した DMA チャネルを使用して DMA トランザクションを開始します。

■ DMASEV— 指定したイベント番号を使用して、イベントの発生、または割り込みを 通知します。 ■ DMAKILL— スレッドを終了します。 boot_manager_ns 信号が DMAC が動作するように初期化されたセキュリティの状態に 応じて、適切なスレーブ・インタフェースを使用していることを確認する必要があ ります。 たとえば、DMAC がセキュア状態にある場合、安全なスレーブ・インタ フェースを使用して命令を発行する必要があります。それ以外の場合、DMAC は命令 を無視します。 DMAC は Non-secure 状態にあるときに、DMA チャネルを起動または再 起動するためのセキュアまたは非セキュアのスレーブ・インタフェースを使用する ことができます。 1 デバッグ命令レジスタまたは DBGCMD レジスタを使用して命令を発行する前に、デ バッグがアイドルであることを確認し、DBGSTATUS レジスタを読み出す必要がありま す。それ以外の場合、DMAC は指示を無視します。 命令を処理する前に、DMAC は、スレーブ・インタフェースからの指示を受信する と、いくつかのクロック・サイクルを受信することができます。たとえば、パイプ ラインが別の命令を処理する場合です。 1 DMAGO を発行する前に、DMAGO が指定するアドレスから開始して、システム・メモリ に実行する DMAC のに適したプログラムが含まれていることを確認する必要があり ます。 デバッグ命令を備えた DMAGO レジスタの使用 この例では、デバッグ命令レジスタを使用して DMA チャネル・スレッドを開始する ために必要な手順を示しています。 1. DMA チャネル用のプログラムを作成します。 2. システム・メモリの領域にプログラムを格納します。

(11)

3. 以下のように DMAGO 命令をプログラムするために、DMAC のスレーブ・インタ フェースのいずれかを使用します。 a. デバッグがアイドルのとき(dbgstatus ビットが 0 である場合)を保証する ために DBGSTATUS レジスタをポーリングしてください。 b. レジスタ DBGINST0 に書き込み、次のように入力します。 ■ DMAGO のための命令バイト0 エンコーディング。 ■ DMAGO のための命令バイト1 エンコーディング。 ■ 0 にスレッド・ビットをデバッグします。これは、DMA マネージャ・ス レッドを選択します。 c. DMAGO 命令バイト [5:2] のデータで DBGINST1 レジスタへのライト 。b ステップ で、システム・メモリに書き込まれるプログラムの最初の命令のアドレスに これらの 4 バイトを設定する必要があります 。 4. デバッグ命令レジスタは DBGCMD レジスタにゼロを書き込むによって含まれてい る命令を実行するように DMAC を指示します。 DMAC は DMA チャネル・スレッド を開始して 1 に dbgstatus ビットを設定します。 DMAC は命令の実行を完了した 後、それが 0 に dbgstatus ビットをクリアします。

ペリフェラル要求インタフェース

図 16–3には、ペリフェラル要求インタフェースはペリフェラル要求バスで構成さ れ、DMAC は接頭辞を使用するバスを認めることを示しています。 ■ dr— ペリフェラル要求バス。 ■ da—DMAC 確認バス。 ペリフェラル信号は、要求バスに次を示します。 ■ 単一の転送を要求します。 ■ バースト転送を要求します。 ■ フラッシュ要求を確認します。 DMA 転送シーケンスの最後の要求を発行すると、ペリフェラルは DMAC を信号しま す。 DMAC は、確認バスで次を信号することができます。 要求された単一の転送を完了したときに信号します。 図 16‒3. ペリフェラル要求インタフェース上の要求バスと確認バス DMAC Peripheral drvalid drtype[1:0] drlast daready davalid datype[1:0] drready Peripheral request interface

(12)

■ 要求されたバースト転送を完了したときに信号します。 ■ フラッシュ要求を発行します。 DMAC は DMA のチャネルのいずれかにペリフェラル要求インタフェースを割り当て ることができます。 DMA チャネル・スレッドが DMAWFP を実行するときに 、ペリフェ ラル [4:0] フィールドにプログラムされた値は、その DMA チャネルに関連付けられ ているペリフェラルを指定します。 詳細は、16–45 ページの「DMAWFP」を参照して ください。 DMAC は 31 ペリフェラル要求ハンドシェイクをサポートしています。 各要求のハン ドシェイクが 4 の未処理の要求を受信して、特定のペリフェラル・デバイス ID が割 り当てられます。 表 16–1は、ペリフェラル・デバイス ID の割り当てを示していま す。 要求インタフェース番号の 4 ~ 7 は、FPGA ファブリックに実装される CAN コント ローラとソフト・ロジック間で多重化されています。 CAN コントローラと FPGA のイ ンタフェース間のスイッチングは、システム・マネージャによって制御されます。 f 要求インタフェース番号 4 ~ 7 を制御する方法について詳しくは、「Cyclone Vデバイ

ス・ハンドブックVolume 3」の「System Manager」の章を参照してください。

表 16‒1. ペリフェラル要求インタフェースのマッピング ペリフェラル 要求イン タフェー ス ID プロトコル ペリフェラル 要求イン タフェー ス ID プロトコル

FPGA 0 0 Synopsys SPI Master 0 TX 16 Synopsys

FPGA 1 1 Synopsys SPI Master 0 RX 17 Synopsys

FPGA 2 2 Synopsys SPI Slave 0 TX 18 Synopsys

FPGA 3 3 Synopsys SPI Slave 0 RX 19 Synopsys

FPGA 4 / CAN 0 インタ

フェース 1 4 Synopsys / Bosch SPI Master 1 TX 20 Synopsys

FPGA 5 / CAN 0 インタ

フェース 2 5 Synopsys / Bosch SPI Master 1 RX 21 Synopsys

FPGA 6 / CAN 1 インタ

フェース 1 6 Synopsys / Bosch SPI Slave 1 TX 22 Synopsys

FPGA 7 / CAN 1 インタ

フェース 2 7 Synopsys / Bosch SPI Slave 1 RX 23 Synopsys

I2C 0 TX 8 Synopsys Quad SPI Flash TX 24 ARM

I2C 0 RX 9 Synopsys Quad SPI Flash RX 25 ARM

I2C 1 TX 10 Synopsys STM 26 ARM

I2C 1 RX 11 Synopsys 予約済み 27 ̶

I2C 2 TX (EMAC) 12 Synopsys UART 0 TX 28 Synopsys

I2C 2 RX (EMAC) 13 Synopsys UART 0 RX 29 Synopsys

I2C 3 TX (EMAC) 14 Synopsys UART 1 TX 30 Synopsys

(13)

要求受容能力

DMAC は、各ペリフェラル要求インタフェースに 1 つのアクティブ要求を受信するこ とができます。 アクティブな要求は、DMAC が要求された AXI データ転送を開始して いない場合に発生します。

ペリフェラル・レングスの管理

ペリフェラル要求インタフェースは、DMAC が含むデータ転送の量を意識することな く、DMA サイクルに含まれるデータの量を制御するためにペリフェラルをイネーブ ルします。 ペリフェラルには、次のいずれかの方法で DMA サイクルを制御します。 ■ シングル転送を選択します。 ■ バースト転送を選択します。 ■ 現在のシリーズの最後の要求を開始したときに DMAC を通知します。 DMAC が DMAWFP ペリフェラル命令を実行する場合、スレッドの実行を停止し、要求 を送信するまでのペリフェラルを待っています。 ペリフェラルが要求を送信すると、 DMAC は以下の信号の状態に応じて要求フラグの状態を設定します。 ■ drtype_<x>[1:0]—DMAC は request_type フラグの状態を設定します。 ■ drtype_<x>[1:0]=b00—request_type<x> = シングル ■ drtype_<x>[1:0]=b01—request_type<x> = バースト ■ drlast_<x>—DMAC は request_last フラグの状態を設定します。 ■ drlast_<x>=0—request_last<x> = 0 ■ drlast_<x>=1—request_last<x> = 1

1 DMAC は DMAWFP シングルまたは DMAWFP バースト命令を実行した場合、DMAC は以下を

設定します。 ■ request_type<x> は、シングルまたはバーストにそれぞれフラグします。request_last<x> は、0 にフラグします。 DMALPFE は、nf ビットが 0 に設定されているために、関連付けられた DMALPEND 命令を 強制するアセンブラ・ディレクティブです。 これによって、ループ終了のために、 ループ・カウンタを使用しないプログラム・ループが作成されます。 request_last フラグが1 に設定すると、DMAC は、ループを終了します。

DMAC は条件付きで request_type と request_last フラグの状態に応じて、次の手 順を実行します。

■ DMALD、DMAST、DMALPEND

これらの命令がオプションの B|S サフィックスを使用する場合、 request_type フ ラグが一致しないと、DMAC は DMANOP を実行します。

■ DMALDP<B|S>、DMASTP<B|S>

request_type<x> フラグがB|S と一致しない場合、DMAC は DMANOP を実行します。

■ DMALPEND

nf ビットが0 のとき、DMAC は request_last フラグが設定されている場合、DMANOP

(14)

DMAC がバースト要求を受信したときに、DMAC がバースト転送を発行するために必 要な場合、DMALDB、DMALDPB、DMASTB および DMASTPB 命令を使用します。 CCRn レジス タでの値は DMAC が転送するデータの量を制御します 。

DMAC がシングル要求を受信したときに、DMAC はシングル転送を発行するために必 要な場合、DMALDS、DMALDPS、DMASTS および DMASTPS 命令を使用します。 DMAC は、

CCRn レジスタにsrc_burst_len と dst_burst_len フィールドの値を無視して、arlen[3:0]

または awlen[3:0] バスを 0x0 に設定します。

DMAC レングスの管理

DMAC が転送するデータの総量を制御する場合には DMA レングス管理と言います。 ペリフェラルは、DMAC がペリフェラルに(またはペリフェラルから)のデータを転 送する必要があるとき、DMAC を通知するためにペリフェラル要求インタフェースを 使用します。 DMA チャネル・スレッドは、DMAC はペリフェラルの要求に応答する方 法を制御します。 次の制約は、DMAC レングスの管理に適用されます。 ■ ペリフェラルからのすべてのシングル要求のデータの総量は、そのペリフェラル のバースト要求に対するデータの量よりも小さくなければなりません。 1 CCRn レジスタは 1 つのバースト要求およびシングル要求のために転送され るデータ量を制御します。転送チャネル n の進行しているときに CCRn レ ジスタを更新しないことを推奨します 。 ■ ペリフェラルがバースト要求を送信すると、DMAC によってバーストの要求が完 了したと認められるまで、ペリフェラルはシングル要求を送信しないことです。 ペリフェラル要求インタフェースは任意の要求タイプを受信するまでプログラム・ スレッドが実行を停止する必要がある場合、DMAWFP のシングル命令を使用します。 要 求 FIFO バッファの先頭のエントリが以下の要求タイプの場合: ■ シングル —DMAC は、FIFO バッファからエントリをポップし、プログラムの実行を 継続します。 ■ バースト —DMAC は、FIFO バッファ内のエントリを残し、プログラムの実行を継続 します。

1 バースト要求エントリは、DMAC が DMAWFP バースト命令または DMAFLUSHP命

令を実行するまで要求 FIFO バッファに残っています。 ペリフェラル要求インタフェースはバースト要求を受信するまでプログラム・ス レッドが実行を停止する必要がある場合、DMAWFP バースト命令を使用します。 要求 FIFO バッファの先頭のエントリは、以下の要求タイプの場合: ■ シングル —DMAC は、FIFO バッファおよびプログラムの実行からエントリを除去し ます。 ■ バースト —DMAC は FIFO バッファからエントリをポップし、プログラムの実行を継 続します。

(15)

AXI のリード転送を完了するとき、DMAC はペリフェラルに確認応答を送信する必要

がある場合、DMALDP 命令を使用します。 同様に、AXI のライト転送を完了すると、

DMAC はペリフェラルに確認応答を送信するために必要とするとき、DMASTP 命令を 使用します。 DMAC はペリフェラル <x> への転送の確認応答を通知するために認める バスを使用します。

1 rvalid と rlast 信号がHigh の場合、DMAC はリード・トランザクションのための確認

応答を送信し、そして bvalid 信号が High の場合ライト・トランザクションを送信 します。ライト・データから最終デスティネーションへ転送が進行する時、DMAC は ペリフェラルに確認応答を送信する場合があります。

ペリフェラル要求インタフェースの要求 FIFO バッファをリセットするために

DMAFLUSHP 命令を使用します。 DMAC は DMAFLUSHP 実行された後、ペリフェラルにはフ

ラッシュ要求を確認するまで、ペリフェラルの要求を無視します。 これは、DMAC お よびペリフェラルがお互いに同期させることができます。

制限

DMA ペリフェラル要求インタフェースに接続されたペリフェラルは、次のプロトコ ルのいずれかを使用します。 ■ ARM ■ Synopsys ■ Bosch ARM のプロトコルを使用するペリフェラルの場合、DMA とペリフェラルの間で唯一 のロジックは、クロック・クロッシング・ロジックです。 他のプロトコルの場合、ク ロック・クロッシング・ロジックおよびプロトコル・アダプテーション・ロジック は、DMA とペリフェラル間に位置しています。 次の項では、Synopsys または Bosch のプロトコルを使用してペリフェラルのためのハンドシェイク・ペリフェラル・イ ンタフェースの限界を説明します。

バーストのみ要求

CAN コントローラによって使用される Bosch プロトコルは、バースト要求のみサ ポートします。 結果として、いつでも CAN コントローラがペリフェラル・バースト 要求を発行するときに、DMA コントローラは、バーストおよびシングルの要求を受 信します。

フラッシュ・サポートなし

Bosch または Synopsys ペリフェラル要求プロトコルを使用するペリフェラルには、 フラッシュ・コマンドがサポートされません。Bosch または Synopsys プロトコルを サポートしているすべてのペリフェラル・インタフェースにフラッシュを発行する と、ペリフェラルに到達する前にドロップされます。

確認なしタイプ

Bosch ペリフェラル要求インタフェース・プロトコルの場合、使用可能なアクノリッ ジはありません。 結果としてどちらの CAN コントローラに確認を発行することは、 ペリフェラルに到達する前にドロップされます。

(16)

Synopsys ペリフェラル要求インタフェース・プロトコルの場合、使用可能なタイプ の認識はありません。 結果として、Synopsys プロトコルを使用しているペリフェラ ルは、バーストとシングル転送に区別することはできません。

イベントと割り込みの使用

DMAC は 8 イベントおよび割り込みをサポートすることができます。 INTEN レジスタ は、各イベント割り込みリソースがどちらかのイベントまたは割り込みであるかど うかを制御するために使用されます。 DMAC は DMASEV 命令を実行すると、指定したイベントの割り込みリソースを変更し ます。 INTEN レジスタは以下のように機能させるには、イベント割り込みリソースを 設定します。 ■ Event—DMAC は指定されたイベント割り込みリソースのイベントを生成します。 DMAC は、同じイベント割り込みリソースの DMAWFE 命令を実行すると、イベン トがクリアされます。 ■ Interrupt—DMAC は <event_num> が指定されたイベント・リソースの数のとき、

irq<event_num> 信号をHigh に設定します。割り込みをクリアするには、INTCLR レ

ジスタに書き込む必要があります。

DMA チャネルを再起動するイベントの使用

イベントを生成するために、INTEN レジスタをプログラミングする際、1 つまたは複 数の DMA チャネルを再起動するために DMASE および DMAWFE 命令を使用できます。 DMAC が DMASEV 前に DMAWFE を実行する

シングル DMA チャネルを再起動するには:

1. 最初の DMA チャネルは DMAWFE 実行し、そしてイベントが発生するまで待ちなが ら停止します。

2. 他の DMA チャネルは、同じイベント番号を使用して DMASEV を実行します 。 これ

は、イベント、最初の DMA チャネルの再起動が発生します。 DMAC は、DMASEV を 実行した後の 1 クロック・サイクルにイベントをクリアします。

同じイベントを待機する複数のチャネルをプログラムすることができます。 たとえ ば、4 つの DMA チャネルがイベント 2 のためのすべての実行された DMAWFE を持って いる場合、そして別の DMA チャネルは、イベント 2 の DMASEV を実行したときに 、 その 4 つの DMA チャネルは、すべて同時に再起動します。 DMAC は、DMASEV を実行 した後の 1 クロック・サイクルにイベントをクリアします。

DMAC が DMAWFE 前に DMASEV を実行する

DMAC が DMASEV 実行された場合、別のチャネルが DMAWFE 実行する前に、DMAC は

DMAWFE 実行されるまで、イベントは保留状態を維持します。DMAC が DMAWFE を実行す

る場合、それは、1 の aclk クロック・サイクルの実行を停止させて、イベントをク リアした後チャネルのスレッドの実行を継続します。

(17)

例えば、DMAC が DMASEV を実行し、そして他のスレッドが DMAWFE 6 を実行しな かった場合、イベントは保留状態を維持します。 DMAC がチャネル 4 の DMAWFE 6 命 令を実行した後、次に、チャネル 3 DMAWFE 6 命令を実行した場合: 1. 1 aclk クロック用のチャネル 4 スレッドの DMAC の実行を停止します。 2. DMAC はイベント 6 をクリアします。 3. DMAC はチャネル 4 スレッドの実行を再開します。 4. それはイベント 6 の次の発生を待っている間、チャネル 3 スレッドの DMAC の実 行を停止し、スレッドが停止します。

MPU サブシステムの割り込み

DMAC は、MPU のサブシステムへのアクティブ High のレベル・センシティブの割り

込みとして使用するために irq[x] の信号を提供します。 DMAC が DMASEV を実行した

後、割り込みを生成するために INTEN レジスタをプログラムするときに、対応する

irq[x] 信号がHigh に設定されます。

MPU のサブシステムは、INTCLR レジスタに書き込むことによって、割り込みをクリ アすることができます。

1 DMAWFE を実行すると、割り込みをクリアしていません。

DMAC は DMALD または DMAST 命令を完了した時にマイクロプロセッサに通知するた めの DMASEV 命令を使用している場合、DMASEV 前にメモリ・バリア命令を挿入するこ とを推奨します。 それ以外の場合、AXI の転送が完了する前に、DMAC は割り込みを 通知することがあります。例 16–1を参照してください。

停止

この項では以下について説明します。 ■ 停止のタイプ ■ 停止のソース ■ ウォッチドッグ停止 ■ 停止の処理

停止のタイプ

停止が発生した場合、DMAC の正確な状態で DMAC が停止ハンドラを提供することに 応じて、正確または不正確のいずれかに分類することができます。 停止が以下の場 合: 例 16‒1. メモリ・バリア命令 DMALD DMAST

# Issue a write memory barrier

# Wait for the AXI write transfer to complete before the DMAC # can send an interrupt

DMAWMB

# The DMAC sends the interrupt DMASEV

(18)

Precise DMAC は中止を作成した命令のアドレスを使用して PC レジスタを更新しま す。 ■ Imprecise PCレジスタは停止が発生しない命令のアドレスが含まれる場合がありま す。

停止のソース

DMAC は以下の条件下で正確な停止を通知します。 ■ Non-secure 状態の DMA チャネルのスレッドには、CCRn レジスタをプログラムしよ うとして、セキュア AXI トランザクションを生成します。 ■ Non-secure 状態の DMA チャネルのスレッドがセキュアとして設定されているイベ

ントの DMAWFE または DMASEV を実行します 。 boot_irq_ns メモリ・マップのコン トロール信号は、イベントのためにセキュリティ状態を初期化します。

1 各イベントについて、INTEN レジスタは DMAC が割り込みとしてイベントま

たは信号を生成することをコントロールします。

■ DMA チャネル・スレッドは DMAST を実行しようとしますが、DMAC は最終的にスト

アを実行したときに、MFIFO バッファは、ストアを完成させるには不十分なデー タが含まれていることが計算されます。 ■ Non-secure 状態の DMA チャネルのスレッドがセキュアとして設定されているペリ フェラルの要求インタフェース用は DMAWFP、DMALDP、DMASTP、または DMAFLUSHP を実行します 。boot_periph_ns は 、メモリ・マップのコントロール信号は、ペ リフェラル要求インタフェースのセキュリティの状態を初期化します。

■ Non-secure 状態での DMA マネージャ・スレッドは、安全の DMA チャネル・スレッ

ドを開始しようとする DMAGO を実行します 。 ■ DMAC は命令フェッチが実行されるとき AXI マスタ・インタフェース上のエラー応 答を受信します。 ■ スレッドが未定義命令を実行します。 ■ スレッドは、DMAC の設定に無効であるオペランドを持つ命令を実行します。 1 DMAC は正確な停止を通知する場合、停止をトリガする命令は実行されません。 その 代わりに、DMAC は DMANOP. を実行します 。 DMAC は以下の条件で不正確な停止を通知します。

■ データのロードを実行するとき DMAC は AXI マスタ・インタフェース上で ERROR 応

答を受信します。

■ データ・ストアを実行するとき DMAC は AXI マスタ・インタフェース上で ERROR 応

答を受信します。

■ DMA チャネル・スレッドは DMALD または DMAST 実行し、MFIFO バッファが必要な

データ量を保持するには小さすぎます。

■ DMA チャネル・スレッドは DMAST 実行されますが、スレッドが十分 DMALD 命令を実

行していません。

■ DMA チャネル・スレッドは、リソースの飢餓でロック・アップし、これは内部の

(19)

ウォッチドッグ停止

1 つ以上の DMA チャネル・プログラムが実行されている場合、DMAC がロックアッ プすることができ、MFIFO バッファは DMA プログラムのストレージ要件を満たすた めには小さすぎます。 DMAC は DMA 転送を完了できない状態で維持することを防ぐためのロジックが含ま れています。 DMAC は次のすべての条件が発生したときにロック・アップ検出します。 ■ ロードキューが空です。 ■ ストアキューが空です。 ■ 実行中のすべてのチャネルは、MFIFO バッファに十分な空き領域がないか、また は別のチャネルにロード・ロックを所有しているため、DMALD 命令を実行する ことが防止されています。 DMAC はロックアップを検出したときに割り込みを通知し、貢献チャネルを中止する こともできます。 DMAC の動作は、WD レジスタの wd_irq_only ビットの状態に依存し ます。 この場合:

■ wd_irq_only=0—DMAC は貢献 DMA チャネルのすべてを停止して、irq_abort 信号

が High に設定します。

■ wd_irq_only=1—DMAC は irq_abort 信号が High に設定します。

詳細は、16–28 ページの「DMA チャネル間のリソースの共有」を参照してください。

停止の処理

DMAC のアーキテクチャは停止から回復するようにデザインされていません。した がって、停止が発生したときにスレッドを終了するには、マイクロプロセッサなど の外部エージェントを使用する必要があります。

(20)

図 16–4 には、停止が発生した後、DMA チャネルおよび DMA マネージャ・スレッド の動作状態を示します。 停止が発生した後、DMAC の動作は、スレッド・タイプによって異なります。 ■ DMA チャネル・スレッド — スレッドは直ちに Faulting の完了状態に移行します。こ の状態では、DMAC は: ■ irq_abort 信号をHigh に設定します。 ■ DMA チャネルための命令の実行を停止します。 ■ 停止が正確なであることを提供する停止された命令のアドレスを含むように DMA チャネルにキャッシュ・エントリをすべて無効にし、CPCn レジスタを更 新します。 ■ リード・キューおよびライト・キューに残っている手順のために AXI アクセス を生成していません。 ■ 完了するには、現在アクティブな AXI トランザクションを許可します。 図 16‒4. 停止のプロセス

DMA channel thread DMA manager thread

Executing program thread Has an abort occurred? Yes No Active AXI transactions complete? No DMAKILL executed? Yes No Executing program thread Has an abort occurred? No

Thread moves to the Faulting completing state

Thread moves to the Faulting state

Thread moves to the Stopped state Yes

(21)

1 完全な DMA チャネルのトランザクションの後、スレッドは Faulting 状態に移 行します。

■ DMA マネージャ・スレッド — スレッドはすぐに Faulting 状態に移行して、DMAC は

irq_abort 信号がHigh に設定されます。 外部エージェントは、irq_abort 信号のアサーションに応答することができます。 ■ DMA マネージャが Faulting かどうかを決定する FSRD レジスタのステータスを読 み込みます。 Faulting 状態で、FSRD レジスタは、停止の原因を提供しています。 ■ DMA チャネルがエラー発生しているかどうかを決定するための FSRC レジスタ のステータスを読み込みます。 Faulting 状態で、FSRC レジスタは、停止の原因 を提供しています。 Stopped 状態に移行する Faulting 状態でのレッドをイネーブルするには、外部エー ジェントが必要です。 ■ DMAKILL命令のエンコーディングを使用してDBGINST0レジスタをプログラムし ます。 ■ DBGCMD レジスタに書き込みます。 1 停止されたスレッドがセキュアで保護されている場合、これらを更新する ために安全なスレーブ・インタフェースを使用する必要があります。 Faulting 状態のスレッドが DMAKILL 実行された後、Stopped 状態に移行します。

セキュリティの使用

リセットから DMAC を終了するとき、コンフィギュレーション信号の状態のセキュ リティを設定しています。 ■ DMA マネージャ・スレッド —DSR レジスタの DNS ビットは DMA マネージャ・スレッ ドのセキュリティ状態を返します。 ■ イベントと割り込み —CR3 レジスタの INS ビットは、イベント割り込みリソースの セキュリティ状態を返します。 ■ ペリフェラル要求インタフェース —CR4 レジスタの PNS ビットは、これらのインタ フェースのセキュリティ状態を返します。 さらに、各 DMA チャネル・スレッドは、チャネルが Stopped 状態でない場合に有効 するダイナミック・ノン・セキュア・ビットの CNS が含まれています。

Secure 状態での DMA マネージャ・スレッド

DNS ビットが0 である場合、DMA マネージャ・スレッドが Secure 状態で動作し、安全な 命令フェッチのみ実行します。Secure 状態における DMA マネージャ・スレッドがプ ロセスするときに、 ■ DMAGO—DMAC はそのチャネルの CNS ビットに書き込むことで、DMA チャネル・ス レッドのセキュリティ状態を設定するためには、ns ビットの状態を使用していま す。 ■ DMAWFE—DMAC はイベントが発生するまでスレッドの実行を停止します。イベン トが発生すると、無関係に対応 INS ビットのセキュリティ状態に DMAC はスレッ ドの実行を継続します。

(22)

■ DMASEV—DMAC は無関係に対応 INS ビットのセキュリティ状態の INT_EVENT_RIS レ ジスタの対応するビットを設定します。

Non-Secure 状態の DMA マネージャ・スレッド

DNS ビットが1 の場合、DMA マネージャ・スレッドは、Non-secure 状態で動作し、非セ キュア命令フェッチのみ実行します。非セキュア状態における DMA マネージャ・ス レッドをプロセスする場合、 ■ DMAGO—DMAC は、DMA チャネル・スレッドを開始した場合を制御するために、ns ビットの状態を使用しています。 ■ ns = 0—DMAC は DMA チャネル・スレッドを起動していません。その代わりに、 DMAC は、 ■ NOP を実行します。 ■ FSRD レジスタを設定します。 ■ FTRD レジスタの dmago_err ビットを設定します。 ■ Faulting 状態に DMA マネージャを移動します。

■ ns = 1—DMAC は Non-secure 状態での DMA チャネル・スレッドを開始して、CNS

ビットが非セキュアであるためのプログラムします。

■ DMAWFE—DMAC は、イベントを待つ場合に制御するために、CR3 レジスタでの対応

する INS ビットのステータスを使用しています。もし、

■ INS = 0— イベントは、Secure 状態です。 DMAC は、

■ NOP を実行します。

■ FSRD レジスタを設定します。

■ FTRD レジスタの mgr_evnt_err ビットを設定します。

■ Faulting 状態に DMA マネージャを移動します。

■ INS = 1— イベントは、Non-secure 状態です。 DMAC はスレッドの実行を停止し

て、イベントが発生するまで待ちます。

■ DMASEV—DMAC は、イベント割り込みを作成した場合制御するために、CR3 レジス

タで対応する INS ビットのステータスを使用しています。もし、

■ INS = 0— イベント割り込みリソースが Secure 状態になっています。 DMAC は、

■ NOP を実行します。

■ FSRD レジスタを設定します。

■ FTRD レジスタの mgr_evnt_err ビットを設定します。

■ Faulting 状態に DMA マネージャを移動します。

■ INS = 1—イベント割り込みリソースがNon-secure状態になっています。 DMACは

イベント割り込みを作成します。

セキュア状態の DMA チャネル・スレッド

CNS ビットが0 の場合、DMA チャネル・スレッドが Secure 状態で動作するようにプログ

ラムされ、安全な命令フェッチのみ実行します。

(23)

■ DMAWFE—DMAC は、イベントが発生するまでスレッドの実行を停止します。 イベン トが発生すると、CR3 での対応する INS ビットのセキュリティ状態に関係なく DMAC はスレッドの実行を継続します。

■ DMASEV—CR3 での対応する INS ビットのセキュリティ状態に関係なく DMAC はス

レッドの実行を継続します。 ■ DMAWFP— ペリフェラルは DMA 要求を信号するまではスレッドの実行を停止しま す。これが発生すると、CR4 レジスタでの対応する PNS ビットのセキュリティ状 態に関係なく DMAC は、スレッドの実行を継続します。 ■ DMALDP および DMASTP—DMAC は、データ転送が CR4 レジスタでの対応する PNS ビッ トのセキュリティ状態に関係なく、データ送信が完了したことを通信するペリ フェラルにメッセージを送信します。 ■ DMAFLUSHP—DMAC は、ペリフェラルの状態をクリアし、CR4 レジスタでの対応す る PNS ビットのセキュリティ状態に関係なく、そのレベルのステータスを再送信 するためにペリフェラルにメッセージを送信します。

DMA チャネル・スレッドが Secure 状態である場合、DMAC は安全かつ非セキュア AXI アクセスを実行することができます。

Non-Secure 非セキュア状態の DMA チャネル・スレッド

CNS ビットが1 のとき、DMA チャネル・スレッドは、Non-secure 状態で動作するように プログラムされ、非セキュア命令フェッチのみ実行します。 Non-secure 状態の DMA チャネル・スレッドは、次の命令を処理します。 ■ DMAWFE—DMAC は、イベントを待つ場合に制御するために、CR3 レジスタでの対応 する INS ビットのステータスを使用しています。もし、

■ INS = 0— イベントは、Secure 状態になっています。DMAC は、

■ NOP を実行します。

■ DMA チャネル数に対応する FSRC レジスタに適切なビットを設定します。

FTRn レジスタの ch_evnt_err を設定します。

■ Faulting 状態に DMA マネージャを移動します。

■ INS = 1— イベントは、Non-secure 状態になっています。 DMAC は、スレッドの実

行を停止して、イベントが発生するまで待ちます。 ■ DMASEV—DMAC は、イベントを作成した場合制御するために、CR3 レジスタでの対 応する INS ビットのステータスを使用します。もし、 ■ INS = 0—DMAC: イベント割り込みリソースがセキュアな状態になっています。 DMAC は、 ■ NOP を実行します。 ■ DMA チャネル数に対応する FSRC レジスタに適切なビットを設定します。 ■ FTRn レジスタの ch_evnt_err を設定します。 ■ Faulting 状態に DMA マネージャを移動します。

■ INS = 1—イベント割り込みリソースがNon-secure状態になっています。 DMACは

(24)

■ DMAWFP—DMAC は、要求を通知するペリフェラルを待つ場合に制御するために、 CR4 レジスタでの対応する PNS ビットのステータスを使用します。もし、 ■ PNS = 0— ペリフェラルは、Secure 状態になっています。 DMAC は、 ■ NOP を実行します。 ■ DMA チャネル数に対応する FSRC レジスタに適切なビットを設定します。 ■ FTRn レジスタの ch_periph_err を設定します。 ■ Faulting 状態に DMA マネージャを移動します。 ■ PNS = 1— ペリフェラルは、Non-secure 状態になっています。 DMAC はスレッドの 実行を停止して、要求を通知するまでペリフェラルを待ちます。 ■ DMALDP および DMASTP—DMAC は、要求を通知するペリフェラルを待つ場合に制御 するために、CR4 レジスタでの対応する PNS ビットのステータスを使用します。 もし、 ■ PNS = 0— ペリフェラルは、Secure 状態になっています。 DMAC は、 ■ NOP を実行します。 ■ DMA チャネル数に対応する FSRC レジスタに適切なビットを設定します。 ■ FTRn レジスタの ch_periph_err ビットを設定します。 ■ Faulting 状態に DMA マネージャを移動します。 ■ PNS = 1— ペリフェラルは、Non-secure 状態になっています。DMAC は、データ 転送が完了したときに通信するペリフェラルへのメッセージを送信します。 ■ DMAFLUSHP—DMAC は、ペリフェラルへのフラッシュ要求を送信した場合に制御す る CR4 レジスタでの対応する PNS ビットのステータスを使用します。もし、 ■ PNS = 0— ペリフェラルは、Secure 状態になっています。 DMAC は、 ■ NOP を実行します。 ■ DMA チャネル数に対応する FSRC レジスタに適切なビットを設定します。 ■ FTRn レジスタの ch_periph_err ビットを設定します。 ■ Faulting の完了状態に DMA マネージャを移動します。 ■ PNS = 1— ペリフェラルは、Non-secure 状態になっています。 DMAC は、ペリフェ ラルの状態をクリアし、そのレベルのステータスを再送信するためにペリ フェラルにメッセージを送信します。

DMA チャネル・スレッドは、Non-secure 状態にあり、DMAMOV CCR 命令は、セキュア AXI トランザクションを実行するようにチャネルをプログラムしようとする場合、 DMAC は、 1. DMANOP を実行します。 2. DMA チャネル番号に対応 FSRC レジスタに適切なビットを設定します。 3. FTRn レジスタの ch_rdwr_err ビットを設定します。 4. Faulting の完了状態に DMA チャネル・スレッドを移動します。

(25)

使用方法の制約と制限

この項では、使用方法の制約と制限について説明します。

DMA チャネル・アービトレーション

DMAC はアクティブな DMA チャネルにサービスを提供するラウンド・ロビン方式を 使用しています。 DMAC は DMA マネージャにサービスを提供し続けていることを確 保するためには、常に前に次の DMA チャネルにサービスを提供する DMA マネー ジャにサービスを提供しています。 それは DMAC のアービトレーション・プロセスを変更することはできません。

DMA チャネルの優先順位付け

DMAC は等しい優先度を持つすべてのアクティブな DMA チャネルに応答します。 そ れは他の DMA チャネルを介して DMA チャネルの優先順位を上げることは不可能で す。

命令キャッシュのレイテンシ

キャッシュ・ミスが発生した場合、要求をサービスするためのレイテンシは、DMA コードを含むメモリのリード・レイテンシに主に依存しています。 DMAC が追加する レイテンシは最小限に抑えられます。

AXI データ転送サイズ

DMAC は、最大 64 ビット幅のデータ・アクセスのみ実行することができます。 src_burst_size または dst_burst_size フィールドを大きくするようにプログラムす る場合、DMAC は正確アボートを通知します。 詳細は、16–18 ページの「停止のソー ス」を参照してください。

AXI バースト・クロッシング 4 KB の境界

AXI 仕様では、AXI バーストが 4 KB のアドレス境界を越えることできません。シング ル・バーストに 4 KB アドレス境界を横断させるバースト・スタート・アドレス、サ イズおよびレングスの合成を持った DMAC をプログラムする場合、DMAC は、指定さ れたと等しい結合した長さの 1 ペアのバーストを生成します。この動作は、DMAC チャネル・スレッド・プログラムに対して透過的です。これにより、DMAC は AXI リード・バーストの適切なペアで生成することにより、シングル DMALD 命令に応答 することができます。

AXI バースト・タイプ

データ・アクセスのために固定アドレスまたはインクリメント・アドレス・バース トのタイプを生成するために DMAC をプログラムすることができます。 これは、デー タ・アクセスのためのラッピング・アドレス・バースト、または命令フェッチのに 生成しません。

AXI ライト・アドレス

DMAC は、8 つの傑出したライト・アドレスを発行することができます。 DMAC は、 そのライト・トランザクションを満たすために必要なデータ・バイトの全てに読み 出すまでライト・アドレスを発行しません。

(26)

インタリーブ AXI ライト・データ

DMAC はインタリーブされるライト・データを生成しません。 すべてのライト・デー タは次のライト・トランザクションのためにビートする前に、1 のライト・トランザ クションのすべてのライト・データ・ビートが出力されます。

プログラミングの制限事項

次の項では、DMAC をプログラミングする際に適用される制限事項について説明しま す。

修正されましたアラインメントされていないバースト

DMAC は、固定のアラインメントされていないバーストをサポートしていません。 以 下の条件をプログラムした場合、DMAC はプログラミング・エラーとしてこれを扱い ます。 ■ アラインメントされていないリード ■ CCRn レジスタの src_inc フィールドは 0 である。SARn レジスタは src_burst_size フィールドに含まれるデータのサイズにアラ インメントされていないアドレスが含まれている。 ■ アラインメントされていないライト ■ CCRn レジスタの dst_inc フィールドは0 である。 ■ DARn レジスタは dst_burst_size フィールドに含まれるデータのサイズにアラ インメントされていないアドレスが含まれている。

エンディアン・スワップのサイズ制限

CCRn レジスタに endian_swap_size フィールドをプログラムする場合 、エンディア ン・スワップを実行する DMA チャネルをイネーブルするために、DMALD または DMAST 命令を実行する前に、endian_swap_size フィールドが指定するサイズにアライ ンメントするアドレスを含むために対応する SARn レジスタおよび対応する DARn レ ジスタを設定する必要があります。 1 endian_swap_size、SARn、または DARn のいずれかを更新する場合( たとえば、

DMAADDH 命令を使用する)、SARn および DARn レジスタは endian_swap_size フィール

ドが追加の DMALD または DMAST 命令を実行する前に指定されているサイズにアライ ンメントされたアドレスが含まれていることを確認する必要があります。 CCRn レジスタでの src_inc フィールドを固定アドレスを使用するようにプログラム する場合、 endian_swap_size フィールドが指定されている値以上でバースト・サイ ズに src_burst_size フィールドをプログラムする必要があります。固定のデスティ ネーション・アドレスを選択する dst_inc フィールドをプログラムした場合、 endian_swap_size フィールドが指定されている値以上でバースト・サイズを選択す る dst_burst_size フィールドをプログラムする必要があります。 CCRn レジスタでの dst_inc フィールドをインクリメント・アドレスを使用するよう にプログラムする場合、 dst_burst_len 回の dst_burst_size は endian_swap_size の倍数になるように CCRn レジスタをプログラムする必要があります。 例えば、 endian_swap_size = 2、32 ビット、そしてバイトごとに dst_burst_size = 1、2 の場 合、2、4、6、...、16 転送の dst_burst_len = 1、3、5、...、15 をプログラムする ことができます。

(27)

DMA サイクル中の DMA チャネル・コントロール・レジスタの更新

DMALD と DMAST 命令のシーケンスを実行するDMAC する前に、CCRn レジスタ、SARn レ

ジスタ、および DARn レジスタにプログラム する値は、 ソース・アドレスからデス ティネーション・アドレスにデータを転送するとき、DMAC が実行するデータ・バイ ト・レーン操作をコントロールします。 DMA サイクル中にこれらのレジスタを更新することができますが、特定のレジス タ・フィールドを変更した場合、DMAC は、データを放棄する可能性があります。 以 下の項では、データ転送に悪影響を及ぼす可能性があるレジスタ・フィールドが記 載されています。 デスティネーション・アドレスに影響を与える更新 DMA サイクルの経由で DARn レジスタまたは CCRn レジスタを更新するために DMAMOV 命令を使用する場合、 デスティネーション・データ・ストリームの不連 続が発生する可能性があります。 次のいずれかを変更した場合に不連続が発生します。 ■ endian_swap_size フィールド ■ dst_inc ビット ■ dst_inc = 0 の場合の dst_burst_size フィールド(すなわち、固定アドレス・バー スト) ■ デスティネーション・バイト・レーン・アラインメントを変更する DARn レジス タ。バス幅は 64 ビットですので、 DARn レジスタでビット [2:0] を変更するしま す。 デスティネーション・データ・ストリーム内の不連続が発生した場合、DMAC は、 1. DMA チャネル・スレッドの実行を停止します。 2. チャネルに対するすべての未解決のリードおよびライト動作を完了します。 すな

わち、DMAC が DMARMB と DMAWMB を実行したかのようです。 3. チャネルに対する未解決の MFIFO バッファ・データを放棄します。 4. DMA チャネル・スレッドの実行を再開します。

ソース・アドレスに影響する更新

DMA サイクルの経由で SARn レジスタまたは CCRn レジスタを更新するために DMAMOV 命令を使用する場合、 ソース・データ・ストリームの不連続が発生する可能性があり ます。 次のいずれかを変更した場合に不連続が発生します。 ■ src_inc ビット。 ■ src_burst_size フィールド。 ■ ソース・バイト・レーン・アラインメントを変更する SARn レジスタ。バス幅は 64 ビットですので、 SARn レジスタでビット [2:0] を変更するします。 ソース・データ・ストリーム内の不連続性が発生すると、DMAC は、 1. DMA チャネル・スレッドの実行を停止します。 2. チャネルごとにすべての未解決の読み取り操作を完了します。すなわち、DMAC が DMARMB を実行したのようです。

参照

関連したドキュメント

テストが成功しなかった場合、ダイアログボックスが表示され、 Alienware Command Center の推奨設定を確認するように求め

事前調査を行う者の要件の新設 ■

題が検出されると、トラブルシューティングを開始するために必要なシステム状態の情報が Dell に送 信されます。SupportAssist は、 Windows

タップします。 6通知設定が「ON」になっ ているのを確認して「た めしに実行する」ボタン をタップします。.

旅行者様は、 STAYNAVI クーポン発行のために、 STAYNAVI

2 When tank mixing with sulfonylurea herbicides refer to the product label for rates and restrictions. Use the highest rate of surfactant when using the lower rate ranges of the

AC100Vの供給開始/供給停止を行います。 動作の緊急停止を行います。

原子炉圧力は、 RCIC、 HPCI が停止するまでの間は、 SRV 作動圧力近傍で高圧状態に維持 される。 HPCI 停止後の