はじめに
Arria® V FPGA / Cyclone® V FPGA の メモリ・コントローラ は ODT( On Die Terminartion) 機能を
サポートしており、メモリデバイスの ODT を制御できます。
ODT の制御は FPGA に実装しているメモリ・コントローラ IP から出力する ODT 信号により行います。
一方、チップセレクト信号(信号名 : mem_cs)が2ビットの場合、mem_cs がアサートされているデバイスメモリに対して、ODT 信号(信号名 : mem_odt)がどのようにアサートするかを理解する必要があります。
この記事では、Arria® V FPGA / Cyclone® V FPGA の メモリ・コントローラ IP に チップセレクト信号が 2ビットを設定した場合、ODT 信号の2ビットがどのように振る舞うかを解説します。
ODT制御の概要
メモリデバイスの ODT の設定は、Arria® V FPGA / Cyclone® V FPGA のメモリ・コントローラ IP で
行うことが出来ます。
以下の図1はメモリ・コントローラ IP の "Memory Parameters" のタブで、このタブで設定した値が
メモリデバイスのモード・レジスタ (Mode Register 0/Mode Register 1/Mode Register 2)に
書き込まれます。
ODT 信号で制御できる ODT Rtt nominal と Dynamic ODT は、図1の赤枠で囲ったプルダウンで
選択できます。
図1 UniHY メモリ・コントローラ IP の モード・レジスタの設定画面
ODT Rtt nominal と Dynamic ODT は以下の意味となります。
・ODT Rtt nominal value :メモリに対してライトアクセス以外の時に有効になる ODT の設定
・Dynamic ODT (Rtt_WR) value :メモリへのライトアクセス時に有効になる ODT の設定
以下の資料も参照して下さい。
-
https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/hb/external-memory/emi_plan.pdf#page=84
=> 2.1.2. Dynamic ODT
ODT 信号が 2 ビットの場合でも、これらの ODT 信号に対する設定は 2 ビットとも共通で設定されます。
チップセレクト信号とODT信号の関係
チップセレクト信号が 2ビットの場合、ODT 信号の 2ビットは以下のように動作します。
■External Memory Interface Handbook Volume 3: ReferenceMaterial
8. Functional Description—HPC II Controller
8.3.7. ODT Generation Logic の項目
表1:mem_cs信号とmem_odt信号の動作関係
表1の "Write On" と "Read On" は以下のような意味になります。
- "Write On" :書き込みを行いたいチップセレクト信号 (mem_cs) のビット
- "Read On" :読み込みを行いたいチップセレクト信号 (mem_cs) のビット
表1から分かることは
- Write 時は "Write On" が mem_cs[0] と mem_cs[1] のいずれでも mem_odt[1:0] が Enable になる
- Read時は mem_cs のビットに対し mem_odt は逆のビットが Enable になる
となります。
実際に RTL シミュレーションを行いましたが、上記 表1 の Table 88 と Table 89 と同じ動きをしている事が確認できます。
図2:mem_cs信号とmem_odt信号のRTLシミュレーション波形
ODT 信号と Rtt_nom / Rtt_WR の関係
ODT に設定できる抵抗値は Rtt_nom と Rtt_WR の2種類があり、"ODT を使用しない" 又は ”RZQ/x に設定する"を選択できます。(図1参照)
チップレクト信号と ODT を信号の関係は、表1と図2から動作はわかりましたが、Rtt_nom と Rtt_WR の関連性は、どのようになっているのでしょうか。
ここでメモリデバイスへのアクセスの状態により、以下のように「アクティブ状態」と「スタンバイ状態」と定義します。
- アクティブ状態:チップセレクト信号がアサートされ、何らかのアクセスがされているメモリ
- スタンバイ状態:チップセレクト信号がディアサートされても、何もアクセスがされていないメモリ
この時、アクティブ状態/スタンバイ状態、Write/Read の各状態の時に、以下の表2のように Rtt_nom と Rtt_WR が採用されます。
Rtt_Nom = ON Rtt_WR = ON |
Rtt_Nom = ON Rtt_WR = OFF |
Rtt_Nom = OFF Rtt_WR = ON |
Rtt_Nom = OFF Rtt_WR = OFF |
|
アクティブ状態(Write) | Rtt_WR (1) | Rtt_Nom (2) | Rtt_WR (1) | Disable (3) |
アクティブ状態(Read) | Disable (4) | Disable (4) | Disable (4) | Disable (4) |
スタンバイ状態(Write) | Rtt_Nom (5) | Rtt_Nom (5) | Disable (6) | Disable (6) |
スタンバイ状態(Read) | Rtt_Nom (5) | Rtt_Nom (5) | Disable (6) | Disable (6) |
表2:ODT 信号と Rtt_nom と Rtt_WR の関係
(※ ON = ”RZQ/x に設定する"、OFF = "ODT の抵抗を使用しない")
表2の説明:
(1) Write であり Rtt_WR=ONとなっているため、RTT_WR が採用される
(2) Write であるが Rtt_WR=OFFとなっているため、RTT_Nom が採用される
(3) アクティブ状態ではあるが Rtt_Nom=OFF となっているため、ODT の抵抗は使用されない
(4) アクティブ状態のReadでは ODT の抵抗は使用されない
(5) スタンバイ状態のため、RTT_Nom が採用される
(6) スタンバイ状態ではあるが Rtt_Nom=OFF となっているため、ODT の抵抗は使用されない
まとめ
この記事では Arria® V FPGA / Cyclone® V FPGA で使用されるメモリ・コントローラ IP において、
チップセレクト信号と ODT 信号の関係を 表1 と 図2 を用いて解説しました。
また ODT 信号と Rtt_nom と Rtt_WR の関係を 表2 を用いて解説しました。
メモリ・コントローラ IP の設計の参考にして下さい。