[go: up one dir, main page]

US20120324143A1 - Methods and apparatus for data access by a reprogrammable circuit module - Google Patents

Methods and apparatus for data access by a reprogrammable circuit module Download PDF

Info

Publication number
US20120324143A1
US20120324143A1 US13/161,141 US201113161141A US2012324143A1 US 20120324143 A1 US20120324143 A1 US 20120324143A1 US 201113161141 A US201113161141 A US 201113161141A US 2012324143 A1 US2012324143 A1 US 2012324143A1
Authority
US
United States
Prior art keywords
memory
address
module
circuit module
reprogrammable circuit
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.)
Abandoned
Application number
US13/161,141
Inventor
John J. Giganti
Andrew Huo
Richard A. Baum
John M. Cavallo
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Data Design Corp
Original Assignee
Data Design Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Data Design Corp filed Critical Data Design Corp
Priority to US13/161,141 priority Critical patent/US20120324143A1/en
Assigned to DATA DESIGN CORPORATION reassignment DATA DESIGN CORPORATION ASSIGNMENT OF ASSIGNORS INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: Baum, Richard A., CAVALLO, PH.D., JOHN M., GIGANTI, JOHN J., Huo, Andrew
Priority to GB201210639A priority patent/GB2491979B/en
Priority to PCT/US2012/042143 priority patent/WO2012174043A1/en
Priority to TW101121649A priority patent/TW201314453A/en
Priority to EP12172152A priority patent/EP2535820A3/en
Priority to US13/532,319 priority patent/US8838873B2/en
Assigned to DATA DESIGN CORPORATION, A DELAWARE CORPORATION reassignment DATA DESIGN CORPORATION, A DELAWARE CORPORATION MERGER (SEE DOCUMENT FOR DETAILS). Assignors: DATA DESIGN CORPORATION, A MARYLAND CORPORATION
Publication of US20120324143A1 publication Critical patent/US20120324143A1/en
Priority to US14/213,903 priority patent/US9417894B1/en
Abandoned legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0607Interleaved addressing

