Abstract:
A memory system including a memory array, an input circuit and a logic circuit is presented. The input circuit is coupled to receive a memory address and a set of individual write controls for each byte of data word. During a write operation, the input circuit also receives the corresponding write data to be written into the SRAM. The logic circuit causes the write data and write control information to be stored in the input circuit for the duration of any sequential read operations immediately following the write operation and then to be read into memory during a subsequent write operation. During the read operation, data which is stored in the write data storage registers prior to being read into the memory can be read out from the memory system should the address of one or more read operations equal the address of the data to be written into the memory while temporarily stored in the write data storage registers. The logic circuit also detects which bytes of data are not to be written into the SRAM so that, during a read operation, those bytes not to be written into the SRAM are read from the SRAM in order to output a complete word corresponding to the value at the read address. No “bus turnaround” down time is experienced by the system thereby increasing the bandwidth of the system. The system can operate in a single pipeline mode or a dual pipeline mode.

Description:
RELATED APPLICATION 
     This Application is a divisional application from U.S. patent application Ser. No. 09/028,206, which was filed on Feb. 23, 1998 now U.S. Pat. No. 6,115,320. 
    
    
     CROSS REFERENCE TO MICROFICHE APPENDIX 
     Appendix A, which is a part of the present disclosure, is a microfiche appendix consisting of two (2) sheets of microfiche having 116 frames. Microfiche appendix A includes circuit diagrams and chip design diagrams for an embodiment of the invention as implemented on an integrated circuit chip. This and other embodiments are further described below. 
     CROSS REFERENCE TO RELATED APPLICATION 
     The following is related to this invention: Ser. No. 08/635,128—Fully Synchronous Pipelined Ram, John R. Mick, now U.S. Pat No. 5,838,631. 
     BACKGROUND OF THE INVENTION 
     1. Field or the Invention 
     The invention relates to memory circuits and, more particularly, to fully synchronous pipelined random access memory circuits with individual byte write capabilities. 
     2. Background 
     Synchronous state RAMs (SRAMs) are available for use in high performance systems requiring operation with a fast system clock. Some SRAMs are available which use registers to temporarily store address and control. These SRAMs use a “pipeline” scheme where the address to be accessed is provided during one cycle and, during the next sequential cycle, the data is provided on the data bus. For example, during a read operation, the address from which data is to be read is provided on the nth cycle and the data read from the SRAM is provided on the data bus on the (n+1)th cycle. For write operations, there are SRAMs that provide the address, control and data during the same cycle and there are designs where address and control are provided on the nth cycle and data is provided on the (n+1)th cycle. 
     The speed of the SRAM is increased by pipelining because the set-up and hold time for a register or latch is typically much shorter than the time to access the main array of the SRAM (the difference typically being several nanoseconds). The result is to break the operations into shorter cycles. On the (n+1)th cycle, the register or latch provides the stored address to the SRAMs main array along with the data to be written to the stored address, meeting the set-up and hold times for writing to the SRAM&#39;s main array. The SRAM&#39;s cycle time as viewed at the pins of the device can be significantly reduced because of the reduced set-up and hold time for the address and data on the (n+1)th cycle. As a result, the frequency of the system clock can be increased. 
     One problem with conventional SRAMs is that, typically, trying to intermix reads and writes in a high speed system causes a cycle to be “lost” when a memory write is immediately followed by a memory read (i.e., bus turnaround). Generally, a cycle is lost on turnaround because the structure of these RAMs requires an extra cycle to make sure that all of the data is written into the memory before a read operation can be performed. For example, if a write operation is followed by a read operation from the same address, a lost cycle is needed so that the “new” data will be written to the specified address before the read operation is performed on the data stored at the same address. In systems where bus turnaround occurs frequently, the lost cycles on bus turnaround can significantly reduce the bandwidth of the system. With conventional synchronous SRAMs, the same problem can exist. 
     The invention disclosed in applicant&#39;s prior application, Ser. No. 08/635,128, is a fully synchronous Pipelined RAM with no lost cycles on bus turnaround (i.e., the RAM is capable of performing a read operation during any clock cycle or a write operation during any clock cycle, without limitation). The application disclosed both a “single pipelined” SRAM and a “double pipeline” SRAM. The single-pipelined SRAM includes a memory, an input circuit and a logic circuit. The input circuit is coupled to receive a memory address and control signals during any cycle (referred to as the nth cycle). During a write operation on the nth cycle, the corresponding write data to be written into the SRAM is provided during the next, (n+1)th, cycle. During the nth cycle, the logic circuit causes the previously stored write data to be written from the input circuit into the memory while the new write data is received into the input circuit on the (n+1)th cycle. The write data remains in the logic circuit on any intervening read cycle. 
     On a read operation, the logic circuit compares the address of the read operation to the address of the most recent write operation. If the addresses match, then the SRAM outputs the data stored in the input circuit; however, if the addresses do not match, the SRAM outputs the data stored in the memory corresponding to the requested read address. 
     In double pipelined operation, the input circuit is coupled to receive a memory address and control signals during any cycle (the nth cycle) and receives data to be written into the SRAM on the (n+2)nd cycle or outputs data from a read operation on the (n+2)nd cycle. Again, if the address of a read request matches one of the stored write addresses, the corresponding data is outputted through the logic circuit on the (n+2)nd clock cycle. 
     These devices, however, write whole words of data into memory and are not capable of replacing individual bytes of a word separately. 
     SUMMARY 
     According to the present invention, the features included in co-pending Application Serial No. 08/635,128, incorporated here in its entirety, are supplemented with the ability to write selected bytes as well as the entire word to the SRAM. In addition, features also include reading the entire word from the SRAM or from any combination of logic circuitry and memory array storage, as needed, to output the whole word requested by a read operation. 
     Embodiments of the present invention utilize all bus cycles by internally double pipelining all transactions. The preferred embodiment allows for operation in either single or double pipeline operational mode with the most efficient mode and fastest operation achieved through double pipeline delays. Alternative embodiments of the invention include operation in only double or single pipeline modes. 
     The user of a device embodying the invention sees a predictable delay (one cycle for single pipeline operation and two cycles for double pipeline operation) for all transactions. There is no requirement placed on what piece of data may be accessed. The device is capable of reading from a combination of the logic circuit and the memory array in order to output the entire word of information requested on a read. The device processes individual bytes of the word. 
     The operation of these embodiments will be more completely explained below with the Figures and accompanying discussion. 
    
    
     DESCRIPTION OF THE FIGURES 
     FIG. 1 shows a block diagram of a single pipeline embodiment of the invention. 
     FIG. 2, consisting of FIGS. 2A and 2B, shows a circuit diagram for single pipeline embodiment of the invention. 
     FIG. 3, consisting of FIGS. 3A and 3B, shows a timing chart for operation of the single-pipeline embodiment using a representative sample of read and write operations. 
     FIG. 4 shows a block diagram of a double pipeline embodiment of the invention. 
     FIG. 5, consisting of FIGS. 5A through 5D, shows a circuit diagram for a double pipeline embodiment of the invention. 
     FIG. 6, consisting of FIGS. 6A,  6 B, and  6 C, shows a timing chart for operation of the double pipeline embodiment using a representative sample of read and write operations. 
     FIG. 7 shows a circuit diagram for the selection logic circuit for selecting one byte of the word in the double pipeline embodiment. 
     FIGS. 8A,  8 B,  8 C,  8 D,  8 E,  8 F,  8 G,  8 H, and  8 I show truth tables for the selection logic circuit in several scenarios. 
     FIG. 9, consisting of FIGS. 9A through 9E, shows the circuit diagram for the preferred embodiment of the invention. 
    
    
     DETAILED DESCRIPTION 
     Single Pipeline Device 
     FIG. 1 shows a simplified block diagram of a single pipeline embodiment of the invention. The embodiment includes a memory array MA, a control logic CL, an input register IR and an output buffer OB. Although this embodiment, and other example embodiments, use SRAM memory cells for memory array MA, DRAM cells may also be used. Memory array MA is capable of receiving and storing data in byte-wise fashion at addresses and of retrieving that data on request. 
     An address and control signals are recorded into register IR on a rising edge of a clock cycle after an input request is presented. The clock cycle refers to a period of time beginning on the rising edge of a clock signal and ending just prior to the next rising edge of the clock signal. The control signals include a general word write control signal GW* as well as individual byte write control signals BW 1 *, BW 2 *, BW 3 * and BW 4 *. For discussion, the request is assumed to be presented to the device during an arbitrary nth cycle. 
     If a write control signal is presented during the nth cycle, the data to be written into the address presented during the nth cycle is presented at DATA I/O* during the (n+1)th cycle. Control logic CL, after receiving both the address to be written and the data to be written, writes the data into a memory array. Control logic CL has the ability to store the write request and the associated data in the event that a read is requested. 
     If a read control signal is presented to the device, it is clocked into input register IR on the rising edge of the clock signal at the beginning of the nth cycle. During the (n+1)st cycle, the address is compared to any address stored in control logic CL and, if they match, the data stored in control logic CL is output to bus DATA I/O*. If the data stored in control logic CL is not to be completely written into memory array MA (i.e., only certain bytes are written), then the bytes missing from control logic CL are read from SRAM and output to DATA I/O*. During the read operation, any preceding write operation is suspended and stored by control logic CL. 
     FIG. 2 shows a circuit diagram for a single pipeline embodiment of the invention. In this embodiment, a data word comprises four bytes. The data word may be of any size with typical data word sizes being 16, 32 or 64 bits. In addition, the size of the individual bytes may be any number of bits up to the size of the data word and each byte may have a different size. Typical sizes of the bytes are 4, 8 or 16. Although the device shown in FIG. 2 has a data word comprising four bytes, the embodiments may include any number of bytes of any size that comprise the entire word. 
     Input signals to the device shown in FIG. 2 include a clock enable CEN*, a chip select CS*, address Address*, a clock signal CLK*, a general write GW*, a first byte write BW 1 *, a second byte write BW 2 *, a third byte write BW 3 *, a fourth byte write BW 4 *, an output enable OE*, and a data presented on a bus DATA used for receiving input data to the chip as well as outputting data from the chip. Clock enable CEN* and chip select CS* must be low to allow data to enter the device. A low signal for GW*, BW 1 *, BW 2 *, BW 3 * or BW 4 * indicates a write request. If general write GW* is low a whole word (all bytes) write is requested. If signals BW 1 *, BW 2 *, BW 3 * and BW 4 * are all high, however, a read is requested regardless of the state of signal GW*. The operation of these control signals will be further explained below. 
     The address input line is connected to an input register IR 1 . Similarly, input registers IR 3 , IR 4 , IR 5 , IR 6 , and IR 7  are connected to receive signals GW*, BW 1 *, BW 2 *, BW 3 * and BW 4 *, respectively. Chip select CS* is presented to input register IR 2 . All registers in the device latch the signals at their input line on the rising edge of the clock signal. In addition, each register includes an enable input lead which allows the register to record new data only if an enable signal on the enable input lead is low (L). Input registers IR 1 - 7  (indicating IR 1 , IR 2 , IR 3 , IR 4 , IR 5 , IR 6  and IR 7 ) are all enabled by clock enable CEN* being presented to the enable input lead of input registers IR 1 - 7 . 
     The address* and control signals GW* and BW 1 - 4 * are presented during a clock cycle and clocked into the input registers IR 1 - 7  upon the rising edge of the clock signal at the onset of the next cycle. For convenience, the clock cycle within which control signals are presented to the chip will be labeled arbitrarily the nth cycle. During the (n+1)th cycle, the address and control signals have been recorded by input registers IR 1 - 7 . 
     The output lead of input register IR 1  is attached to the input line of logic register LR 1 . The output signal from input register IR 2  is RCS 1 . The output lines of input registers IR 4 , IR 5 , IR 6 , and IR 7 , carrying signals BWA, BWB, BWC and BWD (BWA-D) respectively, are connected to NAND gate L 1 . Output signal R 1  from gate L 1  is low except where signals BWA-D are all high, indicating a read operation. 
     The output signal R 1  from NAND gate L 1  is presented to gate L 2  which outputs the signal EN 1 . Signal EN 1  is low if signal R 1  is high, signal RCS 1  is low, and signal CEN* is low. Therefore, in any operation not a read where the chip is enabled and selected, signal EN 1  is low. Signal EN 1  is inputted to the enable input lines of logic registers (LR 1 - 5 ). If the operation stored in input registers IR 1 - 7  is a read operation, that operation is not recorded on the next clock cycle ((n+2)nd) by logic registers LR 1 - 5 . If not enabled, logic registers LR 1 - 5  retain the signals that they had previously recorded. 
     The output signal from input register IR 3 , G 1 , is presented to gate L 7  along with signal BWA. The output signal form OR gate L 7  is high if either of signals G 1  or BWA is low, indicating that either Byte  1  is to be written or the general word control signal, GW*, is calling for an all word write. Similarly, signal GW* is presented to OR gates L 8 , L 9  and L 10  along with a corresponding one of signals BWB, BWC, and BWD so that the output signals from gates LR 8 - 10 , are all high (H) if either a general word write is requested or a write to that corresponding byte of the data word is requested. The output lines of gates L 7 - 10  are connected to a corresponding input line of logic registers LR 2 - 5 . 
     Signal W 1  along with signals RCS 1  and CEN* are presented to gate L 15 . The output signal from gate L 15 , EN 2 , is low if signal RCS 1  is low, signal W 1  is low, and signal CEN* is low, indicating that the operation recorded in input registers IR 1 - 7  is a write operation. At the start of the (n+1)st cycle, a data register DR records data which is presented on bus DATA I/O* if signal EN 2  is low. The output signal from register DR, data D 1 , is inputted to a data input line Din of memory array MA. 
     Also, at the leading rise of the clock signal indicating the start of the (n+1)st cycle, and providing that signal EN 1  is low, logic registers LR 1 - 5  record the signals at their input leads. The output lead of logic register LR 1 , carrying address A 2 , is connected to the low-input lead of multiplexer M 1 . The high-input lead of multiplexer M is connected to the output lead of register IR 1  to receive address A 1 . The output lead of multiplexer M 1  is connected to the address input lead of memory array MA. 
     Signal R 1  is inputted to NOT gate L 17  so that the output signal from gate L 17 , W 1 , is low if signal R 1  is high (indicating not a read request). Signal W 1  is inputted through an input select line to multiplexer Ml so that if the operation stored in input registers IR 1 - 7  is a write, address A 2  is presented to the address input of memory array MA. Conversely, if the operation stored in registers IR 1 - 7  is a read, address A 1  is presented directly to the address input line of memory array MA. 
     The output signals from logic registers LR 2 - 5 , RBW 1 - 4 , are presented to logic gates L 11 - 14 , respectively, along with signal W 1  and a delayed clock signal. The output of gates L 11 , L 12 , L 13  or L 14  will go low during the (n+1)st clock cycle only if signal W 1  is low (indicating not a read) and the corresponding one of signals RBW 1 - 4  is high (indicating a write for that respective byte). The output signal from each of L 11 -L 14  will go low, if at all, during a high clock signal which is delayed by some time from the system clock by a delay circuit DL. The delay time created by delay circuit DL is sufficient to compensate for set-up and hold times in the circuit. Output signals from gates L 11 - 14  are presented to lines WB 1 - 4 , respectively, of memory array MA. Memory array MA writes the respective bytes of data presented at line Din to the address presented on its address input when the corresponding signal on lines WB 1 - 4  becomes low. 
     Addresses A 1  and A 2  are presented to a comparator C 1  whose output signal EQ 3  is high if addresses A 1  and A 2  are equal. Signal EQ 3  is presented to each of AND gates L 3 - 6  along with a corresponding one of signals RBW 1 - 4 . The output signals from gates L 3 - 6 , C 1 ( 1 - 4 ), respectively, are presented to select input lines of multiplexers M 2 - 5 , respectively. The low-input sides of multiplexers M 2 - 5  are connected to the corresponding byte output lines of line Dout of memory array MA. The high input lines of multiplexers M 2 - 5  are connected to the receive corresponding bytes of data D 1 . 
     The output signals from multiplexers M 2 - 5 , DT( 1 - 4 ), are inputted to an output buffer OB. Output buffer OB may be a tristate buffer. In addition, output buffer OB may be capable of assuming a high impedence or a low impedence. Output buffer OB allows throughput only when enabled. 
     Output enable OE*, along with signals R 1  and RCS 1 , are presented to gate L 16  such that the output signal from gate L 16 , DB, is high if signal OE* is low, signal RCS 1  is low (the chip is selected), and signal R 1  is low (indicating a read operation). Output buffer OB is enabled, allowing the output signals from multiplexers M 2 - 5 , DT( 1 - 4 ), to be presented to data bus DATA I/O* if DB is high. 
     Single Pipeline Operation 
     FIG. 3 is a timing chart illustrating the operation of the signal pipelined chip embodiment shown in FIG.  2 . The chart starts at an arbitrary clock cycle designated as the nth cycle and continues through several clock cycles. The requested operation sequence includes several read and write requests and was chosen for its demonstrative value. The circuit itself is capable of processing any number of requests in any sequence. Unless stated otherwise, address a i  does not equal address a j  where i is not j. 
     A write operation is initiated by presenting the chip with an address as Address*, enabling the clock by setting CEN* to low, selecting the chip by setting CS* to low, and supplying the appropriate control signals. Setting signal GW* to low while not having all of signals BW 1 *, BW 2 *, BW 3 * and BW 4 * high will result in an all word write. Setting signal GW* to high will result in a selective write of the bytes corresponding to whichever of signals BW 1 - 4 * is low. Setting signals BW 1 - 4 * all high results in a read operation. 
     nth Cycle—Write Initiated 
     In FIG. 3, the first write operation is initiated during clock cycle n by presenting the chip with Address*=a 0 , GW*=L, and BW 1 - 4 *=(L, L, L, L) (i.e., BW 1 *=L, BW 2 *=L, BW 3 *=L and BW 4 *=L). 
     (n+1)st Cycle—Write Initiated 
     At the rising edge of the clock signal indicating the start of clock cycle n+1, input registers IR 1 - 7  record the signals Address*, CS*, GW*, BW 1 *, BW 2 *, BW 3 * and BW 4 *. Therefore, signals A 1 =ao, G 1 =L, and BWA-D=(L, L, L, L). 
     During the (n+1)st cycle, signal R 1  is high indicating a write, signal W 1  is low, and signals EN 1  and EN 2  are low enabling both data register DR and logic registers LR 1 - 5 . The output signals from gates L 7 - 8  all become high because signal G 1  is low and signals BWA-D are all low. The data, d 0 , to be written into address a 0  must be presented to the chip on bus DATA I/O* during this cycle. Output buffer OB is not enabled so long as output enable OE* is high. 
     In addition, the chip is presented with a write to address a 1  with control signals set to GW*=L and BW 1 - 4 *=(H, A, L, L). 
     (n+2)nd Cycle—Write Initiated 
     At the start of the (n+2)nd cycle, address a 0  is shifted from input register IR 1  to logic register L 1  so that address A 2  becomes a 0 . The data d 0  is recorded in data register DR and presented to input line Din of memory array MA. The high output signals from gates L 7 - 10  are recorded in registers LR 2 - 5 , and therefore signals RBW 1 - 4  are all high. The write requested during the (n+1)st cycle is recorded in input registers IR 1 - 7 . As a result, signal R 1  is high because not all of signals BWA-D are high and signal W 1  remains low. Enable signals EN 1  and EN 2  both remain low. In addition, gates L 11 -L 14  each output a low signal when the delayed clock signal goes high because signals RBW 1 - 4  are high and signal W 1  is low. Multiplexer M 1  presents the output address from LR 1 , A 2  (in this case address a 0 ), to address input line of memory array MA because signal W 1  is low. Therefore, data d 0  is written into memory location a 0  of memory array MA. 
     The output signals from gates L 7 - 10  are all high because signal G 1  is low. Therefore, even if signals BWA and BWB are high (signals BWC and BWD are both low), the output signal from each of gates L 7 - 10  is high. 
     In addition, data d 1 , the data to be written into address a 1 , must be presented to bus DATA I/O* during this cycle. A new write request is initiated during this cycle by presenting the address input with address*=a 2  and the control inputs with GW*=H and BW 1 - 4 * (L, L, L, L). 
     (n+3)rd Cycle—Write Initiated 
     At the start of the (n+3)rd cycle, the write request presented during the (n+2)nd cycle is recorded in input registers IR 1 - 7 , the data presented on bus DATA I/O* is recorded in data register DR and data d 1  is presented to the Din input line of memory array MA. At the inception of the (n+3)rd cycle, the address recorded in input register IR 1  is shifted to logic register LR 1  and A 2  becomes a 1 . The high output signals from gates L 7 - 10  are recorded in logic registers LR 2 - 5 , respectively, and therefore signals RBW 1 - 4  all become high. 
     During the (n+3)rd cycle, signal R 1  is high because signals BWA-D are not all high. Therefore, signal W 1  is low and enable signals EN 1  and EN 2  are each low. The output signals from gates L 11 - 14  will all go low during the cycle when the delayed clock cycle goes high because signal W 1  is low. The output signals from gates L 7 - 10  are all high because signals BWA-D are all low, even though signal G 1  is high. Address A 2  (a 1 ), is presented to memory array MA through multiplexer M 1  because signal W 1  is low. Therefore, memory array MA writes all bytes of d 1  into address a 1  during this cycle. 
     Also during this cycle, a write operation Address* =a 3 , Gw*=H and BW 1 - 4 *=(H, H, L, L) is initiated. The data to be written into address a 2 , data d 2 , must also be presented on bus DATA I/O* during this cycle. 
     (n+4)th Cycle Read Initiated 
     At the start of the (n+4)th cycle, address A 1  (a 2 ) is shifted to logic register LR 1  and logic registers LR 2 - 5  record the output signals from gates L 7 - 10  (all high in this case). The data d 2 , is recorded into data register DR and presented to memory array MA on the Din input. Input registers IR 1 - 7  also record the signals at their input lines. 
     Signal R 1  is high and signal w 1  is low because not all of signals DBA-B are high. Enable signals EN 1  and EN 2  are therefore both low. Address A 2  (a 2 ) is presented to memory array MA through multiplexer M 1  because signal W 1  is low. In addition, the output signals from gates L 11 - 14  will all go low when the delayed clock signal goes high because signal W 1  and signals RBW 1 - 4  are all high. Therefore, memory array MA writes data d 2  into address a 2 . 
     Logic gates L 7  and L 8  are low because signals G 1 , BWA and BWB are all high. Signals BWC and BWD are each low, however, causing gates L 9  and L 10  to each output a high signal. 
     In addition, a read request is initiated during this cycle by setting Address*=a 4  and setting the control signals to GW*=L and BW 1 - 4 *=(H, H, H, H). The data d 3  to be written into address a 3  must be presented to bus DATA I/O* during this cycle. 
     (n+5)th Cycle—Read Initiated 
     At the start of the (n+5)th cycle, address A 1  (a 3 ) is shifted to logic register LR 1  and data d 3  is recorded in data register DR and presented to the SRAM through line Din. Logic register LR 2 - 5  record the output signals from gates L 7 - 10 , (L, L, H, H). The read request is recorded in input registers IR 1 - 7 . 
     Signal R 1  is low and signal W 1  is high because signals BWA-D are all high, consistent with a read request. Enable signals EN 1  and EN 2  both become high, thereby disabling logic registers LR 1 - 5  and Data register DR for the next cycle. Address A 1  (a 4 ), is presented to memory array MA through multiplexer M 1  and the output signals from gates L 11 - 14  remain high because signal W 1  is high. Therefore, memory array MA performs no write on this cycle and the read address a 4  is presented to the address input of memory array MA. 
     Comparator circuit, C 1 , outputs a low signal because address A 1  (a 4 ), does not equal address A 2  (a 3 ). As a result, logic gates L 3 - 6  all output low signals. Therefore, the data in address a 4  of memory array MA is presented at line Dout of memory array MA and passed through multiplexers M 2 - 5  to output buffer OB. Output enable OE* must be set to low during this cycle so that the output signal from gate L 16 , DB, is high and output buffer OB is enabled. The data, Da 4 , from memory array MA is outputted to bus DATA I/O*. No input data can be presented to bus DATA I/O* during this cycle. 
     A second read is initiated during this cycle with a 3  (a previously written address) being presented as address* and the control signals being set to GW*=H and BW 1 - 4 *=(H, H, H, H). 
     (n+6)th Cycle (Write Initiated) 
     At the start of the (n+6)th cycle, logic registers LR 1 - 5  and data register DR retain the contents that they had during the (n+5)th cycle because enable signals EN 1  and EN 2  are both high at the time of transition between the (n+5)th and (n+6)th cycles, the rising edge of the clock cycle. The input signals presented to the chip during the (n+5)th cycle are recorded in input registers IR 1 - 7 . 
     Signal R 1  is low and signal W 1  is high because, again, signals BWA-D are all high indicating a read operation. Therefore, enable signals EN 1  and EN 2  are both high which again disables logic registers LR 1 - 7  and data register DR for the next cycle. In addition, address A 1  (a 3 ), is presented to the address input of memory array MA. 
     Comparator C 1  outputs a high signal because addresses A 1  and A 2  are both a 3 . The output signals from gates L 3 - 6 , C 1 ( 1 - 4 ) are (L, L, H, H), respectively, because signals RBW 1 - 4  are (L, L, H, H). Therefore, multiplexers M 2  and M 3  output the values at their low-input lines while multiplexers M 4  and MS output their the values on their high-input lines. Data DT( 1 - 4 ), therefore, consists of the first two bytes of data present at line Dout (which is the data in memory location a 3  of memory array MA, Da 3 ) and the last two bytes from data D 1  (which corresponds to the part of the data word which is to be written into address a 3  of memory array MA). 
     Output enable OE* must be set to low so that the output signal from gate L 16 , DB, is high causing output buffer OB to output data DT( 1 - 4 ) to bus DATA I/O*. During this cycle, a write is initiated by setting Address*=a 5  and the control signals to GW*=L and BW 1 - 4 *=(L, L, L, L). 
     (n+7)th Cycle—Write Initiated 
     At the start of the (n+7)th cycle, both enable signals EN 1  and EN 2  are high at the start of the cycle and therefore logic registers LR 1 - 5  and data register DR are disabled. The input signals presented during the (n+6)th cycle are recorded in input registers IR 1 - 7 . Signal R 1  is high and signal W 1  is low because signals BWA-B are all low. Therefore, signals EN 1  and EN 2  are both low and address A 1  (a 3 ), is presented to the address input of memory array MA through multiplexer M 1 . Data D 1  (d 3 ), is presented to the data input Din line of memory array MA. The output signals from gates L 13  and L 14  will go low when the delayed clock signal goes high because signals RBW 3  and RBW 4  are high. The output signals from gates L 11  and L 12  remain high because signals RBW 1  and RBW 2  are low. Therefore, the third and fourth bytes of data d 3  stored in data register DR are written into memory array MA at address a 3  while the first two bytes of the data word at address a 3  remain untouched. 
     During the (n+8)th cycle, logic registers LR 1 - 5  and data register DR are enabled so that they once again process data as described in the (n+2)nd through (n+4)th cycles. The remaining cycles described in FIG. 3 are similar to previously described cycles and will not be discussed. 
     Double Pipeline Device 
     FIG. 4 shows a block diagram of a double pipeline embodiment of the invention. At the rising edge of the clock signal corresponding to the beginning of the nth clock cycle (chosen arbitrarily), address and control signals are recorded by input register IR. The control inputs include a general write GW* and individual byte write signals BW 1 *, BW 2 *, BW 3 *, and BW 4 *. If signal GW* is low and at least one of signals BW 1 - 4 * is low, a whole word write is requested. If signal GW* is high and at least one of signals BW 1 - 4 * is low then a write is requested for whichever of the individual byte write signals is low. If the individual byte write signals are all high, then a read is requested. 
     A control logic CL determines which operation stored on input register IR is being requested, and processes that operation. If a write operation is being requested, then the contents of input register IR are recorded in control logic CL at the start of the (n+1)st clock cycle. The data to be written is presented to a bus DATA I/O* on the (n+2)nd cycle. At some later cycle, the address, data, and individual byte write signals are presented together to memory array MA by control logic CL. The data is presented through the Din input line of memory array MA. As before, memory array MA is capable of receiving and storing, in individual bytes, a data word at a particular address and of retrieving that data upon request. Although preferably an SRAM device, memory array MA could also be a DRAM device. 
     In a series of write requests, uninterrupted by a read request, control logic CL will have recorded two sets of addresses and commands and the data corresponding to the earlier write request. The earlier request, along with the corresponding data, are presented together to memory array MA and the data corresponding to the later write request is recorded in control logic CL at the beginning of the next clock cycle. 
     If a read is requested during the nth cycle, it is recorded in input register IR at the beginning of the (n+1)st cycle. Control logic CL detects a read request on the input register and “freezes” the pipelining of requests through control logic CL. The data necessary to complete the currently stored write requests, however, is recorded normally at the (n+1)st clock cycle and then the ability of control logic CL to record new data is suspended for the (n+2)nd clock cycle. 
     The read request is immediately processed by control logic CL. The address to be read is presented to memory array MA and compared against addresses which are currently stored in control logic CL. If there is no match with stored addresses, then the contents of memory array MA at the read address is presented to an output register OR. If the address to be read is one of the previously stored addresses, then the data that is to be written to memory array MA is presented to output register OR. If the write request corresponding to the matched address calls for less than a whole word write, then the bytes of the data word which are to be written to memory array MA are presented to output register OR and the output data word is filled in with the necessary bytes read from memory array MA stored at that read address. 
     If the read address matches both stored addresses in control logic CL, then the data corresponding to the latest write request is presented to output register OR if that request is a whole word write. If it is not a whole word write, then the bytes from the latest request is presented to output register OR and the output data word is filled in with bytes to be written by the earlier write request and, if the data word is not yet complete, by the contents of memory array MA stored at that address. 
     Output register OR records the data word presented to it on the (n+2)nd clock cycle. On that cycle, a output buffer OB connected to output register OR is enabled by setting output enable OE* signal low. The contents of output register OR are then presented to data bus DATA I/O*. 
     The device of this embodiment can record and process a read or write request on every clock cycle. The data for a write request must be presented to bus DATA I/O* two clock cycles after the write request is made. In addition, a read request will result in bus DATA I/O* being presented with the read data two clock cycles after the read request is made. 
     FIG. 5 is a circuit diagram for the double pipeline embodiment of this invention shown in block diagram form in FIG.  4 . The components are labeled such that components which overlap with the single pipeline embodiment of FIG. 2 are identically labeled. The input signals to the circuit described in FIG. 5 are an address Address*, control signals GW*, BW 1 *, BW 2 *, BW 3 * and BW 4 *, a clock signal CLK*, a clock enable CEN*, a chip select CS*, an output enable OE*, and a bus DATA I/O*. 
     An address input line is connected to the input side (D) of an input register IR 1 . Similarly, chip select CS*, general word write GW*, and byte write BW 1 *, BW 2 *, BW 3 * and BW 4 * are all presented to the input lines of input registers IR 2 - 7 , respectively. Input registers IR 1 - 7  each have an enable input line which is connected directly to receive clock enable CEN*. Input registers IR 1 - 7  are also connected to receive clock signal CLK* and record the signal at their inputs on a rising edge of clock signal CLK*, provided that the clock enable CEN* is low. If clock enable CEN* is high, input registers IR 1 - 7  are disabled and do not change their state, retaining the signals which were previously recorded. Address and control signals presented to the chip during arbitrarily chosen clock cycle n will be recorded by input registers IR 1 - 7  on the rising clock signal at the beginning of the (n+1)st cycle. 
     The output signals from input registers IR 4 - 7 —BWA, BWB, BWC and BWD, respectively—are presented to the input of a NAND gate L 1 . The output signal from gate L 1 , R 1 , is low only if signals BWA-D are all high indicating a read operation. Signal R 1  is presented to the inputs of logic register LR 12 , gate L 2  and inverter L 17 . The input signals presented to gate L 2  also include the output signal from input register IR 2 , RCS 1 , and clock enable CEN*. The output signal from gate L 2 , EN 1 , is low if signal R 1  is high, clock enable CEN* is low, and signal RCS 1  is low. Signal EN 1  being low, then, indicates that the clock is enabled, the chip is selected and there is no current read operation. The output signal from inverter L 17 , W 1 , is the inverse of signal R 1  so that when signal R 1  is high, signal W 1  is low. 
     The output signal from input register IR 3 , G 1 , is presented to input lines of each of gates L 7 - 10 . The input signals to gates L 7 - 10  also include a corresponding one of the output signals from input registers IR 4 - 7 , BWA-D, respectively. The output signals from gates L 7 - 10  are each high if either signal G 1  is low or the corresponding one of signals BWA-D is low. A high output signal from any of gates L 7 - 10  indicates a write request for that corresponding byte of a data word to address A 1  in memory array MA. 
     The output signals from gates L 7 - 10  are presented to the input lines of logic registers LR 2 - 5  so that the control logic CL records the write operation request at the beginning of the (n+2)nd clock cycle. The enable input of logic registers LR 2 - 5  are connected to receive signal EN 1  so that if the request currently stored in input registers IR 1 - 7  is a read request, signal EN 1  is high and logic registers LR 2 - 5  are disabled and do not record new information. This effectively freezes the signals from the (n+1) cycle in place for the duration of the (n+2) clock cycle. 
     Similarly, address A 1  is presented to logic register LR 1  so that address A 1  is advanced into logic register LR 1  on the rising edge of the clock cycle starting the (n+2)nd cycle. The enable input line of logic register LR 1  is also connected to receive signal EN 1  so that address A 1  is not advanced if address A 1  corresponds to a read operation. The output signals from logic registers LR 2 - 5 , RBW 1 - 4  respectively, are presented to the input lines of logic registers LR 8 - 11 . On the start of the (n+2)nd clock cycle, signals DBW 1 - 4  are recorded in logic registers LR 8 - 11 . Logic registers LR 2 - 5  each have an enable input which is presented with signal EN 1  so that if the operation recorded in input registers IR 1 - 7  is a read operation, logic registers LR 8 - 11  will be disabled and not record new signals. 
     The output signal from logic registers LR 1 , A 2  is presented to the input line of logic register LR 6  so that on the start of the (n+2)nd clock cycle, address A 2  is recorded by logic register LR 6 . Logic register LRG has an enable input line which is connected to receive signal EN 1  so that if the request recorded in input registers IR 1 - 7  is a read operation, logic register LR 6  is disabled and will not record new addresses. 
     The output signal from logic register LR 6 , A 3 , is presented to the low-input line of multiplexer M 1 . The high-input line of multiplexer M 1  is connected to receive address A 1  from input register IR 1 . The select input line of the multiplexer is connected to receive signal W 1  so that if address A 1  corresponds to a read request, signified by signal W 1  being high, address A 1  is the output address of multiplexer M 1 . If signal W 1  is low, signifying a write request on input registers IR 1 - 7 , address A 3  is the output address of multiplexer M 1 . The output address of multiplexer M 1  is presented to the address input of memory array MA. 
     The output signals from logic registers LR 8 - 11  are inputted to gates L 11 - 14 , respectively (LR 8  to L 11 , LR 9  to L 10 , etc.). The input lines of each of gates L 11 - 14  are also presented with signal W 1  and with a delayed clock signal. A delay circuit inputs clock signal CLK* and outputs a clock signal identical with system clock signal CLK* but delayed from that signal, allowing time for the circuit to react and the data and address in place before the actual write request to memory array MA. The output signals of each of gates L 11 - 14  is low only if the delayed clock signal is high, signal W 1  is low (signifying a write request currently recorded on input registers IR 1 - 7 ), and a corresponding one of signals DBW 1 - 4  is high signifying a write request for the corresponding byte of the data word. If signal W 1  is low and any of signals DBW 1 - 4  are high, then the corresponding output signal from gates L 11 - 14  will become low during the time that the delayed clock signal is high and then become high again before the start of the next clock cycle. The output signals from gates L 11 - 14  are presented to byte write input lines WB 1 - 4  of memory array SRAM. Memory array MA writes the byte of data which is currently presented to it on its Din input line to the address presented on the address input line when the respective byte write signal goes low. The data for any write operation is presented to bus DATA I/O* of the chip two clock cycles after the request for write is presented to input registers IR 1 - 7 . Bus DATA I/O* is connected to the input of data register DR. 
     The input line of logic register LR 12  is presented with signal R 1 . On clock cycle (n+2), two cycles after a write request is presented to input registers IR 1 - 7 , logic register LR 12  records the signal R 1  corresponding to that write request. Signal R 2 , the output signal from logic register LR 12 , is high if the request presented to input register IR 1 - 7  during cycle (n+1) is a write, causing signal R 1  to be high during the start of the (n+2)nd cycle. The output signal from logic register LR 12 , R 2 , is presented to an input line of inverter L 18  so that the output signal of gate L 18 , W 2 , is opposite that of signal R 2 . The output signal from gate L 18 , W 2 , is presented to an input line of gate L 15 , along with clock enable CEN* and the output signal from logic register LR 7 , RSC 2 . The output signal from ate L 15 , EN 2 , is low only if signal CEN* is low (indicating that the clock is enabled), signal RSC 2  is low (indicating that the chip was selected during the nth cycle, assuming the current cycle is n+2), and signal W 2  is low (indicating that the request presented to input registers IR 1 - 7  during the nth cycle was a write request). 
     Signal EN 2  is presented to chip enable input of data register DR so that data register DR records new data from bus DATA I/O* unless a read operation was presented to the chip two cycles ago. 
     The output data of data register DR, D 1 , is presented to an input line of a data register DR 2 . Data register DR 2  is also presented with signal EN 2  at an enable input so that if a read operation was presented two cycles ago, data register DR 2  is disabled. If data registers DR 1  and DR 2  are disabled by signal EN 2 , then no data is shifted from DR to DR 2  during the current clock cycle. 
     The output signal from data register DR, D 1 , is presented to the low-input line of multiplexer M 18 . The high-input line of multiplexer M 18  is connected to the output line of DR 2  to receive data D 2 . The output line of multiplexer M 18  is connected to the data input line Din of memory array MA. Signal R 2  is presented to an inverter L 19  and the output signal from inverter L 19  is presented to the input select line of multiplexer M 18 . Inverter L 19  operates as an inverter so that its output signal is logically opposite its input signal. Therefore, if signal R 2  is high, data presented to the low-input side of multiplexer M 18 , data D 1 , is presented to the input line Din of the SRAM while if signal R 2  is low (indicating a read operation was requested two cycles ago), data presented to the high-input side of multiplexer M 18 , data D 2 , is forwarded to the input line Din of memory array MA. If there was a read two cycles ago, the data stored in memory array MA which corresponds to address A 3  stored in logic register LR 6  will reside in data register DR 2 , otherwise that data resides in data register DR. 
     If a read request is recorded in input registers IR 1 - 7 , control logic CL detects whether the data already resides in control logic CL or whether it needs to be read from memory array SRAM. Address A 1  is presented to an input line of comparator C 1 . The other input line to comparator C 1  is presented with address A 2  stored in logic register LR 1 . The output signal from comparator C 1 , EQ 3 , is high if addresses A 1  and A 2  are equal and low if they are not. Similarly, address A 1  is presented to comparator C 2  along with address A 3 . The output signal from comparator C 2 , EQ 4 , is high if addresses A 1  and A 3  are equal and low if they are not. 
     The output signal from comparator C 1 , EQ 3 , is presented to an input line of each of NAND gates L 20 - 23 . The output signals from logic registers LR 2 - 5 , RBW 1 - 4 , are connected to corresponding input lines of gates L 20 - 23 . The output signals from gates L 20 - 23  are each high unless signal EQ 3  is low or the corresponding one of signals RBW 1 - 4  is low. Note that not all of signals RBW 1 - 4  can be low because logic register LR 2 - 5  is prevented from recording a read operation. 
     Each of the output signals from gates L 20 - 23  are presented to a corresponding input line of AND gates L 24 - 27 . Input lines of each of gates L 24 - 27  are also presented with a corresponding one of signals DBW 1 - 4 , signal W 2  and signal EQ 4 . The output signals from gates L 24 - 27 , C 2 ( 1 - 4 ), are each high if signal W 2  is high (indicating a read operation request two cycles ago), signal EQ 4  is high (indicating that the address to be read matches the address currently stored in logic register LR 6 ), the corresponding output signal from logic registers LR 8 - 11 , DBW 1 - 4 , is high (indicating that the corresponding byte of data is to be written) and the corresponding output signal from gates L 20 - 23  is high. 
     The output signals from gates L 24 - 27  are each connected to a respective input select line of multiplexers M 6 - 9 . The low-input lines of multiplexers M 6 - 9  are connected to the output data Dout line of memory array MA. The high-input lines of each of multiplexer M 6 - 9  are connected to the output line of data register DR 2  to receive a corresponding individual byte of data D 2 . The output lines of multiplexers M 6 - 9  are connected to a corresponding low-input line of multiplexers M 10 - 13 . 
     The output signal from comparator C 1 , EQ 3 , is additionally presented to input lines of each of AND gates L 28 - 31 . The output signals from logic registers LR 2 - 5 , RBW 1 - 5 , respectively, are each presented to a corresponding input line of gates L 28 - 31 . In addition, signal W 2  is inputted to an input line of each of gates L 28 - 31 . Each of the output signals from gates L 28 - 31  are high if signal EQ 3  is high (indicating that address A 1  equals address A 2 ), signal W 2  is high (indicating a read requested two cycles ago), and the corresponding one of signals RBW 1 - 4  is high (indicating a request to write that byte of data). 
     The output signal from comparator C 2 , EQ 4 , is inputted to each of AND gates L 32 - 35  along with signal R 2  and a corresponding output signal from logic registers LR 8 - 11 , DBW 1 - 4 , respectively. The output signal from each of gates L 32 - 35  is high if signal EQ 4  is high (indicating that address A 1  equals address A 3 ), signal R 2  is high (indicating a write request two cycles ago) and the corresponding one of signals DBW 1 - 4  is high (indicating a write request for the corresponding byte of the data word). 
     The output signals from gates L 28 -L 31  and L 32 - 35  are each inputted to OR gate L 40 . The output signal from gate L 40 , C 3 ( 1 - 4 ), —still comprising four individual signals—is high if either the corresponding output signal from gates L 28 - 31  or the corresponding output signal from gates L 32 - 35  is high. The output signal from gate L 40 , C 3 ( 1 - 4 ), is presented to the corresponding input select of multiplexers M 10 - 13 . 
     The high-input lines of multiplexers M 10 - 13  are connected to the output line of data register DR to receive a corresponding byte of data word D 1 . The output signals from gate L 40  choose between the output data from multiplexers M 6 - 9  or data D 1  stored on data register DR. 
     The output signal from comparator C 1 , EQ 3 , is also connected to input lines of each of logic gates L 36 - 39 . Other input signals presented to gates L 36 - 39  include signal R 2  and the corresponding one of signals RBW 1 - 4 . The output signals from each of gates L 36 - 39  are high if signal EQ 3  is high (indicating that addresses A 1  and A 2  are equal), signal R 2  is high (indicating a write request presented to the chip two cycles ago), and the corresponding one of signals RBW 1 - 4  is high (indicating a write request for that byte). 
     The output signals from logic gates L 36 - 39 , C 4 ( 1 - 4 ), are presented to the input select lines of multiplexers M 14 - 17 . The high input lines of multiplexers M 14 - 17  are connected to bus DATA I/O*. Gates L 36 - 39  choose between the output data from multiplexers M 10 - 13  and the data which is currently presented to the chip bus DATA I/O* for output data. 
     The output data from multiplexers M 14 - 17 , DO( 1 - 4 ) is presented to the input line of output register OR. Recording the results of the read request in output register OR delays the read output by one clock cycle so that the results of the request are outputted to bus DATA I/O* two clock cycles following the request for the read. 
     The output data from output register OR, DT( 1 - 4 ), is presented to output buffer OB. Output buffer OB is enabled by a high signal presented to an enable input line. Gate L 16  supplies the signal to the enable input of output buffer OB. Inputs to gate L 16  include signals R 2 , RSC 2 , and OE*. The output signal from gate L 16  is high if output enable OE* is low (allowing the chip to output to the data bus), signal RCS 2  is low (indicating a chip select two cycles back), and signal R 2  is low (indicating that a read was requested two cycles ago). 
     Operation of the Double Pipelined Device 
     FIG. 6 shows a timing chart indicating the operation of the circuit shown in FIG. 5 by tracking the circuit timing through several operations and through several clock cycles. The operations in the timing chart were chosen to display the features of the circuit, the circuit is capable of handling any number of requests in any order. The sequence starts at an arbitrary time designated as the nth clock cycle. During the sequence, the clock is always enabled (CEN*=low) and selected (CS*=low). Unless otherwise specified, address a i  is not the same as address a j  where i is not j. 
     nth Clock Cycle—Write Operation Requested 
     During the nth clock cycle, the chip is presented with a write request to address a 0  by setting Address* =a 0 , GW*=L, and BW 1 - 4 *=(L, L, L, L). 
     (n+1)st Clock Cycle—Write Request Initiated 
     At the start of the (n+1)st clock cycle (the low to high transition of the clock signal), the write request presented to the chip in the nth clock cycle is recorded in input registers IR 1 - 7 . Address A 1  becomes a 0 , signal RCS 1  is low, signal G 1  is low and signals BWA-D are (L, L, L, L). Signal R 1  becomes high and signal W 1  becomes low because signals BWA-D are not all high. Signal EN 1  is low because signal R 1  is high, signal CEN* is low, and signal RCS 1  is low (note that for this demonstration signals CEN* and RCS 1  will always be low). The output signals from gates L 7 - 10  are all high because signal G 1  is low and all of signals BWA-D are low. 
     During this period, a write request is initiated by setting Address*=a 1 , GW*=L and BW 1 - 4 * =(H, H, L, L). 
     (n+2)nd Clock Cycle—Write Request Initiated 
     At the beginning of the (n+2)nd clock cycle, logic registers LR 1 - 5  record the signals at their input lines. The output address of LR 1 , A 1 , becomes a 0  and the output signals from LR 2 - 5 , RBW 1 - 4  become (H, H, H, H). Logic register LR 12  also records the signal presented to its input so that its output signal, R 2 , becomes high (H) and signal W 2  becomes low (L). Signal EN 2  is low because signal W 2  is low and signals CEN* and RCS 2  are always low for this discussion. 
     The input signals to the chip are recorded into input registers IR 1 - 7  so that the output signal from input register IR 1 , A 1 , becomes a 1 , the output signal from input register IR 3 , G 1 , is low and the output signals from input registers IR 4 - 7  are (H, H, L, L). Signal R 1  is high and signal W 1  is low. The output signals from gates L 7 -L 10  are all high because signal G 1  is low, regardless of the values of signals BWA-D. The output buffer is disabled, signal DB is low, because output enable OE* is set to high and because signal R 2  is high. 
     In addition, the data to be written into address ao, do, must be presented on bus DATA I/O* during this cycle. A write operation is requested by setting Address*=a 2 , GW*=H, and BW 1 - 4 *=(L,L,L,L). 
     (n+3)rd Cycle—Write Requested 
     At the beginning of the (n+3)rd cycle, logic register LR 6  records the signal at its input and address A 3  becomes a 0 . Logic registers LR 8 - 11  record the signals at their inputs, signals RBW 1 - 4 , and signals DBW 1 - 4  becomes (H, H, H, H). 
     Logic register LR 1  records the signal at its input and address A 2  becomes al. Logic registers LR 2 - 5  record the signals at their inputs and signals RBW 1 - 4  becomes (H, H, H, H). Logic register LR 12  records the signal at its input and signal R 2  becomes his while signal W 2  becomes low. 
     The control signals presented during the (n+2)nd cycle are recorded in input registers IR 1 - 7  so that address A 1  becomes a 2 , signal G 1  becomes high and signals BWA-D become (L, L, L, L). In addition, the data word supplied to bus DATA I/O* is recorded in data register DR so that data D 1  becomes d 0 . 
     The output signals from gates L 7 - 10  are all high because, even if signal G 1  is high, all of signals DBA-B are low. Signal R 1  is high and signal W 1  is low because signals BWA-D are all low. Signal EN 1  is low because signal R 1  is high and signal EN 2  is low because signal W 2  is low. The address stored in logic register LR 6 , A 3 =a 0 , is presented to the address line of memory array SRAM because of the low input signal W 1  presented to the input select line of multiplexer M 1 . As a result of signal R 2  being high, data D 1  is chosen in multiplexer M 18  for presentation to the data input (Din) line of memory array MA. 
     The output signals from all of logic registers L 11 - 14 , which are presented to input lines WB 1 - 4  of memory array SRAM, will all go low during the period when the delayed clock signal is high because signals DBW 1 - 4  are all high and signal W 1  is low. Therefore, all bytes of data d 0  are written into address a 0  of the memory array SRAM during this clock cycle. 
     The data to be written into a 1 , d 1 , must be presented to bus DATA I/O* during this cycle. In addition, the chip is presented with a write request to address*=a 3  with control sequence GW*=H and BW 1 - 4 *=(H, H, L, L) (which is a request to write the last two bytes of data d 3  into address a 3 ). 
     (n+4)th Cycle—Read of New Address Requested 
     At the beginning of the (n+4)th cycle, logic registers LR 1  and LR 6  record the signals at their input lines so that address A 3  becomes al and address A 2  becomes a 2 . Logic registers LR 8 - 11  and LR 2 - 5  record the signals at their input lines so signals DBW 1 - 4  become (H, H, H, H) and signals RBW 1 - 4  become (H, H, H, H). Logic register LR 12  records the signal at its input line and signal R 2  becomes high, therefore signal W 2  will be low. Logic register LR 7  records the signal at its input line so that signal RCS 2  becomes low. In addition, data registers DR and DR 2  record the data presented at their input lines so that data D 1  becomes d 1  and data D 2  becomes d 0 . Input registers IR 1 - 7  record the signals representing the request initiated during the (n+3)rd cycle. 
     Signal EN 2  is low because signal W 2  is low and signal RCS 2  is low. Signal R 1  is high and signal W 1  is low because not all of signals BWA-D are high. Signal EN 1  is therefore low. The output signals from gates L 7 - 10  are (L, L, H, H) because signal G 1  is high and signals BWA-D are (H, H, L, L). 
     Address A 3 , a 1 , is chosen in multiplexer M 1  for presentation to the address line of the memory array MA because signal W 1  is low. In addition, data D 1 , d 1 , is chosen in multiplexer M 18  for presentation to input line Din of memory array MA because signal R 2  is high. The output signals from gates L 11 - 14  will all go low during this cycle because signal W 1  is low and signals DBW 1 - 4  are all high. Therefore, all bytes of data word d 1  are written into address a 1  of memory array MA. 
     During this cycle, the data to be written into address a 2 , d 2 , must be presented to the chip on bus DATA I/O*. In addition, the chip is presented with a read request by setting Address*=a 4 , GW*=L and BW 1 - 4 *=(H, H, H, H). 
     (n+5)th Cycle—Read from Address Currently Being Written is Requested 
     At the start of the (n+5)th cycle, all of the registers record the signals at their inputs so that address A 3  becomes a 2 , address A 2  becomes a 3 , address A 1  becomes a 4 , signals DBW 1 - 4  becomes (H, H, H, H), signals RBW 1 - 4  becomes (L, L, H, H), data D 2  becomes d 1 , data D 1  becomes d 2 , signal R 2  becomes high, signal RCS 2  becomes low, signal G 1  becomes low and signals BWA-D are (H, H, H, H). 
     As a result of the high value of all of signals BWA-D, signal R 1  is low and signal W 1  is high. Therefore, signal EN 1  is high. Signal EN 2  is low because signal R 2  is high and signal W 2  is low. As a result of signal R 2  being high, data D 1 , d 2 , is presented to the Din line of memory array MA. As a result of signal W 1  being high, address A 1 , a 4 , is presented to the address input line of memory array MA. Therefore, the data stored in address a 4  of memory array MA, Da 4 , will be presented on the Dout line of memory array MA. 
     The output signals from gates L 11 - 14  will remain high throughout the cycle because signal W 1  is high. Therefore, no write to memory array MA takes place during this cycle. 
     The read operation represented by control signals stored in input registers IR 1 - 7  is completely processed during this cycle. The output signals from comparators C 1  and C 2 , EQ 3  and EQ 4  respectively, are low because address A 1  (a 4 ) is not address A 2  (a 3 ) and address A 1  (a 4 ) is not address A 3  (a 2 ). The output signals from gates L 20 - 23  are all high regardless of the contents of signals RBW 1 - 4  because signal EQ 3  is low. Similarly, the output signals from gates L 24 - 27 , C 2 ( 1 - 4 ), are all low because signals W 2  and EQ 4  are low, regardless of signals DBW 1 - 4 . As a result, the output signals from multiplexers M 6 - 9  are the corresponding bytes of data word Da 4 . 
     The output signals from gates L 28 - 31  are all low because signal EQ 3  is low and signal W 2  is low. In addition, the output signals from gates L 32 - 35  are all low because signal EQ 4  is low. Therefore, the output signals from gate L 40 , C 3 ( 1 - 4 ), are (L, L, L, L). Multiplexers M 10 - 13 , then, output the values at their low inputs, the corresponding bytes of data word Da 4 . 
     Finally, the output signals from gates L 36 - 39 , C 4 ( 1 - 4 ), are all low because signal EQ 3  is low. The output values from multiplexers M 14 - 17 , DO( 1 - 4 ), are therefore data word Da 4 . 
     During this cycle, the data to be written into address a 3  must be presented to the chip on bus DATA I/O*. In addition, the chip is presented with a read request by setting Address*=a 3 , GW*=H, and BW 1 - 4 *=(H, H, H, H). Note that the address presented for read, a 3 , is that address which currently resides in logic register LR 1 . 
     (n+6)th Cycle—Write Initiated 
     At the beginning of the (n+6)th cycle, logic registers LR 1 - 6  and LR 8 - 11  are all disabled from recording new data because signal EN 1  is high. Therefore, each of these registers retains the value that they had during the (n+5)th cycle. Data registers DR and DR 2 , however, are not disabled so that data D 2  because d 2  and data D 1  becomes d 3 . In addition, logic registers LR 7  and LR 12  record the signals at their input lines so that signal RSC 2  becomes low and signal R 2  low. Input registers IR 1 - 7  record the new control signals so that signal G 1  becomes high and signals BWA-D become (H, H, H, H). Output register OR records the value at its input and so data word DT( 1 - 4 ) becomes data word Da 4 . 
     As a result of having signal value R 2  being low, signal W 2  becomes high and data D 2 , d 2 , is presented to data input line Din of memory array MA, and signal EN 2  becomes high. As a result of signal R 1  being low, signal EN 1  remains low, signal W 1  is high, address A 1  (a 3 ) is presented to the address line of memory array MA, and the output signals from gates L 11 - 14  remain high during the cycle, indicating that memory array MA will not execute a write operation on this cycle. 
     Output enable OE* must be set to low on this cycle. With output enable OE* low and signal R 2  low, the output signal from gate L 16 , DB, is high and output buffer OB is enabled. Therefore, data word DT( 1 - 4 ) (Da 4 ) is placed on data bus DATA I/O* by the chip. Therefore, Da 4  is presented by the chip in response to the read request to memory location a 4 . 
     The output signal from comparator C 1 , EQ 3 , is high because address A 1  (a 3 ) is equal to address A 2  (a 3 ). The output signal from comparator C 2 , EQ 4 , is low because address A 1  (a 3 ) is not the same as address A 3  (a 2 ). 
     The output signals from gates L 20 - 23  are (H, H, L, L) because signal EQ 3  is high while signals RBW 1 - 2  are low and signals RBW 3 - 4  are high. Signal EQ 4  is low, however, so the output signals from gates L 24 - 27 , C 2 ( 1 - 4 ), are low regardless of the output signals from gates L 20 - 23  or signals DBW 1 - 4 . The low input sides of multiplexers M 6 - 9  are chosen and multiplexers M 6 - 9  output the data value present at line Dout of memory array MA. In this case, the data stored in memory location a 3  of memory array MA, Da 3 , is presented at line Dout. 
     The output signals from gates L 28 - 31  are (L, L, H, H) because signal EQ 3  is high, signal W 2  is high and signals RBW 1 - 4  are (L, L, H, H). The output signals from gates L 32 - 35  are low because signal EQ 4  is low and signal R 2  is low, regardless of the values of signals DBW 1 - 4 . Therefore, the output signals from gate L 40 , (C 3 ( 1 - 4 ), are (L, L, H, H). The output values from multiplexers M 14 - 17 , then, are represented as (Da 3 , Da 3 , d 3 , d 3 ) (i.e., the first byte of data word Da 3 , byte two of data word Da 3 , byte three of data word d 3  and byte  4  of data word d 3 ). 
     The output signals from gates L 36 - 39 , C 4 ( 1 - 4 ), are low because signal R 2  is low. Therefore, multiplexers M 14 - 17  output the values on their low input lines. The output values from multiplexers M 14 - 17 , DO( 1 - 4 ), are (Da 3 , Da 3 , d 3 , d 3 ), the first two bytes of the contents of memory array MA at address a 3  (Da 3 ) and the last two bytes of data word d 3 , the part that is to be written into the SRAM, stored in control logic CL. 
     During this cycle, the chip is presented with a write request by setting Address*=a 5 , GW*=L, and BW 1 - 4 * =(L, L, L, L). 
     (n+7)th Clock Cycle—Write Requested 
     At the beginning of the (n+7)th cycle, logic registers LR 1 - 6 , and LR 8 - 11  are disabled because signal EN 1  is high at the time of transition. Both data registers DR and DR 2  are disabled because signal EN 2  is high. These registers, then, do not record new data. 
     Logic register LR 12  records the signal at its input so that signal R 2  becomes low and signal W 2  becomes high. Logic register LR 7  records the signal presented to its input so that signal RCS 2  is low. Signal EN 2  is high because W 2  is high, thereby disabling data registers DR and DR 2  for one more cycle. 
     Output register OR records the value presented at its input so that data word DT( 1 - 4 ) becomes (Da 3 , Da 3 , d 3 , d 3 ). During this cycle, output enable OE* must be set to low so that the output signal from gate L 16 , DB, becomes high and output buffer OB is enabled. Data word DT( 1 - 4 ) is therefore presented to bus DATA I/O* in response to the read request presented during the (n+5)th cycle. 
     Input registers IR 1 - 7  all record the signal at their inputs so that address A 1  becomes a 5 , signal g 1  becomes low, and signals BWA-D become (L, L, L, L). Signal R 1  is high because signals BWA-D are all low. Therefore, signal W 1  is low and signal EN 1  is low, thereby enabling the previously disabled logic registers LR 1 - 6  and LR 8 - 11 . 
     Multiplexer M 1  presents the address input of multiplexer array MA with address A 3  (a 2 ) because signal W 1  is low. In addition, multiplexer M 18  presents the Din line of multiplier array MA with data D 2  (d 2 ), because signal R 2  is low. The output signals from gates L 11 - 14  will all go low during the cycle because signal W 1  is low and signals DBW 1 - 4  are all high. Therefore, all bytes of data word d 2  will be written into address a 2 . 
     During this cycle, the chip is presented with a write request by setting Address*=a 6 , GW*=H, and BW 1 - 4 * to (L, L, H, H). 
     (n+7)th through (n+10)th Cycles 
     At this point, it is more informative to jump ahead in FIG. 6 to clock cycles  11 - 15 , which presents the case of two writes to the same address of differing bytes of a data word followed by two reads of that address. 
     (n+11)th clock cycle—Write Request to a 8  Initiated 
     During this clock cycle, the chip is presented with a write request by setting Address*=a 8 , GW*=H, and BW 1 - 4 *=(L, L, H, H). 
     (n+12)th Clock Cycle—Write Request to a 8  Initiated 
     At the beginning of the (n+12)th cycle, the write request presented during the (n+11)th cycle is recorded in input register IR 1 - 7 . Therefore, address A 1  becomes a 8 , signal G 1  become high and signals DWA-D become (L, L, H, H). Signals RCS 1  and RCS 2  are always low in this example because the chip is assumed always to be selected. 
     Signal R 1  is high and signal W 1  is low because all of signals DBA-D are not high. Therefore, signal EN 1  is low. The output signals from gates L 7 - 10  are (H, H, L, L) because signal G 1  is high and signals DWA-D are (L, L, H, H). 
     During this clock cycle, the chip is presented with another write request to address a 8  by setting Address*=a 8 , GW*=H, and BW 1 - 4 *=(H, H, L, L). This is a request to write to the half of the data word not requested during the (n+11)th cycle. 
     (n+13)th Cycle—Request to Read Address a 8   
     At the beginning of the (n+13)th cycle, logic register LR 1  records the value at its input so that address A 2  becomes a 8 . Logic registers LR 2 - 5  record the signals at their inputs so that signals RBW 1 - 4  becomes (H, H, L, L). Logic register LR 12  records the signal at its input and signal R 2  becomes high. The write requested in the (n+12)th cycle is recorded in input registers IR 1 - 7  so that address A 1  becomes a 8 , signal G 1  becomes high, and signals BWA-D become (H, H, L, L). 
     As a result of signal R 2  being high, signal W 2  is low so that signal EN 2  is low. Signal R 1  is high because signals BWA-D are not all high, so signal W 1  is low and signal EN 1  is low. The output signals from gates L 7 - 10  are (L, L, H, H) because of signals G 1  and BWA-D. 
     During this cycle, the chip must be presented with the data for the write request presented to it in cycle (n+11) so the data word d 8 A is presented on bus DATA I/O* line. The chip is also presented with a read request for address a 8  by setting Address*=a 8 , GW*=H, and BW 1 - 4 *=(H, H, H, H). 
     (n+14)th request to read address a 8   
     At the beginning of the (n+14)th clock cycle, logic registers LR 1  and LR 6  record the values at their inputs so address A 3  becomes a 8  and address A 2  becomes a 8 . Logic registers LR 8 - 11  and LR 2 - 5  record the signals at their inputs so signals DBW 1 - 4  become (H, H, L, L) and signals RBW 1 - 4  become (L, L, H, H). Logic register LR 12  records and signal R 2  becomes high. The read request signals are recorded in input registers IR 1 - 7  so that address A 1  become a 8 , signal G 1  becomes high, and signals BW 1 - 4  become (H, H, H, H). Data register DR records so that data D 1  becomes data word d 8 A. The data for the write requested in cycle (n+12), d 8 B, must be presented to bus DATA I/O* of the chip during this cycle. 
     Signal W 2  is low because signal R 2  is high. Therefore, signal EN 2  is low. All of signals DBA-D are high so signal R 1  is low. Both signals W 1  and EN 1  are therefore high. The output signals from gates L 7 - 10  are all low because signal GW is high and signals BWA-D are all high. Signal R 2  is high so that data D 1  (d 8 A) is presented to the Din line of memory array MA. 
     Address A 1  (a 8 ) is chosen in multiplexer M 1  for presentation to the address input of memory array SRAM because signal W 1  is high. In addition, because signal W 1  is high, the output signals from gates L 11 - 14  will remain high throughout the cycle, which means that no write is undertaken by memory array MA on this cycle. 
     The output signals from comparators C 1  and C 2 , EQ 3  and EQ 4 , are both high because addresses A 1 , A 2  and A 3  are all a 8 . 
     The output signals from gates L 24 - 27 , C 2 ( 1 - 4 ), are all low because signal W 2  is low, regardless of the output signals from gates L 20 - 23  or the values of signals DBW 1 - 4 . Therefore, the contents of memory array MA at address a 8 , data word Da 8 , is presented at line Dout of memory array MA and chosen in multiplexers M 6 - 9  for presentation on their output lines. 
     The output signals from gates L 28 -L 31  are all low because signal W 2  is low. The output signals from gates L 32 - 35 , however, are (H, H, L, L) because signal R 2  is high, signal EQ 4  is high, and signals DBW 1 - 4  are (H, H, L, L). The output signals from gate L 40 , C 3 ( 1 - 4 ), therefore, are (H, H, L, L). The high-input lines of multiplexers M 10 - 11  are chosen and the low-input lines of multiplexers M 12 - 13  are chosen. Multiplexers M 10 - 13  therefore output the data word (d 8 A, d 8 A, Da 8 , Da 8 ). 
     The output signals from gates L 36 - 39 , C 4 ( 1 - 4 ), are (L, L, H, H) because signal EQ 3  is high, signal R 2  is high, and signals RBW 1 - 4  are (L, L, H, H). The low inputs of multiplexers M 14 - 15  and the high inputs of multiplexers M 16 - 17  are chosen causing the output value of multiplexers M 14 - 17 , DO( 1 - 4 ), to be (d 8 A, d 8 A, d 8 B, d 8 B). 
     The chip is presented with another read to memory location a 8  during this cycle by setting Address*=a 8 , GW*=H, and BW 1 - 4 *=(H, H, H, H). 
     (n+15)th Cycle 
     At the start of the (n+15)th cycle, logic registers LR 1 - 6  and LR 8 - 11  are disabled from recording new values because signal EN 1  is high. Register LR 12  records the signal at its input so signal R 2  is low. In addition, data registers DR and DR 2  record the values at their inputs so that data D 2  becomes d 8 A and data D 1  becomes d 8 B. 
     Output register OR records the value at its input line so that data word DT( 1 - 4 ) becomes (d 8 A, d 8 A, d 8 B, d 8 B). Output enable OE* must be set to low during this cycle. The output signal from gate L 16 , DB, is then high because signal OE* is low and signal R 2  is low. With signal DB being high, output buffer OB is enabled and data word DT( 1 - 4 ) is presented by the chip to bus DATA I/O*. 
     The control signals for the new read request are recorded by input registers IR 1 - 7  so that address A 1  becomes a 8 , signal G 1  becomes high, and signals BWA-D become (H, H, H, H). With these values, signal R 1  is low, signal W 1  is high and signal EN 1  is high. With signal R 2  being high, signal W 2  is low, and signal EN 2  is high. The output signals from gates L 11 - 14  will remain high throughout the cycle because signal W 1  is high, therefore the memory array MA will not write during this cycle. 
     Address A 1  (a 8 ) is chosen in multiplexer M 1  for presentation to the address input of memory array SRAM because signal W 1  is high. The data in memory array MA at address a 8  (Da 8 ) is presented at line Dout of memory array MA. 
     The output signals from comparators C 1  and C 2 , EQ 3  and EQ 4 , are both high because address A 1 , a 8 , is the same as addresses A 2  and A 3 , all of them being a 8 . 
     The output signals from gates L 20 - 23  are (H, H, L, L) because signal EQ 3  is high and signals RBW 1 - 4  are (L, L, H, H). The output signals from gates L 24 - 27 , C 2 ( 1 - 4 ), are (H, H, L, L) because signal W 2  is high, signal EQ 4  is high, and signals DBW 1 - 4  are (H, H, L, L). The high input lines of multiplexers M 6 - 7  and the low input lines of multiplexers M 8 - 9  are selected. The output values of multiplexers M 6 - 9 , then, are (d 8 A, d 8 A, Da 8 , Da 8 ). 
     Gates L 28 - 31  output the signals (L, L, H, H) because signal EQ 3  is high, signal W 2  is high, and signals RBW 1 - 4  are (L, L, H, H). Gates L 32 - 35  output the signals (L, L, L, L) because signal R 2  is low. Therefore, the output signals from gate L 40 , C 3 ( 1 - 4 ), are (L, L, H, H). The low input lines of multiplexers M 10 - 11  and the high input lines of multiplexers M 12 - 13  are therefore chosen. The output values from multiplexers M 10 - 13 , then, are (d 8 A, d 8 A, d 8 B, d 8 B). 
     The output signals from gates L 36 - 39  are (L, L, L, L) because signal R 2  is low. Therefore, multiplexers M 14 - 17  choose their low-input lines for output and data word DO( 1 - 4 ) becomes (d 8 A, d 8 A, d 8 B, d 8 B). Data word DO( 1 - 4 ) is recorded by output register OR and presented to bus DATA I/O* on the next clock cycle. 
     Operation of the Output Selection Logic 
     The output selection logic for the circuit described in FIG. 5 is isolated and displayed in FIG.  7 . For simplicity, FIG. 7 shows the selection logic for one byte of a data word. In addition, the components are labeled identically with those of FIG.  5 . 
     The low-input line of multiplexer M 6  is connected to line Dout of memory array MA to receive a byte of the data word on line Dout. The high-input side is connected to receive a corresponding byte from data register DR 2 . The input selection line of multiplier M 6  is connected to the output line of circuit  2 . The logic of circuit  2  is such that signal C 2  at the output line of circuit  2  is high if either signal EQ 3  or signal RBW 1  are low and signals EQ 4 , DBW 1  and W 2  are all high. 
     The low input side of multiplexer M 10  is connected to the output line of multiplexer M 6  while the high input side is connected to the output line of data register DR to receive a corresponding byte of data word D 1 . The input select line of multiplexer M 10  is connected to the output line of circuit  3  to receive the signal C 3 . The high-input line of M 10  is selected if signals EQ 3 , RBW 1 , and W 2  are all high or if signals EQ 4 , R 2 , and DBW 1  are all high. 
     The output line of multiplexer M 10  is connected to the low-input line of multiplexer M 14 . The high-input line of multiplexer M 14  is connected to bus DATA I/O* to receive the input data word. The input select line of multiplexer M 14  is connected to the output line of circuit  4  to receive the signal C 4 . The high-input line of multiplexer M 14  is chosen for output if signals EQ 3 , R 2  and RBW 1  are all high. 
     FIGS. 8A through 8I outline the operation of the output select logic shown by circuits  2 ,  3 , and  4  of FIG.  7 . For purposes of this discussion, the following sequence of operations shown in FIG. 8A is assumed: a write request to al, a write request to a 2 , a write request to a 3 , a read of address ax, and a read of address ay. Unless otherwise specified, the addresses used are all unique. 
     If the sequence is started by presenting the first write request in the nth cycle, then, as shown in FIG. 8A, in the (n+3)rd cycle, address A 1  is a 3 , address A 2  is a 2 , address A 3  is al, data D 1  is d 1 , signal R 1  is high and signal R 2  is high. During that sequence, the chip is presented with a read request for address ax and the data word to be written into address a 2 . 
     In the (n+4)th cycle, the read request initiated during the (n+3)rd cycle will be performed. During this cycle, address A 1  is ax, address A 2  is a 3 , address A 3  is a 2 , data D 1  is d 2 , data D 2  is d 1 , signal R 1  is low and signal R 2  is high. In addition, the data to be written into address a 3  is presented to bus DATA I/O*. 
     In FIG. 8B, the case of ax equal to a 3  and not equal to a 2  is analyzed. In that case, signal EQ 3  is high and signal EQ 4  is low. The chip, then, must capture the byte of data from bus DATA I/O* if that byte is to be written into memory array SRAM. Therefore, the output signals from Circuit  2  and Circuit  3  both choose the low input lines of multiplexers M 6  and M 10  respectively so that multiplexer M 14  is presented with the output value from memory array SRAM, Da 3 , on the low-input line and bus DATA I/O*, d 3 , on the high-input line. The output signal from circuit  4  chooses the high input side if the corresponding control signal RBW 1  calls for a write of that byte. Otherwise, the contents of the SRAM are chosen for output. 
     If address ax is equal to a 2  and not equal to a 3 , then signals EQ 3 =L and EQ 4 =H, as in FIG. 8C, and the data corresponding to the read request is d 2  and resides on data register DR, provided that byte is to be written. Therefore, the output signal from circuit  2  chooses the low input line of multiplexer M 6  and forwards the output value from line Dout to the low-input line of multiplexer M 10 . Circuit  3 (A) chooses the low-input line of multiplexer M 10 , but Circuit  3 (B) chooses the high-input line of multiplexer M 10  if the control signal DBW 1  is high. Circuit  4  chooses the low-input line of multiplexer M 14 . Therefore, data word byte d 2  is forwarded to output register OR if that byte is to be written, otherwise data byte Da 2  is forwarded to output register OR. 
     If address ax is the same as both a 3  and a 2 , as in FIG. 8D, then the logic circuit must choose data byte d 3  if that is to be written, data byte d 2  if data byte d 2  is to be written and data byte d 3  is not to be written, and the output value from line Dout if neither data byte d 2  nor data byte d 3  is to be written. Circuit  2  chooses the low input line of M 6  because signal R 2  is high (making signal W 2  low) and the output value from line Dout is forwarded to the low-input line of multiplexer M 10 . Circuit  3 (A) chooses the low-input line of multiplexer M 10  because signal W 2  is low, but circuit  3 (B) chooses the high input line if that byte of data byte d 2  is to be written. The output signal from circuit  3 , C 4 , chooses the high-input line of multiplexer M 14  if that byte of data byte d 3  is to be written. Therefore, data DO is d 3  if that byte is written, d 2  if d 3  is not written but d 2  is, and Da 3  if neither d 2  or d 3  are written. 
     If ax is neither a 3  nor a 2 , as is shown in FIG. 8E, all three circuits choose the low-input lines of their respective multiplexers and Dax, the data byte at line Dout, is presented to output register OR. 
     During the (n+5)th cycle shown in FIG. 8A, the read request initiated in the (n+4)th cycle is processed. During cycle (n+5), A 1 =ay, A 2 =a 3 , A 3 =a 2 , D 1 =d 3  and D 2 =d 2 . The logic registers are disabled but the new data is recorded in the data registers. On this cycle, the data corresponding to write address a 3 , d 3 , is data D 1  and the data corresponding to write address a 2 , d 2 , is data D 2 . In addition, signals R 2  and R 1  are both low. 
     In FIG. 8F, ay is equal to a 3  and not equal to a 2  so signal EQ 3  is high and signal EQ 4  is low. Circuit  2  chooses the low-input line of multiplexer M 6  because signal EQ 4  is low. Therefore, the data stored in address a 3  of multiplexer array MA, Da 3 , is presented to the low-input line of multiplexer M 10 . Circuit  3  will choose the high-input line of multiplexer M 10 , d 3 , if that byte is to be written because Circuit  3 (A) will choose the high-input line. Circuit  3 (B) chooses the low input line because signal R 2  is low. Circuit  4  chooses the low-input line of multiplexer M 14  if signal R 2  is low. Therefore, data D 1 , d 3 , is presented to output register OR if that data is to be written during a corresponding write operation. 
     In FIG. 8G, ay is equal to a 2  and not equal to a 3  so signal EQ 3  is low and signal EQ 4  is high. Circuit  1  chooses the high-input line of multiplexer M 6  provided that that byte of data word d 2  will be written into memory array MA. Circuit  3 (A) chooses the low-input line of multiplexer M 10  because signal EQ 3  is low and circuit  3 (B) chooses the low-input line of multiplexer M 10  because signal R 2  is low. Therefore, Circuit  3  chooses the low-input line of multiplexer M 10 . Circuit  4  chooses the low-input line of multiplexer M 14  because signal EQ 3  is low. Therefore, output register OR is presented with data D 2  (d 2 ) if d 2  is to be written into memory array MA, and the contents of memory array MA at a 2  (Da 2 ) if d 2  is not to be written into memory array MA. 
     In FIG. 8H, ay is equal to both a 3  and a 2 . Signals EQ 3  and EQ 4  are both high. Circuit  2  chooses the high-input line of multiplexer M 6  if that byte of data d 3  is not to be written (signal RBW 1  is low) and if that byte of data d 2  is to be written (signal DBW 1  is high). Circuit  3 (A) chooses the high-input line of multiplexer M 10  if d 3  is to be written. Circuit  3  follows Circuit  3 (A) because Circuit  3 (B) chooses the low-input line of multiplexer M 10  as a result of signal R 2  being low. Circuit  4  chooses the low-input line of multiplexer M 14  because signal R 2  is low. Therefore, output register OR is presented with d 2  if that byte of d 2  is to be written and that byte of d 3  is not to be written, d 3  if that byte of d 3  is to be written, and Da 3 , from memory array MA, otherwise. 
     FIG. 8I investigates the case where ay is not a 3  or a 2 . In that case, all of the logic circuits choose the low-input lines of their respective multiplexers and output register OR is presented with the contents of memory array MA at address ay, Day. 
     The Combined Operation Chip 
     FIG. 9 shows a circuit diagram for an embodiment of the invention which operates in either a single pipeline mode or a double pipeline mode. As is seen from the diagram, it is a combination of the circuits shown in FIG.  2  and in FIG.  5 . The components in this diagram are labeled consistently with those of FIG.  2  and FIG.  5 . The differences between FIG. 5, the double pipelined device (DPD), and FIG. 2, the single pipelined device (SPD), are discussed along with this discussion of FIG.  9 . 
     The circuit of FIG. 9 includes a new input signal, S/D*, which is low for double pipeline operation and high for single pipeline operation. Otherwise, the input signals are identical to those described in FIGS. 2 and 5. 
     In the SPD (FIG.  2 ), the output lines of logic registers LR 2 - 5  are connected directly to input lines of gates L 11 - 14 . In DPD (FIG.  5 ), the output lines of logic registers LR 2 - 5  are connected to the input lines of logic registers LR 8 - 11  and output lines from logic registers LR 8 - 11  are connected to input lines of gates L 11 - 14 . 
     In FIG. 9, output lines of logic registers LR 2 - 5  are connected to the high-input lines of multiplexers M 23 - 26  as well as the input lines of logic registers LR 8 - 11 . The high-input line of multiplexers M 23 - 26  are connected to the output lines of logic registers LR 8 - 11 , respectively. The output lines of multiplexers M 23 - 26  are each connected to an input line of gates L 11 - 14 . The input select line for M 23 - 26  receives signal S/D* so that for single pipeline operation gates L 11 - 14  are presented with the outputs of logic registers LR 2 - 5  and for double pipeline operation gates L 11 - 14  are presented with the outputs of logic registers LR 8 - 11 . 
     In the SPD, the output line of logic register LR 1  is connected directly to the low-input line of multiplexer M 1  whereas in the DPD, the output line of logic register LR 1  is connected to the input line of logic register LR 6  and the output line of logic register LR 6  is connected to the low-input line of multiplexer M 1 . In FIG. 9, multiplexer M 22  is used such that the low-input line of multiplexer M 22  is connected to the output line of logic register LR 6  while the high-input line of multiplexer M 22  is connected to the output line of logic register LR 1 . The output line of multiplexer M 22  is connected to the low-input line of multiplexer M 1 . The input select line of multiplexer M 22  is connected to receive signal S/D* so that in single pipeline mode, the low-input line of multiplexer M 1  is presented with the output signal from logic register LR 1  while in double pipeline mode the low-input line of multiplexer M 1  is presented with the output signal from logic register LR 6 . 
     Also in the SPD, the input lines to gate L 15  include the output line from gate L 17  and the output line of input register IR 2  whereas in the DPD, the input lines to gate L 15  include the output line of gate L 18  and the output line of input register IR 7  instead. In FIG. 9, the output line of gate L 17  is connected to the high-input line of multiplexer M 27  and the output line of gate L 18  is connected to the low-input side of multiplexer M 27 . The output line of multiplexer M 27  is connected to an input line of gate L 15 . In addition, signal RCS 1  is presented to the high-input line of multiplexer M 28  and signal RCS 2  is presented to the low-input line of multiplexer M 28 . The output line of multiplexer M 28  is connected to an input line of gate L 15 . The input select line of multiplexers M 27  and M 28  are connected to receive signal S/D* so that gate L 15  is presented with signals W 1  and RCS 1  for single pipeline operation and signals W 2  and RCS 2  for double pipeline operation. 
     In the SPD, the input signals to gate L 16  include OE*, RCS 1  and R 1  while in the DPD the input signals include OE*, RCS 2  and R 2 . In FIG. 9, one input line of gate L 16  is connected to receive signal OE*, another input line to the output line of multiplexer M 28 , and a third input line to the output line of multiplexer M 29 . The low-input line of multiplexer M 29  receives signal R 2 * and the high-input line of multiplexer M 29  receives signal R 1 *. The input select line of multiplexer M 29  is connected to receive signal S/D*. Therefore, gate L 16  is presented with the proper input signals depending on the operation of the circuit. 
     The Din input line of memory array MA is connected directly to the output line of data register DR in the SPD case while in the DPD the Din input line is connected to the output line of multiplexer M 18 . The low-input line of multiplexer M 18  is connected to the output line of data register DR and the high-input line is connected to the output line of data register DR 2 . The input select line of multiplexer M 18  is connected to the output line of gate L 19 . The input signal to gate L 19  is R 2 . In FIG. 9, the Din input of memory array MA is connected to the output line of multiplexer MIS where the input lines of multiplexer M 18  are connected the same as in the DPD. Gate L 19 , however, is an AND gate, rather than a NOT gate, and inputs signals R 2 * and S/D* such that if signal S/D* is high, the low-input line of multiplexer M 18  is always selected and if signal S/D* is low, gate L 19  acts as an inverter for signal R 2 *. 
     Finally, in the SPD the output select circuitry consists of gates L 3 - 6  and multiplexers M 2 - 5 . In the DPD, however, the output select circuitry consists of gates L 20 - 40  and multiplexers M 6 - 17 . In addition, output register OR is added to the DPD in order to preserve the timing. In FIG. 9, line Dout of memory array MA is connected to the low-input lines of multiplexers M 2 - 5  as in the SPD. It is also connected to the low-input lines of multiplexers M 6 - 9  as in the DPD. The output lines of multiplexers M 2 - 5  are connected to the high-input lines of multiplexers M 18 - 21 . The low input lines of multiplexers M 18 - 21  are connected to the output lines of output register OR. The output lines of multiplexers M 18 - 21  are connected to output buffer OB. The input select line of M 18 - 21  are connected to receive signal S/D* so that output buffer OB is presented with the single-pipeline output selection if in single pipeline mode and the double-pipeline output selection if in double pipeline mode. 
     A feature of these devices is that they internally pipeline requests to memory array MA. There are no restrictions on what piece of data may be accessed. If a write to address a is followed by a read of address a, the proper data which was just posted is routed to the output to properly handle the read request. Additional requirements of these devices are that they allow individual byte writes to each address. These devices recognizes when a partial write to address a is followed by a read of a and routes the proper data to output the whole word corresponding to address a. 
     It is a requirement of the user to insure that the signals into this device meet the required setup and holds so as to prevent any metastability. Setup and hold times should be designed to have a maximum requirement of 1 ns. This will allow the device to be used in systems as fast as 150 Mhz. 
     When running at a frequency approaching 150 Mhz, the entire write cycle must complete in 6.6 ns in order to occur within a single write cycle. The additional overhead delay through the multiplexers in front of the “data in” port of the RAM is subtracted from the cycle time. 
     Other Embodiments 
     The circuit shown in FIG. 9, as implemented on the integrated circuit shown in Appendix A, presents the preferred embodiment of the invention. Alternative embodiments include the single pipeline device of FIG.  2  and the double pipeline embodiment of FIG.  5 . Variations on these embodiments, such as differing logic circuit in either the write portions or the read selection portions, may be used and are within the scope of this invention. The circuits shown in the examples display a logic circuit and the necessary priorities for reading data from the circuit. 
     Also, embodiments involving three or more pipeline delays, although requiring careful attention to timing, will be obvious in view of this disclosure. While a single DATA I/O* terminal is shown in FIGS. 2,  5  and  9 , separate data input and data output lines may be used. DRAM memories may also be used in place of the SRAM memories shown as memory arrays in the Figures. 
     In the preferred embodiment, address are 16 bits and data words have four bytes of 9 bits each. Alternative embodiments include those with addresses of any size and data words of any size with any number of bytes making up the data word. 
     The embodiments shown here are demonstrative only. Other variations of these embodiments are within the scope of this application. As such, the scope of the application is limited only by the following claims.