汎用シリアル・フラッシュ・インターフェイスのインテルFPGA IPコアのユーザーガイド
バージョン情報
更新対象: |
---|
インテル® Quartus® Prime デザインスイート 19.3 |
IPバージョン 19.1 |
1. Intel FPGA IP FPGAコンフィグレーションのユーザー・ガイド
汎用シリアル・フラッシュ・インターフェイス IPを使用して、フラッシュデバイスに次のデータを書き込むことができます。
- コンフィグレーション・メモリー1Active Serial(AS)コンフィグレーション・スキームのコンフィグレーション・データ
- 汎用メモリー—アプリケーション固有のデータ
汎用シリアル・フラッシュ・インターフェイスのI/Oは次の機能をサポートします。
- シングル、デュアル、またはクアッドI/Oモード
- コントローラーがフラッシュからコードを直接実行できるようにする、Avalon Memory Mapped(Avalon-MM)スレーブ・インターフェイスを介した直接フラッシュアクセス
- 最大3つのマルチ・フラッシュ・デバイスのサポート( インテル® Arria® 10そして インテル® Cyclone® 10 GXデバイスのみ)
- フラッシュコントロール・ステータス・レジスターにアクセスするための汎用制御レジスター
- デバイスクロックの実行時ボーレート変更を備えたプログラマブル・クロック・ジェネレーター
- プログラマブル・チップ・セレクト遅延
- 高周波数で実行する場合のリードデータのキャプチャー・ロジック
- FPGAアクティブ・シリアル・メモリー・インターフェイス(ASMI)は、アクティブシリアル(AS)ピンへのアトム接続をブロックするか、FPGA I/Oピンにエクスポートする
1.1. デバイスファミリー・サポート
汎用シリアル・フラッシュ・インターフェイス IPは次のデバイスでサポートされています。
- インテル® Agilex™
- インテル® Stratix® 10
- インテル® Arria® 10
- インテル® Cyclone® 10 GX
- インテル® Cyclone® 10 LP
- インテル® MAX® 10 (汎用メモリーのみ)
- Stratix® V
- Arria® V
- Cyclone® V
- Stratix® IV
- Cyclone® IV
- Arria® II
1.2. 信号
信号 | 幅 | 入力/出力 | 説明 |
---|---|---|---|
CSR用の Avalon® -MMスレーブ・インターフェイス(avl_csr) | |||
avl_csr_addr | 6 | 入力 | Avalon® -MMアドレスバス。アドレスバス幅はワード・アドレッシング単位。 |
avl_csr_read | 1 | 入力 | CSRに対する Avalon® -MMリード制御。 |
avl_csr_rddata | 32 | 出力 | CSRから Avalon® -MMリード・データ・バス。 |
avl_csr_write | 1 | 入力 | CSRに対する Avalon® -MMライト制御。 |
avl_csr_wrdata | 32 | 入力 | Avalon® -MMがデータバスをCSRに書き込みます。 |
avl_csr_waitrequest | 1 | 出力 | CSRからの Avalon® -MM waitrequest制御 |
avl_csr_rddata_valid | 1 | 出力 | CSRリードデータが使用可能であることを示す有効なMMリードデータ。 |
メモリーアクセス用の Avalon® -MMスレーブ・インターフェイス(avl_ mem) | |||
avl_mem_write | 1 | 入力 | メモリーへの Avalon® -MMライト制御 |
avl_mem_burstcount | 7 | 入力 | メモリーの Avalon® -MMバーストカウント。値の範囲は1〜64(最大ページサイズ)です。 |
avl_mem_waitrequest | 1 | 出力 | メモリーからの Avalon® -MM waitrequest制御。 |
avl_mem_read | 1 | 入力 | メモリーへの Avalon® -MMリード制御 |
avl_mem_addr | N | 入力 |
Avalon® -MMアドレスバス。アドレスバスはワード・アドレッシングです。アドレスの幅は、フラッシュメモリーの密度によって異なります。 インテル® Arria® 10および インテル® Cyclone® 10 GXを使用している場合、または複数のフラッシュを備えた汎用I/Oを備えたサポートされているデバイスを使用している場合、CSRを記述してチップセレクトを選択します。このアドレスを介してアクセスされる場合、IPは選択されたフラッシュをターゲットにします。 |
avl_mem_wrdata | 32 | 入力 | メモリーへの Avalon® -MMライト・データ・バス |
avl_mem_readddata | 32 | 出力 | メモリーからの Avalon® -MMリード・データ・バス。 |
avl_mem_rddata_valid | 1 | 出力 | Avalon® - メモリー・リード・データが使用可能であることを示す Avalon® -MMリードデータ有効。 |
avl_mem_byteenble | 4 | 入力 | メモリーへの Avalon® -MMのライト・データ・イネーブル・バス。バスをイネーブルします。バーストモード中、バイトイネーブルバスはロジックハイ、4'b1111になります。 |
クロックとリセット | |||
clk | 1 | 入力 | IPコアをクロックする入力クロック。 |
reset | 1 | 入力 | IP コアへの非同期リセット入力です。 |
割り込み | |||
Irq | 1 | 出力 | 不正な書き込みまたは不正な消去があるかどうかを示す割り込み信号。 |
コンジット・インターフェイス 2 | |||
flash_data | 4 | 双方向 | フラッシュデバイスからデータを供給するための入力ポートまたは出力ポート。 |
flash_dclk | 1 | Output | フラッシュデバイスにclock信号を提供します。 |
flash_ncs | 1/3 | 出力 | フラッシュデバイスにncs信号を提供します。 |
1.3. パラメーター
パラメーター | 選択可能な値 | 説明 |
---|---|---|
Device Density | 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048 | Mbで使用されるフラッシュデバイスの密度。 |
Disable dedicated Active Serial interface | — | 信号をデザインの最上位にルーティングします。シリアル・フラッシュ・ローダーのインテルFPGA IPをデザインに含める場合、これをイネーブルします。 |
Enable SPI pins interface | — | 信号をSPIピン・インターフェイスに変換します。 |
Number of Chip Select used |
1 2 3 |
フラッシュに接続されているチップセレクトの数を選択します。 |
Enable flash simulation model | — | シミュレーション・モデルにデバイス内のフラッシュを使用します。 |
1.4. レジスター・マップ
オフセット(16進数) | レジスター名 | R/W | フィールド名 | ビット | デフォルト値(16進数) | 変更内容 |
---|---|---|---|---|---|---|
0 | Control Register | 予約済み | RCLK[31..8] | 予約 | ||
R/W | Addressing mode | 8 | 0x0 |
リードおよびライト動作のアドレッシング・モード:
4バイトのアドレッシング・モードの場合、フラッシュにコマンドを送信して4バイトアドレスをイネーブルする必要があります。 このビットはリードおよびライト動作の両方で、Avalon-MMインターフェイスを介したメモリーへの直接アクセスに影響します。 |
||
R/W | Chip select | 7:4 | 0x0 | フラッシュデバイスを選択します。
|
||
予約済み | 3:1 | 予約 | ||||
R/W | Enable | 0 | 0x1 | このビットを0に設定すると、IPの出力が無効になり、すべての出力信号が高インピーダンス状態になります。これは、他のデバイスとバスを共有するために使用できます。 | ||
1 | SPI Clock Baud-rate Register | 予約済み | 31:5 | 予約 | ||
R/W | Baud rate divisor | 4:0 | 0x10 |
IPには、フラッシュデバイスに接続するクロックを生成するための内部クロック分周器があります。可能な除数の値は2〜32で、増分は2です。 したがって、フラッシュが実行される最大クロックはIPのクロックの半分です。 IPが100Mhzクロックで実行されている場合、フラッシュのクロックは50Mhzです。 デフォルトでは、クロックは最も低いクロック(/ 32)に設定され、ほとんどの場合にIPが機能するようになっています。 除数値:
|
||
2 | CS Delay Setting Register | 予約済み | 31:8 | 予約 | ||
R/W | CS de-assert | 7:4 | 0x0 | チップ選択のアサート停止遅延を設定します。
|
||
R/W | CS assert | 3:0 | 0x0 | チップ・セレクト・アサーション遅延を設定します。
|
||
3 | Read Capturing Register | 予約済み | 31.4 | 予約 | ||
R/W | リード遅延 | 3:0 | 0x0 | クロックの出力タイミングとボードトレース、I/Oピンのタイミングは、IPロジックに到達するデータの遅延の大きな値に寄与する可能性があります。遅延キャプチャは、IPが読み取りロジックを遅延させてそれらの遅延を補正する方法を提供します。 IP_CLKサイクルの値だけリードデータロジックを遅延させます。 |
||
4 | Operating Protocols Setting Register | 予約済み | 31:18 | 予約 | ||
R/W | Read data out transfer mode | 17:16 | 0x0 | リードデータ出力の転送モード。 | ||
予約済み | 15:14 | 予約 | ||||
R/W | Read address transfer mode | 13:12 | 0x0 | リードアドレス入力の転送モード。ビット1:0として記述。 | ||
予約済み | 11:10 | 予約 | ||||
R/W | Write Data in transfer mode | 9:8 | 0x0 | ビット1:0としてのライトデータ入力説明の転送モード。 | ||
予約済み | 7:6 | 予約 | ||||
R/W | Write address transfer mode | 5:4 | 0x0 | ビット1:0としてのライトアドレス入力説明の転送モード。 | ||
予約済み | 3:2 | 予約 | ||||
R/W | Instruction transfer mode | 1:0 | 0x0 | オペコードの転送モード:
|
||
5 | Read Instruction Register | 予約済み | 31:14 | 予約 | ||
R/W | Dummy cycles | 12:8 | 0xA | リード動作に使用されるデフォルトのダミーサイクルの数。それぞれのフラッシュデバイスのデータシートを参照してください。 | ||
R/W | Read opcode | 7:0 | 0x03 | リード動作のオペコード。転送モード設定に従って正しいオペコードを選択するには、それぞれのフラッシュデバイスのデータシートを参照してください。 | ||
6 | Write Instruction Register | 予約済み | RCLK[31..16] | 予約 | ||
R/W | Polling opcode | RCLK[15..8] | 0x05 |
ライト動作が完了したかどうかを確認するオペコード。ライト動作が完了すると、IPはAvalon-MMインターフェイスの待機要求を解放します。 該当するデバイスでは、ステータスレジスターまたはフラグ・ステータス・レジスターとして設定できます。 |
||
R/W | Write opcode | 7:0 | 0x02 | ライト動作のオペコード。転送モード設定に従って正しいオペコードを選択するには、それぞれのフラッシュデバイスのデータシートを参照してください。 | ||
7 | Flash Command Setting Register4 | 予約済み | 31:21 | 予約 | ||
R/W | Number of dummy cycles | 20:16 | 0x0 | ダミーサイクルの数。動作にダミーサイクルが必要ない場合、0に設定します。ダミークロックの要件については、それぞれのフラッシュデバイスのデータシートを参照してください。 | ||
R/W | Number of data bytes | 15:12 | 0x08 | 書き込みまたはリードデータの数。これはビット11と連動します。値が0に設定されている場合、動作に書き込みまたはリードデータがない場合(書き込み可能など)。 | ||
R/W | Data type | 11 | 0x01 |
データのタイプを示します(ビット[15:12])。
|
||
R/W | Number of address bytes | 10:8 | 0x0 |
フラッシュデバイスに送信するアドレスバイト数(3または4バイト)。 これがゼロに設定されている場合、動作はアドレスバイトを伝送しません。 |
||
R/W | Opcode | 7:0 | 0x05 | 動作のオペコード。 | ||
8 | Flash Command Control Register | 予約済み | 31:1 | 予約 | ||
W | Start | 0 | 0x0 | 動作を開始するには、このビットに1を書き込みます。 | ||
9 | Flash Command Address Register | R/W | Stating address | 31:0 | 31:0 | フラッシュコマンドのアドレス。 |
A | Flash Command Write Data 0 Register | R/W | Lower 4 bytes write data | RCLK[31..0] | 0x0 | フラッシュデバイスへのライトデータの最初の4バイト。 |
B | Flash Command Write Data 1 Register | R/W | Upper 4 bytes write data | RCLK[31..0] | 0x0 | フラッシュデバイスへのライトデータの最後の4バイト。 |
C | Flash Command Read Data 0 Register | R | Lower 4 bytes read data | 31:0 | 0x0 | フラッシュデバイスからのリードデータの最初の4バイト。 |
D | Flash Command Read Data 1 Register | R | Upper 4 bytes read data | 31:0 | 0x0 | フラッシュデバイスからのリードデータの最後の4バイト。 |
1.5. 汎用シリアル・フラッシュ・インターフェイス IPの使用
1.5.1. コントロール・ステータス・レジスター動作
コントロール・ステータス・レジスターのライトまたはリード動作を実行するには、次の手順を実行します。
- avl_csr_waitrequest信号が低い間、avl_csr_writeまたはavl_csr_read信号をアサートします(waitrequest信号が高い場合、waitrequest信号が低くなるまでavl_csr_writeまたはavl_csr_read信号を高く維持する必要がある)。
- 同時に、avl_csr_addressバスにアドレス値を設定します。ライト動作の場合、アドレスとともにavl_csr_writedataバスに値データを設定します。
- リード・トランザクションの場合、avl_csr_readdatavalid信号がHighにアサートされるまで待機して、リードデータを取得します。
- フラッシュへの書き込み値を必要とする動作の場合、最初にライトイネーブル動作を実行する必要があります。
- 書き込みまたは消去コマンドを発行するたびに、フラグ・ステータス・レジスターを読み取る必要があります。
- 複数のフラッシュデバイスをサポートする場合、特定のフラッシュデバイスに対して動作を実行する前に、チップセレクトレジスターを書き込んで正しいフラッシュデバイスを選択する必要があります。
1.5.2. メモリー動作
フラッシュ・メモリー・アクセス中に、IPコアは次の手順を実行して、直接リードまたはライト動作を実行できるようにします。
- ライト動作のためのライトイネーブル
- フラグ・ステータス・レジスターをチェックして、フラッシュで動作が完了したことを確認します。
- 動作が完了したら、waitrequestシグナルを解放します。
メモリーー動作は Avalon® -MM動作に似ています。アドレスバスに正しい値を設定し、ライト・トランザクションの場合はデータを書き込み、単一トランザクションの場合はバーストカウントバス1を駆動し、目的のバーストカウント値を書き込み、ライトまたはリード信号をトリガーする必要があります。
Intel® Quartus® Primeプロ・エディションソフトウェアでデザインをコンパイルすると、Generic Flash Serial Interface Intel® FPGA IPコアに2つの内部制約のないクロックがあります。 Intel® は次のコマンドを使用してパスを制限することを推奨します。
create_generated_clock -name <name_of_generated_clock> -source [get_ports <input_clock_name>] -divide_by 2 [get_registers <path_of_the_unconstrained_path>]
1.6. 汎用シリアル・フラッシュ・インターフェイス Intel FPGA IPコアおよびリファレンス・デザイン
リファレンス・デザインは、 汎用シリアル・フラッシュ・インターフェイス Intel® FPGA IP次の汎用メモリー動作を実行します。
- デバイスIDの読み出し
- セクター保護のイネーブル
- セクター消去の実行
- フラッシュデバイスとの間でデータの読み出しと書き込み
1.6.1. ハードウェアおよびソフトウェア要件
デザイン例のハードウェアおよびソフトウェア要件は次のとおりです。
- Cyclone® V E FPGA Development Kit
- インテル® Quartus® Prime software version 18.0 with Nios® II Software Build Tools for Eclipse
- インテル®FPGAダウンロード・ケーブルII
- Tested
flash devices:
- Cypress* S70FL01G
- Micron* MT25Q01G
- Micron* MT25Q512
- EPCQ256
1.6.2. 機能の説明
1.6.2.1. リファレンス・デザインのコンポーネント
コンポーネント | 説明 |
---|---|
JTAG UART Intel FPGA IP | Nios® IIプロセッサーとホスト・コンピューター間の通信をイネーブルします。 |
Nios® II Processor | データと命令を実行してアプリケーション・プログラムを実行します。 |
On-Chip Memory Intel FPGA IP | コードおよびデータをストアします。 |
汎用シリアル・フラッシュ・インターフェイス Intel® FPGA IP | ベンダーに依存しないフラッシュデバイスを制御してフラッシュ・インタラクションを実行します。 |
1.6.2.2. リファレンス・デザイン・アプリケーションのプログラム
- アプリケーション・プログラムは、FPGAに接続されているフラッシュデバイスを識別することから始まります。 注: フラッシュデバイスは、このリファレンス・デザインのみを示すサンプルとして機能します。
- アプリケーション・プログラムは、セクター保護を実行し 、保護されたセクターを消去します。
- セクター保護を実行するには、アプリケーション・プログラムは:
- ライト・イネーブル・コマンドを実行します。
- ライト・ステータス・レジスター・コマンドを実行して、ブロック保護(BP)ビットとトップ/ボトム(TB)ビットを設定します。
- 0(準備完了)を返すまで、書き込み中(WIP)ビット(ステータスレジスターのビット0)をポーリングします。
- ライト・ステータス・レジスター・コマンドを実行して、セクター保護動作が成功したか失敗したかを確認します。
- セクター消去を実行するために、アプリケーション・プログラムは以下を実行します。
- セクター消去コマンドを実行します。
- 0(準備完了)を返すまで、書き込み中(WIP)ビット(ステータスレジスターのビット0)をポーリングします。
- ステータスレジスターの読み取りを実行して、消去動作が成功したか失敗したかを確認します。
- セクターが保護されているため、消去エラーが発生します。
- セクター保護を実行するには、アプリケーション・プログラムは:
- アプリケーション・プログラムは、エラーフラグをクリアします。
- フラグ・ステータス・レジスターのクリアコマンド(EPCQ-LまたはMicron* )。
- ステータスレジスターのクリアコマンド( Cypress* )。
- アプリケーション・プログラムは、セクター保護を無効にします。
- 書き込み可能コマンドを実行します。
- ステータスレジスター書き込みコマンドを実行して、BPビットとTBビットをクリアします。
- 0(準備完了)を返すまで、WIPビット(ステータスレジスターのビット0)をポーリングします。
- ステータスレジスターのリードコマンドを実行して、BPビットとTBビットがクリアされたかどうかを確認します。
- セクターが保護されていない場合、アプリケーション・プログラムはフラッシュデバイスのプログラミングを実行します。アプリケーション・プログラム:
- メモリーが空のアドレスにメモリーを書き込みます。
- WIPビット(ステータスレジスターのビット0)をポーリングし、0(準備完了)が返されるまでアドレスのメモリーをリードバックし、アドレスがプログラムされたことを確認します。
- 手順2を繰り返し、アドレスのメモリーを読み戻します。セクターが保護されているため、メモリーは消去されません。
1.6.3. Nios IIハードウェアシステムの作成
- インテル® Quartus® Primeソフトウェアでは、File > New Project Wizardに移動します。
- 新しいを作成します インテル® Quartus® Prime新しいディレクトリにあるgeneric_flash_accessというPrimeプロジェクトで、 Cyclone V E 5CEFA7F3117デバイスを選択します。
- Tools > Platform Designerを選択し、ファイルをgeneric_flash_access.qsysとして保存します。
- クロックソースclk_0をダブルクリックし、クロック周波数を100000000 Hz (100Mhz)に変更します。
- clk_0を右クリックし、名前をsys_clkに変更します 。
-
Nios® IIプロセッサーを追加します。
- Processor and Peripherals > Embedded Processors > Nios II Processorに移動し、Addをクリックします。
-
FinishをクリックしてNios IIプロセッサーをデザインに追加し、名前をnios2に変更します 。
注: まだ指定されていないパラメーターに関するメッセージは無視してください。
-
汎用シリアル・フラッシュ・インターフェイス IPを追加します。
- Basic Functions > Configuration and Programming > Generic Serial Flash Interface Intel FPGA IPを選択し、Addをクリックします。このコンポーネントの名前をintel_generic_serial_flash_interface_top0に変更します。
-
デバイス密度を設定します。
注: このリファレンス・デザインでは、1024MBのフラッシュデバイス密度を使用しています。
- avl_memとavl_csrにプロセッサーのdata_masterを接続します。そして、このコンポーネントの唯一avl_csrにプロセッサーのinstruction_masterを接続します。
-
オンチップメモリーを追加します。
- Basic Functions > On Chip Memory > On-Chip Memory (RAM or ROM) Intel FPGA IPを選択します。
- Total memory sizeを40960 Bytesに設定します。
- Finishをクリックし、main_memoryに名前を変更します。
- スレーブをプロセッサーのdata_masterおよびinstruction_masterに接続します。
-
JTAG UARTを追加します。
- Interface Protocols > Serial > JTAG UART Intel FPGA IPに移動しAddをクリックします。
- Finishをクリックして、名前をjtag_uartに変更します。
- そのavalon_jtag_slaveポートは、プロセッサーのdata_masterポートに接続します。
- IRQカラムで、 割り込み送信側ポートをAvalon_jtag_slaveポートからプロセッサーの割り込み受信側ポートに接続し、0を入力します。
- sys_clkのクロック入力を他のすべてのコンポーネントのクロック入力に接続します。
-
Platform Designerシステムを生成する前にすべてのNios IIプロセッサーのエラーメッセージを解決します。
- Nios IIプロセッサーnios2をダブルクリックします。
- Vectorsをクリックし、Reset vector memoryとException vector memoryの両方をmain_memory.s1に変更します。
- Systemタブをクリックし、ドロップ・ダウン・メニューのSystemをクリックして、すべてのコンポーネントの自動割り当てのベースアドレスにAssign Base Addressをクリックしてください。
- 同じメニューで、Create Global Reset Networkをクリックしてリセット信号を接続し、グローバル・リセット・ネットワークを形成します。
図 7. 完成しましたPlatform Designer接続 -
システムを生成します。
- ウィンドウの下部にあるGenerate HDLをクリックします。
- 完了すると、Platform DesignerはGenerate:Completed successfullyと表示されます。
1.6.4. インテル Quartus Primeプロジェクトへのモジュールの統合
- インテル® Quartus® Prime ソフトウェアで、Assignment > Settingsを選択します。
- Settingsウィンドウで、合成フォルダーにあるgeneric_flash_access.qysファイルを追加し、Applyをクリックします。
- generic_flash_access.qysファイルは、 Filesディレクトリの下に表示されます。ファイルを右クリックし、Set as Top-Level Entityを選択します。
- ハードウェアシステムが入力ピンと出力ピンを決定できるようにするには、Processing > Start > Start Analysis and Elaborationに進みます。
- Assignments > Pin Plannerに移動してピン割り当てを開始し、PIN_L14はclk_clkとして、PIN_AA26はreset_reset_nとして割り当てます。
- Assignments > Device > Device and Pin Options > Configurationに移動し、 Configuration schemeをActive Serial x1に変更します。
- ハードウェアシステムの完全なコンパイルを実行するには、Processing > Start > Start Analysis and Synthesisに進みます。
1.6.5. .sofファイルのプログラミング
- インテル® Quartus® Prime Programmerでは、Hardware setupをクリックし、FPGAを接続する正しいUSBチェーンを選択します。
- Auto Detectをクリックすると、5CEFA7F31が表示され、ファイルをtop.sofに変更します。
- Enable Program/ ConfigureそしてStartをクリックします。
1.6.6. Nios II Software Build Toolsを使用したアプリケーション・ソフトウェア・システムの構築
- インテル® Quartus® PrimeでTools > Nios II Software Build Tools for Eclipseに進みます。
- ワークスペース・ディレクトリーを参照します。
- Nios II Software Build Tools for Eclipseで、File > New > Nios II Application and BSP from Templateに移動します。
- SOPC Information File nameフィールドで、プロジェクト・ディレクトリーからgeneric_flash_access.sopcinfoを選択し、Openをクリックします。
- Project Nameでgeneric_flash_accessに設定し、Hello World Smallプロジェクトテンプレートを選択して、Finishをクリックします。
- generic_flash_accessプロジェクト・ディレクトリーで、hello_world_small.cファイルを、リファレンス・デザインに添付されているmain.cおよびoperation.cファイルに置き換えます。
- main.cファイルを選択しProject > Build Project to create the generic_flash_access.elfファイルに進みます。
- generic_flash_access.elfファイルを選択しRun > Run As > Nios II Hardwareに進みます。
- Nios II Consoleは、次の結果を出力します。
1.6.6.1. リファレンス・デザインのインストール
Flash Device: Cypress flash S70FL01G Device ID: 4d210201 All sectors in this flash device is not protected Now performing sector protection... All sectors in this flash device is now successfully protected Trying to erase sector 0... ERASE ERROR as sector is protected! Now perform sector unprotect... Sector unprotect successfully! :) Reading data at address 0... Memory content at address 0: abcd1234 Trying to erase sector 0... Sector erase successfully. Sector 0 is now empty. Writing data to address 0... Read back data from address 0... Current memory in address 0: abcd1234 Read data match with data written. Write memory successful.Now performing sector protection... All sectors in this flash device is now successfully protected Trying to erase sector 0... ERASE ERROR as sector is protected! Current memory in address 0: abcd1234 Read data match with data written previously. Sector erase does not perform during sector is protected.Micron* MT25Q01G:
Flash Device: Micron flash MT25Q01G Device ID: 1021ba20 All sectors in this flash device is not protected Now performing sector protection... All sectors in this flash device is now successfully protected Trying to erase sector 0... Erase Error as erase is not allow during sector is protected! Now perform sector unprotect... Sector unprotect successfully! :) Reading data at address 0... Memory content at address 0: abcd1234 Address 0 containing data, it is not empty. Trying to erase sector 0... Sector erase successfully. Sector 0 is now empty. Memory not containing data... Writing data to address 0... Read back data from address 0... Current memory in address 0: abcd1234 Read data match with data written. Write memory successful. Now performing sector protection... All sectors in this flash device is now successfully protected Trying to erase sector 0... ERASE ERROR as sector is protected! Current memory in address 0: abcd1234 Read data match with data written previously. Sector erase does not perform during sector is protected.Micron* MT25Q512:
Flash Device: Micron flash MT25Q512 Device ID: 1020ba20 All sectors in this flash device is not protected Now performing sector protection... All sectors in this flash device is now successfully protected Trying to erase sector 0... Erase Error as erase is not allow during sector is protected! Now perform sector unprotect... Sector unprotect successfully! :) Reading data at address 0... Memory content at address 0: abcd1234 Address 0 containing data, it is not empty. Trying to erase sector 0... Sector erase successfully. Sector 0 is now empty. Memory not containing data... Writing data to address 0... Read back data from address 0... Current memory in address 0: abcd1234 Read data match with data written. Write memory successful. Now performing sector protection... All sectors in this flash device is now successfully protected Trying to erase sector 0... ERASE ERROR as sector is protected! Current memory in address 0: abcd1234 Read data match with data written previously. Sector erase does not perform during sector is protected.EPCQ256:
Flash Device: EPCQ256 Device ID: 1019ba20 All sectors in this flash device is not protected Now performing sector protection... All sectors in this flash device is now successfully protected Trying to erase sector 0... Erase Error as erase is not allow during sector is protected! Now perform sector unprotect... Sector unprotect successfully! :) Reading data at address 0... Memory content at address 0: abcd1234 Address 0 containing data, it is not empty. Trying to erase sector 0... Sector erase successfully. Sector 0 is now empty. Memory not containing data... Writing data to address 0... Read back data from address 0... Current memory in address 0: abcd1234 Read data match with data written. Write memory successful. Now performing sector protection... All sectors in this flash device is now successfully protected Trying to erase sector 0... ERASE ERROR as sector is protected! Current memory in address 0: abcd1234 Read data match with data written previously. Sector erase does not perform during sector is protected.
1.7. 汎用シリアル・フラッシュ・インターフェイス Intel FPGA IPコアを使用したフラッシュアクセス
このセクションでは、この Intel® FPGA IPコアのレジスタを使用してフラッシュアクセスを実行する方法について説明します。 最初に、以下に示すように、いくつかのコンポーネント(clock、jtag master、pll、およびこの Intel® FPGA IPコア)でPlatform Designerシステムを構築します。 次に、次の例のフラッシュ動作を使用します。
フラッシュ動作はいくつかのカテゴリに分類されます。動作の例、使用するレジスター、および各カテゴリのサンプル.tclスクリプトが提供されています。
1.7.1. 動作コードを必要とするフラッシュ動作
次のフラッシュ動作には、動作コードが必要です。
- Write enable
- Enter 4-byte addressing mode
- Exit 4-byte addressing mode
- Clear flag status register
- Clear status register
以下のレジスターは、動作コードを必要とする動作に使用されます。
- Flash command setting register
- Flash command control register
フラッシュのライトイネーブル動作を実行する
proc write_enable { } {
global mp flash_cmd_setting flash_cmd_ctrl flash_cmd_write_data_0
master_write_32 $mp $flash_cmd_setting 0x00000006
master_write_32 $mp $flash_cmd_ctrl 0x1
}
フラッシュのライトイネーブル動作を実行するには、次の手順を実行します。
- グローバル変数を定義します。
- フラッシュコマンド設定レジスターに書き込むことにより、ライトイネーブル動作をカスタマイズします。
- 06hはライトイネーブル動作の動作コードであるため、このレジスターのビット[7:0]を06に設定します。
- フラッシュコマンド制御レジスターのビット0に1を書き込んで、ライトイネーブル動作を開始します。
1.7.2. フラッシュレジスターを読み出すフラッシュ動作
フラッシュレジスターを読み出すには、次のフラッシュ動作が使用されます。
- Read device ID
- Read status register
- Read flag status register
- Read configuration register
- Read bank register
- Read enhanced volatile configuration register
次のレジスターは、レジスターのステータスを読み取るために使用されます。
- Flash command setting register
- Flash command control register
- Flash command read data 0 register
デバイスIDのリード動作を実行する
proc read_device_id { } {
global mp flash_cmd_setting flash_cmd_ctrl flash_cmd_read_data_0
master_write_32 $mp $flash_cmd_setting 0x0000489F
master_write_32 $mp $flash_cmd_ctrl 0x1
set device_id [master_read_32 $mp $flash_cmd_read_data_0 1]
puts $device_id
}
リードデバイスID動作を行うには、以下のステップを実行します。
- グローバル変数を定義します。
- フラッシュコマンド設定レジスターに書き込むことにより、リードデバイスID動作をカスタマイズします。
- 9FhはリードデバイスID動作の動作コードであるため、このレジスタのビット[7:0]を9Fに設定します。
- この動作はアドレスバイトを伝送しないため、ビット[10:8]を0に設定します。
- ビット[15:12]で宣言されたバイト数がフラッシュデバイスからのリードデータであるため、ビット11を1に設定します。
- フラッシュから4バイトのデバイスIDデータを読み出すため、ビット[15:12]を4に設定します。
- フラッシュコマンド制御レジスターのビット0に1を書き込むと、デバイスIDのリード動作が開始されます。
- フラッシュコマンドのリードデータ0レジスターからデバイスIDを読み出します。
1.7.3. フラッシュレジスターを書き込むフラッシュ動作
フラッシュレジスターの書き込みには、次のフラッシュ動作が使用されます。
- Write enhanced volatile configuration register
- Write bank register
- Write status register
- Write configuration register
次のレジスターは、レジスターのステータスを書き込むために使用されます。
- Flash command setting register
- Flash command control register
- Flash command write data 0 register
フラッシュのセクターを保護するためのステータスレジスターライト動作の実行
proc write_status_register { } {
global mp flash_cmd_setting flash_cmd_write_data_0 flash_cmd_ctrl
master_write_32 $mp $flash_cmd_setting 0x00001001
master_write_32 $mp $flash_cmd_write_data_0 0x0000007c
master_write_32 $mp $flash_cmd_ctrl 0x1
}
ライト・ステータス・レジスター動作を実行するには、以下の手順に従います。
- グローバル変数を定義します。
- フラッシュコマンド設定レジスターに書き込むことにより、ステータスレジスターの書き込み動作をカスタマイズします。
- 01hはライト・ステータス・レジスター動作の動作コードであるため、このレジスターのビット[7:0]を01に設定します。
- この動作はアドレスバイトを伝送しないため、ビット[10:8]]を0に設定します。
- ビット[15:12]で宣言されたバイト数がフラッシュデバイスへのライトデータであるため、ビット11を0に設定します。
- 1バイト(8ビット)のデータをステータス・レジスターに書き込むため、ビット[15:12]を1に設定します。
- フラッシュコマンドのライトデータ0レジスターにセクター保護を設定するデータを書き込みます。
- ステータスレジスターのビット6およびビット[4:2]はブロック保護ビットで、ビット5はトップ/ボトムビットです。この例では、メモリーアレイの下からのすべてのセクターに保護が必要です。詳細については、それぞれのフラッシュデータシートを参照してください。
- フラッシュコマンド制御レジスターのビット0に1を書き込むと、セクター保護動作の書き込みステータスレジスターが開始されます。
1.7.4. アドレスが必要なフラッシュ動作
次のフラッシュ動作にはアドレスが必要です。
- Sector erase
- Bulk erase
- Die erase
次のレジスターは、アドレスを必要とする動作に使用されます。
- Flash command setting register
- Flash command control register
- Flash command address register
フラッシュセクターの消去動作を実行する
proc erase_sector { } {
global mp flash_cmd_setting flash_cmd_ctrl flash_cmd_addr_register
master_write_32 $mp $flash_cmd_setting 0x000004D8
master_write_32 $mp $flash_cmd_addr_register 0x00001000
master_write_32 $mp $flash_cmd_ctrl 0x1
}
セクター消去ド動作を実行するには、以下の手順に従います。
- グローバル変数を定義します。
- フラッシュコマンド設定レジスターに書き込むことにより、セクター消去動作をカスタマイズします。
- D8hはセクター消去動作の動作コードであるため、このレジスターのビット[7:0]をD8に設定します。
- 4バイトのアドレスがフラッシュデバイスに送信されるため、ビット[10:8]を4に設定します。
- ビット[15:12]で宣言されたバイト数がフラッシュデバイスへのライトデータであるため、ビット11を0に設定します。
- 消去するセクター内のアドレスを指定して、フラッシュ・コマンド・アドレス・レジスターに書き込みます。
- この例では、アドレス00001000に対してセクター消去動作を実行しています。
- フラッシュコマンド制御レジスターのビット0に1を書き込んで、セクター消去動作を開始します。
この Intel® FPGA IPコアは、拡張、デュアル、およびクアッドI/Oプロトコルでフラッシュをサポートします。現在、これでサポートされているプロトコル Intel® FPGA IPコアは単一転送速度(STR)のみです。この Intel® FPGA IPコアは、3バイトと4バイトの両方のアドレス指定モードをサポートしています。以下のセクションでは、メモリーおよびプログラム動作を読み取るためのさまざまなプロトコルとアドレス指定モードについて説明します。
1.7.5. フラッシュからメモリーを読み取る
リード・メモリーの実行には、次のレジスターが使用されます。
- Operating protocols setting register
- Control register
- Read instruction register
Perform the Read Memory (Extended Mode)
proc read { } {
global mp operating_protocols_setting control_register read_instr
master_write_32 $mp $operating_protocols_setting 0x00000000
master_write_32 $mp $control_register 0x00000001
master_write_32 $mp $read_instr 0x00000003
master_read_32 $mp 0x0100000 0x1
}
拡張モードのリード・メモリーを実行するには、次の手順を実行します。
- グローバル変数を定義します。
- 動作プロトコル設定レジスターに書き込み、メモリー読み出し動作の転送モードを設定します。この例では、読み取りの転送モードは(1-1-1)です。
- 命令転送モード[1:0]を0に設定し 、リ―ドアドレス転送モード[13:12]を0に設定し、読み出しデータ転送モード[17:16]を0に設定します。
- 制御レジスターに書き込み、リード・メモリー動作のバイトアドレッシング・モードを選択します。
- この例では、3バイトのアドレス指定モードを使用しています。ビット8を0に設定します 。
- 読み取り命令レジスターに書き込み、リード・メモリー動作をカスタマイズします。
- 03hは読み取り用の動作コードであるため、リード動作コード[7:0]を03に設定します。
- リード動作にはダミーサイクルが含まれないため、ダミーサイクル[12:8]を0に設定します。
- レジスターを設定した後、アドレスのメモリー内容の読み取りを実行できます。
- この例では、1ワードのデータがアドレス0x01000000から読み取られます。
デュアル出力高速読み出しの実行(デュアルSPIモード)
proc dual_output_fast_read { } {
global mp operating_protocols_setting control_register read_instr
master_write_32 $mp $operating_protocols_setting 0x00011001
master_write_32 $mp $control_register 0x00000101
master_write_32 $mp $read_instr 0x00000A3B
master_read_32 $mp 0x00000100 0x1
}
デュアル出力高速読み取りモードを実行するには、次の手順を実行します。
- グローバル変数を定義します。
- 動作プロトコル設定レジスターに書き込み、メモリー読み出し動作の転送モードを設定します。この例では、読み取りの転送モードは(2-2-2)です。
- 命令転送モード[1:0]を1に 、アドレス転送モード[13:12]を1に 、データ転送モード[17:16]を1に設定します。
- 制御レジスターに書き込み、リード・メモリー動作のバイトアドレッシング・モードを選択します。
- この例では、4バイトのアドレス指定モードを使用しています。ビット8を1に設定します。
- 読み取り命令レジスターに書き込み、リード・メモリー動作をカスタマイズします。
- 3Bhはデュアル出力高速読み取りの動作コードであるため、リード動作コード[7:0]を3Bに設定します。
- デュアル出力高速リード動作には10ダミーサイクルが含まれるため、ダミーサイクル[12:8]をAに設定します。
- レジスターを設定した後、アドレスのデュアル出力高速リード・メモリーコンテンツを実行できます。
- この例では、メモリーの内容はアドレス0x00000100から読み取られます。
1.7.6. プログラムフラッシュ
次のレジスターは、プログラムフラッシュの実行に使用されます。
- Operating protocols setting
- Control register
- Write instruction
ページプログラムの実行(拡張モード)
proc page_program { } {
global mp operating_protocols_setting control_register write_instr
master_write_32 $mp $operating_protocols_setting 0x00000000
master_write_32 $mp $control_register 0x00000001
master_write_32 $mp $write_instr 0x00007002
master_write_32 $mp 0x00001000 0x1234abcd
}
拡張モードのページプログラムを実行するには、次の手順を実行します。
- グローバル変数を定義します。
- 動作プロトコル設定レジスターに書き込み、プログラム動作の転送モードを設定します。この例では、読み取りの転送モードは(1-1-1)です。
- 命令転送モード[1:0]を1に 、アドレス転送モード[5:4]を1に 、転送モード[9:8]でデータを1に設定します。
- 制御レジスターに書き込み、ライト動作のバイトアドレッシング・モードを選択します。
- この例では、3バイトのアドレス指定モードを使用しています。ビット8を0に設定します。
- 書き込み命令レジスターに書き込み、プログラムの動作をカスタマイズします。
- 02hはページプログラムのオペレーションコードであるため、ライト・オペレーション・コード[7:0]を02に設定します。
- 70hはリード・フラグ・ステータス・レジスターの動作コードであるため、ポーリング動作コード[15:8]を70に設定します。 ライト動作が完了すると、 Intel® FPGA IPコアは Avalon® –MMインターフェイスの待機要求を解放します。 フラッシュにフラグステータスレジスターを読み込むには、リード・ステータス・レジスター(05h)を使用できます。
- レジスターを設定した後、メモリーをアドレスにプログラムし始めることができます。
- この例では、1234abcdhがメモリーアドレス0x00001000に書き込まれます。
4バイトのクワッド入力高速プログラムを実行(クワッドSPIモード)
proc fourbyte_quad_input_fast_program { } {
global mp operating_protocols_setting control_register write_instr
master_write_32 $mp $operating_protocols_setting 0x00000222
master_write_32 $mp $control_register 0x00000101
master_write_32 $mp $write_instr 0x00007034
master_write_32 $mp 0x00002000 0xabcd1234
}
4バイトのクワッド入力高速プログラムを実行するには、次の手順を実行します。
- グローバル変数を定義します。
- 動作プロトコル設定レジスターに書き込み、プログラム動作の転送モードを設定します。この例では、4バイトのクワッド入力高速プログラムの転送モードは(4-4-4)です。
- 命令転送モード[1:0]を2に 、書き込みアドレス転送モード[5:4]を2に 、転送モード[9:8]でデータを2に設定します。
- 制御レジスターに書き込み、ライト動作のバイトアドレッシング・モードを選択します。
- この例では、4バイトのアドレス指定モードを使用しています。ビット8を1に設定します。
- 書き込み命令レジスターに書き込み、プログラムの動作をカスタマイズします。
- 34hは4バイトのクワッド入力高速プログラムのオペレーションコードであるため、ライト・オペレーション・コード[7:0]を34に設定します。
- 70hはリード・フラグ・ステータス・レジスターの動作コードであるため、ポーリング動作コード[15:8]を70に設定します。 ライト動作が完了すると、 Intel® FPGA IPコアは Avalon® -MMインターフェイスの待機要求を解放します。 フラッシュにフラグステータスレジスターを読み込むには、リード・ステータス・レジスター(05h)を使用できます。
- レジスターを設定した後、メモリーをアドレスにプログラムし始めることができます。
- この例では、1234abcdhがメモリーアドレス0x00002000に書き込まれます。
1.8. 汎用シリアル・フラッシュ・インターフェイス Intel FPGA IPコアのユーザーガイドのアーカイブ
IPバージョンは、v19.1までの インテル® Quartus® Primeデザインスイートソフトウェア・バージョンと同じです。 インテル® Quartus® Primeデザインスイートソフトウェア・バージョン19.2以降では、IPコアに新しいIPバージョン管理スキームがあります。
IP コアバージョン | ユーザーガイド |
---|---|
18.1 | 汎用シリアル・フラッシュ・インターフェイス Intel® FPGA IPコアのユーザー・ガイド |
18.0 | 汎用シリアル・フラッシュ・インターフェイス Intel® FPGA IPコアのユーザー・ガイド |
1.9. 汎用シリアル・フラッシュ・インターフェイス Intel FPGA IPコアのユーザーガイドの改訂履歴
ドキュメント・バージョン | インテル® Quartus® Primeバージョン | IPのバージョン | 変更内容 |
---|---|---|---|
2019.11.27 | 19.3 | 19.1 | メモリー動作のトピックに説明を追加。 |
2019.09.30 | 19.3 | 19.1 |
|
2018.11.09 | 18.1 | 18.1 |
|
2018.05.16 | 18.0 | 18.0 |
|
2018.05.07 | 18.0 | 18.0 | 初版。 |