Definitions

  • Some embodiments described herein relate generally to memory systems, and, in particular, to systems and methods for accessing data from a memory system using a reprogrammable circuit module.
  • Some known systems for performing database searches employ an array of individual computers each programmed to perform a similar search function on one or more databases, in order to increase the speed of retrieving data from the databases. Such a scheme, however, is difficult to manage and coordinate different computers.
  • Some other known systems use an array of disk drives connected to an array of processor units. To perform a search function, data is read from the disk drives and processed at the processor units. With this approach, large amount of data is transmitted from the disk drives to the processors, which causes a substantial latency in retrieving data.
  • an apparatus includes a set of memory modules, a reprogrammable circuit module and a set of data channels.
  • Each memory module is associated with an address translation table configured to store a set of address pairs each including a physical memory address and a logical memory address.
  • the reprogrammable circuit module is configured to retrieve a first physical memory address associated with a first logical memory address and a second physical memory address associated with a second logical memory address.
  • Each data channel couples the reprogrammable circuit module to at least one memory module.
  • the reprogrammable circuit module is configured to send a first and a second query to the first and the second memory module, via a first data channel based on the first physical memory address or a second data channel based on the second physical memory address, respectively.
  • FIG. 1 is a system block diagram of a reprogrammable circuit module coupled to a set of memory modules, according to an embodiment.
  • FIG. 2 is a schematic illustration of structure of a memory module, according to an embodiment.
  • FIG. 3 is a schematic illustration of an address translation table stored in a memory module, according to an embodiment.
  • FIG. 4 is a schematic illustration of a reprogrammable circuit module configured to execute a search process, according to an embodiment.
  • FIG. 5 is a flow chart illustrating a method for executing a search process on multiple memory modules, according to an embodiment.
  • an apparatus includes a set of memory modules, a reprogrammable circuit module and a set of data channels.
  • Each memory module from the set of memory modules is associated with an address translation table configured to store a set of address pairs, where each address pair includes (1) a physical memory address associated with a physical location in a memory module from the set of memory modules and (2) a logical memory address associated with the physical memory address.
  • the reprogrammable circuit module is configured to execute a search process based at least in part on data stored at the set of memory modules.
  • the search process is configured to retrieve a first physical memory address associated with a first logical memory address from an address translation table associated with a first memory module from the set of memory modules, and a second physical memory address associated with a second logical memory address from an address translation table associated with a second memory module from the set of memory modules.
  • the reprogrammable circuit module is configured to randomly associate the first physical memory address with the first logical memory address and randomly associate the second physical memory address with the second logical memory address, such that the first logical memory address is adjacent to the second logical memory address while the first physical memory address is not adjacent to the second physical memory address.
  • each data channel from the set of data channels operably couples the reprogrammable circuit module to at least one memory module from the set of memory modules.
  • the reprogrammable circuit module is configured to send, based on the search process, a first query to the first memory module via a first data channel from the set of data channels based on the first physical memory address and a second query to the second memory module via a second data channel from the set of data channels based on the second memory address.
  • the reprogrammable circuit module is configured to send the first query at substantially a same time as the second query.
  • the reprogrammable circuit module is a Field Programmable Gate Array (FPGA), and configured to be modified by a driver module.
  • FPGA Field Programmable Gate Array
  • each memory module from the set of memory modules is a flash memory module included in a dual in-line memory module (DIMM), and the set of memory modules are removably coupled to a Peripheral Component Interconnect Express (PCIe) card including the reprogrammable circuit module.
  • DIMM dual in-line memory module
  • PCIe Peripheral Component Interconnect Express
  • an apparatus comprises a first reprogrammable circuit module and a memory package including a set of memory modules.
  • the memory package is removably coupled to the first reprogrammable circuit module.
  • the memory package is operatively coupled to the first reprogrammable circuit module via a set of channels when in a first configuration, and physically coupled to a second reprogrammable circuit module when in a second configuration.
  • At least one memory module from the set of memory modules is configured to store an address translation table having a set of address pairs associated with the set of memory modules.
  • Each address pair from the set of address pairs includes (1) a physical memory address associated with a physical location in the set of memory modules and (2) a logical memory address associated with the physical memory address.
  • the memory package is a DIMM, where each memory module from the set of memory modules is a flash memory module on the DIMM.
  • the first reprogrammable circuit module is a FPGA.
  • the first reprogrammable circuit module is configured to use the set of address pairs to execute a search process via the set of channels after the memory package is moved from the second configuration to the first configuration, where the search process is substantially the same as a search process executed by the second reprogrammable circuit module when the memory package is in the second configuration.
  • the search process executed by the first reprogrammable circuit module is configured to retrieve a physical memory address associated with a received logical memory address using the address translation table.
  • the first reprogrammable circuit module is configured to send a first query to a first memory module from the set of memory modules during a first time period, and send a second query to a second memory module from the set of memory modules during a second time period overlapping the first time period.
  • FIG. 1 is a system block diagram of a reprogrammable circuit module 120 coupled to a set of memory modules (e.g., memory modules 161 - 166 ), according to an embodiment.
  • the reprogrammable circuit module 120 is a portion of an expansion board 100 , which is operatively coupled to a host computer 110 .
  • the set of memory modules, including memory modules 161 - 166 are included in a replaceable memory package 140 that is coupled to the expansion board 100 via a socket 150 .
  • each memory module from the set of memory modules in the memory package 140 is operatively coupled to reprogrammable circuit module 120 via a data channel, such as data channels 131 , 132 and 133 shown in FIG. 1 .
  • the expansion board 100 contains an implementation of a scalable structure that is synthesized by connecting multiple parallel channels (e.g., data channels 131 - 133 ) of high data rate memory modules (e.g., memory modules 161 - 166 ) directly to a data-processing module (e.g., reprogrammable circuit module 120 ).
  • a data-processing module e.g., reprogrammable circuit module 120
  • an array of memory modules is connected to a single large data-processing module, where each memory module has its own data channel, thus to provide a combined transfer rate of up to a multiple times of the data rate for a single data channel.
  • such an integrated structure consisting of a single data-processing module connected to an array of memory modules (typically flash memory devices) is referred to as a Flash Processing Element (FPE).
  • FPE Flash Processing Element
  • a scalable implementation of a FPE is known as a Scalable Large Flash Memory (SLFM) system.
  • the expansion board 100 can be any removable device that can be used to implement a FPE structure, i.e., to access and retrieve data stored in the memory package 140 , and locally process the retrieved data within the expansion board 100 .
  • reprogrammable circuit module 120 can be used to access and retrieve data from the memory modules (e.g., memory modules 161 - 166 ) included in the memory package 140 via the data channels (e.g., data channels 131 - 133 ), and then process the retrieved data within the expansion board 100 .
  • the expansion board 100 can be an add-in circuit board directly coupled to a motherboard of a PC.
  • the expansion board 100 can be a removable module connected to a processor of a computer server via an interface and/or a bus.
  • the expansion board 100 can be operatively coupled to host computer 110 via for example, a high speed serial data and/or command interface over a data channel.
  • the expansion board 100 can be connected to a motherboard of host computer 110 .
  • the expansion board 100 can be a PCIe card.
  • the FPE system including reprogrammable circuit module 120 , the memory package 140 and other components are contained on the PCIe expansion board 100 .
  • Physical implementation of the I/O channel connecting the expansion board 100 and host computer 120 can be in a PCIe format, and the expansion board 100 can be accessible with a unique PCIe address.
  • the PCIe format allows multiple FPE boards, including the expansion board 100 , to be used in a variety of configurations from single board applications to systems needing hundreds of FPEs.
  • FPE boards i.e., PCIe cards such as the expansion board 100
  • PCIe cards are physically compatible with common full length PCI slots of a PC or a PCIe expansion chassis.
  • a PCIe card can be connected to a motherboard or a host computer via a high speed serial data or command interface over a multi-lane PCIe channel, which can provide a large data rate (e.g. 5 G bytes/sec).
  • the expansion board 100 can be a circuit board that adopts the Advanced Telecommunications Computing Architecture (ATCA) backplane interface specification or any other interface specification.
  • ATCA Advanced Telecommunications Computing Architecture
  • Reprogrammable circuit module 120 can be any circuit module that is capable of retrieving data from the memory package 140 . In some embodiments, reprogrammable circuit module 120 can be capable of on-board processing of retrieved data. In some embodiments, reprogrammable circuit module 120 can be a FPGA. For example, reprogrammable circuit module 120 can be an Altera Stratix 4GX-530 FPGA. More specifically, reprogrammable circuit module 120 can be a FPGA consisting of a large number of logic elements and/or data-processing elements, which is programmed to retrieve data stored at memory modules in the memory package 140 and further process the retrieved data within reprogrammable circuit module 120 .
  • a reprogrammable circuit module can be an application-specific integrated circuit (ASIC) or any other suitable programmable logic device (PLD), such as a programmable logic array (PLA), a programmable array logic (PAL), a complex programmable logic device (CPLD), etc.
  • ASIC application-specific integrated circuit
  • PLD programmable logic device
  • PLA programmable logic array
  • PAL programmable array logic
  • CPLD complex programmable logic device
  • reprogrammable circuit module 120 can be used to perform a search function. That is, reprogrammable circuit module 120 can be configured to search specific data (e.g., a string, a term) from the data stored within the memory modules included in the memory package 140 . Details of a reprogrammable circuit module being configured to perform a search function are described with respect to FIGS. 4-5 .
  • reprogrammable circuit module 120 includes an on-board configuration storage, such as an on-board configuration ROM (read-only memory), to store a configuration file.
  • the configuration ROM although not shown in FIG. 1 , can be mounted on the expansion board 100 and electrically coupled to reprogrammable circuit module 120 .
  • the configuration file contained in the configuration ROM can be automatically uploaded from the configuration ROM into reprogrammable circuit module 120 upon the application of power at the beginning of a system boot-up.
  • reprogrammable circuit module 120 is configured to operate according to the uploaded configuration file, such as to perform a specific task (e.g., a search function).
  • a new configuration file can be loaded into the on-board configuration ROM of the expansion board 100 at any time after a system boot-up, and further uploaded into reprogrammable circuit module 120 (e.g., at next system boot-up), such that reprogrammable circuit module 120 can be “reprogrammed” to perform a different task if necessary.
  • reprogrammable circuit module 120 can also be configured, or “reprogrammed”, by a driver module (not shown in FIG. 1 ), which is typically located at host computer 110 .
  • the driver module can optimize a program (e.g., a FPGA program) for a given task that is to be executed by reprogrammable circuit module 120 , and then send the program to reprogrammable circuit module 120 .
  • a program e.g., a FPGA program
  • a user can write a VHDL (VHSIC hardware description language) program for a given search algorithm, and then send the VHDL program to reprogrammable circuit module 120 from the host computer 110 using the driver module.
  • VHDL VHSIC hardware description language
  • reprogrammable circuit module 120 will adjust accordingly and execute the search function according to the VHDL program.
  • other programming languages such as Verilog or other HDL languages can be used to reprogram or configure reprogrammable circuit module 120 .
  • the memory package 140 contains multiple memory modules, such as memory modules 161 - 166 .
  • a memory module in the memory package 140 can be any type of memory device that can be used to store data and can be accessed by reprogrammable circuit module 120 via, for example, a data channel (e.g., data channel 131 - 133 ).
  • a memory module can be a flash memory device, such as a multi-level cell (MLC) Not AND (NAND) chip, a single level cell (SLC) NAND chip, or a Clear NAND chip, etc.
  • MLC multi-level cell
  • SLC single level cell
  • Clear NAND chip a flash memory device
  • a FPGA internal state machine providing readout of the memory devices can be changed according to the specific type of memory devices.
  • the memory modules in a single memory package e.g., memory package 140
  • the memory modules in a single memory package can be instances of a same type of memory devices.
  • each memory module contained in the memory package 140 is associated with an address translation table, which is from a set of one or more address translation tables stored in one or more memory modules contained in the memory package 140 . That is, at least one memory segment unit in each memory module is associated with an entry of an address translation table stored in a memory module.
  • each memory module contained in the memory package 140 is associated with address translation table 180 , which is stored in memory module 162 .
  • Address translation table 180 can be configured to store a set of address pairs. Each address pair can include a physical memory address associated with a physical location in a memory module contained in the memory package 140 , and a logical memory address associated with that physical memory address. Details of the internal structure of a memory module and an address translation table are further described with respect to FIGS. 2-3 .
  • each memory module contained in the memory package 140 can be associated with a single address translation tables.
  • each memory module e.g., memory module 161 - 166
  • address translation table 180 is uniquely associated with memory module 162 .
  • address translation table 180 is configured to store mapping information for memory segment units of memory module 162 but not the other memory modules including memory modules 161 , 163 - 166 , etc.
  • the memory package 140 can be any replaceable module that can contain one or more memory modules (e.g., memory modules 161 - 166 ) and enable the memory modules to be accessed by an on-board data-processing module (e.g., reprogrammable circuit module 120 ) via for example, one or more data channels (e.g., data channels 131 - 133 ).
  • the memory package 140 is replaceable in the sense that it can be mounted onto any suitable circuit board via a suitable interface socket, or removed from the circuit board if necessary.
  • the memory package 140 can be mounted onto the expansion board 100 via a socket 150 when in a first configuration as shown in FIG. 1 , or mounted onto another circuit board via another suitable interface socket (not shown in FIG. 1 ) when in a second configuration.
  • the memory package can be physically coupled to reprogrammable circuit module 120 via a set of data channels (e.g., data channels 131 - 133 ) when in the first configuration, and physically coupled to another reprogrammable circuit module via a different set of data channels when in the second configuration.
  • a set of data channels e.g., data channels 131 - 133
  • the memory modules can be removed from the expansion board 100 containing the on-board data-processing module (e.g., reprogrammable circuit module 120 ) and other associated interface components (not shown in FIG. 1 ).
  • the expansion board 100 can be used as a “carrier” board for one or more memory packages that include the memory modules.
  • memory modules accessed by reprogrammable circuit module 120 can be easily replaced with for example, new types of memory modules, or same type of memory modules containing different data.
  • a memory package containing the old types of memory modules can be removed from an expansion board, and then a different memory package containing the new types of memory modules can be mounted onto the expansion board.
  • reprogrammable circuit module 120 can be configured to execute a task such as a search function on the memory package 140 when the memory package 140 is coupled to reprogrammable circuit module 120 in the first configuration, where the search function is substantially the same as a search function executed by a different reprogrammable circuit module when the memory package is coupled to the different reprogrammable circuit module in the second configuration.
  • the memory package 140 can be a DIMM.
  • the SLFM design using a DIMM as a memory package can be compatible with a variety of flash memory devices as memory modules, including MLC NAND chips, SLC NAND chips, Clear NAND chips, etc.
  • a DIMM flash mounting scheme uses DIMM slot connectors to mount the flash memory devices (e.g., memory modules 161 - 166 ) onto the memory package 140 , which is then coupled to the expansion board via socket 150 .
  • the memory package 140 can be a DIMM with a memory of 1 T bytes that contains 16 Clear NAND chips, each of which has a memory of 64 G bytes.
  • DIMM flash mounting scheme also permits alternative types of flash memory devices to be used on the memory package 140 without re-spinning the expansion board 100 , by only providing a new DIMM containing the new type of flash memory devices, and adjusting reprogrammable circuit module 120 accordingly (e.g., changing the FPGA code consistent with the state machine requirements of the new part in reprogrammable circuit module 120 ).
  • a set of data channels (e.g., data channels 131 - 133 ) operatively couple reprogrammable circuit module 120 to the memory modules (e.g., memory modules 161 - 166 ) contained in the memory package 140 .
  • a data channel can be used to convey any command, query or the like from reprogrammable circuit module 120 to a memory module, and/or send any retrieved data from the corresponding memory module to reprogrammable circuit module 120 .
  • the data channels are parallel to each other, in the sense that multiple data channels can be used at the same time to transmit data.
  • an aggregate rate up to 6 G byte/sec can be provided.
  • more than one memory module can be connected to reprogrammable circuit module 120 by a single data channel.
  • memory modules 161 , 162 are connected to reprogrammable circuit module 120 via data channel 131 ;
  • memory modules 163 , 164 are connected to reprogrammable circuit module 120 via data channel 132 ;
  • memory modules 165 , 166 are connected to reprogrammable circuit module 120 via data channel 133 .
  • more than one memory module per data channel is made possible by exploiting the latency time of accessing a unit (e.g., a page) of data from a memory module, to interleave data accesses to multiple memory modules on the same data channel.
  • the latency time is 150 usec. Since the page readout time is about 50 usec, it is possible to combine two chips on a single memory bus (i.e., data channel) with no loss of latency. Thus, the latency time between the receipt of a command selecting a page to be transferred and the beginning of transmission, is exploited to permit having multiple flash memory devices sharing a single data channel.
  • reprogrammable circuit module 120 e.g., a FPGA
  • the internal resources include for example, logic support for generating the state machine timing signals needed to meet the flash interface requirements, data buffers needed for alignment and error correction of the transferred pages, etc.
  • a Stratix EP4S530 FPGA has 744 I/O pins, allowing for various I/O interface standards needed by the FPGA to connect flashing memory devices and other components.
  • a Stratix EP4S530 FPGA can support as many as 33 flash memory chips (e.g., contained in one or more memory packages).
  • FIG. 2 is a schematic illustration of structure of a memory module 200 , according to an embodiment.
  • Memory module 200 can be structurally and functionally similar to the memory modules 161 - 166 shown and described in FIG. 1 .
  • memory module 200 stores an address translation table 210 and other data (e.g., data 251 - 254 ).
  • data is stored in a number of memory segment units.
  • data 251 - 254 is stored in four separate memory segment units, respectively.
  • a memory segment unit can be for example, a page.
  • an address translation table can be stored in one memory segment unit (as address translation table 210 shown in FIG. 2 ) or across multiple memory segment units.
  • Each memory segment unit in memory module 200 can be identified by, for example, a physical memory address representing a physical location of the starting point of that memory segment unit.
  • a physical memory address can be for example, a binary number from a finite monotonically ordered sequence of binary numbers that uniquely describes the physical location of a memory itself.
  • the memory segment unit where address translation table 210 is stored can be identified by a physical memory address 0x000000, which represents a physical location of the starting point of that memory segment unit. In this case it is also the starting point of the memory space of memory module 200 .
  • the memory segment unit where data 251 is stored can be identified by a physical memory address 0x000100, which represents a physical location of the starting point of that memory segment unit.
  • the physical memory addresses of the memory segment units form a monotonically-ordered (e.g., increasing, decreasing) sequence.
  • a memory segment unit of memory module 200 can be accessed by for example, a reprogrammable circuit module (e.g., reprogrammable circuit module 120 in FIG. 1 ), based on the physical memory address identifying the memory segment unit.
  • a reprogrammable circuit module can be configured to search or retrieve the data stored in a memory segment unit of memory module 200 using the physical memory address identifying that memory segment unit to locate a starting point for the search or retrieving operation.
  • a reprogrammable circuit module can be configured to retrieve data 252 using physical memory address 0x000106 to locate a starting point for the retrieving operation.
  • a reprogrammable circuit module can be configured to search address translation table 210 using 0x000000 to locate a starting point for the search.
  • FIG. 3 is a schematic illustration of an address translation table 300 stored in a memory module, according to an embodiment.
  • Address translation table 300 can be structurally and functionally similar to address translation table 180 or address translation table 210 shown in FIGS. 1-2 , and accordingly, the memory module hosting address translation table 300 can be structurally and functionally similar to memory module 162 or memory module 200 shown in FIGS. 1-2 .
  • an address translation table can be referred to as a block-address translation (BAT) table.
  • BAT block-address translation
  • address translation table 300 has two columns of entries, shown as logical memory address 310 and physical memory address 320 .
  • the first column, logical memory address 310 contains logical memory addresses (e.g., 1000 , 1001 , 1002 , 1100 ), each of which uniquely identifies a logical memory address associated with a memory segment unit in a memory package including the memory module that hosts address translation table 300 .
  • a logical memory address can be in any suitable form and can represent a location, at which a memory segment unit (or other item such as a memory cell, a storage element, etc.) appears to reside from the perspective of a reprogrammable circuit module that performs a search function on the memory modules.
  • a logical memory address can be a four-digital integer, such as 1000 , 1001 , etc.
  • a logical memory address can be in any other suitable form.
  • the second column, physical memory address 320 contains physical memory addresses (e.g., 465/0x002010, 463/0x006a24, 466/0x00f92a, 461/0x00ff00), each of which uniquely identifies a physical memory location of a memory segment unit in the memory package.
  • an address translation table stored in a memory module can store physical memory addresses identifying physical memory locations within other memory modules.
  • a physical memory address stored in this address translation table can include both information associated with a hosting memory module and information identifying a physical memory location within that hosting memory module. In the example of the physical memory address “465/002010” shown in FIG.
  • “465” identifies a memory module (i.e., memory module 465 shown in FIGS. 1 ) and “002010” identifies a memory segment unit, which is represented by a physical memory address “0x002010”, in the identified memory module 465 .
  • the physical memory address “465/002010” identifies the memory segment unit “0x002010” in memory module 465 .
  • the physical memory address “463/006a24” identifies the memory segment unit “0x006a24” in memory module 463 .
  • Address translation table 300 associates each logical memory address with a physical memory address. Specifically, each logical memory address stored in the column of logical memory address 310 can be mapped to a physical memory address stored in the column of physical memory address 320 . For example, logical memory address “ 1000 ” is mapped to physical memory address “465/0x002010” in the first entry of address translation table 300 . For another example, logical memory address “ 1001 ” is mapped to physical memory address “463/0x006a24” in the second entry of address translation table 300 .
  • the logical memory addresses can be stored in a logical order in address translation table 300 , such as a monotonically-increasing order as shown in FIG. 3 .
  • the physical memory addresses are not necessarily stored in any logical order in address translation table 300 .
  • the logical memory address stored in the first entry of address translation table 300 i.e., 1000
  • the second entry of address translation table 300 i.e., 1001
  • the physical memory address stored in the first entry i.e., 465/0x002010
  • the two physical memory addresses identify two memory segment units in two different memory modules.
  • physical memory addresses can be stored in a logical order in address translation table 300 .
  • a reprogrammable circuit module can be configured to associate a physical memory address with a logical memory address stored in an address translation table. That is, the reprogrammable circuit module can be configured to assign a physical memory address to each logical memory address, and then store the pair of addresses (i.e., the physical memory address and the logical memory address) as an entry in the address translation table. Furthermore, in some embodiments, the reprogrammable circuit module can be configured to randomly assign a physical memory address to a logical memory address, such that the logical memory addresses are stored in a logical order in the address translation table, while the physical memory addresses associated with those logical memory addresses are randomly distributed across the entire available memory space provided by the memory modules, as shown in FIG. 3 .
  • FIG. 4 is a schematic illustration of such a SLFM system, including a reprogrammable circuit module 420 that is configured to execute a search process on a memory package 440 , according to an embodiment.
  • the structure of the system in FIG. 4 is similar to that of the system shown in FIG. 1 .
  • reprogrammable circuit module 420 is a portion of an expansion board 400 , which is operatively coupled to a host computer 410 .
  • a set of memory modules, including memory modules 461 - 466 are included in a replaceable memory package 440 that is coupled to the expansion board 400 via a socket 450 .
  • Each memory module from the set of memory modules in the memory package 440 is operatively coupled to reprogrammable circuit module 420 via a data channel, such as data channel 431 - 433 .
  • a search process can be executed by the system shown in FIG. 4 as follows. Initially, a query is formulated in host computer 410 by for example, an operator or a user of host computer 410 and/or a program or application executing on host computer 410 . An application running on host computer 410 can then be configured to translate the query into a set of machine executable tasks. In some embodiments, such a machine executable task can be for example, a string or a term of a predefined format (e.g., a fixed length) that can be searched against data stored in the memory modules on the memory package 440 . Thus, the query is translated into a set of searchable strings or terms at host computer 410 .
  • a predefined format e.g., a fixed length
  • one or more logical memory addresses associated with a searchable string or term can be determined based on the string or term. Specifically, a logical memory address is associated with a string or term in a sense that data stored in the memory segment unit represented by the logical memory address is likely to contain information associated with the string or term. Thus, to search for the string or term, data stored in the memory segment unit represented by the logical memory address needs to be searched.
  • the desired logical memory addresses can be determined at host computer 410 , and then sent from host computer 410 to reprogrammable circuit module 420 . In such embodiments, reprogrammable circuit module 420 is configured to receive the logical memory addresses.
  • the desired logical memory addresses can be determined at reprogrammable circuit module 420 or another component of the system (not shown in FIG. 4 ).
  • the searchable string or term is sent from host computer 410 to reprogrammable circuit module 420 or the other component, where one or more logical memory addresses associated with the string or term are determined based on the string or term.
  • the logical memory addresses are then sent to reprogrammable circuit module 420 if necessary.
  • one or more logical memory addresses associated with the searchable string or term are available at reprogrammable circuit module 420 .
  • reprogrammable circuit module 420 is configured to receive logical memory address 1001 and 1002 (e.g., as shown in FIG. 3 ) from host computer 410 .
  • reprogrammable circuit module 420 can be configured to send an address-translation query including the desired logical memory addresses to an address translation table stored in a memory module in the memory package 440 via a data channel.
  • reprogrammable circuit module 420 is configured to send an address-translation query, via data channel 431 (shown as data path 491 ), to memory module 462 contained in the memory package 440 , where an address translation table 480 is stored.
  • address translation table 480 is associated with the memory modules contained in the memory package 440 . That is, at least one memory segment unit in each memory module contained in the memory package 440 is associated with an entry stored in address translation table 480 .
  • the address-translation query sent from reprogrammable circuit module 420 to memory module 462 includes the desired logical memory addresses 1001 and 1002 .
  • reprogrammable circuit module 420 can be configured to send more than one address-translation queries, each of which contains a different set of logical memory addresses and is destined to a different address translation table. For example, although not shown in FIG. 4 , if entries associated with logical memory address 1001 and 1002 are stored in two different address translation tables in the memory package 440 , then reprogrammable circuit module 420 can be configured to send a first address-translation query containing logical memory address 1001 to a first address translation table that includes an entry for logical memory address 1001 , and send a second address-translation query containing logical memory address 1002 to a second address translation table that includes an entry for logical memory address 1002 . Thus, every logical memory address is carried by an address-translation query that is sent to an appropriate address translation table containing an entry for the logical memory address.
  • an entry associated with the logical memory address can be determined based on the logical memory address.
  • Physical memory address associated with the logical memory address can be retrieved from the entry, and sent to reprogrammable circuit module 420 via a data channel.
  • address translation table 480 includes the same entries of address translation table 300 as shown in FIG. 3 , then physical memory address “463/0x006a24” is associated with logical memory address 1001 and physical memory address. “466/0x00f92a” is associated with logical memory address 1002 .
  • logical memory address 1001 points to a memory segment unit in memory module 463 , which is identified by a physical memory address of “0x006a24” in memory module 463 ; and logical memory address 1002 points to a memory segment unit in memory module 466 , which is identified by a physical memory address of “0x00f92a” in memory module 466 .
  • memory module 462 receiving the address-translation query containing logical memory addresses 1001 and 1002 , physical memory addresses “463/0x006a24’ and “466/0x00f92a” are retrieved from address translation table 480 and sent to reprogrammable circuit module 420 via data channel 431 (shown as data path 492 in FIG. 4 ).
  • a desired logical memory address available at reprogrammable circuit module 420 is used to retrieve a physical memory address, which can be used to locate a specific memory segment unit in a memory module within the memory package 440 .
  • reprogrammable circuit module 420 can be configured to send one or more data queries to one or more memory segment units, each of which is identified by a retrieved physical memory address associated with a logical memory address.
  • a data query destined to a memory segment unit in a memory module within the memory package 440 can be sent over a data channel connecting reprogrammable circuit module 420 and the memory module.
  • multiple data queries to different memory modules can be sent from reprogrammable circuit module 420 at substantially a same time.
  • a first data query can be sent to a first memory module during a first time period
  • a second data query can be sent to a second memory module during a second time period overlapping the first time period.
  • reprogrammable circuit module 420 is configured to send a first data query to a memory segment unit identified by physical memory address “0x006a24” in memory module 463 via data channel 432 (shown as data path 493 ), and a second data query to a memory segment unit identified by physical memory address “0x00f92a” in memory module 466 via data channel 433 (shown as data path 494 ).
  • the first data query and the second data query can be sent at substantially a same time, and subsequently, data can be retrieved from memory module 463 and memory module 466 during a substantially same time period (shown as data path 495 and 496 , respectively).
  • a data query sent from reprogrammable circuit module 420 to a memory segment unit in a memory module is designed to retrieve data from the memory segment unit.
  • data stored in the memory segment unit can be retrieved completely and the original data can be sent to reprogrammable circuit module 420 for further processing.
  • data stored in the memory segment unit can be partially retrieved and sent to reprogrammable circuit module 420 for further processing, according to the data query. Further processing can include for example, search the desired string or term in the original data or processed data. Such further processing can be performed at reprogrammable circuit module 420 , or alternatively, at another component of host computer 410 .
  • information of the associations between logical memory addresses and physical memory addresses with respect to memory segment units contained in a memory package can be stored in one or more address translation tables included in the memory package.
  • the remapping information e.g., between logical memory addresses and physical memory addresses
  • the memory package can be swapped from one circuit board to another that is suitable for the memory package, without loosing the remapping information.
  • address translation table 480 is configured to store the remapping information for the memory package 440 .
  • the memory package 440 can be removed from the expansion board 400 and coupled to a different circuit board, where a task (e.g., a search function) can be executed in a substantially same way by a different reprogrammable circuit module as when the memory package 440 is coupled to the expansion board 400 .
  • a task e.g., a search function
  • FIG. 5 is a flow chart illustrating a method for executing a search process on multiple memory modules, according to an embodiment.
  • a query associated with a data lookup is received at a reprogrammable circuit module, where the query includes a first logical memory address and a second logical memory address.
  • the data lookup can be part of a search process executed by the reprogrammable circuit module on a set of memory modules contained in a memory package.
  • the data lookup can be translated by for example, an application running on a host computer operatively coupled to the reprogrammable circuit module, into a set of queries including the received query.
  • Each query contains one or more logical memory addresses used to retrieve a physical memory address, and/or some other associated information for the search process.
  • the query including the first logical memory address and the second logical memory address is then sent from the host computer to the reprogrammable circuit module.
  • a data lookup is generated at host computer 110 .
  • a query associated with the data lookup is generated by an application at host computer 110 , and then sent to reprogrammable circuit module 120 .
  • the query includes a first logical memory address L 1 and a second logical memory address L 2 .
  • the first logical memory address L 1 and the second logical memory address L 2 can be adjacent to each other in a logically-ordered sequence.
  • an instruction can be received at the reprogrammable circuit module from a driver module operatively coupled to the reprogrammable circuit module, such that the search process can be modified based on the instruction.
  • a modification can be for example, to reconfigure the reprogrammable circuit module, to update the address for an address translation table (e.g., after a new memory package is coupled to the reprogrammable circuit module), etc.
  • a driver module at host computer 110 can be configured to send an instruction to reprogrammable circuit module 120 , for example, to provide an address for a new address translation table associated with the new memory package.
  • a first physical memory address associated with the first logical memory address is retrieved by the reprogrammable circuit module, where the first physical memory address is associated with a memory location at a first memory module coupled to the reprogrammable circuit module by a first data channel.
  • the reprogrammable circuit module can be configured to send an address-translation query including the first logical memory address to a first address translation table that includes an entry for the first logical memory address.
  • the first address translation table is stored in a memory module operatively coupled to the reprogrammable circuit module via a data channel.
  • the first physical memory address which is associated with the first logical memory address (i.e., the first logical memory address and the first physical memory address are stored as a pair in an entry of the first address translation table), can be retrieved from the first address translation table and sent to the reprogrammable circuit module via the data channel.
  • the first physical memory address identifies a memory location, such as a memory segment unit, in a first memory module that is coupled to the reprogrammable circuit module by a first data channel.
  • reprogrammable circuit module 120 can be configured to send an address-translation query including the first logical memory address L 1 to address translation table 180 included in memory module 162 via data channel 131 .
  • a first physical memory address P 1 which is associated with the first logical memory address L 1 in an entry of address translation table 180 , can be retrieved from address translation table 180 and sent back to reprogrammable circuit module 120 via data channel 131 .
  • the first physical memory address P 1 identifies a memory segment unit in for example, memory module 164 , which is coupled to reprogrammable circuit module 120 via data channel 132 .
  • a second physical memory address associated with the second logical memory address is retrieved by the reprogrammable circuit module, where the second physical memory address is associated with a memory location at a second memory module coupled to the reprogrammable circuit module by a second data channel.
  • the reprogrammable circuit module can be configured to send an address-translation query including the second logical memory address to a second address translation table that includes an entry for the second logical memory address.
  • the second address translation table can be the same as the first address translation table, and thus the second logical memory address can be included in the same address-translation query for the first logical memory address.
  • the entry for the second logical memory address is stored in a different address-translation table from that for the first logical memory address, and therefore, a separate address-translation query including the second logical memory address is sent to the second address-translation table, which is probably stored in a different memory module from that for the first address-translation table.
  • the second physical memory address which is associated with the second logical memory address (i.e., the second logical memory address and the second physical memory address are stored as a pair in an entry of the second address translation table), can be retrieved from the second address translation table and sent to the reprogrammable circuit module via the data channel.
  • the second physical memory address identifies a memory location, such as a memory segment unit, in a second memory module that is coupled to the reprogrammable circuit module by a second data channel.
  • the second memory module can be different than the first memory module.
  • both the first memory module and the second memory module can be included within a common memory package, such as a common DIMM.
  • reprogrammable circuit module 120 can be configured to send an address-translation query including both the first logical memory address L 1 and the second logical memory address L 2 to address translation table 180 included in memory module 162 via data channel 131 .
  • reprogrammable circuit module 120 can be configured to send a different address-translation query including the second logical memory address L 2 to a different address translation table (not shown in FIG. 1 ) included in a different memory module.
  • a second physical memory address P 2 which is associated with the second logical memory address L 2 , can be retrieved from the corresponding address translation table and sent to reprogrammable circuit module 120 via a data channel.
  • the second physical memory address P 2 identifies a memory segment unit in, for example, memory module 165 , which is coupled to reprogrammable circuit module 120 via data channel 133 . Furthermore, in the example of FIG. 1 , both memory module 164 including a location associated with the first physical memory address P 1 and memory module 165 including a location associated with the second physical memory address P 2 are included in a common memory package 140 , which can be for example, a DIMM.
  • the first memory module is accessed, during a first time period, by the reprogrammable circuit module via the first data channel using the first physical memory address.
  • the reprogrammable circuit module can be configured to locate and access the memory segment unit identified by the first physical memory address, which is included in the first memory module.
  • the reprogrammable circuit module can be configured to send a data query to the memory segment unit identified by the first physical memory address via the first data channel.
  • data can be retrieved, during the first time period, from the memory segment unit identified by the first physical memory address.
  • reprogrammable circuit module 120 can be configured to send a data query to the memory segment unit identified by the first physical memory address P 1 , which is included in memory module 164 , via data channel 132 .
  • data can be retrieved, during a first time period, from the memory segment unit identified by the first physical memory address P 1 in memory module 164 , via data channel 132 .
  • the second memory module is accessed, during a second time period overlapping the first time period, by the reprogrammable circuit module via the second data channel using the second physical memory address. Similar to the case for the first physical memory address, the reprogrammable circuit module can be configured to send a data query to the memory segment unit identified by the second physical memory address, which is included in the second memory module, via the second data channel. As a result, data can be retrieved, during the second time period, from the memory segment unit identified by the second physical memory address.
  • the operation of retrieving data from the first memory module and the operation of retrieving data from the second memory module are independent, therefore can be executed in parallel.
  • the first time period can be overlapping the second time period.
  • reprogrammable circuit module 120 can be configured to send a data query to the memory segment unit identified by the second physical memory address P 2 , which is included in memory module 165 , via data channel 133 .
  • data can be retrieved, during a second time period, from the memory segment unit identified by the second physical memory address P 2 in memory module 165 , via data channel 133 .
  • the first time period and the second time period can be overlapping.
  • a copy of an address translation table can be stored in a reprogrammable circuit module.
  • a physical memory address associated with a logical memory address can be retrieved from the copy of the address translation table at the reprogrammable circuit module, without sending a query to the address translation table stored in the memory module.
  • a copy of address translation table 180 can be stored at reprogrammable circuit module 120 .
  • reprogrammable circuit module 120 does not need to send a query to address translation table 180 at memory module 162 .
  • a reprogrammable circuit module can be coupled to four memory packages on one expansion board, where each of the memory packages contains 16 memory modules.
  • the reprogrammable circuit module can be configured to retrieve data from up to 64 memory modules at the same time, via parallel data channels.
  • a reprogrammable circuit module can be coupled to any number of memory packages, each of which contains any number of memory modules.
  • the reprogrammable circuit module can be configured to retrieve data from any number of memory modules at the same time, via parallel data channels.
  • a SLFM system can be configured to employ parallel processing channels with a large array of multiple reprogrammable circuit modules (e.g., FPGAs), where each of the multiple reprogrammable circuit module has a similar structure and functionality as the reprogrammable circuit module described herein.
  • the SLFM system can be scalable by increasing the number of FPGAs and the associated FPGA processing channels.
  • Some embodiments described herein relate to a computer storage product with a computer-readable medium (also can be referred to as a processor-readable medium) having instructions or computer code thereon for performing various computer-implemented operations.
  • the media and computer code also can be referred to as code
  • Examples of computer-readable media include, but are not limited to: magnetic storage media such as hard disks, floppy disks, and magnetic tape; optical storage media such as Compact Disc/Digital Video Discs (CD/DVDs), Compact Disc-Read Only Memories (CD-ROMs), and holographic devices; magneto-optical storage media such as optical disks; carrier wave signal processing modules; and hardware devices that are specially configured to store and execute program code, such as Application-Specific Integrated Circuits (ASICs), Programmable Logic Devices (PLDs), and read-only memory (ROM) and RAM devices.
  • ASICs Application-Specific Integrated Circuits
  • PLDs Programmable Logic Devices
  • ROM read-only memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Memory System (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

In some embodiments, an apparatus includes a set of memory modules, a reprogrammable circuit module and a set of data channels. Each memory module is associated with an address translation table configured to store a set of address pairs each including a physical memory address and a logical memory address. The reprogrammable circuit module is configured to retrieve a first physical memory address associated with a first logical memory address and a second physical memory address associated with a second logical memory address. Each data channel couples the reprogrammable circuit module to at least one memory module. The reprogrammable circuit module is configured to send a first and a second query to the first and the second memory module, via a first data channel based on the first physical memory address or a second data channel based on the second physical memory address, respectively.

Description

    BACKGROUND
  • Some embodiments described herein relate generally to memory systems, and, in particular, to systems and methods for accessing data from a memory system using a reprogrammable circuit module.
  • Some known systems for performing database searches employ an array of individual computers each programmed to perform a similar search function on one or more databases, in order to increase the speed of retrieving data from the databases. Such a scheme, however, is difficult to manage and coordinate different computers. Some other known systems use an array of disk drives connected to an array of processor units. To perform a search function, data is read from the disk drives and processed at the processor units. With this approach, large amount of data is transmitted from the disk drives to the processors, which causes a substantial latency in retrieving data.
  • Accordingly, a need exists for a system where high speed database searches can be performed, and particularly, improvement in speed over the existing design using disk drives can be achieved.
  • SUMMARY
  • In some embodiments, an apparatus includes a set of memory modules, a reprogrammable circuit module and a set of data channels. Each memory module is associated with an address translation table configured to store a set of address pairs each including a physical memory address and a logical memory address. The reprogrammable circuit module is configured to retrieve a first physical memory address associated with a first logical memory address and a second physical memory address associated with a second logical memory address. Each data channel couples the reprogrammable circuit module to at least one memory module. The reprogrammable circuit module is configured to send a first and a second query to the first and the second memory module, via a first data channel based on the first physical memory address or a second data channel based on the second physical memory address, respectively.
  • BRIEF DESCRIPTION OF THE DRAWINGS
  • FIG. 1 is a system block diagram of a reprogrammable circuit module coupled to a set of memory modules, according to an embodiment.
  • FIG. 2 is a schematic illustration of structure of a memory module, according to an embodiment.
  • FIG. 3 is a schematic illustration of an address translation table stored in a memory module, according to an embodiment.
  • FIG. 4 is a schematic illustration of a reprogrammable circuit module configured to execute a search process, according to an embodiment.
  • FIG. 5 is a flow chart illustrating a method for executing a search process on multiple memory modules, according to an embodiment.
  • DETAILED DESCRIPTION
  • In some embodiments, an apparatus includes a set of memory modules, a reprogrammable circuit module and a set of data channels. Each memory module from the set of memory modules is associated with an address translation table configured to store a set of address pairs, where each address pair includes (1) a physical memory address associated with a physical location in a memory module from the set of memory modules and (2) a logical memory address associated with the physical memory address. The reprogrammable circuit module is configured to execute a search process based at least in part on data stored at the set of memory modules. The search process is configured to retrieve a first physical memory address associated with a first logical memory address from an address translation table associated with a first memory module from the set of memory modules, and a second physical memory address associated with a second logical memory address from an address translation table associated with a second memory module from the set of memory modules. In some embodiments, the reprogrammable circuit module is configured to randomly associate the first physical memory address with the first logical memory address and randomly associate the second physical memory address with the second logical memory address, such that the first logical memory address is adjacent to the second logical memory address while the first physical memory address is not adjacent to the second physical memory address.
  • Furthermore, each data channel from the set of data channels operably couples the reprogrammable circuit module to at least one memory module from the set of memory modules. The reprogrammable circuit module is configured to send, based on the search process, a first query to the first memory module via a first data channel from the set of data channels based on the first physical memory address and a second query to the second memory module via a second data channel from the set of data channels based on the second memory address. In some embodiments, the reprogrammable circuit module is configured to send the first query at substantially a same time as the second query. In some embodiments, the reprogrammable circuit module is a Field Programmable Gate Array (FPGA), and configured to be modified by a driver module. In some embodiments, each memory module from the set of memory modules is a flash memory module included in a dual in-line memory module (DIMM), and the set of memory modules are removably coupled to a Peripheral Component Interconnect Express (PCIe) card including the reprogrammable circuit module.
  • In some embodiments, an apparatus comprises a first reprogrammable circuit module and a memory package including a set of memory modules. The memory package is removably coupled to the first reprogrammable circuit module. Specifically, the memory package is operatively coupled to the first reprogrammable circuit module via a set of channels when in a first configuration, and physically coupled to a second reprogrammable circuit module when in a second configuration. At least one memory module from the set of memory modules is configured to store an address translation table having a set of address pairs associated with the set of memory modules. Each address pair from the set of address pairs includes (1) a physical memory address associated with a physical location in the set of memory modules and (2) a logical memory address associated with the physical memory address. In some embodiments, the memory package is a DIMM, where each memory module from the set of memory modules is a flash memory module on the DIMM. In some embodiments, the first reprogrammable circuit module is a FPGA.
  • Furthermore, the first reprogrammable circuit module is configured to use the set of address pairs to execute a search process via the set of channels after the memory package is moved from the second configuration to the first configuration, where the search process is substantially the same as a search process executed by the second reprogrammable circuit module when the memory package is in the second configuration. The search process executed by the first reprogrammable circuit module is configured to retrieve a physical memory address associated with a received logical memory address using the address translation table. Furthermore, in some embodiments, the first reprogrammable circuit module is configured to send a first query to a first memory module from the set of memory modules during a first time period, and send a second query to a second memory module from the set of memory modules during a second time period overlapping the first time period.
  • FIG. 1 is a system block diagram of a reprogrammable circuit module 120 coupled to a set of memory modules (e.g., memory modules 161-166), according to an embodiment. The reprogrammable circuit module 120 is a portion of an expansion board 100, which is operatively coupled to a host computer 110. The set of memory modules, including memory modules 161-166, are included in a replaceable memory package 140 that is coupled to the expansion board 100 via a socket 150. Furthermore, each memory module from the set of memory modules in the memory package 140 is operatively coupled to reprogrammable circuit module 120 via a data channel, such as data channels 131, 132 and 133 shown in FIG. 1.
  • As shown in FIG. 1 and further described below, the expansion board 100 contains an implementation of a scalable structure that is synthesized by connecting multiple parallel channels (e.g., data channels 131-133) of high data rate memory modules (e.g., memory modules 161-166) directly to a data-processing module (e.g., reprogrammable circuit module 120). In other words, an array of memory modules is connected to a single large data-processing module, where each memory module has its own data channel, thus to provide a combined transfer rate of up to a multiple times of the data rate for a single data channel. In some embodiments, such an integrated structure consisting of a single data-processing module connected to an array of memory modules (typically flash memory devices) is referred to as a Flash Processing Element (FPE). In some embodiments, a scalable implementation of a FPE is known as a Scalable Large Flash Memory (SLFM) system.
  • The expansion board 100 can be any removable device that can be used to implement a FPE structure, i.e., to access and retrieve data stored in the memory package 140, and locally process the retrieved data within the expansion board 100. Specifically, reprogrammable circuit module 120 can be used to access and retrieve data from the memory modules (e.g., memory modules 161-166) included in the memory package 140 via the data channels (e.g., data channels 131-133), and then process the retrieved data within the expansion board 100. For example, the expansion board 100 can be an add-in circuit board directly coupled to a motherboard of a PC. For another example, the expansion board 100 can be a removable module connected to a processor of a computer server via an interface and/or a bus. Furthermore, the expansion board 100 can be operatively coupled to host computer 110 via for example, a high speed serial data and/or command interface over a data channel. In some embodiments, the expansion board 100 can be connected to a motherboard of host computer 110.
  • In some embodiments, the expansion board 100 can be a PCIe card. In such embodiments, the FPE system including reprogrammable circuit module 120, the memory package 140 and other components (not shown in FIG. 1) are contained on the PCIe expansion board 100. Physical implementation of the I/O channel connecting the expansion board 100 and host computer 120 can be in a PCIe format, and the expansion board 100 can be accessible with a unique PCIe address. The PCIe format allows multiple FPE boards, including the expansion board 100, to be used in a variety of configurations from single board applications to systems needing hundreds of FPEs. These FPE boards (i.e., PCIe cards such as the expansion board 100) are physically compatible with common full length PCI slots of a PC or a PCIe expansion chassis. Furthermore, such a PCIe card can be connected to a motherboard or a host computer via a high speed serial data or command interface over a multi-lane PCIe channel, which can provide a large data rate (e.g. 5 G bytes/sec). Additionally, in some embodiments, the expansion board 100 can be a circuit board that adopts the Advanced Telecommunications Computing Architecture (ATCA) backplane interface specification or any other interface specification.
  • Reprogrammable circuit module 120 can be any circuit module that is capable of retrieving data from the memory package 140. In some embodiments, reprogrammable circuit module 120 can be capable of on-board processing of retrieved data. In some embodiments, reprogrammable circuit module 120 can be a FPGA. For example, reprogrammable circuit module 120 can be an Altera Stratix 4GX-530 FPGA. More specifically, reprogrammable circuit module 120 can be a FPGA consisting of a large number of logic elements and/or data-processing elements, which is programmed to retrieve data stored at memory modules in the memory package 140 and further process the retrieved data within reprogrammable circuit module 120. In other embodiments, a reprogrammable circuit module can be an application-specific integrated circuit (ASIC) or any other suitable programmable logic device (PLD), such as a programmable logic array (PLA), a programmable array logic (PAL), a complex programmable logic device (CPLD), etc.
  • Particularly, reprogrammable circuit module 120 can be used to perform a search function. That is, reprogrammable circuit module 120 can be configured to search specific data (e.g., a string, a term) from the data stored within the memory modules included in the memory package 140. Details of a reprogrammable circuit module being configured to perform a search function are described with respect to FIGS. 4-5.
  • In some embodiments, reprogrammable circuit module 120 includes an on-board configuration storage, such as an on-board configuration ROM (read-only memory), to store a configuration file. The configuration ROM, although not shown in FIG. 1, can be mounted on the expansion board 100 and electrically coupled to reprogrammable circuit module 120. The configuration file contained in the configuration ROM can be automatically uploaded from the configuration ROM into reprogrammable circuit module 120 upon the application of power at the beginning of a system boot-up. As a result, reprogrammable circuit module 120 is configured to operate according to the uploaded configuration file, such as to perform a specific task (e.g., a search function). Furthermore, a new configuration file can be loaded into the on-board configuration ROM of the expansion board 100 at any time after a system boot-up, and further uploaded into reprogrammable circuit module 120 (e.g., at next system boot-up), such that reprogrammable circuit module 120 can be “reprogrammed” to perform a different task if necessary.
  • In some embodiments, reprogrammable circuit module 120 can also be configured, or “reprogrammed”, by a driver module (not shown in FIG. 1), which is typically located at host computer 110. As a tool to configure reprogrammable circuit module 120 from the host computer 110, the driver module can optimize a program (e.g., a FPGA program) for a given task that is to be executed by reprogrammable circuit module 120, and then send the program to reprogrammable circuit module 120. For example, as different search programs use different criteria, a user can write a VHDL (VHSIC hardware description language) program for a given search algorithm, and then send the VHDL program to reprogrammable circuit module 120 from the host computer 110 using the driver module. As a result, reprogrammable circuit module 120 will adjust accordingly and execute the search function according to the VHDL program. In other embodiments, other programming languages such as Verilog or other HDL languages can be used to reprogram or configure reprogrammable circuit module 120.
  • As shown in FIG. 1, the memory package 140 contains multiple memory modules, such as memory modules 161-166. A memory module in the memory package 140 can be any type of memory device that can be used to store data and can be accessed by reprogrammable circuit module 120 via, for example, a data channel (e.g., data channel 131-133). In some embodiments, a memory module can be a flash memory device, such as a multi-level cell (MLC) Not AND (NAND) chip, a single level cell (SLC) NAND chip, or a Clear NAND chip, etc. To support a particular type of memory device, reprogrammable circuit module 120 can be adjusted accordingly. For example, a FPGA internal state machine providing readout of the memory devices can be changed according to the specific type of memory devices. In some embodiments, the memory modules in a single memory package (e.g., memory package 140) can be instances of a same type of memory devices.
  • In some embodiments, each memory module contained in the memory package 140 is associated with an address translation table, which is from a set of one or more address translation tables stored in one or more memory modules contained in the memory package 140. That is, at least one memory segment unit in each memory module is associated with an entry of an address translation table stored in a memory module. For example, as shown in FIG. 1, each memory module contained in the memory package 140 is associated with address translation table 180, which is stored in memory module 162. Address translation table 180 can be configured to store a set of address pairs. Each address pair can include a physical memory address associated with a physical location in a memory module contained in the memory package 140, and a logical memory address associated with that physical memory address. Details of the internal structure of a memory module and an address translation table are further described with respect to FIGS. 2-3.
  • In some embodiments, although not shown in FIG. 1, more than one address translation table can be stored in the memory modules in the memory package 140. In such embodiments, for example, each memory module contained in the memory package 140 can be associated with a single address translation tables. For example, each memory module (e.g., memory module 161-166) contained in the memory package 140 can have its own address translation table, which is stored in the associated memory module. In that case, address translation table 180 is uniquely associated with memory module 162. Similarly stated, address translation table 180 is configured to store mapping information for memory segment units of memory module 162 but not the other memory modules including memory modules 161, 163-166, etc.
  • The memory package 140 can be any replaceable module that can contain one or more memory modules (e.g., memory modules 161-166) and enable the memory modules to be accessed by an on-board data-processing module (e.g., reprogrammable circuit module 120) via for example, one or more data channels (e.g., data channels 131-133). The memory package 140 is replaceable in the sense that it can be mounted onto any suitable circuit board via a suitable interface socket, or removed from the circuit board if necessary. For example, the memory package 140 can be mounted onto the expansion board 100 via a socket 150 when in a first configuration as shown in FIG. 1, or mounted onto another circuit board via another suitable interface socket (not shown in FIG. 1) when in a second configuration. As a result, the memory package can be physically coupled to reprogrammable circuit module 120 via a set of data channels (e.g., data channels 131-133) when in the first configuration, and physically coupled to another reprogrammable circuit module via a different set of data channels when in the second configuration.
  • Accordingly, the memory modules (e.g., memory modules 161-166) can be removed from the expansion board 100 containing the on-board data-processing module (e.g., reprogrammable circuit module 120) and other associated interface components (not shown in FIG. 1). The expansion board 100 can be used as a “carrier” board for one or more memory packages that include the memory modules. As a result, memory modules accessed by reprogrammable circuit module 120 can be easily replaced with for example, new types of memory modules, or same type of memory modules containing different data. Specifically, a memory package containing the old types of memory modules can be removed from an expansion board, and then a different memory package containing the new types of memory modules can be mounted onto the expansion board. Thus, this feature permits upgrading the memory modules to newer types as they become available, which greatly enhances the technology lifetime of the system. On the other hand, as described in detail with respect to FIGS. 4-5, reprogrammable circuit module 120 can be configured to execute a task such as a search function on the memory package 140 when the memory package 140 is coupled to reprogrammable circuit module 120 in the first configuration, where the search function is substantially the same as a search function executed by a different reprogrammable circuit module when the memory package is coupled to the different reprogrammable circuit module in the second configuration.
  • In some embodiments, the memory package 140 can be a DIMM. In such embodiments, the SLFM design using a DIMM as a memory package can be compatible with a variety of flash memory devices as memory modules, including MLC NAND chips, SLC NAND chips, Clear NAND chips, etc. Also, a DIMM flash mounting scheme uses DIMM slot connectors to mount the flash memory devices (e.g., memory modules 161-166) onto the memory package 140, which is then coupled to the expansion board via socket 150. For example, the memory package 140 can be a DIMM with a memory of 1T bytes that contains 16 Clear NAND chips, each of which has a memory of 64G bytes. Additionally, the use of the DIMM flash mounting scheme also permits alternative types of flash memory devices to be used on the memory package 140 without re-spinning the expansion board 100, by only providing a new DIMM containing the new type of flash memory devices, and adjusting reprogrammable circuit module 120 accordingly (e.g., changing the FPGA code consistent with the state machine requirements of the new part in reprogrammable circuit module 120).
  • As shown in FIG. 1, a set of data channels (e.g., data channels 131-133) operatively couple reprogrammable circuit module 120 to the memory modules (e.g., memory modules 161-166) contained in the memory package 140. A data channel can be used to convey any command, query or the like from reprogrammable circuit module 120 to a memory module, and/or send any retrieved data from the corresponding memory module to reprogrammable circuit module 120. Furthermore, the data channels are parallel to each other, in the sense that multiple data channels can be used at the same time to transmit data. For example, if there are 34 data channels connecting memory modules and reprogrammable circuit module 120, each having a speed of 200M byte/sec (e.g., using a double data rate (DDR) sync protocol), then an aggregate rate up to 6 G byte/sec can be provided.
  • In some embodiments, more than one memory module can be connected to reprogrammable circuit module 120 by a single data channel. For example, as shown in FIG. 1, memory modules 161, 162 are connected to reprogrammable circuit module 120 via data channel 131; memory modules 163, 164 are connected to reprogrammable circuit module 120 via data channel 132; memory modules 165, 166 are connected to reprogrammable circuit module 120 via data channel 133. Specifically, more than one memory module per data channel is made possible by exploiting the latency time of accessing a unit (e.g., a page) of data from a memory module, to interleave data accesses to multiple memory modules on the same data channel. For example, in the case of Clear NAND chips, the latency time is 150 usec. Since the page readout time is about 50 usec, it is possible to combine two chips on a single memory bus (i.e., data channel) with no loss of latency. Thus, the latency time between the receipt of a command selecting a page to be transferred and the beginning of transmission, is exploited to permit having multiple flash memory devices sharing a single data channel.
  • Furthermore, the number of memory modules (e.g., flash memory devices) that can be supported by reprogrammable circuit module 120 (e.g., a FPGA) can be limited by the I/O pin count of reprogrammable circuit module 120, as well as the internal logic resources of reprogrammable circuit module 120 needed to support the memory modules. The internal resources include for example, logic support for generating the state machine timing signals needed to meet the flash interface requirements, data buffers needed for alignment and error correction of the transferred pages, etc. For example, a Stratix EP4S530 FPGA has 744 I/O pins, allowing for various I/O interface standards needed by the FPGA to connect flashing memory devices and other components. As a result, a Stratix EP4S530 FPGA can support as many as 33 flash memory chips (e.g., contained in one or more memory packages).
  • FIG. 2 is a schematic illustration of structure of a memory module 200, according to an embodiment. Memory module 200 can be structurally and functionally similar to the memory modules 161-166 shown and described in FIG. 1. As shown in FIG. 2, memory module 200 stores an address translation table 210 and other data (e.g., data 251-254). Specifically, data is stored in a number of memory segment units. For example, data 251-254 is stored in four separate memory segment units, respectively. In some embodiments, a memory segment unit can be for example, a page. In some embodiments, an address translation table can be stored in one memory segment unit (as address translation table 210 shown in FIG. 2) or across multiple memory segment units.
  • Each memory segment unit in memory module 200 can be identified by, for example, a physical memory address representing a physical location of the starting point of that memory segment unit. A physical memory address can be for example, a binary number from a finite monotonically ordered sequence of binary numbers that uniquely describes the physical location of a memory itself. For example, as shown in FIG. 2, the memory segment unit where address translation table 210 is stored can be identified by a physical memory address 0x000000, which represents a physical location of the starting point of that memory segment unit. In this case it is also the starting point of the memory space of memory module 200. For another example, the memory segment unit where data 251 is stored can be identified by a physical memory address 0x000100, which represents a physical location of the starting point of that memory segment unit. Furthermore, as shown in FIG. 2, the physical memory addresses of the memory segment units form a monotonically-ordered (e.g., increasing, decreasing) sequence.
  • In some embodiments, a memory segment unit of memory module 200 can be accessed by for example, a reprogrammable circuit module (e.g., reprogrammable circuit module 120 in FIG. 1), based on the physical memory address identifying the memory segment unit. In some embodiments, a reprogrammable circuit module can be configured to search or retrieve the data stored in a memory segment unit of memory module 200 using the physical memory address identifying that memory segment unit to locate a starting point for the search or retrieving operation. For example, a reprogrammable circuit module can be configured to retrieve data 252 using physical memory address 0x000106 to locate a starting point for the retrieving operation. Particularly, a reprogrammable circuit module can be configured to search address translation table 210 using 0x000000 to locate a starting point for the search.
  • FIG. 3 is a schematic illustration of an address translation table 300 stored in a memory module, according to an embodiment. Address translation table 300 can be structurally and functionally similar to address translation table 180 or address translation table 210 shown in FIGS. 1-2, and accordingly, the memory module hosting address translation table 300 can be structurally and functionally similar to memory module 162 or memory module 200 shown in FIGS. 1-2. In some embodiments, an address translation table can be referred to as a block-address translation (BAT) table.
  • As shown in FIG. 3, address translation table 300 has two columns of entries, shown as logical memory address 310 and physical memory address 320. The first column, logical memory address 310, contains logical memory addresses (e.g., 1000, 1001, 1002, 1100), each of which uniquely identifies a logical memory address associated with a memory segment unit in a memory package including the memory module that hosts address translation table 300. A logical memory address can be in any suitable form and can represent a location, at which a memory segment unit (or other item such as a memory cell, a storage element, etc.) appears to reside from the perspective of a reprogrammable circuit module that performs a search function on the memory modules. In the example of FIG. 3, a logical memory address can be a four-digital integer, such as 1000, 1001, etc. In other embodiments a logical memory address can be in any other suitable form.
  • The second column, physical memory address 320, contains physical memory addresses (e.g., 465/0x002010, 463/0x006a24, 466/0x00f92a, 461/0x00ff00), each of which uniquely identifies a physical memory location of a memory segment unit in the memory package. In some embodiments, an address translation table stored in a memory module can store physical memory addresses identifying physical memory locations within other memory modules. In such embodiments, a physical memory address stored in this address translation table can include both information associated with a hosting memory module and information identifying a physical memory location within that hosting memory module. In the example of the physical memory address “465/002010” shown in FIG. 3, “465” identifies a memory module (i.e., memory module 465 shown in FIGS. 1) and “002010” identifies a memory segment unit, which is represented by a physical memory address “0x002010”, in the identified memory module 465. Overall, the physical memory address “465/002010” identifies the memory segment unit “0x002010” in memory module 465. Similarly, the physical memory address “463/006a24” identifies the memory segment unit “0x006a24” in memory module 463.
  • Address translation table 300 associates each logical memory address with a physical memory address. Specifically, each logical memory address stored in the column of logical memory address 310 can be mapped to a physical memory address stored in the column of physical memory address 320. For example, logical memory address “1000” is mapped to physical memory address “465/0x002010” in the first entry of address translation table 300. For another example, logical memory address “1001” is mapped to physical memory address “463/0x006a24” in the second entry of address translation table 300.
  • 110381 In some embodiments, the logical memory addresses can be stored in a logical order in address translation table 300, such as a monotonically-increasing order as shown in FIG. 3. In such embodiments, the physical memory addresses are not necessarily stored in any logical order in address translation table 300. For example, the logical memory address stored in the first entry of address translation table 300 (i.e., 1000) is adjacent to the logical memory address stored in the second entry of address translation table 300 (i.e., 1001), while the physical memory address stored in the first entry (i.e., 465/0x002010), is not adjacent to the physical memory address stored in the second entry (i.e., 463/0x006a24). In fact, the two physical memory addresses identify two memory segment units in two different memory modules. In other embodiments, physical memory addresses can be stored in a logical order in address translation table 300.
  • In some embodiments, a reprogrammable circuit module can be configured to associate a physical memory address with a logical memory address stored in an address translation table. That is, the reprogrammable circuit module can be configured to assign a physical memory address to each logical memory address, and then store the pair of addresses (i.e., the physical memory address and the logical memory address) as an entry in the address translation table. Furthermore, in some embodiments, the reprogrammable circuit module can be configured to randomly assign a physical memory address to a logical memory address, such that the logical memory addresses are stored in a logical order in the address translation table, while the physical memory addresses associated with those logical memory addresses are randomly distributed across the entire available memory space provided by the memory modules, as shown in FIG. 3.
  • In some embodiments, a SLFM system described with respect to FIG. 1 can be used to execute a search function. FIG. 4 is a schematic illustration of such a SLFM system, including a reprogrammable circuit module 420 that is configured to execute a search process on a memory package 440, according to an embodiment. The structure of the system in FIG. 4 is similar to that of the system shown in FIG. 1. Specifically, reprogrammable circuit module 420 is a portion of an expansion board 400, which is operatively coupled to a host computer 410. A set of memory modules, including memory modules 461-466, are included in a replaceable memory package 440 that is coupled to the expansion board 400 via a socket 450. Each memory module from the set of memory modules in the memory package 440 is operatively coupled to reprogrammable circuit module 420 via a data channel, such as data channel 431-433.
  • A search process can be executed by the system shown in FIG. 4 as follows. Initially, a query is formulated in host computer 410 by for example, an operator or a user of host computer 410 and/or a program or application executing on host computer 410. An application running on host computer 410 can then be configured to translate the query into a set of machine executable tasks. In some embodiments, such a machine executable task can be for example, a string or a term of a predefined format (e.g., a fixed length) that can be searched against data stored in the memory modules on the memory package 440. Thus, the query is translated into a set of searchable strings or terms at host computer 410.
  • In some embodiments, one or more logical memory addresses associated with a searchable string or term can be determined based on the string or term. Specifically, a logical memory address is associated with a string or term in a sense that data stored in the memory segment unit represented by the logical memory address is likely to contain information associated with the string or term. Thus, to search for the string or term, data stored in the memory segment unit represented by the logical memory address needs to be searched. In some embodiments, the desired logical memory addresses can be determined at host computer 410, and then sent from host computer 410 to reprogrammable circuit module 420. In such embodiments, reprogrammable circuit module 420 is configured to receive the logical memory addresses. In some other embodiments, the desired logical memory addresses can be determined at reprogrammable circuit module 420 or another component of the system (not shown in FIG. 4). In such embodiments, the searchable string or term is sent from host computer 410 to reprogrammable circuit module 420 or the other component, where one or more logical memory addresses associated with the string or term are determined based on the string or term. The logical memory addresses are then sent to reprogrammable circuit module 420 if necessary. As a result, one or more logical memory addresses associated with the searchable string or term are available at reprogrammable circuit module 420. In the example of FIG. 4, reprogrammable circuit module 420 is configured to receive logical memory address 1001 and 1002 (e.g., as shown in FIG. 3) from host computer 410.
  • Next, reprogrammable circuit module 420 can be configured to send an address-translation query including the desired logical memory addresses to an address translation table stored in a memory module in the memory package 440 via a data channel. As shown in FIG. 4, reprogrammable circuit module 420 is configured to send an address-translation query, via data channel 431 (shown as data path 491), to memory module 462 contained in the memory package 440, where an address translation table 480 is stored. Similar to address translation table 180 shown in FIG. 1, address translation table 480 is associated with the memory modules contained in the memory package 440. That is, at least one memory segment unit in each memory module contained in the memory package 440 is associated with an entry stored in address translation table 480. In the example of FIG. 4, the address-translation query sent from reprogrammable circuit module 420 to memory module 462 includes the desired logical memory addresses 1001 and 1002.
  • In some embodiments, reprogrammable circuit module 420 can be configured to send more than one address-translation queries, each of which contains a different set of logical memory addresses and is destined to a different address translation table. For example, although not shown in FIG. 4, if entries associated with logical memory address 1001 and 1002 are stored in two different address translation tables in the memory package 440, then reprogrammable circuit module 420 can be configured to send a first address-translation query containing logical memory address 1001 to a first address translation table that includes an entry for logical memory address 1001, and send a second address-translation query containing logical memory address 1002 to a second address translation table that includes an entry for logical memory address 1002. Thus, every logical memory address is carried by an address-translation query that is sent to an appropriate address translation table containing an entry for the logical memory address.
  • After an address-translation query containing a logical memory address is received at an address translation table, an entry associated with the logical memory address can be determined based on the logical memory address. Physical memory address associated with the logical memory address can be retrieved from the entry, and sent to reprogrammable circuit module 420 via a data channel. In the example of FIG. 4, if address translation table 480 includes the same entries of address translation table 300 as shown in FIG. 3, then physical memory address “463/0x006a24” is associated with logical memory address 1001 and physical memory address. “466/0x00f92a” is associated with logical memory address 1002. That is, logical memory address 1001 points to a memory segment unit in memory module 463, which is identified by a physical memory address of “0x006a24” in memory module 463; and logical memory address 1002 points to a memory segment unit in memory module 466, which is identified by a physical memory address of “0x00f92a” in memory module 466. As a result of memory module 462 receiving the address-translation query containing logical memory addresses 1001 and 1002, physical memory addresses “463/0x006a24’ and “466/0x00f92a” are retrieved from address translation table 480 and sent to reprogrammable circuit module 420 via data channel 431 (shown as data path 492 in FIG. 4). Thus, a desired logical memory address available at reprogrammable circuit module 420 is used to retrieve a physical memory address, which can be used to locate a specific memory segment unit in a memory module within the memory package 440.
  • Subsequently, reprogrammable circuit module 420 can be configured to send one or more data queries to one or more memory segment units, each of which is identified by a retrieved physical memory address associated with a logical memory address. Specifically, a data query destined to a memory segment unit in a memory module within the memory package 440 can be sent over a data channel connecting reprogrammable circuit module 420 and the memory module. Furthermore, in some embodiments, multiple data queries to different memory modules can be sent from reprogrammable circuit module 420 at substantially a same time. In other words, a first data query can be sent to a first memory module during a first time period, and a second data query can be sent to a second memory module during a second time period overlapping the first time period. Thus, sending multiple data queries or retrieving data from multiple memory modules can be performed in a substantially simultaneous fashion via multiple data channels.
  • In the example of FIG. 4, after logical memory address 1001 and 1002 are translated into physical memory address “463/0x006a24” and “466/0x00f92a”, reprogrammable circuit module 420 is configured to send a first data query to a memory segment unit identified by physical memory address “0x006a24” in memory module 463 via data channel 432 (shown as data path 493), and a second data query to a memory segment unit identified by physical memory address “0x00f92a” in memory module 466 via data channel 433 (shown as data path 494). The first data query and the second data query can be sent at substantially a same time, and subsequently, data can be retrieved from memory module 463 and memory module 466 during a substantially same time period (shown as data path 495 and 496, respectively).
  • A data query sent from reprogrammable circuit module 420 to a memory segment unit in a memory module is designed to retrieve data from the memory segment unit. In some embodiments, data stored in the memory segment unit can be retrieved completely and the original data can be sent to reprogrammable circuit module 420 for further processing. In some other embodiments, data stored in the memory segment unit can be partially retrieved and sent to reprogrammable circuit module 420 for further processing, according to the data query. Further processing can include for example, search the desired string or term in the original data or processed data. Such further processing can be performed at reprogrammable circuit module 420, or alternatively, at another component of host computer 410.
  • In some embodiments, information of the associations between logical memory addresses and physical memory addresses with respect to memory segment units contained in a memory package can be stored in one or more address translation tables included in the memory package. In other words, the remapping information (e.g., between logical memory addresses and physical memory addresses) for a memory package can be carried by the one or more address translation tables included in the memory package. As a result, the memory package can be swapped from one circuit board to another that is suitable for the memory package, without loosing the remapping information. In the example of FIG. 4, address translation table 480 is configured to store the remapping information for the memory package 440. Therefore, the memory package 440 can be removed from the expansion board 400 and coupled to a different circuit board, where a task (e.g., a search function) can be executed in a substantially same way by a different reprogrammable circuit module as when the memory package 440 is coupled to the expansion board 400.
  • FIG. 5 is a flow chart illustrating a method for executing a search process on multiple memory modules, according to an embodiment. At 502, a query associated with a data lookup is received at a reprogrammable circuit module, where the query includes a first logical memory address and a second logical memory address. The data lookup can be part of a search process executed by the reprogrammable circuit module on a set of memory modules contained in a memory package. Specifically, the data lookup can be translated by for example, an application running on a host computer operatively coupled to the reprogrammable circuit module, into a set of queries including the received query. Each query contains one or more logical memory addresses used to retrieve a physical memory address, and/or some other associated information for the search process. The query including the first logical memory address and the second logical memory address is then sent from the host computer to the reprogrammable circuit module.
  • In the example shown and described with respect to FIG. 1, after a search process is initiated at host computer 110, a data lookup is generated at host computer 110. Subsequently, a query associated with the data lookup is generated by an application at host computer 110, and then sent to reprogrammable circuit module 120. The query includes a first logical memory address L1 and a second logical memory address L2. Furthermore, in some embodiments, the first logical memory address L1 and the second logical memory address L2 can be adjacent to each other in a logically-ordered sequence.
  • Additionally, in some embodiments, an instruction can be received at the reprogrammable circuit module from a driver module operatively coupled to the reprogrammable circuit module, such that the search process can be modified based on the instruction. Such a modification can be for example, to reconfigure the reprogrammable circuit module, to update the address for an address translation table (e.g., after a new memory package is coupled to the reprogrammable circuit module), etc. In the example of FIG. 1, after a new memory package is mounted onto the expansion board 100 and operatively coupled to reprogrammable circuit module 120, a driver module at host computer 110 can be configured to send an instruction to reprogrammable circuit module 120, for example, to provide an address for a new address translation table associated with the new memory package.
  • At 504, a first physical memory address associated with the first logical memory address is retrieved by the reprogrammable circuit module, where the first physical memory address is associated with a memory location at a first memory module coupled to the reprogrammable circuit module by a first data channel. Specifically, the reprogrammable circuit module can be configured to send an address-translation query including the first logical memory address to a first address translation table that includes an entry for the first logical memory address. The first address translation table is stored in a memory module operatively coupled to the reprogrammable circuit module via a data channel. As a result, the first physical memory address, which is associated with the first logical memory address (i.e., the first logical memory address and the first physical memory address are stored as a pair in an entry of the first address translation table), can be retrieved from the first address translation table and sent to the reprogrammable circuit module via the data channel. The first physical memory address identifies a memory location, such as a memory segment unit, in a first memory module that is coupled to the reprogrammable circuit module by a first data channel.
  • In the example of FIG. 1, reprogrammable circuit module 120 can be configured to send an address-translation query including the first logical memory address L1 to address translation table 180 included in memory module 162 via data channel 131. As a result, a first physical memory address P1, which is associated with the first logical memory address L1 in an entry of address translation table 180, can be retrieved from address translation table 180 and sent back to reprogrammable circuit module 120 via data channel 131. The first physical memory address P1 identifies a memory segment unit in for example, memory module 164, which is coupled to reprogrammable circuit module 120 via data channel 132.
  • At 506, a second physical memory address associated with the second logical memory address is retrieved by the reprogrammable circuit module, where the second physical memory address is associated with a memory location at a second memory module coupled to the reprogrammable circuit module by a second data channel. Similarly to retrieving the first physical memory address, the reprogrammable circuit module can be configured to send an address-translation query including the second logical memory address to a second address translation table that includes an entry for the second logical memory address. In some embodiments, the second address translation table can be the same as the first address translation table, and thus the second logical memory address can be included in the same address-translation query for the first logical memory address. In some other embodiments, the entry for the second logical memory address is stored in a different address-translation table from that for the first logical memory address, and therefore, a separate address-translation query including the second logical memory address is sent to the second address-translation table, which is probably stored in a different memory module from that for the first address-translation table. As a result, the second physical memory address, which is associated with the second logical memory address (i.e., the second logical memory address and the second physical memory address are stored as a pair in an entry of the second address translation table), can be retrieved from the second address translation table and sent to the reprogrammable circuit module via the data channel. Similar to the first physical memory address, the second physical memory address identifies a memory location, such as a memory segment unit, in a second memory module that is coupled to the reprogrammable circuit module by a second data channel. In some embodiments, the second memory module can be different than the first memory module. In some embodiments, both the first memory module and the second memory module can be included within a common memory package, such as a common DIMM.
  • In the example of FIG. 1, reprogrammable circuit module 120 can be configured to send an address-translation query including both the first logical memory address L1 and the second logical memory address L2 to address translation table 180 included in memory module 162 via data channel 131. Alternatively, reprogrammable circuit module 120 can be configured to send a different address-translation query including the second logical memory address L2 to a different address translation table (not shown in FIG. 1) included in a different memory module. As a result, in either case, a second physical memory address P2, which is associated with the second logical memory address L2, can be retrieved from the corresponding address translation table and sent to reprogrammable circuit module 120 via a data channel. The second physical memory address P2 identifies a memory segment unit in, for example, memory module 165, which is coupled to reprogrammable circuit module 120 via data channel 133. Furthermore, in the example of FIG. 1, both memory module 164 including a location associated with the first physical memory address P1 and memory module 165 including a location associated with the second physical memory address P2 are included in a common memory package 140, which can be for example, a DIMM.
  • At 508, the first memory module is accessed, during a first time period, by the reprogrammable circuit module via the first data channel using the first physical memory address. Specifically, based on the first physical memory address retrieved from the address translation table, the reprogrammable circuit module can be configured to locate and access the memory segment unit identified by the first physical memory address, which is included in the first memory module. Particularly, the reprogrammable circuit module can be configured to send a data query to the memory segment unit identified by the first physical memory address via the first data channel. As a result, data can be retrieved, during the first time period, from the memory segment unit identified by the first physical memory address.
  • In the example of FIG. 1, reprogrammable circuit module 120 can be configured to send a data query to the memory segment unit identified by the first physical memory address P1, which is included in memory module 164, via data channel 132. As a result, data can be retrieved, during a first time period, from the memory segment unit identified by the first physical memory address P1 in memory module 164, via data channel 132.
  • At 510, the second memory module is accessed, during a second time period overlapping the first time period, by the reprogrammable circuit module via the second data channel using the second physical memory address. Similar to the case for the first physical memory address, the reprogrammable circuit module can be configured to send a data query to the memory segment unit identified by the second physical memory address, which is included in the second memory module, via the second data channel. As a result, data can be retrieved, during the second time period, from the memory segment unit identified by the second physical memory address. Furthermore, because the first memory module and the second memory module are two different memory modules, and the first data channel and the second data channel are two separate data channels, the operation of retrieving data from the first memory module and the operation of retrieving data from the second memory module are independent, therefore can be executed in parallel. Thus, the first time period can be overlapping the second time period.
  • In the example of FIG. 1, reprogrammable circuit module 120 can be configured to send a data query to the memory segment unit identified by the second physical memory address P2, which is included in memory module 165, via data channel 133. As a result, data can be retrieved, during a second time period, from the memory segment unit identified by the second physical memory address P2 in memory module 165, via data channel 133. Furthermore, the first time period and the second time period can be overlapping.
  • While various embodiments have been described above, it should be understood that they have been presented by way of example only, not limitation, and various changes in form and details may be made. Any portion of the apparatus and/or methods described herein may be combined in any combination, except mutually exclusive combinations. The embodiments described herein can include various combinations and/or sub-combinations of the functions, components and/or features of the different embodiments described.
  • While shown and described above with respect to FIGS. 1 and 4 as an address translation table being included in a memory module, in other embodiments, a copy of an address translation table can be stored in a reprogrammable circuit module. In such embodiments, a physical memory address associated with a logical memory address can be retrieved from the copy of the address translation table at the reprogrammable circuit module, without sending a query to the address translation table stored in the memory module. For example, in FIG. 1, a copy of address translation table 180 can be stored at reprogrammable circuit module 120. Thus, reprogrammable circuit module 120 does not need to send a query to address translation table 180 at memory module 162.
  • While shown and described above with respect to FIGS. 1 and 4 as an expansion board including one reprogrammable circuit module connected to only one memory package, in other embodiments, more than one memory packages can be connected to the reprogrammable circuit module in an expansion board. In some embodiments, for example, a reprogrammable circuit module can be coupled to four memory packages on one expansion board, where each of the memory packages contains 16 memory modules. As a result, in such embodiments, the reprogrammable circuit module can be configured to retrieve data from up to 64 memory modules at the same time, via parallel data channels. In other embodiments, a reprogrammable circuit module can be coupled to any number of memory packages, each of which contains any number of memory modules. As a result, in such embodiments, the reprogrammable circuit module can be configured to retrieve data from any number of memory modules at the same time, via parallel data channels. Furthermore, a SLFM system can be configured to employ parallel processing channels with a large array of multiple reprogrammable circuit modules (e.g., FPGAs), where each of the multiple reprogrammable circuit module has a similar structure and functionality as the reprogrammable circuit module described herein. Inherently, the SLFM system can be scalable by increasing the number of FPGAs and the associated FPGA processing channels.
  • Some embodiments described herein relate to a computer storage product with a computer-readable medium (also can be referred to as a processor-readable medium) having instructions or computer code thereon for performing various computer-implemented operations. The media and computer code (also can be referred to as code) may be those designed and constructed for the specific purpose or purposes. Examples of computer-readable media include, but are not limited to: magnetic storage media such as hard disks, floppy disks, and magnetic tape; optical storage media such as Compact Disc/Digital Video Discs (CD/DVDs), Compact Disc-Read Only Memories (CD-ROMs), and holographic devices; magneto-optical storage media such as optical disks; carrier wave signal processing modules; and hardware devices that are specially configured to store and execute program code, such as Application-Specific Integrated Circuits (ASICs), Programmable Logic Devices (PLDs), and read-only memory (ROM) and RAM devices.

Claims (20)

1. An apparatus, comprising:
a plurality of memory modules, each memory module from the plurality of memory modules being associated with an address translation table configured to store a plurality of address pairs, each address pair from the plurality of address pairs including (1) a physical memory address associated with a physical location in a memory module from the plurality of memory modules and (2) a logical memory address associated with the physical memory address;
a reprogrammable circuit module configured to execute a search process based at least in part on data stored at the plurality of memory modules, the search process configured to retrieve a first physical memory address associated with a first logical memory address from an address translation table associated with a first memory module from the plurality of memory modules and a second physical memory address associated with a second logical memory address from an address translation table associated with a second memory module from the plurality of memory modules; and
a plurality of data channels, each data channel from the plurality of data channels operably coupling the reprogrammable circuit module to at least one memory module from the plurality of memory modules, the reprogrammable circuit module configured to send, based on the search process, a first query to the first memory module via a first data channel from the plurality of data channels based on the first physical memory address and a second query to the second memory module via a second data channel from the plurality of data channels based on the second memory address.
2. The apparatus of claim 1, wherein each memory module from the plurality of memory modules is included in a dual in-line memory module (DIMM).
3. The apparatus of claim 1, wherein the reprogrammable circuit module is configured to randomly associate the first physical memory address with the first logical memory address.
4. The apparatus of claim 1, wherein the first logical memory address is adjacent to the second logical memory address, the first physical memory address not adjacent to the second physical memory address.
5. The apparatus of claim 1, wherein the reprogrammable circuit module is configured to send the first query at substantially a same time as the second query.
6. The apparatus of claim 1, wherein the reprogrammable circuit module is a Field Programmable Gate Array (FPGA).
7. The apparatus of claim 1, wherein each memory module from the plurality of memory modules is a flash memory module.
8. The apparatus of claim 1, wherein the reprogrammable circuit module is configured to be modified by a driver module.
9. The apparatus of claim 1, wherein the plurality of memory modules are removably coupled to a Peripheral Component Interconnect Express (PCIe) card including the reprogrammable circuit module.
10. A method, comprising:
receiving a query associated with a data lookup, the query including a first logical memory address and a second logical memory address;
retrieving a first physical memory address associated with the first logical memory address, the first physical memory address being associated with a memory location at a first memory module coupled to a reprogrammable circuit module by a first data channel;
retrieving a second physical memory address associated with the second logical memory address, the second physical memory address being associated with a memory location at a second memory module coupled to the reprogrammable circuit module by a second data channel;
accessing, during a first time period, the first memory module via the first data channel using the first physical memory address; and
accessing, at a second time period overlapping the first time period, the second memory module via the second data channel using the second physical memory address.
11. The method of claim 10, wherein the retrieving the first physical memory address includes retrieving the first physical memory address from a first address translation table, the retrieving the second physical memory address includes retrieving the second physical memory address from a second address translation table.
12. The method of claim 10, wherein the retrieving the first physical memory address includes retrieving the first physical memory address from an address translation table stored at the first memory module.
13. The method of claim 10, wherein the first memory module is included within a common dual in-line memory module (DIMM) as the second memory module.
14. The apparatus of claim 10, wherein the first memory module is a flash memory module.
15. The method of claim 10, wherein the accessing the first memory module and the accessing the second memory module are associated with a search process, the method further comprising:
receiving an instruction from a driver associated with the reprogrammable circuit module to modify the search process.
16. An apparatus, comprising:
a first reprogrammable circuit module; and
a memory package including a plurality of memory modules, the memory package being removably coupled to the first reprogrammable circuit module such that the memory package is physically coupled to the first reprogrammable circuit module when in a first configuration and physically coupled to a second reprogrammable circuit module when in a second configuration,
the memory package being operatively coupled to the first reprogrammable circuit module via a plurality of channels when in the first configuration,
at least one memory module from the plurality of memory modules configured to store an address translation table having a plurality of address pairs associated with the plurality of memory modules, each address pair from the plurality of address pairs including (1) a physical memory address associated with a physical location in the plurality of memory modules and (2) a logical memory address associated with the physical memory address,
the first reprogrammable circuit module configured to use the plurality of address pairs to execute a search process via the plurality of channels after the memory package is moved from the second configuration to the first configuration, wherein the search process is substantially the same as a search process executed by the second reprogrammable circuit module when the memory package is in the second configuration.
17. The apparatus of claim 16, wherein the memory package is a dual in-line memory module (DIMM), each memory module from the plurality of memory modules being a flash memory module.
18. The apparatus of claim 16, wherein the first reprogrammable circuit module is a Field Programmable Gate Array (FPGA).
19. The apparatus of claim 16, wherein the search process executed by the first reprogrammable circuit module is configured to retrieve a physical memory address associated with a received logical memory address using the address translation table.
20. The apparatus of claim 16, wherein the first reprogrammable circuit module is configured to send a first query to a first memory module from the plurality of memory modules during a first time period, the first reprogrammable circuit module configured to send a second query to a second memory module from the plurality of memory modules during a second time period overlapping the first time period.
US13/161,141 2011-06-15 2011-06-15 Methods and apparatus for data access by a reprogrammable circuit module Abandoned US20120324143A1 (en)

Priority Applications (7)

Application Number Priority Date Filing Date Title
US13/161,141 US20120324143A1 (en) 2011-06-15 2011-06-15 Methods and apparatus for data access by a reprogrammable circuit module
GB201210639A GB2491979B (en) 2011-06-15 2012-06-13 Methods and apparatus for data access by a reprogrammable circuit module
PCT/US2012/042143 WO2012174043A1 (en) 2011-06-15 2012-06-13 Methods and apparatus for data access by a reprogrammable circuit module
TW101121649A TW201314453A (en) 2011-06-15 2012-06-15 Methods and apparatus for data access by a reprogrammable circuit module
EP12172152A EP2535820A3 (en) 2011-06-15 2012-06-15 Method and apparatus for data access by a reprogrammable circuit module
US13/532,319 US8838873B2 (en) 2011-06-15 2012-06-25 Methods and apparatus for data access by a reprogrammable circuit module
US14/213,903 US9417894B1 (en) 2011-06-15 2014-03-14 Methods and apparatus for a tablet computer system incorporating a reprogrammable circuit module

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US13/161,141 US20120324143A1 (en) 2011-06-15 2011-06-15 Methods and apparatus for data access by a reprogrammable circuit module

Related Child Applications (1)

Application Number Title Priority Date Filing Date
PCT/US2012/042143 Continuation-In-Part WO2012174043A1 (en) 2011-06-15 2012-06-13 Methods and apparatus for data access by a reprogrammable circuit module

Publications (1)

Publication Number Publication Date
US20120324143A1 true US20120324143A1 (en) 2012-12-20

Family

ID=47354666

Family Applications (2)

Application Number Title Priority Date Filing Date
US13/161,141 Abandoned US20120324143A1 (en) 2011-06-15 2011-06-15 Methods and apparatus for data access by a reprogrammable circuit module
US13/532,319 Active US8838873B2 (en) 2011-06-15 2012-06-25 Methods and apparatus for data access by a reprogrammable circuit module

Family Applications After (1)

Application Number Title Priority Date Filing Date
US13/532,319 Active US8838873B2 (en) 2011-06-15 2012-06-25 Methods and apparatus for data access by a reprogrammable circuit module

Country Status (5)

Country Link
US (2) US20120324143A1 (en)
EP (1) EP2535820A3 (en)
GB (1) GB2491979B (en)
TW (1) TW201314453A (en)
WO (1) WO2012174043A1 (en)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130166826A1 (en) * 2011-12-23 2013-06-27 International Business Machines Corporation Solid-state device management
US8838873B2 (en) 2011-06-15 2014-09-16 Data Design Corporation Methods and apparatus for data access by a reprogrammable circuit module
US9417894B1 (en) 2011-06-15 2016-08-16 Ryft Systems, Inc. Methods and apparatus for a tablet computer system incorporating a reprogrammable circuit module
CN110059080A (en) * 2019-04-29 2019-07-26 珠海天燕科技有限公司 A kind of method and apparatus of data processing

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9727241B2 (en) * 2015-02-06 2017-08-08 Advanced Micro Devices, Inc. Memory page access detection
KR102401600B1 (en) 2015-08-31 2022-05-25 삼성전자주식회사 Storage device configured to manage a plurality of data streams based on data amount
US10579633B2 (en) 2017-08-31 2020-03-03 Micron Technology, Inc. Reducing probabilistic filter query latency
US20230418743A1 (en) * 2021-12-28 2023-12-28 SK Hynix Inc. Data storage device and method of operating the same

Family Cites Families (89)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5479638A (en) * 1993-03-26 1995-12-26 Cirrus Logic, Inc. Flash memory mass storage architecture incorporation wear leveling technique
US5862223A (en) 1996-07-24 1999-01-19 Walker Asset Management Limited Partnership Method and apparatus for a cryptographically-assisted commercial network system designed to facilitate and support expert-based commerce
WO1998057489A2 (en) * 1997-06-09 1998-12-17 Metalithic Systems, Inc. Modular system for accelerating data searches and data stream operations
JP3850134B2 (en) * 1998-03-31 2006-11-29 川崎マイクロエレクトロニクス株式会社 Data retrieval device
GB2352548B (en) * 1999-07-26 2001-06-06 Sun Microsystems Inc Method and apparatus for executing standard functions in a computer system
US20010047394A1 (en) 1999-09-10 2001-11-29 Kloba David D. System, method, and computer program product for executing scripts on mobile devices
US6640220B1 (en) * 2000-03-14 2003-10-28 Aeroflex Utmc Microelectronic Systems, Inc. Search coprocessor subsystem having multiple search engines and dedicated key-table memory for connection to a computer system
US8095508B2 (en) * 2000-04-07 2012-01-10 Washington University Intelligent data storage and processing using FPGA devices
US20020065902A1 (en) 2000-09-05 2002-05-30 Janik Craig M. Webpad and method for using the same
US7542867B2 (en) 2001-08-14 2009-06-02 National Instruments Corporation Measurement system with modular measurement modules that convey interface information
US6915373B2 (en) * 2002-04-30 2005-07-05 Microsoft Corporation Cache with multiway steering and modified cyclic reuse
US7127601B2 (en) 2002-05-30 2006-10-24 Sun Microsystems, Inc. System and method for delivering FPGA programming
US7202801B2 (en) 2002-12-11 2007-04-10 Geospatial Technologies, Inc. Method and apparatus for an automated location-based, dynamic notification system (ALDNS)
KR100560645B1 (en) * 2002-12-17 2006-03-16 삼성전자주식회사 USB flash memory device that displays memory usage information
JP2004213588A (en) * 2003-01-09 2004-07-29 Seiko Epson Corp Semiconductor device
US8180784B2 (en) * 2003-03-28 2012-05-15 Oracle International Corporation Method and system for improving performance of counting hits in a search
EP1627284B1 (en) * 2003-05-23 2018-10-24 IP Reservoir, LLC Intelligent data storage and processing using fpga devices
US7500055B1 (en) 2003-06-27 2009-03-03 Beach Unlimited Llc Adaptable cache for dynamic digital media
US7464088B1 (en) * 2003-09-08 2008-12-09 Sage-N Research, Inc. Architecture for efficient pattern match operations
US20050198449A1 (en) * 2004-03-05 2005-09-08 Darrell Haskell Determination of memory configuration
IL161874A (en) * 2004-05-07 2012-09-24 Yves Villaret System and method for searching strings of records
US7657453B2 (en) 2004-06-30 2010-02-02 Sap Aktiengesellschaft System, computer-readable medium and method for filtering exceptions generated by forecasting and replenishment engine
KR100735577B1 (en) * 2004-08-12 2007-07-04 삼성전자주식회사 Adaptive Key Search Device and Method in Wireless Network
US7991758B2 (en) * 2005-09-07 2011-08-02 International Business Machines Corporation System and method for performing a search operation within a sequential access data storage subsystem
US7747837B2 (en) * 2005-12-21 2010-06-29 Sandisk Corporation Method and system for accessing non-volatile storage devices
WO2008022094A2 (en) 2006-08-14 2008-02-21 Plankton Technologies, Llc Data storage device
US20080189251A1 (en) * 2006-08-25 2008-08-07 Jeremy Branscome Processing elements of a hardware accelerated reconfigurable processor for accelerating database operations and queries
US7765339B2 (en) * 2006-10-27 2010-07-27 Stec, Inc. Distributed addressing in solid-state storage
US8935302B2 (en) 2006-12-06 2015-01-13 Intelligent Intellectual Property Holdings 2 Llc Apparatus, system, and method for data block usage information synchronization for a non-volatile storage volume
US8074011B2 (en) 2006-12-06 2011-12-06 Fusion-Io, Inc. Apparatus, system, and method for storage space recovery after reaching a read count limit
US9104599B2 (en) 2007-12-06 2015-08-11 Intelligent Intellectual Property Holdings 2 Llc Apparatus, system, and method for destaging cached data
US8706968B2 (en) 2007-12-06 2014-04-22 Fusion-Io, Inc. Apparatus, system, and method for redundant write caching
US8578127B2 (en) 2009-09-09 2013-11-05 Fusion-Io, Inc. Apparatus, system, and method for allocating storage
US8151082B2 (en) 2007-12-06 2012-04-03 Fusion-Io, Inc. Apparatus, system, and method for converting a storage request into an append data storage command
US8443134B2 (en) 2006-12-06 2013-05-14 Fusion-Io, Inc. Apparatus, system, and method for graceful cache device degradation
WO2008070175A2 (en) 2006-12-06 2008-06-12 FUSION MULTISYSTEMS, INC., (DBA Fusion-io) Apparatus, system, and method for a modular blade
US8161353B2 (en) 2007-12-06 2012-04-17 Fusion-Io, Inc. Apparatus, system, and method for validating that a correct data segment is read from a data storage device
WO2008070191A2 (en) 2006-12-06 2008-06-12 Fusion Multisystems, Inc. (Dba Fusion-Io) Apparatus, system, and method for a reconfigurable baseboard management controller
US8051022B2 (en) 2006-12-08 2011-11-01 Pandya Ashish A Embedded programmable intelligent search memory (PRISM) that simultaneously performs regular expression based search and signature pattern based search
US7890692B2 (en) 2007-08-17 2011-02-15 Pandya Ashish A FSA context switch architecture for programmable intelligent search memory
US8356152B2 (en) * 2006-12-27 2013-01-15 Intel Corporation Initiative wear leveling for non-volatile memory
US7452236B2 (en) 2007-02-01 2008-11-18 Aprius, Inc. Cabling for rack-mount devices
US20080228740A1 (en) 2007-03-16 2008-09-18 Benjamin Weiss Systems and methods for searching a network of distributed content servers
US8037112B2 (en) * 2007-04-23 2011-10-11 Microsoft Corporation Efficient access of flash databases
US7562162B2 (en) 2007-04-25 2009-07-14 At&T Intellectual Property I, L.P. Systems and methods for distributed computing utilizing a smart memory apparatus
US7876616B2 (en) * 2007-11-12 2011-01-25 Cadence Design Systems, Inc. System and method for wear leveling utilizing a relative wear counter
US8316277B2 (en) 2007-12-06 2012-11-20 Fusion-Io, Inc. Apparatus, system, and method for ensuring data validity in a data storage process
US7836226B2 (en) 2007-12-06 2010-11-16 Fusion-Io, Inc. Apparatus, system, and method for coordinating storage requests in a multi-processor/multi-thread environment
US8195912B2 (en) 2007-12-06 2012-06-05 Fusion-io, Inc Apparatus, system, and method for efficient mapping of virtual and physical addresses
US7752346B2 (en) 2007-12-21 2010-07-06 Aprius, Inc. Universal routing in PCI-Express fabrics
US8175085B2 (en) 2008-03-25 2012-05-08 Fusion-Io, Inc. Bus scaling device
US7934033B2 (en) 2008-03-25 2011-04-26 Aprius, Inc. PCI-express function proxy
WO2009124320A1 (en) 2008-04-05 2009-10-08 Fusion Multisystems, Inc. Apparatus, system, and method for bad block remapping
US20090254705A1 (en) 2008-04-07 2009-10-08 International Business Machines Corporation Bus attached compressed random access memory
US8566505B2 (en) 2008-04-15 2013-10-22 SMART Storage Systems, Inc. Flash management using sequential techniques
CN102124527A (en) 2008-05-16 2011-07-13 弗森-艾奥公司 Apparatus, system, and method for detecting and replacing failed data storage
US8036314B2 (en) 2008-05-29 2011-10-11 Lsi Corporation Automatic correction of data polarity on a differential serial bus
TWI385669B (en) * 2008-07-23 2013-02-11 Phison Electronics Corp Wear leveling method and storage system and controller using the same
US8140739B2 (en) 2008-08-08 2012-03-20 Imation Corp. Flash memory based storage devices utilizing magnetoresistive random access memory (MRAM) to store files having logical block addresses stored in a write frequency file buffer table
US8103764B2 (en) * 2008-10-14 2012-01-24 CacheIQ, Inc. Method and apparatus for matching trigger pattern
US8503468B2 (en) 2008-11-05 2013-08-06 Fusion-Io, Inc. PCI express load sharing network interface controller cluster
US8275933B2 (en) 2008-11-10 2012-09-25 Fusion-10, Inc Apparatus, system, and method for managing physical regions in a solid-state storage device
WO2010054410A2 (en) 2008-11-10 2010-05-14 Fusion Multisystems, Inc. (Dba Fusion-Io) Apparatus, system, and method for predicting failures in solid-state storage
US8134875B2 (en) 2008-12-08 2012-03-13 Xilinx, Inc. Data storage system with removable memory module having parallel channels of DRAM memory and flash memory
US7830732B2 (en) 2009-02-11 2010-11-09 Stec, Inc. Staged-backup flash backed dram module
US8261158B2 (en) 2009-03-13 2012-09-04 Fusion-Io, Inc. Apparatus, system, and method for using multi-level cell solid-state storage as single level cell solid-state storage
US8103137B2 (en) 2009-04-01 2012-01-24 Fusion-Io, Inc. Optical network for cluster computing
WO2010114910A1 (en) 2009-04-01 2010-10-07 Aprius, Inc. Input/output (i/o) virtualization system
US8270830B2 (en) 2009-04-01 2012-09-18 Fusion-Io, Inc. Optical network for cluster computing
US8199511B2 (en) 2009-04-01 2012-06-12 Fusion-Io, Inc. Hot swappable computer card carrier
US8174835B2 (en) 2009-04-01 2012-05-08 Fusion-Io, Inc. Hot swappable computer card carrier
US8250271B2 (en) 2009-04-08 2012-08-21 Google Inc. Command and interrupt grouping for a data storage device
US8806144B2 (en) 2009-05-12 2014-08-12 Stec, Inc. Flash storage device with read cache
US8307258B2 (en) 2009-05-18 2012-11-06 Fusion-10, Inc Apparatus, system, and method for reconfiguring an array to operate with less storage elements
US8281227B2 (en) 2009-05-18 2012-10-02 Fusion-10, Inc. Apparatus, system, and method to increase data integrity in a redundant storage system
US20110035540A1 (en) * 2009-08-10 2011-02-10 Adtron, Inc. Flash blade system architecture and method
US8521915B2 (en) 2009-08-18 2013-08-27 Fusion-Io, Inc. Communicating between host computers and peripheral resources in an input/output (I/O) virtualization system
US20110055471A1 (en) 2009-08-28 2011-03-03 Jonathan Thatcher Apparatus, system, and method for improved data deduplication
CN102696010B (en) 2009-09-08 2016-03-23 才智知识产权控股公司(2) For by the device of data cache on solid storage device, system and method
WO2011031899A2 (en) 2009-09-09 2011-03-17 Fusion-Io, Inc. Apparatus, system, and method for power reduction in a storage device
US9122579B2 (en) 2010-01-06 2015-09-01 Intelligent Intellectual Property Holdings 2 Llc Apparatus, system, and method for a storage layer
US8479061B2 (en) 2009-09-24 2013-07-02 AGIGA Tech Solid state memory cartridge with wear indication
US8732349B2 (en) 2009-11-18 2014-05-20 Fusion-Io, Inc. Assignment of resources in an input/output (I/O) virtualization system
WO2011094454A2 (en) 2010-01-27 2011-08-04 Fusion-Io, Inc. Apparatus, system, and method for determining a read voltage threshold for solid-state storage media
TWI447735B (en) * 2010-02-05 2014-08-01 Phison Electronics Corp Memory management and writing method and rewritable non-volatile memory controller and storage system thereof
WO2011143628A2 (en) 2010-05-13 2011-11-17 Fusion-Io, Inc. Apparatus, system, and method for conditional and atomic storage operations
WO2011159806A2 (en) 2010-06-15 2011-12-22 Fusion-Io, Inc. Apparatus, system, and method for providing error correction
WO2012016089A2 (en) 2010-07-28 2012-02-02 Fusion-Io, Inc. Apparatus, system, and method for conditional and atomic storage operations
US20120324143A1 (en) 2011-06-15 2012-12-20 Data Design Corporation Methods and apparatus for data access by a reprogrammable circuit module

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8838873B2 (en) 2011-06-15 2014-09-16 Data Design Corporation Methods and apparatus for data access by a reprogrammable circuit module
US9417894B1 (en) 2011-06-15 2016-08-16 Ryft Systems, Inc. Methods and apparatus for a tablet computer system incorporating a reprogrammable circuit module
US20130166826A1 (en) * 2011-12-23 2013-06-27 International Business Machines Corporation Solid-state device management
US20130166822A1 (en) * 2011-12-23 2013-06-27 International Business Machines Corporation Solid-state storage management
US9740439B2 (en) * 2011-12-23 2017-08-22 International Business Machines Corporation Solid-state storage management
US9772802B2 (en) * 2011-12-23 2017-09-26 International Business Machines Corporation Solid-state device management
US9858015B2 (en) 2011-12-23 2018-01-02 International Business Machines Corporation Solid-state storage management
CN110059080A (en) * 2019-04-29 2019-07-26 珠海天燕科技有限公司 A kind of method and apparatus of data processing

Also Published As

Publication number Publication date
GB2491979A (en) 2012-12-19
US8838873B2 (en) 2014-09-16
WO2012174043A1 (en) 2012-12-20
TW201314453A (en) 2013-04-01
US20120324149A1 (en) 2012-12-20
EP2535820A3 (en) 2013-02-06
GB2491979B (en) 2015-04-29
GB201210639D0 (en) 2012-08-01
EP2535820A2 (en) 2012-12-19

Similar Documents

Publication Publication Date Title
US20120324143A1 (en) Methods and apparatus for data access by a reprogrammable circuit module
US8244962B2 (en) Command processor for a data storage device
US10678768B2 (en) Logical band-based key-value storage structure
US11650940B2 (en) Storage device including reconfigurable logic and method of operating the storage device
KR102683696B1 (en) A solid state storage device comprising a Non-Volatile Memory Express (NVMe) controller for managing a Host Memory Buffer (HMB), a system comprising the same and method for managing the HMB of a host
US8806112B2 (en) Meta data handling within a flash media controller
US8725961B2 (en) Systems, methods, and devices for configuring a device
US8321639B2 (en) Command tracking for direct access block storage devices
EP2546755A2 (en) Flash controller hardware architecture for flash devices
US20070174841A1 (en) Firmware socket module for FPGA-based pipeline processing
US10353639B2 (en) Memory system with controller for storage device array
US11249678B2 (en) Serial memory device single-bit or plurality-bit serial I/O mode selection
US20180350412A1 (en) Systems and methods for adaptive parallel-serial conversion operations
TWI727236B (en) Data bit width converter and system on chip thereof
US10908838B2 (en) Column replacement with non-dedicated replacement columns
US9411528B1 (en) Storage management systems and methods
CN115878023B (en) Method and device for writing data into flash memory
US10261714B2 (en) Memory controller and memory system including same
US9836242B2 (en) Methods for dynamic partitioning and apparatuses using the same
US20240338334A1 (en) Monolithic non-volatile memory device using peripheral component interconnect express interface for embedded system
WO2023208087A1 (en) Data processing method and apparatus and related device
Escobar et al. Hardware Managers with File System Support for Faster Dynamic Partial Reconfiguration
WO2016172548A1 (en) Storage management systems and methods

Legal Events

Date Code Title Description
AS Assignment

Owner name: DATA DESIGN CORPORATION, MARYLAND

Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:GIGANTI, JOHN J.;HUO, ANDREW;BAUM, RICHARD A.;AND OTHERS;REEL/FRAME:026913/0024

Effective date: 20110915

AS Assignment

Owner name: DATA DESIGN CORPORATION, A DELAWARE CORPORATION, M

Free format text: MERGER;ASSIGNOR:DATA DESIGN CORPORATION, A MARYLAND CORPORATION;REEL/FRAME:028741/0989

Effective date: 20120123

STCB Information on status: application discontinuation

Free format text: ABANDONED -- FAILURE TO RESPOND TO AN OFFICE ACTION