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 PDFInfo
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
- G06F12/0607—Interleaved addressing
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
Description
- 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.
- 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.
-
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. - 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 areprogrammable circuit module 120 coupled to a set of memory modules (e.g., memory modules 161-166), according to an embodiment. Thereprogrammable circuit module 120 is a portion of anexpansion board 100, which is operatively coupled to ahost computer 110. The set of memory modules, including memory modules 161-166, are included in areplaceable memory package 140 that is coupled to theexpansion board 100 via asocket 150. Furthermore, each memory module from the set of memory modules in thememory package 140 is operatively coupled toreprogrammable circuit module 120 via a data channel, such asdata channels FIG. 1 . - As shown in
FIG. 1 and further described below, theexpansion 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 thememory package 140, and locally process the retrieved data within theexpansion 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 thememory package 140 via the data channels (e.g., data channels 131-133), and then process the retrieved data within theexpansion board 100. For example, theexpansion board 100 can be an add-in circuit board directly coupled to a motherboard of a PC. For another example, theexpansion board 100 can be a removable module connected to a processor of a computer server via an interface and/or a bus. Furthermore, theexpansion board 100 can be operatively coupled to hostcomputer 110 via for example, a high speed serial data and/or command interface over a data channel. In some embodiments, theexpansion board 100 can be connected to a motherboard ofhost computer 110. - In some embodiments, the
expansion board 100 can be a PCIe card. In such embodiments, the FPE system includingreprogrammable circuit module 120, thememory package 140 and other components (not shown inFIG. 1 ) are contained on thePCIe expansion board 100. Physical implementation of the I/O channel connecting theexpansion board 100 andhost computer 120 can be in a PCIe format, and theexpansion board 100 can be accessible with a unique PCIe address. The PCIe format allows multiple FPE boards, including theexpansion 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, theexpansion 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 thememory 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 thememory package 140 and further process the retrieved data withinreprogrammable 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 thememory package 140. Details of a reprogrammable circuit module being configured to perform a search function are described with respect toFIGS. 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 inFIG. 1 , can be mounted on theexpansion board 100 and electrically coupled toreprogrammable circuit module 120. The configuration file contained in the configuration ROM can be automatically uploaded from the configuration ROM intoreprogrammable 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 theexpansion 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 thatreprogrammable 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 inFIG. 1 ), which is typically located athost computer 110. As a tool to configurereprogrammable circuit module 120 from thehost computer 110, the driver module can optimize a program (e.g., a FPGA program) for a given task that is to be executed byreprogrammable circuit module 120, and then send the program toreprogrammable 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 toreprogrammable circuit module 120 from thehost 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 configurereprogrammable circuit module 120. - As shown in
FIG. 1 , thememory package 140 contains multiple memory modules, such as memory modules 161-166. A memory module in thememory package 140 can be any type of memory device that can be used to store data and can be accessed byreprogrammable 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 thememory 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 inFIG. 1 , each memory module contained in thememory package 140 is associated with address translation table 180, which is stored inmemory 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 thememory 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 toFIGS. 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 thememory package 140. In such embodiments, for example, each memory module contained in thememory package 140 can be associated with a single address translation tables. For example, each memory module (e.g., memory module 161-166) contained in thememory 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 withmemory module 162. Similarly stated, address translation table 180 is configured to store mapping information for memory segment units ofmemory module 162 but not the other memory modules includingmemory 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). Thememory 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, thememory package 140 can be mounted onto theexpansion board 100 via asocket 150 when in a first configuration as shown inFIG. 1 , or mounted onto another circuit board via another suitable interface socket (not shown inFIG. 1 ) when in a second configuration. As a result, the memory package can be physically coupled toreprogrammable 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 inFIG. 1 ). Theexpansion 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 byreprogrammable 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 toFIGS. 4-5 ,reprogrammable circuit module 120 can be configured to execute a task such as a search function on thememory package 140 when thememory package 140 is coupled toreprogrammable 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 thememory package 140, which is then coupled to the expansion board viasocket 150. For example, thememory 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 thememory package 140 without re-spinning theexpansion board 100, by only providing a new DIMM containing the new type of flash memory devices, and adjustingreprogrammable 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 couplereprogrammable circuit module 120 to the memory modules (e.g., memory modules 161-166) contained in thememory package 140. A data channel can be used to convey any command, query or the like fromreprogrammable circuit module 120 to a memory module, and/or send any retrieved data from the corresponding memory module toreprogrammable 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 andreprogrammable 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 inFIG. 1 ,memory modules reprogrammable circuit module 120 viadata channel 131;memory modules reprogrammable circuit module 120 viadata channel 132;memory modules reprogrammable circuit module 120 viadata 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 ofreprogrammable 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 amemory module 200, according to an embodiment.Memory module 200 can be structurally and functionally similar to the memory modules 161-166 shown and described inFIG. 1 . As shown inFIG. 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 inFIG. 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 inFIG. 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 ofmemory module 200. For another example, the memory segment unit wheredata 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 inFIG. 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 inFIG. 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 ofmemory 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 retrievedata 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 inFIGS. 1-2 , and accordingly, the memory module hosting address translation table 300 can be structurally and functionally similar tomemory module 162 ormemory module 200 shown inFIGS. 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 aslogical memory address 310 andphysical 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 ofFIG. 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 inFIG. 3 , “465” identifies a memory module (i.e.,memory module 465 shown inFIGS. 1 ) and “002010” identifies a memory segment unit, which is represented by a physical memory address “0x002010”, in the identifiedmemory module 465. Overall, the physical memory address “465/002010” identifies the memory segment unit “0x002010” inmemory module 465. Similarly, the physical memory address “463/006a24” identifies the memory segment unit “0x006a24” inmemory 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 ofphysical 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 areprogrammable circuit module 420 that is configured to execute a search process on amemory package 440, according to an embodiment. The structure of the system inFIG. 4 is similar to that of the system shown inFIG. 1 . Specifically,reprogrammable circuit module 420 is a portion of anexpansion board 400, which is operatively coupled to ahost computer 410. A set of memory modules, including memory modules 461-466, are included in areplaceable memory package 440 that is coupled to theexpansion board 400 via asocket 450. Each memory module from the set of memory modules in thememory package 440 is operatively coupled toreprogrammable 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 inhost computer 410 by for example, an operator or a user ofhost computer 410 and/or a program or application executing onhost computer 410. An application running onhost 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 thememory package 440. Thus, the query is translated into a set of searchable strings or terms athost 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 fromhost computer 410 toreprogrammable 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 atreprogrammable circuit module 420 or another component of the system (not shown inFIG. 4 ). In such embodiments, the searchable string or term is sent fromhost computer 410 toreprogrammable 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 toreprogrammable circuit module 420 if necessary. As a result, one or more logical memory addresses associated with the searchable string or term are available atreprogrammable circuit module 420. In the example ofFIG. 4 ,reprogrammable circuit module 420 is configured to receivelogical memory address 1001 and 1002 (e.g., as shown inFIG. 3 ) fromhost 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 thememory package 440 via a data channel. As shown inFIG. 4 ,reprogrammable circuit module 420 is configured to send an address-translation query, via data channel 431 (shown as data path 491), tomemory module 462 contained in thememory package 440, where an address translation table 480 is stored. Similar to address translation table 180 shown inFIG. 1 , address translation table 480 is associated with the memory modules contained in thememory package 440. That is, at least one memory segment unit in each memory module contained in thememory package 440 is associated with an entry stored in address translation table 480. In the example ofFIG. 4 , the address-translation query sent fromreprogrammable circuit module 420 tomemory 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 inFIG. 4 , if entries associated withlogical memory address memory package 440, thenreprogrammable circuit module 420 can be configured to send a first address-translation query containinglogical memory address 1001 to a first address translation table that includes an entry forlogical memory address 1001, and send a second address-translation query containinglogical memory address 1002 to a second address translation table that includes an entry forlogical 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 ofFIG. 4 , if address translation table 480 includes the same entries of address translation table 300 as shown inFIG. 3 , then physical memory address “463/0x006a24” is associated withlogical memory address 1001 and physical memory address. “466/0x00f92a” is associated withlogical memory address 1002. That is,logical memory address 1001 points to a memory segment unit inmemory module 463, which is identified by a physical memory address of “0x006a24” inmemory module 463; andlogical memory address 1002 points to a memory segment unit inmemory module 466, which is identified by a physical memory address of “0x00f92a” inmemory module 466. As a result ofmemory 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 toreprogrammable circuit module 420 via data channel 431 (shown asdata path 492 inFIG. 4 ). Thus, a desired logical memory address available atreprogrammable 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 thememory 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 thememory package 440 can be sent over a data channel connectingreprogrammable circuit module 420 and the memory module. Furthermore, in some embodiments, multiple data queries to different memory modules can be sent fromreprogrammable 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 , afterlogical memory address reprogrammable circuit module 420 is configured to send a first data query to a memory segment unit identified by physical memory address “0x006a24” inmemory 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” inmemory 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 frommemory module 463 andmemory module 466 during a substantially same time period (shown asdata path - 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 toreprogrammable circuit module 420 for further processing. In some other embodiments, data stored in the memory segment unit can be partially retrieved and sent toreprogrammable 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 atreprogrammable circuit module 420, or alternatively, at another component ofhost 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 thememory package 440. Therefore, thememory package 440 can be removed from theexpansion 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 thememory package 440 is coupled to theexpansion 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 athost computer 110, a data lookup is generated athost computer 110. Subsequently, a query associated with the data lookup is generated by an application athost computer 110, and then sent toreprogrammable 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 theexpansion board 100 and operatively coupled toreprogrammable circuit module 120, a driver module athost computer 110 can be configured to send an instruction toreprogrammable 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 inmemory module 162 viadata 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 toreprogrammable circuit module 120 viadata channel 131. The first physical memory address P1 identifies a memory segment unit in for example,memory module 164, which is coupled toreprogrammable circuit module 120 viadata 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 inmemory module 162 viadata 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 inFIG. 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 toreprogrammable 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 toreprogrammable circuit module 120 viadata channel 133. Furthermore, in the example ofFIG. 1 , bothmemory module 164 including a location associated with the first physical memory address P1 andmemory module 165 including a location associated with the second physical memory address P2 are included in acommon 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 inmemory module 164, viadata 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 inmemory module 164, viadata 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 inmemory module 165, viadata 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 inmemory module 165, viadata 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, inFIG. 1 , a copy of address translation table 180 can be stored atreprogrammable circuit module 120. Thus,reprogrammable circuit module 120 does not need to send a query to address translation table 180 atmemory 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)
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)
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)
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)
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 |
-
2011
- 2011-06-15 US US13/161,141 patent/US20120324143A1/en not_active Abandoned
-
2012
- 2012-06-13 WO PCT/US2012/042143 patent/WO2012174043A1/en active Application Filing
- 2012-06-13 GB GB201210639A patent/GB2491979B/en not_active Expired - Fee Related
- 2012-06-15 EP EP12172152A patent/EP2535820A3/en not_active Withdrawn
- 2012-06-15 TW TW101121649A patent/TW201314453A/en unknown
- 2012-06-25 US US13/532,319 patent/US8838873B2/en active Active
Cited By (8)
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 |