JP2014506698A - メインメモリシステムを介して、コプロセッサ及び入出力(i/o)デバイスとインターフェースするシステム及び方法 - Google Patents
メインメモリシステムを介して、コプロセッサ及び入出力(i/o)デバイスとインターフェースするシステム及び方法 Download PDFInfo
- Publication number
- JP2014506698A JP2014506698A JP2013552802A JP2013552802A JP2014506698A JP 2014506698 A JP2014506698 A JP 2014506698A JP 2013552802 A JP2013552802 A JP 2013552802A JP 2013552802 A JP2013552802 A JP 2013552802A JP 2014506698 A JP2014506698 A JP 2014506698A
- Authority
- JP
- Japan
- Prior art keywords
- data
- address
- dimm
- memory
- ecc
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
- G06F11/1012—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
- G06F11/1016—Error in accessing a memory location, i.e. addressing error
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1076—Parity data used in redundant arrays of independent storages, e.g. in RAID systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
- G06F12/0607—Interleaved addressing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/40—Bus structure
- G06F13/4004—Coupling between buses
- G06F13/4027—Coupling between buses using bus bridges
- G06F13/404—Coupling between buses using bus bridges with address mapping
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4204—Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
- G06F13/4221—Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being an input/output bus, e.g. ISA bus, EISA bus, PCI bus, SCSI bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4204—Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
- G06F13/4234—Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being a memory bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4282—Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
- G06F3/0611—Improving I/O performance in relation to response time
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
- G06F3/0619—Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
- G06F9/4406—Loading of operating system
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/27—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes using interleaving techniques
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/06—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
- H04L9/065—Encryption by serially and continuously modifying data stream elements, e.g. stream cipher systems, RC4, SEAL or A5/3
- H04L9/0656—Pseudorandom key sequence combined element-for-element with data sequence, e.g. one-time-pad [OTP] or Vernam's cipher
- H04L9/0662—Pseudorandom key sequence combined element-for-element with data sequence, e.g. one-time-pad [OTP] or Vernam's cipher with particular pseudorandom sequence generator
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1008—Correctness of operation, e.g. memory ordering
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1032—Reliability improvement, data loss prevention, degraded operation etc
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7201—Logical to physical mapping or translation of blocks or pages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7208—Multiple device management, e.g. distributing data over multiple flash devices
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Probability & Statistics with Applications (AREA)
- Quality & Reliability (AREA)
- Computer Hardware Design (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Bus Control (AREA)
Abstract
コプロセッサ又は入出力デバイスとインターフェースするためのシステムを開示する。1つの実施の形態によれば、このシステムは、コンピュータ処理装置、メモリモジュール、コンピュータ処理装置とメモリモジュールとを接続するメモリバス、及び、コプロセッシングユニット又は入出力デバイスを有し、メモリバスは、また、このコプロセッシングユニット又は入出力デバイスをコンピュータ処理装置と接続させることを特徴とする。
【選択図】2
【選択図】2
Description
(関連出願の相互参照)
この出願は、2011年2月8日に出願された、米国仮特許出願番号61/457,233、及び、2011年11月22日に出願された、米国実用特許出願番号13/303,048、表題「メインメモリコプロセッサ及び入出力デバイス(Main Memory Co-processors And Input/Output Devices)」に基づく優先権を主張し、これらの出願は参照することにより本出願に組み込むものとする。
この出願は、2011年2月8日に出願された、米国仮特許出願番号61/457,233、及び、2011年11月22日に出願された、米国実用特許出願番号13/303,048、表題「メインメモリコプロセッサ及び入出力デバイス(Main Memory Co-processors And Input/Output Devices)」に基づく優先権を主張し、これらの出願は参照することにより本出願に組み込むものとする。
本発明は、一般にコンピュータの分野に関し、さらに詳細には、メインメモリシステムを介して、コプロセッサ及び入出力デバイスとのインターフェースに関する。
コンピュータシステムは、コンピュータシステムの様々な構成要素と接続するために複数のバスを用いる。バスは、システムを介して、種々の構成要素に情報(例えば、コマンド、アドレス、及びデータ)を伝達することができる。一般に異なるバスは異なるデータ帯域幅をサポートする。例えば、中央演算処理装置(CPU)とシステムメモリ(例えば、DRAM)とを接続するメインメモリバスは、I/Oバス(例えば、PCI、PCI−Express、等)によりサポートされている帯域幅より著しく高いデータ帯域幅をサポートすることができる。
従来から、コプロセッサ及びI/Oデバイスは、I/Oバスを介してコンピュータシステムとインターフェースしている。いくつかのI/O又は共同処理(コプロセッシング)アプリケーションに対して、I/Oバスを介してのコンピュータシステムとのインターフェースにより、適切な性能が得られている。しかしながら、I/Oバスによりサポートされている低い帯域幅が、しばしば、はるかに速い速度で動作することのできるI/O又はコプロセッシングアプリケーションにとって、通信におけるボトルネックとなっている。
従って、I/Oの能力及び性能の強化をもたらす、コンピュータシステムにおけるインターフェースコプロセッサ又はI/Oデバイス及びシステムの必要性が存在する。特に、メインメモリシステムを介してコプロセッサデバイスとインターフェースするシステム及び方法が必要となる。
コプロセッサ又はI/Oデバイスとインターフェースするためのシステムを開示する。1つの実施の形態によれば、このシステムは、コンピュータ処理装置、メモリモジュール、コンピュータ処理装置とメモリモジュールとを接続するメモリバス、及び、コプロセッシングユニット又は入出力デバイスを有し、メモリバスは、さらに、処理ユニット又は入出力デバイスをコンピュータ処理装置と接続することを特徴とする。
本明細書の一部となす添付図は、現時点での好ましい実施の形態を示し、上述の概要及び下記の好ましい実施の形態の詳細な説明と合わせて、ここに開示する原理の説明及び教示を行う。
I/Oバスを介してコプロセッサ又はI/O(CPIO)デバイスと接続するコンピュータアーキテクチャの一般的な従来技術のブロック図を示す。
1つの実施の形態による、I/Oの能力及び性能の強化をもたらす、メインメモリシステムを介してCPIOデバイスとインターフェースするコンピュータアーキテクチャのブロック図を示す。
1つの実施の形態による、デュアルランクテラDIMMのブロック図を示す。
1つの実施の形態による、典型的なシングルランクテラDIMMのブロック図を示す。
1つの実施の形態による、メモリバスが直接Rushに接続された典型的なシングルランクテラDIMMのブロック図を示す。
1つの実施の形態による、ディスカバリーブートローダを組み込んだ典型的なブートシーケンスを示す。
1つの実施の形態による、テラDIMMの初期化処理の典型的なフォローチャートを示す。
1つの実施の形態による、ディスカバリーブート処理の典型的なフォローチャートを示す。
1つの実施の形態による、ジェネレータ・ベクトルの各々を解く方法の典型的なフローチャートを示す。
1つの実施の形態による、ホストへ送られたデータをスクランブルするか又はホストから受け取ったデータのスクランブルを解くスクランブラーシーケンスを生成する回路の論理的な実施形態を示す。
1つの実施の形態による、最適なアドレスマッピングを生成する方法の典型的なフローチャートを示す。
1つの実施の形態による、DIMM物理アドレスビットをRush内部アドレスビットに関連付ける回路の論理的な実施形態を示す。
1つの実施の形態による、DIMM物理アドレスビットをRush内部アドレスビットに関連付ける回路の第2の論理的な実施形態を示す。
1つの実施の形態による、ECC及びインターリーブ(interleave)/スイッツル(swizzle)知得のステップについての例示的なフローチャートを示す。
1つの実施の形態による、ECCビットを計算するECC回路の論理的な実施形態を示す。
1つの実施の形態による、リードコマンドのコマンド及びデータのフローを示す論理ブロック図を示す。
1つの実施の形態による、ライトコマンドのコマンド及びデータのフローを示す論理ブロック図を示す。
図は必ずしも縮尺を合わせてはおらず、図全般にわたって表示目的で、類似の構成又は機能は、一般に、類似の参照番号で表現している。図は、ここに記載した種々の実施の形態の説明を容易にすることを意図するだけのものである。図はここに開示したものを示すすべての特徴を記述するものではなく、特許請求の範囲を制限するものでもない。
(先行技術)
図1は、I/Oバスを介してコプロセッサ又はI/O(CPIO)デバイスを接続するコンピュータアーキテクチャの典型的な先行技術のブロック図を示す。コンピュータシステム100は、一般に、CPU(中央演算処理装置)101と、メインメモリユニット102(例えば、1以上のDRAM(dynamic random access memory)モジュール)と、ビデオカード103、サウンドカード104、ハードドライブ108、及びSSD(ソリッドステートドライブ)105を含むCPIOデバイスと、を有する。これらの構成要素は、マザーボード(不図示)上のバスを介して接続されている。図示のとおり、CPU101、メインメモリユニット102、及びビデオカード103は、それぞれのバス111、112、及び112を介してノースブリッジ106に接続されている。ノースブリッジ106は、高速バスに接続された、マザーボードのチップセット中の伝統的なチップであり、FSB(フロントサイドバス)111、メインメモリバス112、及びPCI−E(peripheral component interconnect express)バス113を有している。
図1は、I/Oバスを介してコプロセッサ又はI/O(CPIO)デバイスを接続するコンピュータアーキテクチャの典型的な先行技術のブロック図を示す。コンピュータシステム100は、一般に、CPU(中央演算処理装置)101と、メインメモリユニット102(例えば、1以上のDRAM(dynamic random access memory)モジュール)と、ビデオカード103、サウンドカード104、ハードドライブ108、及びSSD(ソリッドステートドライブ)105を含むCPIOデバイスと、を有する。これらの構成要素は、マザーボード(不図示)上のバスを介して接続されている。図示のとおり、CPU101、メインメモリユニット102、及びビデオカード103は、それぞれのバス111、112、及び112を介してノースブリッジ106に接続されている。ノースブリッジ106は、高速バスに接続された、マザーボードのチップセット中の伝統的なチップであり、FSB(フロントサイドバス)111、メインメモリバス112、及びPCI−E(peripheral component interconnect express)バス113を有している。
PCIバス、USB(universal serial bus)115、及びSATA(serial advanced technology attachment)バス116を有する低速バスは、従来、サウスブリッジ107に接続されている。サウスブリッジ107は、チップセット中の他のチップであり、DMI(direct media interface)バス117を介してノースブリッジ106に接続されている。サウスブリッジ107は、低速バスを介して接続されているCPIOデバイス間の情報量を調整する。例えば、サウンドカード104は、一般に、PCIバス114を介してシステム100に繋がっている。ハードドライブ108及びSSD116のような記憶ドライブは、一般に、SATAバス116を介して繋がっている。キーボードからmp3ミュージックプレーヤーに至るまでの種々の他のデバイス109は、USB115を介してシステム100に接続することができる。
ハードドライブ108及びSSD105は共に、コンピュータシステム100の非揮発性データ記憶ユニットである。しかし、これらは異なる技術を用いて動作する。SSDの技術は、一般に、フラッシュメモリ技術のような機械的に動く部品を持たない半導体メモリ技術を用いてドライブを参照する。SSDの技術は、一般に、ハードドライブに比べて動作電力は少なく、読み取り速度は速い。非揮発性(例えば、フラッシュ)メモリ技術は進化を続けており、SSDをより入手しやすくしているので、SSDは徐々に多くの今日のコンピュータにおけるハードドライブと置き換えられている。
特定のCPIOデバイス(例えば、サウンドカード104)では、低速バスを介してコンピュータシステムに接続されている場合でも、十分なデータ帯域幅が得られる。しかし、高い帯域幅(例えば、そのバスでサポートされているものより早いスピードの入出力データ)で動作することのできるCPIOデバイス(例えば、SSD105)が低速バスを介して接続されている場合、それが入出力ボトルネックを形成することとなる。入出力能力及び性能を強化する、コンピュータシステムにおけるCPIOデバイスをインターフェースするシステム及び方法が必要となる。特に、メインメモリシステムを介してCPIOデバイスとインターフェースするシステム及び方法が必要となる。
(入出力能力及び性能を強化するシステム)
図2は、1つの実施の形態による、I/Oの能力及び性能の強化をもたらす、メインメモリシステムを介してCPIOデバイスとインターフェースするコンピュータアーキテクチャのブロック図を示す。コンピュータシステム200は、CPU(中央演算処理装置)201と、メモリユニット(例えば、DRAM)202と、ビデオカード203、サウンドカード204、ハードドライブ208、SSD205、及び汎用CPIOデバイス210を含むCPIOデバイスとを有する。これらの構成要素は、マザーボード(不図示)上でバスを介して相互に接続されている。図示の通り、CPU201、メインメモリユニット202、及びビデオカード203は、それぞれ、FSB211、メインメモリバス212、及びPCI−Eバス213を介して、ノースブリッジ206に接続されている。PCIバス214、USB215、及び、SATAバス216は、サウスブリッジ207に接続されている。図では、各ブロックの構成要素を個別の構成要素として示しているが、構成要素によっては1つ以上の他の構成要素と結合又は統合することもできる。例えば、インテルその他のベンダーにより生産された特定のCPUは、CPUの一部としてノースブリッジが含まれている。
(入出力能力及び性能を強化するシステム)
図2は、1つの実施の形態による、I/Oの能力及び性能の強化をもたらす、メインメモリシステムを介してCPIOデバイスとインターフェースするコンピュータアーキテクチャのブロック図を示す。コンピュータシステム200は、CPU(中央演算処理装置)201と、メモリユニット(例えば、DRAM)202と、ビデオカード203、サウンドカード204、ハードドライブ208、SSD205、及び汎用CPIOデバイス210を含むCPIOデバイスとを有する。これらの構成要素は、マザーボード(不図示)上でバスを介して相互に接続されている。図示の通り、CPU201、メインメモリユニット202、及びビデオカード203は、それぞれ、FSB211、メインメモリバス212、及びPCI−Eバス213を介して、ノースブリッジ206に接続されている。PCIバス214、USB215、及び、SATAバス216は、サウスブリッジ207に接続されている。図では、各ブロックの構成要素を個別の構成要素として示しているが、構成要素によっては1つ以上の他の構成要素と結合又は統合することもできる。例えば、インテルその他のベンダーにより生産された特定のCPUは、CPUの一部としてノースブリッジが含まれている。
図1に示した先行技術のアーキテクチャとは異なり、図2のコンピュータアーキテクチャでは、SSD205及び汎用CPIOデバイス210を、メインメモリバス212を介してコンピュータシステムに接続している。メインメモリユニット202(例えば、DRAM)と同様に、SSD205及び汎用CPIOデバイス210は、メインメモリバス212を介してノースブリッジ206内のメモリコントローラに接続されている。メインメモリバス212は一般に非常に広い帯域幅を(例えば、SATAバス216と比べて)サポートするので、このアーキテクチャは、SSD205又は汎用CPIOデバイス210のI/O性能を制限することとなっていたI/Oボトルネックを削除又は著しく軽減する。SSD205及び汎用CPIOデバイス210は、DIMM(デュアルインラインメモリモジュール)メモリスロットに挿入可能なように設計することが好ましい。
図2に示すように、本開示は、以下に説明する方法で、CPIOデバイスはメインメモリバスを介してコンピュータシステムと接続しインターフェースすることができることを意図するものである。CPIOデバイスには、ホストプロセッサからデータを受け取るあらゆるデバイスを含むことができ、受け取ったデータは、CPIOデバイスで修正されるか又は新しいデータを生成するためにCPIOデバイスで用いられ、修正されたデータ又は新しいデータは、ホストプロセッサに送り返される。コプロセッサの例として、暗号化、圧縮、ディジタル信号処理、画像処理、パターンマッチングが含まれる。入出力デバイスの例として、非揮発性記憶装置、無線通信装置、有線通信装置、RAID制御装置が含まれる。
SSD205は、以下の説明を容易にするために用いられるが、本明細書の範囲は、SSDのアプリケーション又は特定のCPIOデバイスのアプリケーションに限定するものではない。ここに開示した方法及びシステムは、あらゆるCPIOデバイスの使用に適用することができる。SSD205は、新しいタイプのCPIOデバイスに属する。先行技術のメモリデバイスと区別するため及び説明を簡単にするために、この新しいタイプのCPIOデバイスを、今後、「テラDIMM」と称する。名称及び表示(例えば、「テラDIMM」、「Rush」、「ボルト」、等)は、ここでは説明のためだけに用い、あらゆる意味で限定の目的で用いるものではない。
記憶用のCPIOデバイスにおいて、テラDIMMは、不揮発性メモリ(例えば、NANDフラッシュ、フェーズチェンジ、等)を、例えばDDR3メモリチャンネル又はDDR−4メモリチャンネルに組み込むことにより、CPUの仮想メモリ能力に適合することのできる物理メモリシステムを生成する能力のある新しいクラスのDIMMメモリである。将来のメモリ技術(例えば、DDR5、等)と互換性のあるテラDIMMは、この明細書の記載及びこの明細書の精神の範囲内である。
テラDIMMは、SSDと同じような役割を果たすが、PCI−Eデバイス又はディスクドライブの限定された数値と比べて、メインメモリシステムのフォームファクター/ロケーションから来る、平行度/帯域幅/拡張性で利点を持つ。テラDIMMは、仮想メモリスワップデバイス、一般化したファイルシステムデバイス、遠隔記憶のためのキャッシュレイヤーとして用いることができる。システムに関する限り、システムに接続されたとき、テラDIMMは、RDIMM(レジスタードDIMM)のような、標準のDIMMメモリデバイスのように見える。多くのテラDIMMの実施形態が検討されている。例えば、テラDIMMは、また、UDIMM(アンレジスタードDIMM)、LRDIMM(ロード・リデューストDIMM)、等のように見せることもできる。
テラDIMMは、バイキング・モジュラー・ソリューションズ(Viking Modular Solutions)で製造されているSATADIMMとは区別することができる。SATADIMMは、マザーボードのDIMMメモリスロット内に設置され、描画のためのDIMMメモリスロットを使わない点で利点がある。しかし、SATADIMMとのデータのやり取りのようなI/O動作は、SATADIMMに接続されたSATAケーブルにより行われる。従って、テラDIMMとは違い、SATADIMMは、I/O動作のためのメインメモリバスの非常に広い帯域幅を持つという利点はない。
(テラDIMMアーキテクチャ)
テラDIMMは、シングルランクDIMM、デュアルランクDIMM、或いは、クワッドランクDIMMとすることができる。1つの実施の形態において、シングルランクテラDIMMは、1つのランクの不揮発性メモリ(NVM)を有する。1つの実施の形態において、デュアルランクテラDIMMは、1つのランクのNVMと1つのランクのDRAMを有する。1つの実施の形態において、クワッドランクテラDIMMは、2つのランクのNVMと2つのランクのDRAMとを有する。この説明は、これらの実施の形態に限定するものではなく、増大させたランク(例えば、6ランク、8ランク、等)を有するテラDIMMも含まれる。メモリのランクは、一般に、同じチップ選択信号により選択されたモジュール上のメモリデバイスセットを指す。メモリモジュールにアクセスできるランク数はメモリコントローラに依存する。例えば、メモリスロット当たり2つのチップ選択信号を出すメモリコントローラは、メモリモジュール上の2つのランクまでアクセスすることができる。メモリスロット当たり4つのチップ選択信号を出すメモリコントローラは、メモリモジュール上の4つのランクまでアクセスすることができる。
(テラDIMMアーキテクチャ)
テラDIMMは、シングルランクDIMM、デュアルランクDIMM、或いは、クワッドランクDIMMとすることができる。1つの実施の形態において、シングルランクテラDIMMは、1つのランクの不揮発性メモリ(NVM)を有する。1つの実施の形態において、デュアルランクテラDIMMは、1つのランクのNVMと1つのランクのDRAMを有する。1つの実施の形態において、クワッドランクテラDIMMは、2つのランクのNVMと2つのランクのDRAMとを有する。この説明は、これらの実施の形態に限定するものではなく、増大させたランク(例えば、6ランク、8ランク、等)を有するテラDIMMも含まれる。メモリのランクは、一般に、同じチップ選択信号により選択されたモジュール上のメモリデバイスセットを指す。メモリモジュールにアクセスできるランク数はメモリコントローラに依存する。例えば、メモリスロット当たり2つのチップ選択信号を出すメモリコントローラは、メモリモジュール上の2つのランクまでアクセスすることができる。メモリスロット当たり4つのチップ選択信号を出すメモリコントローラは、メモリモジュール上の4つのランクまでアクセスすることができる。
シングルランクテラDIMMに対して、BIOSのメモリテストを通過するようBIOS(basic input/output system)の変更がなされる。BIOSは、最初に電源を入れたときハードウェアをセットアップし、オペレーティングシステムをブートするためにコンピュータシステムにより走らされる、一連のファームウェア命令である。電源を入れたあと、BIOSによって行われる最初の動作の1つは、メモリモジュールのSPD(serial presence detect)にアクセスすることである。割り当てたSPDは、メモリモジュールのサイズ(例えば、ランクの数)、データ幅、製造業者、速度、及び、電圧のような、メモリモジュールに関する情報をBIOSに送る。メモリモジュールのランクを決定した後、一般に、BIOSはモジュール中の各ランクでメモリテストを行う。シングルランクテラDIMMは、SPDで宣言されたほどの物理的DRAMスピードのメモリ量を有していないのでこのメモリテストに失敗するかもしれない。シングルランクテラDIMMは、すべてのメモリアドレスを急いで応答することができるが、一般にメモリワードをエイリアス(alias)する。このエイリアシング(aliasing)は、メモリテストにより、間違ったメモリワードとして検出することができる。
デュアルランク/クワッドランクテラDIMMについて、BIOSのメモリテストをバイパスするためにBIOS変更を組み込まないこともできる。コンピュータシステムと共にデュアルランク/クワッドランクテラDIMMに最初に電源を投入したとき、テラDIMMはNVMランクを選択するチップ信号を、DRAMランクを選択するチップ信号にエイリアスする。例えば、デュアルランクテラDIMMに対して、NVMランクを選択するチップ信号を、DRAMランクを選択するCS0にエイリアスすることができる。この方法では、コンピュータシステムがNVMランクを読み書きするために選択するとき、データが実際にはDRAMランクから読み書きされる。同様に、クワッドランクテラDIMMに対して、NVMランクを選択するCS2及びCS3は、2つのDRAMランクを選択するために用いられるCS0及びCS1にエイリアスすることができる。最後に、デュアルランクテラDIMMを、DRAMのランクがBIOSメモリテストで用いられる、シングルランクDIMMとして、通知することができる。
図3は、1つの実施の形態による、デュアルランクテラDIMMのブロック図を示す。図示の通りテラDIMM300はASIC301、ここでは「Rush」と呼ぶ、一列に並べた(ランクになった)DRAMデバイス302、複数のデータバッファデバイス303、ここでは「ボルトデバイス(Bolt devices)」と呼ぶ、一列に並べた(ランクになった)NVMデバイス304、SSDコントローラ305、SPD306、及びPICマイクロコントローラ307を有する。RDIMMと同様に、Rush301は、メモリコントローラの制御ラインへの電気負荷を軽減するために、レジスタ及び位相同期ループ回路、ここでは「RPLL回路」と呼ぶ、を備えている。Rush301はまた、ボルトデバイス(Bolt devices)303の制御回路及びSSDコントローラ305とのインターフェース(例えば、SATA、PCI−E、等)を有する。SSDコントローラ305は、NVMデバイス304と行き来するデータのフローを管理する。SSDコントローラ305をRush301内に組み込むことができるようにすることを意図するものである。アドレス/制御・バス311は、Rush301と接続される一方、メインメモリバス312は、ボルトデバイス303により、DIMM上のメモリバスとから分離されている。
各ボルトデバイスは、双方向オクタルフリップフロップと(メモリバスに接続された)ホストポートを任意の3つのDDR3ポートに接続するマルチプレクサとを有する3つのDDR3ポートを有する。さらに、DDR3の各ポートは、トライステートとすることができ、DDR3のDQ/DQS信号を用いて信号を送ることができる。ボルトデバイス303は、コンピュータシステムとDRAMデバイス302又はRush301とのデータバーストの時刻変更を行う。また、ボルトデバイス303は、DIMM上のDMA(direct memory access)をDRAMデバイス302とRush301との間で生じさせることができるような分離を行う。
Rush301データインターフェースの1つの特徴は、レーン毎の遅れを補償する回路、例えば、プログラム可能な送出時間と受け取り時レーンゆがみ補正を行う回路を含んでいることである。ボルトデバイス303とRush301との距離、及び、ボルトデバイス303とDRAMデバイス302との距離、の間の距離の相違により、テラDIMMは、データが適切な時刻に到着するよう送出時間を調整することができる。これは、これらの値を製造工程で較正することができ、NVRAM(nonvolatile RAM)のようなオンボードのメモリに記憶させることを意図するものである。これはまた、BIOSのファームウェアを適切に変更することにより、このような較正を、他のBIOSの較正の一部としてシステム中で実行することができることを意図するものである。
図4は、1つの実施の形態による、典型的なシングルランクテラDIMMのブロック図を示す。この実施の形態はどのようなDRAMデバイスをも含まないので、NVMデバイスに非常に大きな余裕を与える。上述のように、BIOSの変更を、BIOSのブートにおけるメモリテスト(例えば、メモリ使用不可テスト)を通過させるために組み込むことができる。図5に示す1つの実施の形態によれば、メモリバス512を、Rush501に直接接続することができる。この実施の形態では、DRAM又はボルトデバイスは含まれない。
(テラDIMMの設置)
メモリテストを行うことに加えて、一般にBIOSは、CPUメモリコントローラのプログラミングを制御し、どのメモリアドレスが有効であるかを理解するためにオペレーティングシステム(OS)で用いられるマッピングを生成する。ホスト論理アドレスのDIMM物理アドレスへのマッピングは、CPU及びBIOSプログラミングの設計に依存する。後で説明する多くの特徴は、(先に説明したように、シングルランクテラDIMMは、メモリテストを不可能にするよう、BIOSの変更を組み込んでいるので)BIOSの変更を行わなければならない事態を避けるよう設計されている。従って、テラDIMMは、BIOSの変更の有無にかかわらずコンピュータシステムに組み込むことができる。
(テラDIMMの設置)
メモリテストを行うことに加えて、一般にBIOSは、CPUメモリコントローラのプログラミングを制御し、どのメモリアドレスが有効であるかを理解するためにオペレーティングシステム(OS)で用いられるマッピングを生成する。ホスト論理アドレスのDIMM物理アドレスへのマッピングは、CPU及びBIOSプログラミングの設計に依存する。後で説明する多くの特徴は、(先に説明したように、シングルランクテラDIMMは、メモリテストを不可能にするよう、BIOSの変更を組み込んでいるので)BIOSの変更を行わなければならない事態を避けるよう設計されている。従って、テラDIMMは、BIOSの変更の有無にかかわらずコンピュータシステムに組み込むことができる。
テラDIMMに対応してBIOSの変更を行うことが好ましくないか又はできないようなシステムに対して、テラDIMMを動作させるためのシステム/ドライバを適切に設定するためにディスカバリーブートローダをインストールすることができる。図6に示したように、ディスカバリーブートローダの命令602は、BIOSの命令601の後で、ブートローダの命令603の前に実行される。DIMMの動作の観点から、テラDIMMがディスカバリーブートローダを用いて初期化されていたかどうかによる違いはない。一般に、テラDIMMドライバはまた、RushのASICと通信するために取り付けることができる。
ディスカバリーブートローダにはシステムディスカバリーのための命令が含まれる。システムディスカバリーは、テラDIMM初期化処理のサブセクションであり、テラDIMMを適切に認識させるためのBIOS変更が行われなかったときに必要となるかもしれない。ディスカバリーの役割は、テラDIMMはメモリマップのどこに適するかを決め、テラDIMMを動作させるためにテラDIMMドライバによりマッピングを使うことができるかどうかを判断することである。メモリマップがテラDIMMの動作に役立つ場合は、ディスカバリー処理は、コンピュータシステムの、データのスクランブル、アドレスのマッピング、ECCの生成、データのインターリーブ/デ・インターリーブ、及びビットスイッツリング(bit swizzling)について知得する処理とすることができる。最終的に、ブートローダは(メモリマップを確認するためにOSにより用いられた)メモリマップテーブルを修正し、OSにテラDIMMメモリ空間を確保するよう命令する。一旦ディスカバリーブートローダが動作を完了しBIOSメモリマップテーブルを適切に修正すると、従来のブートローダが開始する。
(BIOSの変更なしでのテラDIMMの初期化)
図7は、1つの実施の形態による、テラDIMMの初期化処理の典型的なフォローチャートを示す。テラDIMMの初期化処理は、電源オンボタンを押したときからOSがテラDIMMドライバを初期化するまでをカバーする。この実施の形態において、テラDIMMは、SPDによりRDIMMとして通知され、RDIMMの初期化シーケンス(RPLLシーケンス)がそれに続く。
(BIOSの変更なしでのテラDIMMの初期化)
図7は、1つの実施の形態による、テラDIMMの初期化処理の典型的なフォローチャートを示す。テラDIMMの初期化処理は、電源オンボタンを押したときからOSがテラDIMMドライバを初期化するまでをカバーする。この実施の形態において、テラDIMMは、SPDによりRDIMMとして通知され、RDIMMの初期化シーケンス(RPLLシーケンス)がそれに続く。
ステップ701で、テラDIMMへの電源がオンとなる。電源がオンとなった後、ステップ702で、テラDIMMが初期化される。SPDにも電源を供給する電源レールにPICが接続される。PICがブートし、ホストコンピュータシステム(以降「ホスト」と称す)がSPDを読み込もうとする前に、ホストからI2Cオペレーションを受け取る準備が完了する。代替的に、ホストがSPDを直接読み込む代わりにPICがSPDデータをホストに提供することもできる。一旦、DIMMへの電源が有効となると、Rushが不揮発性メモリから設定/較正情報を読み取ることができるか又は、PICがRushレジスタをプログラムすることができる。RushのASICにプログラムされた情報として下記を含めることができる。
・ Rushの動作及びボルトの動作を、電圧毎及び動作スピード毎に可能なようにする製造時の較正データ
・ 電圧毎及び動作スピード毎の、RPLL/DRAM/ボルトの設定オーバーライドデータ、及び
・ 現在のDRAMのランクの数及びDRAMの編成(x4/x8)を含むDIMMの設定データ。
・ Rushの動作及びボルトの動作を、電圧毎及び動作スピード毎に可能なようにする製造時の較正データ
・ 電圧毎及び動作スピード毎の、RPLL/DRAM/ボルトの設定オーバーライドデータ、及び
・ 現在のDRAMのランクの数及びDRAMの編成(x4/x8)を含むDIMMの設定データ。
ステップ703で、次に、ホストは、SPDを読み込む。一般にBIOSは、すべてのDIMからSPDの値を読み込み、動作パラメータの共通部分を決定する。SPDの値の読み込みに応じて、BIOSはDIMMに適用する電圧を決定する。SPDは、一般に、メモリモジュール情報を記憶する不揮発性メモリ(例えば、EEPROM)及び温度センサーを有する。1つの実施の形態によれば、その代わりにPICが内部のNVMにあるメモリモジュール情報(ここで「SPD負荷」と称す)を記憶し、SPDを温度センサーとしてのみ用いる。これにより、PICのNVMに複数のSPDを記憶させることができる。複数のSPD負荷を記憶させることにより、テラDIMMがシングルランク(セーフモード)テラDIMM、又は、デュアルランク(ノーマルモード)テラDIMMとして現れることができる。DIMMが多くの場合システム内でブートできるような方法を提供するために、セーフモードが存在する。
次に、ステップ704で、RushのASIC及びDRAMメモリが初期化される。RPLLが初期化されている間、複数のRPLLのRCレジスタ及びDRAMのMRSレジスタが、テラDIMMを制御するためにBIOSにより書き込まれる。これらの値のいくつかは、ホストにより提供されたこれらの値がテラDIMMの設計(特にBIOSの変更のない場合)と互換性がないかもしれないので、書き込まれる前にRushにより「メッセージされる」必要がある。
次に、ステップ705で、ホストとテラDIMMとの間のDDRデータ経路のトレーニング及び較正をBIOSが行う。このステップの間、Rushの振る舞いは、テラDIMMのタイプ(例えば、シングルランク/デュアルランク/クワッドランク)に大きく依存する。1以上のDRAMランクを有するテラDIMMに対して、Rushは、ホストがNVMランクにアクセスすることを試みている間であってもDRAMランクにアクセスできるように、DRAMランクをエイリアスする。ランクのないDRAMを有するテラDIMMに対して、Rushは、メモリアクセスに応答してDIMMの内部バッファをエイリアスする。BIOSが起動させず、読み返す前に識別可能なRASアドレスの数(例えば、2)より大きな数を書き込まない限り、なにもすべきでない。サポートされる識別可能なRASアドレスの数は細かく実行され、必要に応じて増減することがある。
次に、ステップ706で、BIOSはメモリテスト及びメモリの初期化を行う。一般に、BIOSはすべてのDRAMランクが完全に機能することを確かめる。シングルランクテラDIMM(例えば、DRAMのないもの)は、このテストで失格となる。従って、このメモリテストは、シングルランクテラDIMMに対して行うことはできない。デュアルランクテラDIMMにたいして、RushはDRAMランクがどのランクににもアクセスするようエイリアスする。デュアルランクテラDIMMは、RushがこのDRAMをNVMにエイリアスできるように、シングルランクDIMMとして通知することができる。これにより、NVMランクにアクセスする読み込み書き出しをDRAMランクに導くことができる。メモリテストが同時にシングルランクを確認する限り、何も行うべきでない。メモリテストの後、すべての配置が有効なECC(エラーコードの訂正)を持つように、メモリは初期化される。
次に、ステップ707で、BIOSの命令を完了させた後、さらなる初期化をディスカバリーブートローダに引き渡す。一般に、ディスカバリーブートローダは、システムに接続されたテラDIMMの数とテラDIMMのメモリサイズとを決定すると共に、RushのASICのアドレスマップを特定する役割を担う。また、データのスクランブリング、ECCの生成、データのインターリーブ/デ・インターリーブ、ビットスイッツリング(bit swizzling)、及びアドレスの線形化をサポートするようRushのASICを設定する役割を担う。当然のことながら、データのスクランブリング、ECCの生成、データのインターリーブ/デ・インターリーブ、ビットスイッツリング(bit swizzling)、及びアドレスの線形化はフレキシブルであり、プログラマブルである。これらの機能をプログラムする能力により、例えば、シングルテラDIMM設計が、種々の異なるCPUシステムで動作するようにできる。異なる設定に対応させる方法には以下のものが含まれるが、これに限定されるものではない。
・ DIMM上に必要な、すなわち、側波帯通信方法(例えば、ホスト対DIMMのサブバス)を用いて、BIOS、ブートローダ又はデバイスドライバの初期化に必要な不揮発記憶、及び、
・ BIOS、ブートローダ、又は、デバイスドライバが、ロジックを訓練しプログラマブルロジックを設定するために、一連のメモリ操作を送る、知得方法
すべての、設定が行われた後、ディスカバリーブートローダがBIOSメモリマップテーブルを更新する。これらの動作モードの知得又はプログラムする能力により、所定のテラDIMMが1つのシステムから他のシステムに再配置することができ、テラDIMMの仕様を特定のサーバーのデザインに組み立てる必要をなくすことができる。
・ DIMM上に必要な、すなわち、側波帯通信方法(例えば、ホスト対DIMMのサブバス)を用いて、BIOS、ブートローダ又はデバイスドライバの初期化に必要な不揮発記憶、及び、
・ BIOS、ブートローダ、又は、デバイスドライバが、ロジックを訓練しプログラマブルロジックを設定するために、一連のメモリ操作を送る、知得方法
すべての、設定が行われた後、ディスカバリーブートローダがBIOSメモリマップテーブルを更新する。これらの動作モードの知得又はプログラムする能力により、所定のテラDIMMが1つのシステムから他のシステムに再配置することができ、テラDIMMの仕様を特定のサーバーのデザインに組み立てる必要をなくすことができる。
最後に、ステップ708で、ディスカバリーステップの後、OSを従来のブートローダでブートする。OSがブートされている間、テラDIMMドライバも初期化される。この段階で、システムに接続されたテラDIMMは、通常のメモリ動作モードになり、テラDIMMドライバがアクセスする準備が完了する。
(テラDIMMディスカバリー)
先に説明した通り、ディスカバリーブートローダは、システムに接続されたテラDIMMの数及びメモリのサイズを決定し、RushのASICのアドレスマップを特定する役割を担う。また、アドレスの知得及びECCとデータのインターリーブ/スイッツルの知得の役割を担う。これらの機能を実行するためにRushは多くの特殊なモードで動作する。このような特殊なモードは迷路解除シーケンスにより選択される。
(テラDIMMディスカバリー)
先に説明した通り、ディスカバリーブートローダは、システムに接続されたテラDIMMの数及びメモリのサイズを決定し、RushのASICのアドレスマップを特定する役割を担う。また、アドレスの知得及びECCとデータのインターリーブ/スイッツルの知得の役割を担う。これらの機能を実行するためにRushは多くの特殊なモードで動作する。このような特殊なモードは迷路解除シーケンスにより選択される。
迷路解除シーケンスにより、アドレスマップ又はECC又はデータマップを知らなくてもRushの動作モードを変えることができる。これらのシーケンスは、同じアドレスへのデータの書き込みバーストを比較することにより特定することができる。特に、1つの書き込みバーストから次の書き込みバーストへ変化するデータビットの数を比較する。基本的には、ハードウェアが連続する書き込みのデータビットにXOR演算を行い、結果値中の「1」の数を数える。以下は、連続する書き込みのビット数の変化がスクランブリングにより、如何に影響を受けないかを示している。
H(i)は、シーケンス位置iにおいて書き込まれたデータを表す。D(i)はH(i)のスクランブルされた値を表す。DV(i)は、D(i)とD(i+1)とでXOR演算をおこなうことによりi+1での書き込みとiでの書き込みの間での変化したビットの数を表す。一例として、迷路解除シーケンスは、DV(0)・・・DV(6)=={64,8,32,4,16,2,8}andDV(7)、そして、どの迷路が解除されたかを示す。
一旦迷路が解除されると、Rushは解除シーケンスと関連付けられたモードで動作する。1つの実施の形態による種々の迷路を以下の表1に記載する。
特定の環境において、迷路シーケンスの解除に用いないように設計に制限が加わることがある。このような制限を克服するために、他の位置に読み込み又は書き込みせずに(同じ位置での読み込みは許され、カウントをリセットすることはない)行うN回の(例えば、レジスタにより設定可能である)同じ位置への書き込みアクセスを監視することにより、Rushでの種々のモードでの動作を解除することができるようにするものである。
図8は、1つの実施の形態による、ディスカバリーブート処理の典型的なフォローチャートを示す。ステップ801で、ディスカバリーブートローダ(ここでは「DBL」と称す)は、エイリアシングの振る舞いを検索することにより、メモリモジュールが通常のDRAMモジュールか又はテラDIMMモジュールかを判断する。例えば、デュアルランクテラDIMMは、1セットのデータをランク0に書き込み、そして、別のセットのデータをランク1内の同じオフセットに書き込むことにより(各ランクについて複数回行うかもしれない)、検出することができる。ランク1に書き込まれたデータに対応するランク0から、データが読み返された場合、メモリモジュールはエイリアシングとしての振る舞いを呈する。
ステップ802で、DBLは、テラDIMM中のランクのうちどれがNVMランクかを決定する。デュアルランクテラDIMMにとって、ステップ801で、デュアルランクテラDIMMが検出されたとしても、どのランクがNVMランクかについては依然として未定である。これを決定するために、DBLは最初にテラDIMMを「ディスカバリーのためのシングルランクエイリアス」(ここでは「SAD」と称す)モード(表1参照)に配置する。SAD内での動作により、テラDIMMは、NVMランクを書き込むときにデータパターンを反転させる。これにより、各ランクにパターンを書き込み、どのデータのセットが反転しているかを読み返すことにより、NVMランクを見つけることができる。反転したデータのセットはNVMランクに対応している。また、SADモードで動作することで、DBLはシングルランクテラDIMMを検出することができる。
SADモードが適切に機能する前に、しかしながら、RushがホストシステムのECC反転ルールを知得する必要がある。これは、一般に、ホストシステムがデータをメモリモジュールに書き込むとき、ECCビットのセットも書き込むからである。ECC中の各ビットは、データからのビットのサブセットの排他的論理和である。この点で、このようなビットを生成するためのECCルールはRushに知られていない。ホストによって読み込まれたとき、正しいECCビットのセットなしに反転させたデータパターンをRushが返した場合は、読み込みエラーが生じるかもしれない。
先に説明したように、ECC中の各ビットは、データからのビットのサブセットの排他的論理和である。このサブセット中のメンバーの数は奇数又は偶数である。これが偶数の場合、すべてのデータビットが反転した場合ECCビットは変化しない。数が奇数の場合、ECCビットは反転する。従って、Rushがデータを修正し、正しいECCビットを生成することのできる方法は、DBLにデータパターンX及び反転した〜Xを同じアドレスに送らせることである。これは何度か繰り返される(例えば、4回)。Rushはメモリに書き込まれた最後の2つの値を監視し、その値をビット単位で反転している場合は、Rushは、どのECCビットが反転しているかを決定する。一旦Rushがこれを繰り返して特定すると(例えば、4回)、Rushは、ECC反転ルールを知得し、上述のSADモードでの動作をスタートする準備が完了する。例えば、ホストがデータパターンXを書き込むときに、Rushは、反転パターン〜Xをそのメモリに実際に書き込み、ECCバイトレーン中の適切なビットを反転させる。
DBLがNVMランクを特定した後、DBLはステップ803に移り、テラDIMMのベースアドレスを見つける。DBLはテラDIMMを「ベースハント」(ここでは「BH]と称す)モードに配置する(表1参照)。BHモードは、DBLがテラDIMMのベースアドレスを見つけるのを助けるために動作する(例えば、BA/RAS/CAS=0/0/0)。BHモードにおいて、NVMランクでのディスカバリーエイリアシングは、書き込みアドレスBA/RAS/CASが0/0/0と一致した場合、反転したデータが書き込まれるよう振る舞う。さもなくば、データは反転しない。これにより、DBLはテラDIMMにマップしたすべてのアドレス空間をスキャンしテラDIMMのベースアドレスを生成するホストアドレスを見つけることができる。
テラDIMMのベースアドレスを特定した後、DBLは、ステップ804に移り、テラDIMMのアドレス空間を見つける。DBLはテラDIMMを「アドレスハント」(ここでは「AH]と称す)モードに配置する(表1参照)。AHモードは、BHモードの拡張として動作し、DBLがテラDIMMのアドレス空間を見つけるのを助け、ベースアドレスの知得と同じように振る舞う。例えば、DBLがテラDIMMのベースアドレス(例えば、BA/RAS/CAS=0/0/0)に対応するホストアドレスを見つけた後、Rushは、テラDIMMのアドレスが0/0/0×8に合致しない場合、Rushは、反転したデータを書き込む。さもなくば、データは反転しない。再度AHモードに入った場合(例えば、AHモードのために迷路解除が再始動した場合)、Rushは、テラDIMMアドレス0/0/0×10を追求する。AHモードのそれぞれの再始動により、アドレスは、CAS(行アドレスストローブ)、RAS(列アドレスストローブ)、そしてBA(バンクアドレス)を通って、直線的に上昇する(例えば、0/0/0×100、0/0/0×200、等)。
次に、DBLはステップ805に移り、テラDIMMのアドレス空間で動作可能であるかどうかを分析し判断する。例えば、DBLは、アドレスインターリーブがあるか、そして、アドレス空間に穴があるかどうかを判断しなければならない。1つの実施の形態によれば、アドレスインターリーブが検出されたとしても、キャッシュライン境界より小さいインターリーブは低効率で動作する可能性がある。穴がある場合は、DBLはこの穴が妥当なものであるかどうかを判断しなければならない。1つの実施の形態によれば、DBLはこの穴が妥当なものであるかどうかは、穴の全数量であって所定の穴の寸法ではない。妥当性は、OSメモリマップテーブルに対するBIOSの最大サイズに関してであろう。
次に、DBLは、アドレス及びデータのスクランブルを知得するためにステップ806に移り、テラDIMMを「アドレス知得」(ここでは「AL」と称す)モード(表1参照)に配置する。当然のことながら、アドレス及びデータのスクランブル情報が既知であれば、知得することは必要ではない可能性があり((例えば、バイパスステップ806)、そのような情報はRushのASIC設定レジスタに直接プログラムすることができる。例えば、そのような情報は非揮発性記憶ユニット(例えば、DIMMシリアルROM)又は、BIOS、DBL、又はデバイスドライバにより、側波帯通信を介してプログラマブルレジスタにロードされる(例えば、ホストからDIMMのSMBusへ)。
ALモードでの運転において、Rushハードウェアは、
・ ホストのデータをスクランブル/デ・スクランブルする、
・ ホストの物理アドレスからDIMMアドレスへマッピングし最適な内部マッピングを設定する、及び
・ このマッピングを知得するためのメカニズムをホストに提供する、
ために知る必要のある情報について判断する。
・ ホストのデータをスクランブル/デ・スクランブルする、
・ ホストの物理アドレスからDIMMアドレスへマッピングし最適な内部マッピングを設定する、及び
・ このマッピングを知得するためのメカニズムをホストに提供する、
ために知る必要のある情報について判断する。
データのスクランブル/デ・スクランブルは、特定のCPU製造会社(例えば、インテル)は、データ書き込みのためのアドレスに基づきDRAMに書き込まれたデータをスクランブルするので、必要となる可能性がある。データのスクランブルは、記憶するために書き込まれたデータを知る必要のない従来のDRAMに問題を提示するものではない。一方、テラDIMMは、ホスト上で走っているテラDIMMドライバにより送られたコマンドを知る必要があるかもしれない。従って、テラDIMMに書き込まれたデータは、スクランブルすべきであり、ホストに送り返されたデータはスクランブルすべきである(ホストはスクランブルされたデータが戻ってくることを期待している)。
ホストの物理アドレスからDIMMアドレスへのマッピングを判断するために、そして、最適な内部マッピングを設定するために、Rushにはアドレスマッピングのハードウェアが含まれる。適切なマッピングを取得することにより、テラDIMMドライバがRushに組み込まれたバッファのセットにアドレスを指定することができる。マッピングを最適化することで効率的な動作がもたらされる。データバッファが隣接する4KBのチャンクとしてマップされ、特定のバッファがアドレスマップに複数回現れるなら、マッピングは最適化されたと考えられる。特定のバッファを何度も出現させることは、新しいコマンドのために再利用されるバッファの内容を読み込むときに、キャッシュヒットが生じること(またはキャッシュ無効命令を使うこと)を低減又は避けることに役立つ。ここに記載のアドレス知得アルゴリズム及びアドレスマッピングハードウェアは最適なマッピングの解決手段をもたらす。
アドレス及びスクランブルの知得が完了した後、DBLは、ECC及びデータインターリーブ/スイッツル知得のため、ステップ807に移る。当然のことながら、ECC及びデータインターリーブ/スイッツル情報が既知である場合、知得は必要でない可能性があり(例えば、ステップ807をバイパスする)、このような情報を、RushのASIC設定レジスタに直接プログラムすることができる。例えば、そのような情報は非揮発性記憶ユニット(例えば、DIMMシリアルROM)から読み込むこと、或いは、BIOS、DBL、又はデバイスドライバにより、側波帯通信を介してプログラマブルレジスタにロードされる(例えば、ホストからDIMMのSMBusへ)。
テラDIMMは、特定のバイト/ビットフィールドに予想される、コマンドのような、ホスト意味情報から受け取るので、ECC及びデータインターリーブ/スイッツル知得は必要であるかもしれない。対照的に、従来のDIMMは、データ及びECCビットの両方がメモリに一緒に記憶され、同じ順序で書き込みと読み込みとがなされていたので、一般に、データスイッツル機構を知る必要はなかった。
ホストで用いられるECCアルゴリズム/コードには、64/72SEC/DEDコード、128/144SSC/DSDコード、256/288SSC/DSDコード、又は256+Addr/288SSC/DSDコードを含むことができる。テラDIMM中のフラッシュデバイスは、一般に、SEC/DEDコード又はSSC/DSDECCコードではなくBCHコードを用いるので、Rushは、ホストから送受信するデータのECCビットを生成及びチェックをすることができるようにすべきである。1つの実施の形態によれば、ECCビットは、ホストとのインターフェースでではなくRushコア中で生成されチェックされる。1つの実施の形態によれば、Rushは、ECCを組み込んでいないテラDIMMをサポートすることができる。この実施の形態において、バイトレーンをチェックするための入力ピンは設置することができドライバをターンオフすることができる。加えて、ECCビットを、データがRushに転送されるとき、チェックしないことも可能である。
ECC及びデータインターリーブ/スイッツル知得を容易にするため、DBLはテラDIMMを「ECC/インターリーブ/スイッツル知得」モード(ここでは「EIS」モードと称す)におく(表1参照)。EISモードで運転すると、DBLは、知得パターンを用いて、ECC生成回路、及びデ・インターリーブ/デ・スイッツル回路を初期化し、習得させる。ECC/インターリーブ/スイッツル知得が完了した後、ステップ808にて、通常運転のために、テラDIMMにホストがアクセスする準備が完了する。この点で、ディスカバリーブート処理が終わり、従来のブートローダがホスト上でOSのブートを制御する。
(データスクランブリング)
先に説明したように、図8のステップ806に関し、特定のCPU製造業者(例えば、インテル)では、データ書き込みのためのアドレスに基づいてDRAMに書き込まれたデータをスクランブルするので、データのスクランブル/デ・スクランブルが必要であるかもしれない。インテルのシステムでは、例えば、スクランブルシーケンスによりデータに排他的論理和演算をおこないデータをスクランブルする。スクランブルシーケンスは、各アドレスビットがベクトルに対応する独立ベクトルのセットの線形重ね合わせ(例えば、ビット単位の排他的論理和)に基づく。ベクトルのいくつかは有意であり(ゼロでない)、いくつかはそうでない。4ビットデータ値及び2ビットアドレス値を用いて、以下の例示では、アドレス10bへの書き込み時、バイナリーデータ値1100bをどのようにインテルではスクランブルしているかを示している。
(データスクランブリング)
先に説明したように、図8のステップ806に関し、特定のCPU製造業者(例えば、インテル)では、データ書き込みのためのアドレスに基づいてDRAMに書き込まれたデータをスクランブルするので、データのスクランブル/デ・スクランブルが必要であるかもしれない。インテルのシステムでは、例えば、スクランブルシーケンスによりデータに排他的論理和演算をおこないデータをスクランブルする。スクランブルシーケンスは、各アドレスビットがベクトルに対応する独立ベクトルのセットの線形重ね合わせ(例えば、ビット単位の排他的論理和)に基づく。ベクトルのいくつかは有意であり(ゼロでない)、いくつかはそうでない。4ビットデータ値及び2ビットアドレス値を用いて、以下の例示では、アドレス10bへの書き込み時、バイナリーデータ値1100bをどのようにインテルではスクランブルしているかを示している。
従って、「scrambled_value」のスクランブルを解除するため、ベクトルv1及びvcを知らなくてはならない。簡潔さにより、これらのベクトルvは、スクランブルシーケンスで用いられるこれらのベクトルvは「生成ベクトル」と称す。
図9は、1つの実施の形態による、ジェネレータ・ベクトルの各々を解く方法の典型的なフローチャートを示す。最初に、ステップ901で、ホストはアドレス0bにゼロデータパターンを書き込む。これにより、Rushは、ステップ902で、生成値vcを決定することができる。説明のために、ホストがデータ値Dを書き込んだときRushにより見られるスクランブルされた値は、上記記載を想起して、
Rushは、ステップ903で、vcをベクトルレジスタに保存する。
Rushが残りの生成ベクトル(例えば、v0、v1、・・・、vN、ここで、Nはアドレスビット位置に対応する)を解くための手助けとして、ホストは1つのアドレスビットを「1」に設定する一方、他のすべてのアドレスビットは「0」に設定され、ゼロデータパターンをそのアドレスに書き込む。例えば、生成ベクトルviについて解くために、位置iにあるアドレスビットを「1」に設定し、ステップ904で、そのアドレスに書き込むだけでよい。Rushは、viについて解くために、ステップ905で、以下のようにする。Rushにより、見つけられるスクランブルされた値は、
Rushは、ステップ906で、対応するベクトルレジスタにvを保存する。ステップ904から906は生成ベクトル値が解けるまでこの順序で繰り返される。すべての生成ベクトル値が解けると、Rushは、ホストから受け取ったデータのスクランブルを解除し、又はホストへ送るデータをスクランブルすることができる。
図10は、1つの実施の形態による、ホストへ送られたデータをスクランブルするか又はホストから受け取ったデータのスクランブルを解くスクランブラーシーケンスを生成する回路の論理的な実施形態を示す。図示のとおり、生成ベクトルの各々は576ビット(72ビット幅×8ビートバースト長)で特徴付けられる。一般に、ホストが使うスクランブベクトルは16ビット幅である。例えば、いくつかのインテルのCPUは、16ビットレーンの各々に対して16ビットのスクランブルベクトルを用いる(例えば、32ビットデータバスに対して4.5×16ビットレーン)一方、他のCPUは、32ビットのスクランブルベクトルを用いる。小さいベクトルを用いることも可能であるが、特定のCPUでは使用が制限される可能性がある。ECCレーンは、下位の8ビット(例えば、0.5×16ビットレーン)を用いる。マザーボードをスイッツルできると仮定して、72ビット以上のビット幅を用いることが好ましいであろう。しかし、マザーボードがビットスイッツルできないことがわかっている場合、生成ベクトルのハードウェアはホストのスクランブルベクトルと同じ幅である必要があるかもしれない(例えば、16ビット又は32ビット)。上記インテルの場合、メモリのコストが約5倍になることを節約して、16ビットとなる。
図10に示したアドレス入力信号はDIMMに関するものなので、アドレス入力信号はアドレスビット位置「3」で始まる。アドレス入力信号がDIMMに関するものなのかホストに関するものなのかにより、回路へのアドレス入力信号は、他のアドレスビット位置で始めることができる。
(アドレス知得/マッピング)
ホストは、一般に、非線形及び/又は非直交でアドレスを単調に増加させるようマッピングする。直交マッピングは、一般に、ホストアドレスにおける単一のビット変化がDIMM物理アドレスにおける単一のビット変化をもたらすマッピングを意味する。直交マッピングは、一般に、ホストアドレスが単調に増加するにつれて、アドレスフィールド(例えば、BA、RAS、CAS)内でDIMM物理アドレスが単調に増加するマッピングを意味する。完全な直交マッピングは、一般に、他のフィールドに切り替わる前にフィールド(例えば、BA、RAS、CAS)全体にわたってDIMM物理アドレスが増加するマッピングを意味する。
(アドレス知得/マッピング)
ホストは、一般に、非線形及び/又は非直交でアドレスを単調に増加させるようマッピングする。直交マッピングは、一般に、ホストアドレスにおける単一のビット変化がDIMM物理アドレスにおける単一のビット変化をもたらすマッピングを意味する。直交マッピングは、一般に、ホストアドレスが単調に増加するにつれて、アドレスフィールド(例えば、BA、RAS、CAS)内でDIMM物理アドレスが単調に増加するマッピングを意味する。完全な直交マッピングは、一般に、他のフィールドに切り替わる前にフィールド(例えば、BA、RAS、CAS)全体にわたってDIMM物理アドレスが増加するマッピングを意味する。
例えば、テストの結果、AMDにより製造されるマイクロプロセッサは、一般に、(いくつかの文書では直交マッピングに戻す逆マッピングが可能であることを示しているが)非直交を採用するが線形アドレスマッピングを採用していることが分かっている。一方、インテルにより製造されるマイクロプロセッサは、一般に、直交であるが非線形マッピングを採用している。いずれの場合も、アドレスマッピングは、一般に、テラDIMMと共に用いるための最適化はされていない。
適切なマッピングを取得することにより、テラDIMMドライバはRushに組み込まれたバッファのセットにアドレスすることが可能になる。マッピングを最適化することにより動作の効率化がもたらされる。データバッファが連続する4KBチャンクとしてマッピングされ、特定のバッファがアドレスマップ中に複数回現れる場合は、マッピングが最適化されたと考えられる。特に、ホストメモリマップ中の固有の16KBページに各Rushバッファを配置することが好ましい。個々のバッファは、そのページのオフセット0にて開始することができ、64B、512B、又は4KBの大きさとなる。ページの残りは、ゼロバッファとして読み込まれ、ホストが書き込むときは無視されることになる。あるいは、実施の形態に合わせて、ページの残りは、バッファにエイリアスされ、16KBのページ内で何度もデータを読み込むことができる。
以下の表2は、インテルのマイクロプロセッサベースのシステムのホストアドレスがRush物理アドレス内にどのようにマッピングされるかを示している。以下のアドレスが示しているように、下位3ビットは64ビットワード内のバイトオフセットを示すために用いられ、次の3ビットは64B(8ビート)バーストの開始オフセットも示すために用いられると仮定すると、ホストアドレスの下位6ビットは、最下位ではない。
表2に示したようなアドレスマッピングは、単調増加し且つ直交する一連のアドレスを提供するアドレス知得パターンをホストにアサートすることにより作り上げることができる。そのような知得パターンをアサートすることにより、RushのASICは、外部から見ることができるアドレス信号(例えば、BA、RAS、CAS)を非線形かつ非直交アドレス空間から線形かつ直交アドレス空間へ再マッピングすることが可能となる。図11は、1つの実施の形態による、最適なアドレスマッピングを生成する方法の典型的なフローチャートを示す。ホストは、ステップ1101で、キャッシュをバイパスさせる書き込み命令を用いてテラDIMMホストベースアドレス(例えばアドレスoffset=0)への一連の書き込みを生成する。書き込まれたデータはすべてゼロのパタンである。次いで、ホストは、ステップ1102でのアサンプションのセットに基づきホストアドレスの最下位ビットを決定する。表2に示した1つの実施の形態によれば、アサンプションには以下が含まれる。
・ DIMMが64ビット幅ならば、各CASアドレスは8バイトに対応する。従って、最後の3ケタのホスト関連アドレスビットは、メモリシステムで用いられていない。
・ DIMMは8ワードのバーストをサポートしているので、次の3アドレスビットは、バーストの開始位置を決定することに関連し、CASアドレスの最下位3ビットとなる。
・ DIMMが64ビット幅ならば、各CASアドレスは8バイトに対応する。従って、最後の3ケタのホスト関連アドレスビットは、メモリシステムで用いられていない。
・ DIMMは8ワードのバーストをサポートしているので、次の3アドレスビットは、バーストの開始位置を決定することに関連し、CASアドレスの最下位3ビットとなる。
次に、ステップ1103で、ホストはホストアドレスの最下位ビットを「1」に設定し、そのホストアドレスへの一連の書き込みを生じさせる(例えば、テラDIMMベースアドレス+0x40オフセットアドレス)。一連の書き込みの間、RushのASICのアドレスマッピングのハードウェアは、「1」に設定されたDIMM物理アドレスビットを検出し、このDIMMアドレスビットをRush内の対応するアドレスビットに関連付ける(例えば、表2において、CAS[3]はCOL[0]と関連付けられる)。アドレスの関連付けは、1以上のマルチプレクサを用いることにより生成することができ、後に図12に示すように、対応するマルチプレクサレジスタに保存することができる。
次に、ホストは、ステップ1104で、ホストアドレスオフセットを1ビット位置だけ左に移動させ(例えば、0x40を0x80へ)、このホストアドレスへの一連の書き込みを生じさせる(例えば、テラDIMMベースのアドレス+0x80オフセットアドレス)。さらに、Rushのアドレスマッピングのハードウェアは、「1」に設定されているDIMM物理アドレスビットを検出し、このDIMMアドレスビットをRush内の対応するアドレスビットに関連付ける(例えば、表2において、CAS[4]はCOL[1]と関連付けられる)。この関連付けは、他の関連するマルチプレクサレジスタに保存される。ステップ1104は、ホストオフセットアドレス空間全体の移動が完了するまで繰り返される。
1つの実施の形態によれば、いくつかの初期でコーディングをRASサイクルの後で始めることができ、CASサイクルまで待つ必要がなく、Rushは、RASサイクルの間にすべてのROW[ ]アドレスビットを関連付ける。例えば、一旦ROW[ ]アドレス信号が関連付けられると、それに続くホストアドレスに対して、関連するDIMM物理アドレスビットがCASビットである場合、このCASビットが無視されROW[ ]アドレスポインターが進まない(例えば、CASビットがスキップされ残りのアドレスビットが右にシフトされる)。表2に示すように、COL[ ]アドレスビットは、BA/RAS/CASビットの混合とすることができる。このように、CASサイクルビットは、バッファの部分を選択するために用いられるが、バッファは以下のRASサイクルで選択される。1つの実施の形態によれば、CASアドレスビットは、ROW空間に現れることがある。
図12aは、1つの実施の形態による、DIMM物理アドレスビットをRush内部アドレスビットに関連付ける回路の論理的な実施形態を示す。この回路には、BA/RA/CASアドレスビットをRushの内部ROW[ ]/COL[ ]アドレスビットと関連付けるための複数のマルチプレクサが含まれる。この回路にはまた、アドレス知得の開始時に「0」にリセットされるアドレス位置レジスタが含まれる。図示した回路の典型的な動作を、表2に示した関係に従って、以下に説明する。アドレス位置レジスタの値が0から7に増加するときに、対応するBAビット、RASビット、又はCASビットを選択するために、マルチプレクサのレジスタ、COLMUX0からCOLMUX7、が初期化される。アドレス位置レジスタの値が8から26に増加するときに、対応するBA又はRASを選択するために、マルチプレクサのレジスタ、ROWMUX0からROWMUX8、が初期化される。この点で、ホストアドレスがCAS物理ビットに対応している場合、アドレス位置レジスタが増加せず、CASビットがスキップされる。ホストアドレスオフセットが検索され、そして、対応する関連性が保存されると、ホストは、これらのレジスタを読み込み最終的なアドレスマッピングを決定する。図12bは、DIMM物理アドレスビットをRush内部アドレスビットに関連付ける論理回路の他の実施の形態を示す。図12bの論理回路により、BA/RAS/CASのDIMMアドレスビットをRush内部アドレスビットにマップすることができる。
図12a及び図12bに示したような、Rushアドレスマップ及びアドレスマッピングハードウェアの目的は、常に16KBページのオフセット0で始まるバッファを提供することである(例えば、COL==0)。表3は、1つの実施の形態による、異なるタイプのRushバッファにアクセスするための典型的なアドレスデコーディングを示す。ページサイズの選択(例えば、16KB)は、別のCPIOアプリケーションで変更することができ、そのデバイスに最適なデータ転送サイズに基づく。
表3に関して
・ ROW[2:0](通常HA[16:14])は、アクセスされるバッファのタイプを定義する。
・ ROW[J+3:3](通常HA[J+17:17])は、特定のバッファに索引を付けるために用いられる。Jの値はアクセスされるバッファのタイプに依存する。
・ ROW[18:J+4(通常HA[N:J+18])は、特定のバッファにエイリアスバックされる。
通常HA[N:0]は、(ドライバにより計算されたような)内部物理アドレス空間であり、Nは、テラDIMMの長さそのものよりも大きい(例えば、ビットの大きい)アドレスになることがある、テラDIMMメモリ空間が終了するメモリマップ内の場所の関数である。HA[N:M]は、Rushランクのベースアドレスを定義し、HA[M−1:0]は、Rushメモリマップ内にあるオフセットを定義する。
・ ROW[2:0](通常HA[16:14])は、アクセスされるバッファのタイプを定義する。
・ ROW[J+3:3](通常HA[J+17:17])は、特定のバッファに索引を付けるために用いられる。Jの値はアクセスされるバッファのタイプに依存する。
・ ROW[18:J+4(通常HA[N:J+18])は、特定のバッファにエイリアスバックされる。
通常HA[N:0]は、(ドライバにより計算されたような)内部物理アドレス空間であり、Nは、テラDIMMの長さそのものよりも大きい(例えば、ビットの大きい)アドレスになることがある、テラDIMMメモリ空間が終了するメモリマップ内の場所の関数である。HA[N:M]は、Rushランクのベースアドレスを定義し、HA[M−1:0]は、Rushメモリマップ内にあるオフセットを定義する。
この構成の利点は、DIMM/Rushアドレス空間の宣言サイズを、デバイスを追加することなく変更することできる点である。HAビットのBA/RAS/CASビットへのマッピングがおかしくなる可能性があることを条件として、これにより、所定の任意のバッファにベースアドレスを直接的に計算する方法がテラDIMMドライバに提供される。
(ECC及びデータのインターリーブ/スイッツル知得)
先に説明したように、テラDIMMが特にバイト/ビットフィールド中の、コマンドのような、セマンティック情報をホストから受け取るので、ECC及びデータのインターリーブ/スイッツルを知得することが必要となることがある。デ・インターリーブ/デ・スイッツルにより、コマンド及びデータが正しく解釈できるように、CPUの標準的な順序でRushにデータがもたらされる。1つの実施の形態によれば、ECC及びデ・インターリーブ/デ・スイッツル回路は、各8ビートバースト(512ビット)毎に2回動作する256ビットコアの周りに構築することができる。このコアは、128:16及び64:8ビットコードに対して正しい動作をおこなうことができる。1つの実施の形態によれば、デ・インターリーブ/デ・スイッツル回路には、48ビートバースト内のどのビット位置にも自由にデータを動かすことができる256・256ビットマルチプレクサを含めることができる。ECC生成回路には、32・256ビット幅のAND/XORゲート(一般に、任意のECCチェックビットは、ワード中のデータビットのサブセットのXOR関数であることを想起せよ)を含めることができる。同じアルゴリズムを、現在入手可能なCPUに基づき256を選定することにより、大きなサイズのECCコードにまで拡張することができる。
(ECC及びデータのインターリーブ/スイッツル知得)
先に説明したように、テラDIMMが特にバイト/ビットフィールド中の、コマンドのような、セマンティック情報をホストから受け取るので、ECC及びデータのインターリーブ/スイッツルを知得することが必要となることがある。デ・インターリーブ/デ・スイッツルにより、コマンド及びデータが正しく解釈できるように、CPUの標準的な順序でRushにデータがもたらされる。1つの実施の形態によれば、ECC及びデ・インターリーブ/デ・スイッツル回路は、各8ビートバースト(512ビット)毎に2回動作する256ビットコアの周りに構築することができる。このコアは、128:16及び64:8ビットコードに対して正しい動作をおこなうことができる。1つの実施の形態によれば、デ・インターリーブ/デ・スイッツル回路には、48ビートバースト内のどのビット位置にも自由にデータを動かすことができる256・256ビットマルチプレクサを含めることができる。ECC生成回路には、32・256ビット幅のAND/XORゲート(一般に、任意のECCチェックビットは、ワード中のデータビットのサブセットのXOR関数であることを想起せよ)を含めることができる。同じアルゴリズムを、現在入手可能なCPUに基づき256を選定することにより、大きなサイズのECCコードにまで拡張することができる。
ECC回路とデ・インターリーブ/デ・スイッツル回路の両方を同じ知得パターンを用いて初期化することができる。ECC及びデータのインターリーブ/スイッツルの知得は、「1」をデータフィールドを通って「歩かせる」データパターンを走らせる必要がある。図13は、1つの実施の形態による、ECC及びインターリーブ/スイッツルの知得のステップについての例示的なフローチャートを示す。ステップ1301で、ホストは、すべてのゼロデータバーストパターンをテラDIMMのベースアドレスに0x0のアドレスオフセットを持たせて書き込む。これにより、RushはECCインバージョンがあったかどうかを判断することができる。次に、ホストは、最下位64ビットワードのLSB(最下位ビット)を、ステップ1302で、「1」に設定することによりデータバーストパターンを修正する。ホストは、代替的に、ステップ1303で、アドレスオフセットを0x40だけ増加させる。0x40のオフセットは64B境界に対応する。オフセットを増加させることは必要ではないが、デバッグのための追加情報を提供するためにオフセットの増加をおこなうことができる。アドレスオフセットを増加させることが好ましくない場合は、ホストはこれを飛ばしてステップ1304に進む。ステップ1304で、ホストは修正したバーストパターンをベースアドレス+増加したオフセット(ステップ1303を飛ばさなかった場合)に書き込む。Rushがデータバーストパターン及び書き込まれたECCをみたとき、Rushは、ステップ1305で、設定したデータビット(例えば「1」)に対応するECC生成ベクトルとしてECCデータを保存する。ECC生成装置は、ECC回路の32ビットレジスタに保存される。また、Rushは、期待されるデータビット位置(例えば、ホストにより見られる位置)を、例えば、256ビットのマルチプレクサを用いて、Rushにより見られる実際のビット位置と関連付ける。ビット位置の関連付けは対応するマルチプレクサ制御レジスタに保存される。次に、ホストは、設定したビットが、最上位64ビットワードのMSB(最上位ビット)かどうかを判断する。設定したビットが最上位64ビットワードのMSBでない場合、ホストは、ステップ1306で、データバーストパターンを1ビット(例えば、001bから010bへ)移動させることにより修正する。ステップ1303から1306は、データバーストパターンが、ECC及びデータのインターリーブ/スイッツルの知得が完了する、最上位64ビットワードのMSBに移動するまで繰り返される。当然のことながら、図13は特定の順番でステップを記載しているが、ステップについてはいろいろな順序が可能でありここで開示した範囲内である。加えて、当然のことながら、所定のプロセッサ/マザーボードに対して、ECCの生成、データインターリーブ、及びビットスイッツルの情報は既知であり、従って、このような情報は、システムがリセットされた後RushのASICにプログラムすることができる。例えば、このような情報は非揮発性記憶ユニット(例えば、DIMM上のシリアルROM)から読み取ることができ、或いは、側波帯通信方法(例えば、ホストからDIMMのSMBusへ)、BIOS、DBL、又はデバイスドライバによりプログラマブルレジスタにロードすることができる。このような場合、ECC及びデータのインターリーブ/スイッツルの知得は行う必要がないこともある。
図14は、1つの実施の形態による、ECCビットを計算するECC回路の論理的な実施形態を示す。図示の回路は、ECCの32ビットを持つ256ビットデータブロックとして設計されている。計算したECCは、「1」に設定したデータビットに対応するすべての生成ベクトルの線形重ね合わせ(例えば、XOR)である。データ及びECCのレイアウトが同じである限り、ECC回路は、インターリーブに関係なくECCを計算する。
(Rushバッファ)
(ホスト読み込みバッファ)
DDR3メモリシステムの必要な待機時間に合わせることが課題となるかもしれないことが分かっている。可能な限りの高速性を維持するために、1つの実施の形態において、DDR3の物理レイヤに「近接した」位置に読み込みバッファのセットをRushが供給する。このバッファには、高速読み込み経路を有するホストを提供する32の4KBバッファ及び32の128Bバッファを含めることができる。付加的な128Bにより、ホストのメタデータ機能をサポートするSSDのフラッシュページに保存されたメタデータをホストが読み込むことができる。Rushバッファへの内部的なアドレス指定を直接的に維持する1つの方法は、メインデータからメタデータを別のメモリインスタンスに保存することである。ホストが所定のバッファを一旦読み込むと、テラDIMMドライバは、そのバッファを解放する。これは、バッファを新しいデータで用いることができるという信号をRushに送るものである。続いて、Rushは、一般的な読み/書きバッファからホスト読み込みバッファにデータを転送する。Rushはホストリードバッファを割り当て、各コマンドに対するスタータスバイト中の最終的配置をドライバに伝える。ホストリードバッファは、DIMMメモリマップ中の固定位置に配置される。汎用のリード/ライトバッファは一般に未処理コマンドの番号順に並べられる。
(ライトバッファエントリーポイント)
ライトバッファエントリーポイントは、ホストに、スクラバとホストメモリコントローラの読み込み/修正/書き込み動作の両方をホストにサポートさせることができるようにする。スクラバの動作は後述する。1つの実施の形態によれば、4KBの8個のエントリーポイントがあり、128Bの8個のエントリーポイントがある。ホストはこれらのバッファに書き込みを行う。一旦バッファにデータ及びコマンドが書き込まれると、そのバッファは汎用リード/ライトバッファに転送される。
(Rushバッファ)
(ホスト読み込みバッファ)
DDR3メモリシステムの必要な待機時間に合わせることが課題となるかもしれないことが分かっている。可能な限りの高速性を維持するために、1つの実施の形態において、DDR3の物理レイヤに「近接した」位置に読み込みバッファのセットをRushが供給する。このバッファには、高速読み込み経路を有するホストを提供する32の4KBバッファ及び32の128Bバッファを含めることができる。付加的な128Bにより、ホストのメタデータ機能をサポートするSSDのフラッシュページに保存されたメタデータをホストが読み込むことができる。Rushバッファへの内部的なアドレス指定を直接的に維持する1つの方法は、メインデータからメタデータを別のメモリインスタンスに保存することである。ホストが所定のバッファを一旦読み込むと、テラDIMMドライバは、そのバッファを解放する。これは、バッファを新しいデータで用いることができるという信号をRushに送るものである。続いて、Rushは、一般的な読み/書きバッファからホスト読み込みバッファにデータを転送する。Rushはホストリードバッファを割り当て、各コマンドに対するスタータスバイト中の最終的配置をドライバに伝える。ホストリードバッファは、DIMMメモリマップ中の固定位置に配置される。汎用のリード/ライトバッファは一般に未処理コマンドの番号順に並べられる。
(ライトバッファエントリーポイント)
ライトバッファエントリーポイントは、ホストに、スクラバとホストメモリコントローラの読み込み/修正/書き込み動作の両方をホストにサポートさせることができるようにする。スクラバの動作は後述する。1つの実施の形態によれば、4KBの8個のエントリーポイントがあり、128Bの8個のエントリーポイントがある。ホストはこれらのバッファに書き込みを行う。一旦バッファにデータ及びコマンドが書き込まれると、そのバッファは汎用リード/ライトバッファに転送される。
テラDIMMドライバは、一般にデータバッファ書き込みとコマンドバッファ書き込みとを交互配置する。さらに、コマンドバッファフォーマットには、どのバッファエントリーポイントがコマンドに関連付けられるのかを明示するフィールド及びバッファ中のデータと関連付けられたチェックサムフィールドが含まれる。これらの2つのフィールドにより、どのバッファエントリーポイントがコマンドに関連付けられるのかを、ハードウェアが決定できるようになり、及び、チェックサムにより、すべてのバッファに書き込みがなされているかどうかをRushが決定できるようになる。4KBのデータに加えて、各バッファは、それと、各キャッシュラインが少なくとも1度書き込まれていたことを示す64ビットベクトルとを関連付ける。このベクトルは、Rush内のハードウェアを介して保持される。これにより、ハードウェアはバッファが完了したかどうかを予想する、合理的な開始点を決定することができる。メモリコントローラの一部での読み込み・修正・書き込み動作により、所定のキャッシュラインの未知の大きさの部分に書き込みができるので、予想は所定の環境の下では正確でなくてもよい。従って、すべてのキャッシュラインがすでに書き込まれている必要があろう(しかしこれで十分ではない)。チェックサムでのコマンドプロセッサの照合に合格しなかった場合、バッファの部分を短時間で読み込み修正する。従って、コマンドプロセッサは、短時間の待機の後、チェックサムを再照合をコマンドプロセッサは試みることができる。
(汎用ライトバッファ)
汎用バッファの割り付けはテラDIMMドライバにより行われる。これにより、リード/ライトコマンドの割合をホストが動的に調整することができる。SSDの能力に応じて、コマンドが完了するまでライトバッファを解放することができない可能性がある。しかし、バッファを解放することができるとき信号を送ることのできるSSDの性能向上をサポートするために、Rushは、書き込みバッファがSSDに伝達されたかどうかをドライバに通知することができる。
(汎用ライトバッファ)
汎用バッファの割り付けはテラDIMMドライバにより行われる。これにより、リード/ライトコマンドの割合をホストが動的に調整することができる。SSDの能力に応じて、コマンドが完了するまでライトバッファを解放することができない可能性がある。しかし、バッファを解放することができるとき信号を送ることのできるSSDの性能向上をサポートするために、Rushは、書き込みバッファがSSDに伝達されたかどうかをドライバに通知することができる。
Rushバッファの内部アドレス化を直接保持する1つの方法はメタデータをメインデータから別のメモリインスタンスに保存することである。ホストの視点から、メタデータバッファ空間はデータバッファとは別になっている。内部空間内でバッファは接近しているように見えるが、メモリバッファへの書き込みは同じクリティカルパスを持っていないため、内部ロジックは正しいアドレスを生成する。1つの実施の形態によれば、全部で256の4KBの汎用リード/ライトバッファ及びメタデータ用の256の128Bバッファがある。
(コマンドバッファ)
一般に、Rush中のコマンドバッファに対して、設計上実際のコマンドバッファ毎に1つの複数のエントリーポイントがある。ホストコマンドバッファはメモリマップ中の固定位置に置かれる。1つの実施の形態によれば、このホストについて512個の64B制御バッファがある。第1のコマンドバッファは、デバッグに用いることができ、ステータスバッファ中の関連付けされたリターンステータスを有することはできない。コマンドバッファを書き込むことにより、コマンドステータスが完了したときにコマンドバッファを実行させることができる。ホストは、一般に、コマンドバッファが完了するまで、コマンドバッファを再使用しない。ホストは、プール内にコマンドバッファを割りつける。ホストは、一般に、コマンドバッファを読み返すことができない。読み返す場合は、すべてのゼロバッファを送り返すことができる。これにより、メモリの相互作用により、間違ったコマンドを受け取ることがなくなる。
(Rushスクラバブロック)
従来、多くのマイクロプロセッサは、メモリ中のすべてのバイトが周期的に読み込まれる低レベルのメモリスクラビングモジュールを導入している。これにより、単一のビットのアップセットが検出され修正不可能なエラーとなる前に修正することができる。モジュールをスクランブルすることは、メモリを線形的に(上に又は下へ)走査し各ラインを読み込む。モジュールは除外され、ビットエラーがあればデータを再書き込みする。スクラバは2回読み込みを行うことができ、ビットエラーが、確実にバスノイズの原因にならないようにする。
(コマンドバッファ)
一般に、Rush中のコマンドバッファに対して、設計上実際のコマンドバッファ毎に1つの複数のエントリーポイントがある。ホストコマンドバッファはメモリマップ中の固定位置に置かれる。1つの実施の形態によれば、このホストについて512個の64B制御バッファがある。第1のコマンドバッファは、デバッグに用いることができ、ステータスバッファ中の関連付けされたリターンステータスを有することはできない。コマンドバッファを書き込むことにより、コマンドステータスが完了したときにコマンドバッファを実行させることができる。ホストは、一般に、コマンドバッファが完了するまで、コマンドバッファを再使用しない。ホストは、プール内にコマンドバッファを割りつける。ホストは、一般に、コマンドバッファを読み返すことができない。読み返す場合は、すべてのゼロバッファを送り返すことができる。これにより、メモリの相互作用により、間違ったコマンドを受け取ることがなくなる。
(Rushスクラバブロック)
従来、多くのマイクロプロセッサは、メモリ中のすべてのバイトが周期的に読み込まれる低レベルのメモリスクラビングモジュールを導入している。これにより、単一のビットのアップセットが検出され修正不可能なエラーとなる前に修正することができる。モジュールをスクランブルすることは、メモリを線形的に(上に又は下へ)走査し各ラインを読み込む。モジュールは除外され、ビットエラーがあればデータを再書き込みする。スクラバは2回読み込みを行うことができ、ビットエラーが、確実にバスノイズの原因にならないようにする。
スクラバはメモリの特定の部分を避けるようにプログラムすることができないので、Rushには、読み込むことのできないすべてのアドレスに応答することができるスクラバブロックが含まれる。スクラバブロックの動作では種々のファイルのマッピング順序及びサイズに関する情報を用いることができる。スクラバブロックにより返送されたデータパターンはすべてゼロでありヌルコマンドに対応する。
1つの実施の形態によれば、Rushメモリマップ中の、読み込み可能な位置にマップしないDIMMメモリマップ内のスクラバ読み込み位置は、すべてゼロに初期化した特別なバッファ(例えば、ゼロバッファ)の内容を正しいECCに戻す。スクラバブロックはあらかじめ計算しておくことができ、ホスト中の小さな範囲のアドレスにECCを線形的な順序で保存することができる。これは、必ずしも、特定のランク内でマッピングホストアドレスがフレキシブルであるという理由で、テラDIMMアドレス(例えば、RAS、CAS、BA)が整列しているということを意味しない。書き込み可能なコマンドバッファに対応するRushメモリマップ内のスクラバ書き込み位置はまた、ゼロバッファの内容を返送することができる。書き込み可能なコマンドバッファに対応するRushメモリマップ内のスクラバ書き込み位置は、データバッファの更新した内容を返送することができる。読み込み可能なデータバッファに対応するRushメモリマップ内のスクラバ書き込み位置は、データバッファの内容を返送する。スクラバがECCのエラーを検出し、「訂正」をその位置に書き込んだ場合、その位置を読み込んだスクラバは「訂正された」データを返送する。
読み込みのために、スクラババッファ(ゼロバッファ)は、実際のメモリ位置にマップしていないあらゆるアドレスに、及びコマンドバッファのあらゆるリファレンスに用いることができる。ヌルコマンドをデータパターンとして返送することにより、コマンドを誤らせるあらゆるDDR3バスのノイズが、コマンドレジスタに書き込まれたヌルコマンドとなり、無視される。スクラバに関して他の2つの特別なバッファタイプがある。すなわち、書き込みデータバッファ及び書き込みメタデータバッファである。これらのバッファは、確実に実際のデータがスクラバで上書きされないようにするために書き込み、及び読み込みの両方が可能である。
観念的には、スクラバはECCエラーを検出しない。しかし、ECCエラーをもたらす2つの可能性がある。すなわち、Rushの内部SRAM中の実際のビットエラー及びDDR3バス上のノイズである。書き込みバッファエントリーポイントに、訂正したデータをバッファに書き戻すスクラバを供給することは普通はない。一方、ホスト読み込みバッファに、訂正した値を書き戻した後データをスクラバがどれだけすばやく再び読み込むかについては判らないかもしれない。従って、Rushが本当に実際のメモリを正しい値で更新したかどうかは明らかでないかもしれない。正しい値が書きこまれたことを確かめる1つの方法として、Rushは書き込みできないメモリ位置への書き込みを留保する小さなキャッシュ(例えば、4項目)を組み込むことができる。このような書き込みが起こったとき、コマンドプロセッサは、その位置を無効にすることができるように、修正アドレスを含んだ割り込みを受け取ることができる。問題のバッファが取り消されたとき、ファームウェアは、バッファを「手動」で無効にする必要があるか、又は読み込みコマンドのデータがとにかくバッファに伝達されようといているので何もしなくても良いのかを判断することができる。
(読み込み/書き込みデータフロー)
(読み込みデータフロー)
図15は、1つの実施の形態による、リードコマンドのコマンド及びデータのフローを示す論理ブロック図を示す。読み込み処理は、フロー1で、ホストでテラDIMMドライバが「リード」コマンドを特定のコマンドバッファエントリーポイントに書き込むときから始まる。このコマンドは、次に、コマンドは、フロー1aで、ECC/デ・インターリーブ/デ・スイッツル回路を流れる。バッファチェックロジックは、コマンド完了したかどうかまたいつ完了したのかを決定する。コマンドが完了している場合は、コマンドは、フロー2で、コマンドプロセッサへ伝達される。
(読み込み/書き込みデータフロー)
(読み込みデータフロー)
図15は、1つの実施の形態による、リードコマンドのコマンド及びデータのフローを示す論理ブロック図を示す。読み込み処理は、フロー1で、ホストでテラDIMMドライバが「リード」コマンドを特定のコマンドバッファエントリーポイントに書き込むときから始まる。このコマンドは、次に、コマンドは、フロー1aで、ECC/デ・インターリーブ/デ・スイッツル回路を流れる。バッファチェックロジックは、コマンド完了したかどうかまたいつ完了したのかを決定する。コマンドが完了している場合は、コマンドは、フロー2で、コマンドプロセッサへ伝達される。
コマンドを受け取ると、コマンドプロセッサは、DMA記述子を生成し、フロー3で、この記述子をPCI−E/SATAブロックへ伝達する。PCI−E/SATAブロックは、フロー4で、DMA記述子を読み込む。PCI−E/SATAブロックは、次に、フロー5で、SSDに読み込み要求を送る。この間、コマンドプロセッサはステータスバッファを更新し、フロー6で、コマンドが進行中であることをテラDIMMドライバに表示する。ドライバは、フロー6aで、ステータスを読み込むことも読み込まないこともできる。
フロー7で、PCI−E/SATAブロックは、SSDからデータ読み込み要求を受け取る。読み込みデータは、フロー7aで、内部バッファに書きこまれる。SSDから戻ってきたステータスは、フロー8で、DMA記述子内に保存される。また、この間、コマンドプロセッサは、PCI−E/SATAブロックから割り込みを受ける。ホストリードバッファは有効になったとき、内部バッファのリードデータは、フロー9で、ホストリードバッファにコピーされる。データがコピーされた後、コマンドプロセッサは、フロー10で、ステータスバッファを最終ステータスに更新する。これにより、リードデータはホストリードバッファから読み取り準備完了したことがドライバに示される。テラDIMMドライバは、ステータスバッファを読み込み、フロー10aで、最終状態を監視する。テラDIMMドライバは読み込んだ後、フロー11で、ホストリードバッファからデータ読み込み要求を読み込むことができる。一旦テラDIMMドライバがホストリードバッファの読み込みを完了すると、テラDIMMドライバは、フロー12で、再配置コマンドをコマンドバッファエントリーポイント書き込むことにより、ホストリードバッファの再配置を行うことができ、データリードシーケンスを完了することができる。
(書き込みデータフロー)
図16は、1つの実施の形態による、ライトコマンドのコマンド及びデータのフローを示す論理ブロック図を示す。書き込み処理は、フロー1で、ホストでテラDIMMドライバがデータバッファを特定のライトエントリーポイントに書き込む時に始まる。テラDIMMドライバは、次いで、フロー2で、特定のコマンドバッファエントリーポイントに「ライト」コマンドを書き込む。コマンドは、フロー2aで、ECC/デ・インターリーブ/デ・スイッツル回路を流れる。バッファチェックロジックは、コマンドが完了したかどうか及びコマンドが完了したときを決定する。コマンドが完了している場合、バッファチェックロジックは、フロー3で、ライトエントリーポイントからライトデータを引き出し始め、チェックサムを確認し、データを内部バッファに収納する。計算したチェックサムが予期したチェックサムと合わない場合、タイムアウトした後フロー3を再開する。
(書き込みデータフロー)
図16は、1つの実施の形態による、ライトコマンドのコマンド及びデータのフローを示す論理ブロック図を示す。書き込み処理は、フロー1で、ホストでテラDIMMドライバがデータバッファを特定のライトエントリーポイントに書き込む時に始まる。テラDIMMドライバは、次いで、フロー2で、特定のコマンドバッファエントリーポイントに「ライト」コマンドを書き込む。コマンドは、フロー2aで、ECC/デ・インターリーブ/デ・スイッツル回路を流れる。バッファチェックロジックは、コマンドが完了したかどうか及びコマンドが完了したときを決定する。コマンドが完了している場合、バッファチェックロジックは、フロー3で、ライトエントリーポイントからライトデータを引き出し始め、チェックサムを確認し、データを内部バッファに収納する。計算したチェックサムが予期したチェックサムと合わない場合、タイムアウトした後フロー3を再開する。
一旦データバッファ及びコマンドバッファの準備が完了すると、コマンドプロセッサは、フロー4で、新しい作業があるとの情報を受ける。コマンドプロセッサは、DMA記述子を生成し、フロー5で、この記述子をPCI−E/SATAブロックへ伝達する。PCI−E/SATAブロックは、フロー6で、DMA記述子を読み込む。PCI−E/SATAブロックは、フロー7で、データバッファを読み込む。この間、コマンドプロセッサはステータスバッファを更新し、フロー8で、コマンドが進行中であることをテラDIMMドライバに表示する。ドライバは、フロー8aで、ステータスを読み込むことも読み込まないこともできる。
フロー9で、PCI−E/SATAブロックは、データバッファをSSDに送り、SSDは、書き込み動作を始める。SSDから戻ってきたステータスは、フロー10で、DMA記述子の中に保存される。また、この間に、コマンドプロセッサはPCI−E/SATAブロックから割り込みを受け取る。コマンドプロセッサは、フロー11で、最終ステータスにステータスバッファを更新する。これは、データバッファがSSDに書き込まれていることをドライバに示す。テラDIMMドライバは、ステータスバッファを読み込み、フロー11aで、最終ステータスを監視し、処理を完了する。
Claims (27)
- コンピュータ処理装置と。
メモリモジュールと、
前記コンピュータ処理装置と前記メモリモジュールとを接続するメモリバスと、
コプロセッシングユニット又は入出力デバイスと、
を具備し、
前記メモリバスは、また、前記コプロセッシングユニット又は入出力デバイスをコンピュータ処理装置と接続させることを特徴とするシステム。 - 前記システムは、前記メモリバスから受け取り前記メモリバスへ送る、アドレス信号及びデータバス信号を処理するASICをさらに具備することを特徴とする請求項1に記載のシステム。
- コンピュータ処理装置からのデータバーストの時刻変更を行うバッファをさらに具備することを特徴とする請求項1に記載のシステム。
- 1以上のランクのDRAMジュールをさらに具備することを特徴とする請求項1に記載のシステム。
- コマンドを前記ASICに伝達するソフトウェアドライバをさらに具備することを特徴とする請求項2に記載のシステム。
- 前記システムは、BIOSメモリのテスト動作を行った後であってオペレーションシステムをブートする前に、前記ASICを検出し初期化することを特徴とする請求項2に記載のシステム。
- 前記ASICを初期化することには、各アドレスバス信号に関連付けられた生成ベクトルを解くことにより、前記コンピュータ処理装置が用いるデータスクランブルシーケンスを知得することが含まれることを特徴とする請求項6に記載のシステム。
- 前記ASICを初期化することには、シリアルROM及びSMBusのうちの少なくとも1つからデータスクランブルシーケンスをロードすることが含まれ、該データスクランブルシーケンスは、各アドレスバス信号と関連付けられた生成ベクトルを解くために前記コンピュータ処理装置により用いられることを特徴とする請求項6に記載のシステム。
- 前記ASICを初期化することには、前記ASICの内部のアドレス信号のセットに前記アドレスバス信号をマップする、実質的に線形のアドレスマッピングを生成することが含まれることを特徴とする請求項6に記載のシステム。
- 前記ASICを初期化することには、シリアルROM及びSMBusのうちの少なくとも1つから、実質的に線形のアドレスマッピングの設定をロードすることが含まれ、該実質的に線形のアドレスマッピングは、前記ASICの内部のアドレス信号のセットに前記アドレスバス信号をマップすることを特徴とする請求項6に記載のシステム。
- 前記ASICを初期化することには、各データバス信号と関連付けられた生成ベクトルを解くことにより前記コンピュータ処理装置が用いるECCを知得することが含まれることを特徴とする請求項6に記載のシステム。
- 前記ASICを初期化することには、シリアルROM及びSMBusのうちの少なくとも1つから、ECC設定パラメータをロードすることが含まれ、該ECC設定パラメータは、各データバス信号と関連付けられた生成ベクトルを解くために前記コンピュータ処理装置により用いられることを特徴とする請求項6に記載のシステム。
- 前記ASICを初期化することには、複数のデータパターンを順番に前記ASICに書き込み、連続する各書き込みでの一連のビット変化の数とモードを解除するシーケンスとを比較することにより、前記ASICを知得モードにすることが含まれることを特徴とする請求項6に記載のシステム。
- 前記ASICによるアドレス信号及びデータバス信号の処理には、前記コンピュータ処理装置から受け取ったデータ値のスクランブルの解除を行うこと、及び前記コンピュータ処理装置に送るために値をスクランブルすることが含まれ、前記スクランブルの解除及びスクランブルは、関連するアドレス値に基づき行われることを特徴とする請求項2に記載のシステム。
- 前記ASICによるアドレス信号及びデータバス信号の処理には、関連するデータ値に基づきECC値を生成することが含まれることを特徴とする請求項2に記載のシステム。
- 前記ASICには、読み込みできないアドレスへのメモリ書き込みにスクラバ応答するブロックが含まれることを特徴とする請求項2に記載のシステム。
- 前記コプロセッシングユニット又は前記入出力デバイスには、暗号化ユニットが含まれることを特徴とする請求項1に記載のシステム。
- 前記コプロセッシングユニット又は前記入出力デバイスには、圧縮ユニットが含まれることを特徴とする請求項1に記載のシステム。
- 前記コプロセッシングユニット又は前記入出力デバイスには、ディジタル信号処理装置が含まれることを特徴とする請求項1に記載のシステム。
- 前記コプロセッシングユニット又は前記入出力デバイスには、画像処理装置が含まれることを特徴とする請求項1に記載のシステム。
- 前記コプロセッシングユニット又は前記入出力デバイスには、パターンマッチングユニットが含まれることを特徴とする請求項1に記載のシステム。
- 前記コプロセッシングユニット又は前記入出力デバイスには、無線通信装置が含まれることを特徴とする請求項1に記載のシステム。
- 前記コプロセッシングユニット又は前記入出力デバイスには、RAID制御装置が含まれることを特徴とする請求項1に記載のシステム。
- 前記コプロセッシングユニット又は前記入出力デバイスには、不揮発性メモリ記憶デバイスが含まれることを特徴とする請求項1に記載のシステム。
- メモリ制御装置をさらに具備し、
前記メモリ制御装置は、RDIMM、UDIMM、及びLRDIMMのうちの1つとして、不揮発性メモリ記憶デバイスを検出することを特徴とする請求項24に記載のシステム。 - アドレス信号のセットに基づきデータ値をスクランブルするためにコンピュータシステムで用いられるスクランブル生成ベクトルを知得する方法であって、該方法は、
第1のデータ値を生成するためにゼロデータパターンをアドレスゼロに書き込むことをコンピュータシステムに命令するステップと、
前記第1のデータ値をスクランブルした値をスクランブル生成ベクトルの1つとして保存するステップであって、前記アドレス信号のセットの各々1つの信号に対して、
前記アドレス信号のセット中の前記各々1つの信号だけ「1」の値に設定し、他の信号は「0」の値に設定するステップと、
前記アドレス信号に対応する1つのアドレスにゼロデータパターンを書き込み第2のスクランブルされたデータ値を生成するステップと、
前記第1のスクランブルされたデータ値と前記第2のスクランブルされたデータ値との間でビットごとに排他的論理和演算を行い、前記アドレス信号の前記各々1つと関係付けられたスクランブル生成ベクトルを生成するステップと、
前記アドレス信号の前記各々1つと関係付けられたスクランブル生成ベクトルを保存するステップと、
を実行することを特徴とするステップと、
を具備することを特徴とする方法。 - データ信号のセットに基づきECCを生成するためにコンピュータシステムで用いられるECC生成ベクトルを知得するための方法であって、該方法は、
第1のECC値を生成するためにゼロデータパターンをアドレスゼロに書き込むことを前記コンピュータシステムに命令するステップと、
前記第1のECC値が反転されているかどうかを判断するステップと、
前記データ信号における各々1つに対して、
前記データ信号のセット中の前記各々1つの信号だけ「1」の値に設定し、他の信号は「0」の値に設定するステップと、
第2のECC値を生成するために前記データ信号のセットに対応するデータパターンを書き込むステップと、
前記1つの信号に関連したECC生成ベクトルとして第2のECC値を保存するステップと、
を具備することを特徴とする方法。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201161457233P | 2011-02-08 | 2011-02-08 | |
US61/457,233 | 2011-02-08 | ||
US13/303,048 | 2011-11-22 | ||
US13/303,048 US8713379B2 (en) | 2011-02-08 | 2011-11-22 | System and method of interfacing co-processors and input/output devices via a main memory system |
PCT/CA2012/000110 WO2012106806A1 (en) | 2011-02-08 | 2012-02-08 | System and method of interfacing co-processors and input/output devices via a main memory system |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2014506698A true JP2014506698A (ja) | 2014-03-17 |
Family
ID=46601512
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2013552802A Pending JP2014506698A (ja) | 2011-02-08 | 2012-02-08 | メインメモリシステムを介して、コプロセッサ及び入出力(i/o)デバイスとインターフェースするシステム及び方法 |
Country Status (6)
Country | Link |
---|---|
US (8) | US8713379B2 (ja) |
EP (1) | EP2673713B1 (ja) |
JP (1) | JP2014506698A (ja) |
KR (2) | KR102126643B1 (ja) |
IL (1) | IL227863A0 (ja) |
WO (1) | WO2012106806A1 (ja) |
Families Citing this family (78)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8301833B1 (en) | 2007-06-01 | 2012-10-30 | Netlist, Inc. | Non-volatile memory module |
US8874831B2 (en) | 2007-06-01 | 2014-10-28 | Netlist, Inc. | Flash-DRAM hybrid memory module |
US8904098B2 (en) | 2007-06-01 | 2014-12-02 | Netlist, Inc. | Redundant backup using non-volatile memory |
US9128632B2 (en) | 2009-07-16 | 2015-09-08 | Netlist, Inc. | Memory module with distributed data buffers and method of operation |
WO2012050934A2 (en) | 2010-09-28 | 2012-04-19 | Fusion-Io, Inc. | Apparatus, system, and method for a direct interface between a memory controller and non-volatile memory using a command protocol |
US9164679B2 (en) | 2011-04-06 | 2015-10-20 | Patents1, Llc | System, method and computer program product for multi-thread operation involving first memory of a first memory class and second memory of a second memory class |
US8930647B1 (en) | 2011-04-06 | 2015-01-06 | P4tents1, LLC | Multiple class memory systems |
US9170744B1 (en) | 2011-04-06 | 2015-10-27 | P4tents1, LLC | Computer program product for controlling a flash/DRAM/embedded DRAM-equipped system |
US9158546B1 (en) | 2011-04-06 | 2015-10-13 | P4tents1, LLC | Computer program product for fetching from a first physical memory between an execution of a plurality of threads associated with a second physical memory |
US9176671B1 (en) | 2011-04-06 | 2015-11-03 | P4tents1, LLC | Fetching data between thread execution in a flash/DRAM/embedded DRAM-equipped system |
US9170878B2 (en) | 2011-04-11 | 2015-10-27 | Inphi Corporation | Memory buffer with data scrambling and error correction |
US10838646B2 (en) | 2011-07-28 | 2020-11-17 | Netlist, Inc. | Method and apparatus for presearching stored data |
US10380022B2 (en) | 2011-07-28 | 2019-08-13 | Netlist, Inc. | Hybrid memory module and system and method of operating the same |
US10198350B2 (en) | 2011-07-28 | 2019-02-05 | Netlist, Inc. | Memory module having volatile and non-volatile memory subsystems and method of operation |
US9417754B2 (en) | 2011-08-05 | 2016-08-16 | P4tents1, LLC | User interface system, method, and computer program product |
US11048410B2 (en) | 2011-08-24 | 2021-06-29 | Rambus Inc. | Distributed procedure execution and file systems on a memory interface |
WO2013028859A1 (en) | 2011-08-24 | 2013-02-28 | Rambus Inc. | Methods and systems for mapping a peripheral function onto a legacy memory interface |
US9098209B2 (en) | 2011-08-24 | 2015-08-04 | Rambus Inc. | Communication via a memory interface |
CN103377161A (zh) * | 2012-04-24 | 2013-10-30 | 鸿富锦精密工业(深圳)有限公司 | 主板及应用于该主板的数据处理方法 |
KR20140083530A (ko) * | 2012-12-26 | 2014-07-04 | 삼성전자주식회사 | 하드웨어를 디버깅하는 부트 쉘을 포함하는 시스템온칩 및 이의 구동 방법 |
US10642505B1 (en) | 2013-01-28 | 2020-05-05 | Radian Memory Systems, Inc. | Techniques for data migration based on per-data metrics and memory degradation |
US10445229B1 (en) | 2013-01-28 | 2019-10-15 | Radian Memory Systems, Inc. | Memory controller with at least one address segment defined for which data is striped across flash memory dies, with a common address offset being used to obtain physical addresses for the data in each of the dies |
US9652376B2 (en) | 2013-01-28 | 2017-05-16 | Radian Memory Systems, Inc. | Cooperative flash memory control |
US11249652B1 (en) | 2013-01-28 | 2022-02-15 | Radian Memory Systems, Inc. | Maintenance of nonvolatile memory on host selected namespaces by a common memory controller |
KR102133573B1 (ko) | 2013-02-26 | 2020-07-21 | 삼성전자주식회사 | 반도체 메모리 및 반도체 메모리를 포함하는 메모리 시스템 |
US10372551B2 (en) | 2013-03-15 | 2019-08-06 | Netlist, Inc. | Hybrid memory system with configurable error thresholds and failure analysis capability |
US10001948B2 (en) | 2013-05-13 | 2018-06-19 | Rambus Inc. | Buffer circuit with data bit inversion |
US10198314B2 (en) | 2013-05-23 | 2019-02-05 | Rambus Inc. | Memory device with in-system repair capability |
US9436600B2 (en) | 2013-06-11 | 2016-09-06 | Svic No. 28 New Technology Business Investment L.L.P. | Non-volatile memory storage for multi-channel memory system |
EP3629123B1 (en) | 2013-07-27 | 2021-02-24 | Netlist, Inc. | Memory module with local synchronization |
US9715424B1 (en) | 2013-08-23 | 2017-07-25 | Rambus Inc. | Memory device and repair method with column-based error code tracking |
CN104425040A (zh) * | 2013-08-23 | 2015-03-18 | 辉达公司 | 用于测试存储器的方法和系统 |
US9450614B2 (en) | 2013-09-13 | 2016-09-20 | Rambus Inc. | Memory module with integrated error correction |
WO2015048199A1 (en) | 2013-09-24 | 2015-04-02 | Rambus Inc. | High capacity memory system |
US9170939B1 (en) | 2013-09-26 | 2015-10-27 | Western Digital Technologies, Inc. | Early de-allocation of write buffer in an SSD |
EP3654337A1 (en) | 2013-10-15 | 2020-05-20 | Rambus Inc. | Load reduced memory module |
US10248328B2 (en) | 2013-11-07 | 2019-04-02 | Netlist, Inc. | Direct data move between DRAM and storage on a memory module |
CN110299157B (zh) | 2013-11-11 | 2023-04-28 | 拉姆伯斯公司 | 使用标准控制器部件的大容量存储系统 |
US9823966B1 (en) | 2013-11-11 | 2017-11-21 | Rambus Inc. | Memory component with error-detect-correct code interface |
US9665533B2 (en) | 2013-12-20 | 2017-05-30 | Rambus Inc. | Blob pools, selectors, and command set implemented within a memory appliance for accessing memory |
US9916196B2 (en) | 2014-02-28 | 2018-03-13 | Rambus Inc. | Memory module with dedicated repair devices |
US11347608B2 (en) | 2014-02-28 | 2022-05-31 | Rambus Inc. | Memory module with dedicated repair devices |
US9606738B2 (en) | 2014-03-10 | 2017-03-28 | Kabushiki Kaisha Toshiba | Memory system with a bridge part provided between a memory and a controller |
US9449651B2 (en) * | 2014-03-21 | 2016-09-20 | Diablo Technologies Inc. | System and method for offsetting the data buffer latency of a device implementing a JEDEC standard DDR-4 LRDIMM chipset |
US20150310898A1 (en) * | 2014-04-23 | 2015-10-29 | Diablo Technologies Inc. | System and method for providing a configurable timing control for a memory system |
US9354872B2 (en) | 2014-04-24 | 2016-05-31 | Xitore, Inc. | Apparatus, system, and method for non-volatile data storage and retrieval |
US10048962B2 (en) | 2014-04-24 | 2018-08-14 | Xitore, Inc. | Apparatus, system, and method for non-volatile data storage and retrieval |
WO2015183834A1 (en) | 2014-05-27 | 2015-12-03 | Rambus Inc. | Memory module with reduced read/write turnaround overhead |
US9490002B2 (en) | 2014-07-24 | 2016-11-08 | Rambus Inc. | Reduced refresh power |
US9542118B1 (en) | 2014-09-09 | 2017-01-10 | Radian Memory Systems, Inc. | Expositive flash memory control |
US10552085B1 (en) | 2014-09-09 | 2020-02-04 | Radian Memory Systems, Inc. | Techniques for directed data migration |
US9792246B2 (en) * | 2014-12-27 | 2017-10-17 | Intel Corporation | Lower-power scrambling with improved signal integrity |
US10121013B2 (en) * | 2015-05-07 | 2018-11-06 | Samsung Electronics Co., Ltd. | XOR-based scrambler/descrambler for SSD communication protocols |
CN104951412B (zh) | 2015-06-06 | 2018-01-02 | 华为技术有限公司 | 一种通过内存总线访问的存储装置 |
US10152413B2 (en) | 2015-06-08 | 2018-12-11 | Samsung Electronics Co. Ltd. | Nonvolatile memory module and operation method thereof |
KR102461453B1 (ko) | 2015-06-10 | 2022-11-02 | 삼성전자주식회사 | 스토리지 장치 |
US10552058B1 (en) | 2015-07-17 | 2020-02-04 | Radian Memory Systems, Inc. | Techniques for delegating data processing to a cooperative memory controller |
EP3356943B1 (en) * | 2015-10-01 | 2021-11-03 | Rambus Inc. | Memory system with cached memory module operations |
US10558468B2 (en) | 2015-10-22 | 2020-02-11 | American Megatrends International, Llc | Memory channel storage device initialization |
US10203893B2 (en) | 2015-10-22 | 2019-02-12 | American Megatrends, Inc. | Memory channel storage device detection |
US10331586B2 (en) * | 2015-10-30 | 2019-06-25 | Samsung Electronics Co., Ltd. | Nonvolatile memory device for providing fast booting and system including the same |
KR102501753B1 (ko) * | 2015-10-30 | 2023-02-21 | 삼성전자주식회사 | 고속 부팅을 제공하는 비휘발성 메모리 장치 및 이를 포함하는 시스템 |
US10049006B2 (en) | 2015-12-08 | 2018-08-14 | Nvidia Corporation | Controller-based memory scrub for DRAMs with internal error-correcting code (ECC) bits contemporaneously during auto refresh or by using masked write commands |
US9823964B2 (en) | 2015-12-08 | 2017-11-21 | Nvidia Corporation | Method for memory scrub of DRAM with internal error correcting code (ECC) bits during either memory activate and/or precharge operation |
US9880900B2 (en) | 2015-12-08 | 2018-01-30 | Nvidia Corporation | Method for scrubbing and correcting DRAM memory data with internal error-correcting code (ECC) bits contemporaneously during self-refresh state |
US10649690B2 (en) * | 2015-12-26 | 2020-05-12 | Intel Corporation | Fast memory initialization |
CN105681904A (zh) * | 2016-01-18 | 2016-06-15 | 四川长虹电器股份有限公司 | 提高电视响应速度的方法 |
US10810144B2 (en) | 2016-06-08 | 2020-10-20 | Samsung Electronics Co., Ltd. | System and method for operating a DRR-compatible asynchronous memory module |
US10853257B1 (en) * | 2016-06-24 | 2020-12-01 | EMC IP Holding Company LLC | Zero detection within sub-track compression domains |
CN108139993B (zh) * | 2016-08-29 | 2020-06-16 | 华为技术有限公司 | 内存装置、内存控制器、数据缓存装置及计算机系统 |
KR102370278B1 (ko) | 2017-11-30 | 2022-03-07 | 에스케이하이닉스 주식회사 | 메모리 컨트롤러, 이를 포함하는 메모리 시스템, 및 그의 동작방법 |
GB2580165B (en) * | 2018-12-21 | 2021-02-24 | Graphcore Ltd | Data exchange in a computer with predetermined delay |
US11474897B2 (en) * | 2019-03-15 | 2022-10-18 | Nvidia Corporation | Techniques for storing data to enhance recovery and detection of data corruption errors |
US11175984B1 (en) | 2019-12-09 | 2021-11-16 | Radian Memory Systems, Inc. | Erasure coding techniques for flash memory |
RU2753980C1 (ru) * | 2020-12-04 | 2021-08-25 | Акционерное общество "Информационные спутниковые системы" имени академика М.Ф. Решетнёва" | Устройство ввода-вывода |
JP2023044478A (ja) | 2021-09-17 | 2023-03-30 | キオクシア株式会社 | コントローラおよびメモリシステム |
CN114528027A (zh) * | 2022-01-25 | 2022-05-24 | 深圳市优易控软件有限公司 | 一种基于pc平台的智能装备响应时间提升方法 |
WO2023177582A1 (en) * | 2022-03-14 | 2023-09-21 | Micron Technology, Inc. | Host controlled media testing of memory |
Family Cites Families (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5459742A (en) * | 1992-06-11 | 1995-10-17 | Quantum Corporation | Solid state disk memory using storage devices with defects |
US6418506B1 (en) * | 1996-12-31 | 2002-07-09 | Intel Corporation | Integrated circuit memory and method for transferring data using a volatile memory to buffer data for a nonvolatile memory array |
IL130540A (en) * | 1999-06-17 | 2003-07-31 | Tadiran Telecom Business Syste | System having a port with two operating modes |
JP3871853B2 (ja) * | 2000-05-26 | 2007-01-24 | 株式会社ルネサステクノロジ | 半導体装置及びその動作方法 |
US7032158B2 (en) * | 2001-04-23 | 2006-04-18 | Quickshift, Inc. | System and method for recognizing and configuring devices embedded on memory modules |
US6691276B2 (en) * | 2001-06-25 | 2004-02-10 | Intel Corporation | Method for detecting and correcting failures in a memory system |
US7130933B2 (en) * | 2002-07-24 | 2006-10-31 | Intel Corporation | Method, system, and program for handling input/output commands |
US6765506B1 (en) * | 2003-01-06 | 2004-07-20 | Via Technologies Inc. | Scrambler, de-scrambler, and related method |
US7752380B2 (en) * | 2003-07-31 | 2010-07-06 | Sandisk Il Ltd | SDRAM memory device with an embedded NAND flash controller |
US7287101B2 (en) * | 2003-08-05 | 2007-10-23 | Intel Corporation | Direct memory access using memory descriptor list |
US7328380B2 (en) * | 2003-09-11 | 2008-02-05 | Hewlett-Packard Development Company, L.P. | Memory scrubbing logic |
US7386765B2 (en) * | 2003-09-29 | 2008-06-10 | Intel Corporation | Memory device having error checking and correction |
JP4480427B2 (ja) * | 2004-03-12 | 2010-06-16 | パナソニック株式会社 | リソース管理装置 |
US20060143506A1 (en) * | 2004-12-29 | 2006-06-29 | Lsi Logic Corporation | RAID storage controller assist circuit, systems and methods |
US20070110178A1 (en) * | 2005-11-11 | 2007-05-17 | Broadcom Corporation, A California Corporation | Configurable de-interleaver design |
US7685376B2 (en) * | 2006-05-03 | 2010-03-23 | Intel Corporation | Method to support heterogeneous memories |
US8595573B2 (en) * | 2006-12-03 | 2013-11-26 | Apple Inc. | Automatic defect management in memory devices |
US20080140918A1 (en) * | 2006-12-11 | 2008-06-12 | Pantas Sutardja | Hybrid non-volatile solid state memory system |
US7721140B2 (en) * | 2007-01-02 | 2010-05-18 | International Business Machines Corporation | Systems and methods for improving serviceability of a memory system |
US7739441B1 (en) * | 2007-04-30 | 2010-06-15 | Hewlett-Packard Development Company, L.P. | Communicating between a native fully buffered dual in-line memory module protocol and a double data rate synchronous dynamic random access memory protocol |
US8301833B1 (en) | 2007-06-01 | 2012-10-30 | Netlist, Inc. | Non-volatile memory module |
JP5019611B2 (ja) * | 2007-12-27 | 2012-09-05 | 株式会社東芝 | メモリシステム |
WO2009102821A2 (en) * | 2008-02-12 | 2009-08-20 | Virident Systems, Inc. | Methods and apparatus for two-dimensional main memory |
US8516185B2 (en) | 2009-07-16 | 2013-08-20 | Netlist, Inc. | System and method utilizing distributed byte-wise buffers on a memory module |
US8001434B1 (en) | 2008-04-14 | 2011-08-16 | Netlist, Inc. | Memory board with self-testing capability |
US20110113208A1 (en) * | 2008-05-01 | 2011-05-12 | Norman Paul Jouppi | Storing checkpoint data in non-volatile memory |
JP5649293B2 (ja) * | 2009-08-27 | 2015-01-07 | ピーエスフォー ルクスコ エスエイアールエルPS4 Luxco S.a.r.l. | メモリモジュール |
US8595428B2 (en) * | 2009-12-22 | 2013-11-26 | Intel Corporation | Memory controller functionalities to support data swizzling |
US9582431B2 (en) * | 2010-03-22 | 2017-02-28 | Seagate Technology Llc | Storage address space to NVM address, span, and length mapping/converting |
WO2012050934A2 (en) * | 2010-09-28 | 2012-04-19 | Fusion-Io, Inc. | Apparatus, system, and method for a direct interface between a memory controller and non-volatile memory using a command protocol |
-
2011
- 2011-11-22 US US13/303,048 patent/US8713379B2/en active Active
-
2012
- 2012-02-08 KR KR1020197016529A patent/KR102126643B1/ko active IP Right Grant
- 2012-02-08 WO PCT/CA2012/000110 patent/WO2012106806A1/en active Application Filing
- 2012-02-08 EP EP12744797.7A patent/EP2673713B1/en active Active
- 2012-02-08 KR KR1020137023876A patent/KR101989775B1/ko active IP Right Grant
- 2012-02-08 JP JP2013552802A patent/JP2014506698A/ja active Pending
-
2013
- 2013-08-08 IL IL227863A patent/IL227863A0/en unknown
-
2014
- 2014-04-07 US US14/247,162 patent/US8972805B2/en active Active
-
2015
- 2015-03-02 US US14/635,960 patent/US9444495B2/en active Active
-
2016
- 2016-09-12 US US15/262,462 patent/US10168954B2/en active Active
-
2018
- 2018-12-31 US US16/236,946 patent/US10725704B2/en active Active
-
2020
- 2020-07-24 US US16/937,713 patent/US10942682B2/en active Active
-
2021
- 2021-03-05 US US17/194,083 patent/US11422749B2/en active Active
-
2022
- 2022-06-29 US US17/853,741 patent/US11789662B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
US10725704B2 (en) | 2020-07-28 |
WO2012106806A8 (en) | 2012-10-11 |
US20120204079A1 (en) | 2012-08-09 |
US20210318835A1 (en) | 2021-10-14 |
US11422749B2 (en) | 2022-08-23 |
EP2673713B1 (en) | 2021-01-27 |
US20160378404A1 (en) | 2016-12-29 |
US20220405018A1 (en) | 2022-12-22 |
US9444495B2 (en) | 2016-09-13 |
KR20190089172A (ko) | 2019-07-30 |
US8972805B2 (en) | 2015-03-03 |
US20210011661A1 (en) | 2021-01-14 |
IL227863A0 (en) | 2013-09-30 |
EP2673713A1 (en) | 2013-12-18 |
US20150309959A1 (en) | 2015-10-29 |
EP2673713A4 (en) | 2016-06-01 |
WO2012106806A1 (en) | 2012-08-16 |
US10942682B2 (en) | 2021-03-09 |
US20190212948A1 (en) | 2019-07-11 |
KR101989775B1 (ko) | 2019-06-17 |
US11789662B2 (en) | 2023-10-17 |
US20140223262A1 (en) | 2014-08-07 |
KR102126643B1 (ko) | 2020-06-25 |
US10168954B2 (en) | 2019-01-01 |
KR20140061304A (ko) | 2014-05-21 |
US8713379B2 (en) | 2014-04-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11789662B2 (en) | System and method of interfacing co-processors and input/output devices via a main memory system | |
CN106126447B (zh) | 控制存储装置的方法、存储器模块和存储系统 | |
US9552175B2 (en) | System and method for providing a command buffer in a memory system | |
US9575908B2 (en) | System and method for unlocking additional functions of a module | |
US7032158B2 (en) | System and method for recognizing and configuring devices embedded on memory modules | |
US10403333B2 (en) | Memory controller with flexible address decoding | |
US20140237157A1 (en) | System and method for providing an address cache for memory map learning | |
US20080256352A1 (en) | Methods and systems of booting of an intelligent non-volatile memory microcontroller from various sources | |
US20080177938A1 (en) | Hybrid hard disk drive, computer system including the same, and flash memory DMA circuit for hybrid HDD | |
US20080126776A1 (en) | Electronic apparatus | |
US10769066B2 (en) | Nonvolatile memory device, data storage device including the same and operating method thereof | |
US20150347151A1 (en) | System and method for booting from a non-volatile memory | |
US20170192679A1 (en) | Serial Link Storage Interface (SLSI) Hybrid Block Storage | |
US11704055B2 (en) | Storage device, controller and method for operating thereof | |
CN114595091A (zh) | 存储装置和计算系统 | |
CN117476063A (zh) | 数据编码装置、存储器控制器和存储装置 |