Login| Sign Up| Help| Contact|

Patent Searching and Data


Title:
BIT-SERIAL MEMORY ACCESS WITH WIDE PROCESSING ELEMENTS FOR SIMD ARRAYS
Document Type and Number:
WIPO Patent Application WO/2001/035224
Kind Code:
A1
Abstract:
A single-instruction multiple-data (SIMD) array processor (100) providing enhanced data transfer efficiency. The SIMD array processor includes at least one memory (102) such as a synchronous dynamic random access memory and a plurality of processing elements (104-134) configured in an array. Each processing element includes at least one 'narrow' memory buffer and a plurality of 'wide' data registers. The narrow memory buffer transfers data between the memory and at least one of the wide data registers while the processing element performs data processing operations. Each processing element further includes at least one parallel adder for adding data stored in the wide data registers coupled thereto, and a control circuit for controlling the memory buffer to transfer a data word stored in a selected data register between the memory and the selected data register.

Inventors:
JACKSON JAMES H
Application Number:
PCT/US2000/041530
Publication Date:
May 17, 2001
Filing Date:
October 25, 2000
Export Citation:
Click for automatic bibliography generation   Help
Assignee:
LITTLE INC A (US)
International Classes:
G06F15/173; G06F15/80; H04L29/06; H04L29/08; (IPC1-7): G06F12/08; G06F15/00
Foreign References:
US5809292A1998-09-15
US5673396A1997-09-30
US5410727A1995-04-25
Other References:
NICOLETA C. ET AL.: "A 450-Mhz RISC microprocessor with enhanced instruction set and copper interconnect", IEEE JOURNAL OF SOLID-STATE CIRCUITS, vol. 34, no. 11, November 1999 (1999-11-01), pages 1478 - 1491, XP002938356
ACKLAND B. ET AL.: "A single-chip, 1.6-billion, 1.6-b MAC/s multiprocessor DSP", IEEE JOURNAL OF SOLID-STATE CIRCUITS, vol. 35, no. 3, March 2000 (2000-03-01), pages 412 - 424, XP002938357
Attorney, Agent or Firm:
Lebovici, Victor B. (Schurgin Gagnebin & Haye, LLP Ten Post Office Square Boston MA, US)
Download PDF:
Claims:
CLAIMS What is claimed is :
1. A singleinstruction multipledata array processor, comprising : at least one memory ; and a plurality of processing elements, each processing element including at least one nbit wide memory buffer and a plurality of mbit wide data registers, the memory buffer being adapted to transfer data between the memory and the plurality of data registers, wherein n 2 1 and m > n.
2. The singleinstruction multipledata array processor of claim 1 wherein each processing element is adapted to perform data processing operations using at least a portion of the data registers while the memory buffer transfers data between the memory and at least one of the data registers.
3. The singleinstruction multipledata array processor of claim 1 wherein each processing element further includes at least one parallel adder circuit communicably coupled to at least a portion of the data registers.
4. The singleinstruction multipledata array processor of claim 1 wherein each processing element further includes at least one respective first data register adapted to store a first data word and at least one respective second data register adapted to store a second data word, each processing element further including a control circuit configured to control the memory buffer to transfer a selected one of the first and second data words between the memory and the respective first and second data registers.
5. The singleinstruction multipledata array processor of claim 1 wherein the memory buffer is further adapted to transfer data serially between the memory and at least one data register in a reverse bit order.
6. The singleinstruction multipledata array processor of claim 1 wherein the memory includes a plurality of columns of memory locations, and the memory buffer is further adapted to transfer data serially between at least one of the data registers and a selected one of the columns of memory.
7. The singleinstruction multipledata array processor of claim 1 wherein the memory is a synchronous dynamic random access memory.
8. The singleinstruction multipledata array processor of claim 1 wherein the plurality of processing elements comprises a NEWS array.
9. A method of operating a singleinstruction multiple data array processor, the array processor including at least one memory and a plurality of processing elements, each processing element including at least one memory buffer and a plurality of data registers, the method comprising the steps of : transferring data between thememory and at least one of the data registers included in a processing element by the memory buffer ; and while the data is being transferred in the transferring step, performing at least one data processing operation using at least a portion of the data registers by the processing element.
10. The method of claim 9 wherein data are transferred between the memory and the at least one data register in the transferring step in a bitserial manner.
11. The method of claim 9 wherein the plurality of data registers includes a first respective data register for storing a first data word and a second respective data register for storing a second data word, and further including the step of controlling the memory buffer to transfer a selected one of the first and second data words between the memory and the first and second respective data registers.
Description:
TITLE OF THE INVENTION BIT-SERIAL MEMORY ACCESS WITH WIDE PROCESSING ELEMENTS FOR SIMD ARRAYS CROSS REFERENCE TO RELATED APPLICATIONS This application claims priority of U. S. Provisional Patent Application No. 60/161, 587 filed October 26, 1999 entitled FINITE DIFFERENCE ACCELERATOR.

STATEMENT REGARDING FEDERALLY SPONSORED RESEARCH OR DEVELOPMENT N/A BACKGROUND OF THE INVENTION The present invention relates generally to SIMD array processors, and more specifically to SIMD array processors having improved data transfer efficiency between processing elements and associated memories included therein.

Single-Instruction Multiple-Data (SIMD) array processors are known which comprise arrays of interconnected processing elements executing the same instruction simultaneously on a plurality of different data samples. For example, an SIMD array processor may include a two-dimensional array of processing elements in which each processing element is connected to its four

(4) nearest neighbors to form a"North, East, West, South (NEWS) array". In such NEWS arrays, each processing element communicates directly with its North, East, West, and South neighbors. An exemplary SIMD array processor may also include at least one memory, e. g., a Random Access Memory (RAM), associated with the array of processing elements.

One limitation of the typical SIMD array processor is that the RAM included therein generally operates at a slower speed than the processing elements of its associated array. For example, when one of the processing elements directly accesses a multi-bit data sample from the RAM, many operating cycles of the processing element may be wasted while the processing element waits for the memory access to complete. To overcome this problem, cache memories are incorporated in the processing elements of some SIMD array processors.

Such cache memories can store duplicate copies of portions of the RAM. Further, because respective cache memories are typically included in the processing elements, the time required by the processing elements to access data from the cache memories is considerably less than that required to access the same data from the RAM.

However, including cache memories in the processing elements of SIMD array processors significantly increases the complexity of the processing elements. This can be problematic because increasing the complexity of the processing elements generally increases the size and cost of the SIMD array processor. Further, merely including cache memories in the processing elements of SIMD array processors to speed-up memory access time fails to

address the data transfer inefficiencies that persist between the RAM and the cache memory.

It would therefore be desirable to have an SIMD array processor that has improved data transfer efficiency between processing elements and associated memories. Such an SIMD array processor would have improved data transfer efficiency without resorting to the use of cache memories.

BRIEF SUMMARY OF THE INVENTION In accordance with the present invention, an SIMD array processor is provided in which data transfer efficiency is enhanced between processing elements and memories included therein. The SIMD array processor includes at least one memory such as a synchronous dynamic random access memory and a plurality of processing elements configured in an array. Each processing element includes at least one"narrow"memory buffer and a plurality of"wide"data registers, wherein the narrow memory buffer is adapted to transfer data between the memory and the plurality of wide data registers. In a preferred embodiment, the memory buffer has a width of one (1) bit and each data register has a width of sixty-four (64) bits to allow bit-serial data transfer between the memory and at least one of the data registers while the processing element performs data processing operations. Each processing element further includes at least one parallel adder adapted to add data stored in wide data registers coupled thereto, and a control circuit adapted to control the memory buffer to transfer a data word stored in a selected wide data

register between the memory and the selected wide data register.

Other features, functions, and aspects of the invention will be evident from the Detailed Description of the Invention that follows.

BRIEF DESCRIPTION OF THE SEVERAL VIEWS OF THE DRAWING The invention will be more fully understood with reference to the following detailed description of the invention in conjunction with the drawings of which : Fig. 1 is a block diagram depicting an SIMD array processor according to the present invention ; Fig. 2 is a block diagram depicting a processing element included in the SIMD array processor of Fig. 1 ; Fig. 3 is a table depicting the contents of ACS, BS, and M registers of a processing element included in the SIMD array processor of Fig. 1, in an illustrative example of a first multiplication operation involving two (2) unsigned integers ; Fig. 4 is a table depicting the contents of ACS, BS, ZS, YS, and M registers of a processing element included in the SIMD array processor of Fig. 1, in an illustrative example of a division operation involving two (2) unsigned integers ; and Fig. 5 is a table depicting the contents of ACS, BS, and M registers of a processing element included in the SIMD array processor of Fig. 1, in an illustrative example of a second multiplication operation involving two (2) unsigned fractions.

DETAILED DESCRIPTION OF THE INVENTION The entire disclosure of U. S. Provisional Patent Application No. 60/161, 587 filed October 26, 1999 is incorporated herein by reference.

Fig. 1 is a block diagram depicting an illustrative embodiment of an SIMD array processor 100 in accordance with the present invention. The SIMD array processor 100 includes a two-dimensional NEWS array of identical Processing Elements (PE's) 104 through 134 communicably coupled to bi-directional Input/Output's (I/0's) 0 through 15 of a Random Access Memory (RAM) 102. In a preferred embodiment, the RAM 102 is implemented as a Synchronous Dynamic RAM (SDRAM).

Although Fig. 1 depicts the SIMD array processor 100 as including the two-dimensional NEWS array of PE's 104 through 134, it should be understood that the SIMD array processor 100 may comprise an array of PE's interconnected by way of any suitable communication network. It should also be understood that the size of the array can be specified to suit the data processing requirements of the target application. In a preferred embodiment, the NEWS array of PE's is implemented on an Application Specific Integrated Circuit (ASIC) comprising an 8 x 8 NEWS array. Fig. 1 depicts the SIMD array processor 100 as including a 4 x 4 NEWS array for purposes of illustration.

As described above, the exemplary SIMD array processor 100 includes a two-dimensional NEWS array of identical PE's 104 through 134. In a preferred embodiment, the PE's 104 through 134 are physically located on an ASIC to form the NEWS array, thereby

simplifying I/O connections with their nearest neighboring PE's in the NEWS array. For example, for the PE 114, a"North"I/O 140 interconnects the PE 112 and the PE 114, an"East"I/O 144 interconnects the PE 114 and the PE 122, a"West"I/O 146 interconnects the PE 106 and the PE 114, and a"South"I/O 142 interconnects the PE 114 and the PE 116. Further, the PE's 104, 106, 108, 110, 112, 118, 120, 126, 128, 130, 132, and 134 that are physically located along the edges of the NEWS array comprise suitable North, East, West, and South I/O's for connecting these PE's with PE's that are physically located on adjacent ASIC's. For example, an array of ASIC's may be implemented on a Printed Circuit Board (PCB) ; and, North, East, West, and South I/O's of PE's physically located along the edges of NEWS arrays of adjacent ASIC's may be suitably interconnected.

In this illustrative embodiment, each of the PE's 104 through 134 is connected to one and only one of the I/0's 0 through 15 of the RAM 102. For example, the PE's 104, 106, 108, and 110 are connected to the I/0's 15, 14, 13, and 12, respectively ; the PE's 112, 114, 116, and 118 are connected to the I/O's 11, 10, 9, and 8, respectively ; the PE's 120, 122, 124, and 126 are connected to the I/O's 7, 6, 5, and 4, respectively ; and, the PE's 128, 130, 132, and 134 are connected to the I/0's 3, 2, 1, and 0, respectively, of the RAM 102. In a preferred embodiment, the PE's 104 through 134 utilize the I/O's 0 through 15 of the RAM 102 to access data in the RAM 102 in a bit-serial fashion.

Those of ordinary skill in this art will appreciate that the SIMD array processor 100 of Fig. 1 may be

incorporated in a processing system including, e. g., a command preprocessor interfaced with a processor controller that provides intermediary processing functions between the command preprocessor and the SIMD array processor 100.

Fig. 2 is a block diagram depicting an illustrative embodiment of a PE 200 in accordance with the present invention. In a preferred embodiment, the PE 200 is representative of a portion of each of the PE's 104 through 134 included in the SIMD array processor 100.

Accordingly, the SIMD array processor 100 preferably includes a plurality of identical PE's such as the representative PE 200 interconnected in the 4 x 4 NEWS array configuration.

In the illustrated embodiment, the PE 200 includes four (4) multi-bit data registers ACS 202, BS 204, YS 210, and ZS 212 ; a memory buffer M 208 ; and, a carry register C 216. In a preferred embodiment, each of the data registers ACS 202, BS 204, YS 210, and ZS 212 is 64- bits wide ; and, each of the memory buffer M 208 and the carry register C 216 is 1-bit wide. It should be appreciated that each of the data registers ACS 202, BS 204, YS 210, and ZS 212 can be used to store, e. g., a floating-point number or a signed/unsigned fixed-point integer. It should also be appreciated that each of the data registers ACS 202, BS 204, YS 210, and ZS 212 can be used as a shift register. For example, the ACS 202 register may be used to shift in single-bit values in a bit-serial fashion from the memory buffer M 208 by way of a line 220. The ACS 202 register may also be used to shift out single-bit values in a bit-serial fashion to

the memory buffer M 208 by way of a line 230. The ACS 202 register may also be used to shift in single-bit values from the 1-bit wide carry register C 216 on a line 228. Further, the YS 210 register may be used to shift in single-bit values in a bit-serial fashion from the memory buffer M 208 on a line 224, and shift out single- bit values to the memory buffer M 208 on a line 226.

Still further, the ZS 212 register may be used to shift in a carry bit generated by a parallel adder 206 on a line 222 by way of an inverter 214, and shift out single- bit values to the memory buffer M 208 on the line 226.

Moreover, the data register ACS 202 may be used to either shift left or shift right the multi-bit values contained therein. Further, each of the data registers BS 204, YS 210, and ZS 212 may be used to shift left the multi-bit values contained therein. The contents of the registers ACS 202, BS 204, M 208, YS 210, ZS 212, and C 216 at each bit position may also be"set" (to one), "cleared" (to zero), or"negated" (two's complemented).

As described above, the PE 200 includes the parallel adder 206, which can be used to add the contents of the ACS 202 and BS 204 registers and store the resulting sum in the ACS 202 register. In the illustrated embodiment, the parallel adder 206 can selectively provide the carry bit generated therein to the carry register C 216 and the inverter 214, which provides the complement of the carry bit to the ZS 212 register. It is noted that the ACS 202 register can load its contents directly, i. e., in parallel, into the BS 204 register.

In this exemplary embodiment, the ZS 212 register can be used as a shift register for, e. g., accumulating a

quotient during execution of a divide operation ; and, the YS 210 register can be used as a shift register for, e. g., accumulating bits representing a previously calculated value in a bit-serial fashion from the RAM 102 when the SIMD array processor 100 executes a conditional operator.

In this illustrative embodiment, a conditional operator having one or more operands stores a result computed by only a subset of the PE's 104 through 134 in the RAM 102. For example, whether or not a result computed by particular PE's 104 through 134 is to be stored in memory may be determined by a Boolean variable having an independent 1-bit value in each of the PE's.

Such a variable may be used to enable the YS 210 register of the PE 200 to provide a previously calculated value stored therein to memory.

In the illustrated embodiment, a conditional operator stores only the final result of an evaluated expression and does not store intermediate results. For example, when evaluating the following expression : a = bec + drue, (1) each of the PE's 104 through 134 may store intermediate results corresponding to"bec"and"de", but only those PE's that are enabled by the above-mentioned 1-bit value to change the value of"a"in memory may store the result corresponding to"bec + dre"in"a". In this case, the two (2) multiply operations, b'c"and"d'e, use unconditional operators ; and, the add operation,"bec + drue", uses a conditional operator. Accordingly, in order

to store the result of"bec + d-e",-each of the PE's 104 through 134 that is not enabled to change the value of "a"in memory reads the previous value of that result from memory and replaces its computed value with the previous value. The PE's 104 through 134 can then all write their respective results to memory without changing the values that are not enabled to change. For example, in the SIMD array of PE's 104 through 134, each of the PE's may read a previous value from memory, but only those PE's that are not enabled to change the previous value replace their respective computed values with the previous value.

Memory activity corresponding to the following exemplary expression : f = g + h (2) in which the add operation,"g + h", uses a conditional operator, therefore includes the following steps : Read g operand.

(3) Read h operand.

(4) Read f operand (previous values).

(5) Write f operand.

(6) It is noted that only those PE's that are not enabled to change the previous"f"value in memory replace their computed"f"values with the previous"f" value before performing step (6), as defined above.

In contrast, memory activity-corresponding to the expression (2) above in which"+"is an unconditional operator includes the following steps : Read g operand.

Read h operand.

(8) Write f operand.

(9) In this case, every one of the PE's writes its computed"f"value to memory in step (9), as defined above.

The PE 200 includes the memory buffer M 208, which preferably comprises a 1-bit wide memory buffer through which all data are transferred between the PE 200 and the RAM 102. In a preferred embodiment, the memory buffer M 208 included in each of the PE's 104 through 134 is connected to one and only one of the 1/0's 0 through 15 of the RAM 102 for accessing a single bit of data during each memory cycle of the RAM 102. For example, a single data bit may be read from one of the I/O's by way of the memory buffer M 208 and provided to the ACS 202 register or the YS 210 register ; and, a single data bit may be provided to the memory buffer M 208 by the ACS 202 register, the YS 210 register, or the ZS 212 register and written to the I/O of the RAM 102.

The embodiments disclosed herein will be better understood with reference to the following illustrative examples. In each of the following examples, it is understood that the operating speed of the PE 200 is twice that of the RAM 102 to allow the PE 200 to perform

two (2) sequential operations on'registers included therein while the RAM 102 either provides a single bit to the memory buffer M 208 or receives a single bit from the memory buffer M 208.

A first example comprises the multiplication of two (2) unsigned, fixed-point, 5-bit integers, e. g.,"A = 5" (i. e.,"AAsAzAiAc = 00101") and"B = 6" (i. e.,"B4B3B2B1Bo = 00110"). In this first example, it is understood that the ACS 202 and BS 204 registers are 5-bit registers, the parallel adder 206 is a 5-bit parallel adder, and the PE 200 includes circuitry configured for addressing a bit- serial column of memory in the RAM 102. For example, binary values representative of the operands"A"and"B" and the resulting product"C" (i. e.,"C = 30"or C4C3C2C1C0 = 11110") may be stored in consecutive locations of the column of memory that the PE can access.

In this first example, Fig. 3 depicts the contents of the ACS 202 and BS 204 registers and the contents of the memory buffer M 208 at the end of each memory cycle of the RAM 102. During the first memory cycle, the RAM 102 provides the bit"A4 = 0" (i. e., the Most Significant Bit (MSB) of the operand"A") to the memory buffer M 208.

Fig. 3 therefore depicts the contents of the memory buffer M 208 as"0", and the respective contents of the ACS 202 and BS 204 registers as"XXXXX"and"XXXXX" ("X" ="don't care") at the end of the first memory cycle.

During the second memory cycle, the PE 200 shifts the contents of the ACS 202 register left by one bit position and loads the vacated bit position with the contents of the memory buffer M 208 ; and, the RAM 102 provides the bit"A3 = 0"to the memory buffer M 208. Fig. 3 therefore

depicts the contents of the memory-buffer M 208 as"0", and the respective contents of the ACS 202 and BS 204 registers as"XXXXO"and"XXXXX"at the end of the second memory cycle. During the third memory cycle, the PE 200 again shifts the contents of the ACS 202 register left by one bit position and loads the vacated bit position with the contents of the memory buffer M 208 ; and, the RAM 102 provides the bit"A2-1"to the memory buffer M 208.

Fig. 3 therefore depicts the contents of the memory buffer M 208 as"1", and the respective contents of the ACS 202 and BS 204 registers as"XXX00"and"XXXXX"at the end of the third memory cycle.

During the fourth memory cycle, the PE 200 shifts the contents of the ACS 202 register left by one bit position and loads the vacated bit position with the contents of the memory buffer M 208 ; and, the RAM 102 provides the bit"A1 = 0"to the memory buffer M 208.

Fig. 3 therefore depicts the contents of the memory buffer M 208 as"0", and the respective contents of the ACS 202 and BS 204 registers as"XX001"and"XXXXX"at the end of the fourth memory cycle. During the fifth memory cycle, the PE 200 again shifts the contents of the ACS 202 register left by one bit position and loads the vacated bit position with the contents of the memory buffer M 208 ; and, the RAM 102 provides the bit"Ao = 1" to the memory buffer M 208. Fig. 3 therefore depicts the contents of the memory buffer M 208 as"1", and the respective contents of the ACS 202 and BS 204 registers as"X0010"and"XXXXX"at the end of the fifth memory cycle. During the sixth memory cycle, the PE 200 shifts the contents of the ACS 202 register left by one bit

position, loads the vacated bit'position with the contents of the memory buffer M 208, and loads the BS 204 register with the contents of the ACS 202 register and clears the ACS 202 register ; and, the RAM 102 provides the bit"B4 = 0" (i. e., the MSB of the operand"B") to the memory buffer M 208. Fig. 3 therefore depicts the contents of the memory buffer M 208 as"0", and the respective contents of the ACS 202 and BS 204 registers as"00000"and"00101"at the end of the sixth memory cycle.

In this first example, operations performed by the PE 200 during each of the seventh through tenth memory cycles are dependent on whether bits of the operand"B" sequentially stored in the memory buffer M 208 are"0"or "1". Specifically, if a"0"is stored in the memory buffer M 208, then the PE 200 shifts the contents of the ACS 202 register left by one bit position and clears the vacated bit position of the ACS 202 register. Otherwise, if a"1"is stored in the memory buffer M 208, then the PE 200 (1) adds the respective contents of the ACS 202 and BS 204 registers and loads the resulting sum into the ACS 202 register, and (2) shifts the contents of the ACS 202 register left by one bit position and clears the vacated bit position.

At the end of the sixth memory cycle, the bit stored in the memory buffer M 208 is"B4B4 0". Accordingly, during the seventh memory cycle, the PE 200 shifts the contents of the ACS 202 register left by one bit position and clears the vacated bit position, while the RAM 102 provides the bit"B3 = 0"to the memory buffer M 208.

Fig. 3 therefore depicts the contents of the memory

buffer M 208 as"0", and the respective contents of the ACS 202 and BS 204 registers as"00000"and"00101"at the end of the seventh memory cycle. During the eighth memory cycle, because the bit stored in the memory buffer M 208 is"B3 = 0", the PE 200 again shifts the contents of the ACS 202 register left by one bit position and clears the vacated bit position, while the RAM 102 provides the bit"B2 = 1"to the memory buffer M 208. Fig. 3 therefore depicts the contents of the memory buffer M 208 as"1", and the respective contents of the ACS 202 and BS 204 registers as"00000"and"00101"at the end of the eighth memory cycle. During the ninth memory cycle, because the bit stored in the memory buffer M 208 is"B2 = 1", the PE 200 (1) adds the respective contents of the ACS 202 and BS 204 registers and loads the resulting sum into the ACS 202 register, and (2) shifts the contents of the ACS 202 register left by one bit position and clears the vacated bit position, while the RAM 102 provides the bit B1 = 1" to the memory buffer M 208. Fig. 3 therefore depicts the contents of the memory buffer M 208 as"1", and the respective contents of the ACS 202 and BS 204 registers as"01010"and"00101"at the end of the ninth memory cycle.

During the tenth memory cycle, because the bit stored in the memory buffer M 208 is B1 = 1", the PE 200 (1) adds the respective contents of the ACS 202 and BS 204 registers and loads the resulting sum into the ACS 202 register, and (2) shifts the contents of the ACS 202 register left by one bit position and clears the vacated bit position, while the RAM 102 provides the bit"Bo = 0" to the memory buffer M 208. Fig. 3 therefore depicts the

contents of the memory buffer M-208 as"0", and the respective contents of the ACS 202 and BS 204 registers as"11110"and"00101"at the end of the tenth memory cycle. During the eleventh memory cycle, because the bit stored in the memory buffer M 208 is"Bo = 0", the respective contents of the ACS 202 and BS 204 registers are not added together. It is noted that the contents of the ACS 202 register at this time is representative of the resulting product"C" (i. e.,"C = 30"or C4C3C2C1C0 = 11110"). The PE 200 then shifts the contents of the ACS 202 register left by one bit position to provide the bit "C4 = 1''to the memory buffer M 208 by way of the line 230. Fig. 3 therefore depicts the contents of the memory buffer M 208 as"1", and the respective contents of the ACS 202 and BS 204 registers as"1110X"and"00101"at the end of the eleventh memory cycle.

During the twelfth memory cycle, the RAM 102 receives the bit"C4 = 1"from the memory buffer M 208 by way of the line 218, and the PE 200 shifts the contents of the ACS 202 register left by one bit position to provide the bit"C3 = 1"to the memory buffer M 208. Fig.

3 therefore depicts the contents of the memory buffer M 208 as"1", and the respective contents of the ACS 202 and BS 204 registers as"110XX"and"XXXXX"at the end of the twelfth memory cycle. During the thirteenth memory cycle, the RAM 102 receives the bit = 1"from the memory buffer M 208, and the PE 200 shifts the contents of the ACS 202 register left by one bit position to provide the bit"C2 = 1"to the memory buffer M 208. Fig.

3 therefore depicts the contents of the memory buffer M 208 as"1", and the respective contents of the ACS 202

and BS 204 registers as"10XXX"and-"XXXXX"at the end of the thirteenth memory cycle. During the fourteenth memory cycle, the RAM 102 receives the bit"C2 = 1"from the memory buffer M 208, and the PE 200 shifts the contents of the ACS 202 register left by one bit position to provide the bit"Ci = 1"to the memory buffer M 208.

Fig. 3 therefore depicts the contents of the memory buffer M 208 as"1", and the respective contents of the ACS 202 and BS 204 registers as"OXXXX"and"XXXXX"at the end of the fourteenth memory cycle. During the fifteenth memory cycle, the RAM 102 receives the bit C1 = 1"from the memory buffer M 208, and the PE 200 shifts the contents of the ACS 202 register left by one bit position to provide the bit"'Co = 0"to the memory buffer M 208. Fig. 3 therefore depicts the contents of the memory buffer M 208 as"0", and the respective contents of the ACS 202 and BS 204 registers as"XXXXX"and "XXXXX"at the end of the fifteenth memory cycle.

Finally, during the sixteenth memory cycle, the RAM 102 receives the bit"Co = 0"from the memory buffer M 208, and the multiplication of the two (2) unsigned, fixed-point, 5-bit integers"A = 5"and"B = 6"to obtain the resulting product"C = 30"is completed. Fig. 3 therefore depicts the contents of the memory buffer M 208 as"X", and the respective contents of the ACS 202 and BS 204 registers as"XXXXX"and"XXXXX"at the end of the sixteenth memory cycle. In this first illustrative example, it should be noted that the process of multiplying the operands"A"and"B"is performed concurrently with the process of reading the operand"B"

from memory during the memory cycles seven (7) through ten (10), as described above.

A second illustrative example comprises performing a divide operation using two (2) unsigned, fixed-point, 4- bit integers, e. g.,"A = 8" (i. e., A3A2A1Ao = 1000") and "B = 3" (i. e., >B3B2B1Bo = 0011"). In this second example, it is understood that the ACS 202 and BS 204 registers are 5-bit registers, the parallel adder 206 is a 5-bit parallel adder, the YS 210 and ZS 212 registers are 4-bit registers, and the PE 200 includes circuitry configured for addressing a bit-serial column of memory in the RAM 102. For example, binary values representative of the operands"A"and"B"and the resulting quotient"C" (i. e.,"C = 2"or"C3C2CICo 0010") may be stored in consecutive locations of the column of memory that the PE can access. It is further understood that the ZS 212 register is used as a shift register for accumulating the resulting quotient"C" ; and, the YS 210 register is used as a shift register for accumulating bits representing a previously calculated quotient"C"'in a bit-serial fashion from the RAM 102. It is noted that this second example for dividing two (2) integers involves a conditional operator.

In this second example, Fig. 4 depicts the contents of the ACS 202, BS 204, YS 210, and ZS 212 registers and the contents of the memory buffer M 208 at the end of each memory cycle of the RAM 102. During the first memory cycle, the RAM 102 provides the bit"B3 = 0" (i. e., the MSB of the operand"B") to the memory buffer M 208, and the PE 200 clears the ACS 202 register. Fig. 4 therefore depicts the contents of the memory buffer M 208

as"0" ; and, the respective contents of the ACS 202, BS 204, ZS 212, and YS 210 registers as"00000","XXXXX", "XXXX", and"XXXX"at the end of the first memory cycle.

During the second memory cycle, the PE 200 shifts the contents of the ACS 202 register left by one bit position and loads the vacated bit position with the contents of the memory buffer M 208 ; and, the RAM 102 provides the bit"B2 = 0"to the memory buffer M 208. Fig. 4 therefore depicts the contents of the memory buffer M 208 as"0" ; and, the respective contents of the ACS 202, BS 204, ZS 212, and YS 210 registers as"00000","XXXXX","XXXX", and"XXXX"at the end of the second memory cycle. During the third memory cycle, the PE 200 shifts the contents of the ACS 202 register left by one bit position and loads the vacated bit position with the contents of the memory buffer M 208 ; and, the RAM 102 provides the bit"Bi = 1" to the memory buffer M 208. Fig. 4 therefore depicts the contents of the memory buffer M 208 as"1" ; and, the respective contents of the ACS 202, BS 204, ZS 212, and YS 210 registers as"00000","XXXXX","XXXX", and"XXXX" at the end of the third memory cycle.

During the fourth memory cycle, the PE 200 shifts the contents of the ACS 202 register left by one bit position and loads the vacated bit position with the contents of the memory buffer M 208 ; and, the RAM 102 provides the bit"Bo = 1"to the memory buffer M 208.

Fig. 4 therefore depicts the contents of the memory buffer M 208 as"1" ; and, the respective contents of the ACS 202, BS 204, ZS 212, and YS 210 registers as"00001", "XXXXX","XXXX", and"XXXX"at the end of the fourth memory cycle.

During the fifth memory cycle,-the PE 200 shifts the contents of the ACS 202 register left by one bit position, loads the vacated bit position with the contents of the memory buffer M 208, and then loads the BS 204 register with the contents of the ACS 202 register and clears the ACS 202 register, while the RAM 102 provides the bit"A3 = 1" (i. e., the MSB of the operand "A") to the memory buffer M 208. Fig. 4 therefore depicts the contents of the memory buffer M 208 as"1"; and, the respective contents of the ACS 202, BS 204, ZS 212, and YS 210 registers as"00000","00011","XXXX", and"XXXX"at the end of the fifth memory cycle. It is noted that at this time, the BS 204 register contains the operand"B" (i. e., 8B3B2B1Bo = 0011"). During the sixth memory cycle, the PE 200 shifts the contents of the ACS 202 register left by one bit position, loads the vacated bit position with the contents of the memory buffer M 208, and negates the contents of the BS 204 register, while the RAM 102 provides the bit"A2 = 0"to the memory buffer M 208. Fig. 4 therefore depicts the contents of the memory buffer M 208 as"0" ; and, the respective contents of the ACS 202, BS 204, ZS 212, and YS 210 registers as"00001","11101","XXXX", and"XXXX"at the end of the sixth memory cycle.

In this second example, operations performed by the PE 200 in each of the seventh through tenth memory cycles are dependent on whether the MSB of the sum of the contents of the ACS 202 and BS 204 registers is equal to the MSB of the contents of the BS 204 register.

Specifically, if the MSB of the sum is equal to the MSB of the contents of the BS 204 register, then the PE 200

negates the contents of the BS 204-register. Otherwise, the contents of the BS 204 register are not negated.

During the seventh memory cycle, the PE 200 adds the respective contents of the ACS 202 and BS 204 registers and loads the resulting sum into the ACS 202 register, provides the MSB of the sum to the inverter 214 to shift the complement of this bit into the ZS 212 register, and then shifts the contents of the ACS 202 register left by one bit position, loads the vacated bit position with the contents of the memory buffer M 208, and negates the contents of the BS 204 register because the MSB of the sum equals the MSB of the contents of the BS 204 register, while the RAM 102 provides the bit A1 = 0"to the memory buffer M 208. Fig. 4 therefore depicts the contents of the memory buffer M 208 as"0" ; and, the respective contents of the ACS 202, BS 204, ZS 212, and YS 210 registers as"11100","00011","XXXO", and"XXXX" at the end of the seventh memory cycle. During the eighth memory cycle, the PE 200 adds the respective contents of the ACS 202 and BS 204 registers and loads the resulting sum into the ACS 202 register, provides the MSB of the sum to the inverter 214 to shift the complement of this bit into the ZS 212 register, and then shifts the contents of the ACS 202 register left by one bit position and loads the vacated bit position with the contents of the memory buffer M 208, while the RAM 102 provides the bit"Ao = 0"to the memory buffer M 208. It is noted that the PE 200 does not negate the contents of the BS 204 register during this memory cycle because the MSB of the sum does not equal the MSB of the contents of the BS 204 register. Fig. 4 therefore depicts the

contents of the memory buffer M 208 as"0"; and, the respective contents of the ACS 202, BS 204, ZS 212, and YS 210 registers as"11110","00011","XX00", and"XXXX" at the end of the eighth memory cycle. During the ninth memory cycle, the PE 200 adds the respective contents of the ACS 202 and BS 204 registers and loads the resulting sum into the ACS 202 register, provides the MSB of the sum to the inverter 214 to shift the complement of this bit into the ZS 212 register, and then shifts the contents of the ACS 202 register left by one bit position and loads the vacated bit position with the contents of the memory buffer M 208, and negates the contents of the BS 204 register because the MSB of the sum equals the MSB of the contents of the BS 204 register, while the RAM 102 provides the bit"C3"' (i. e., the MSB of the previously calculated quotient"C"') to the memory buffer M 208.

Fig. 4 therefore depicts the contents of the memory buffer M 208 as"C3"' ; and, the respective contents of the ACS 202, BS 204, ZS 212, and YS 210 registers as"00010", "11101","X001", and"XXXX"at the end of the ninth memory cycle.

During the tenth memory cycle, the PE 200 adds the respective contents of the ACS 202 and BS 204 registers and loads the resulting sum into the ACS 202 register, provides the MSB of the sum to the inverter 214 to shift the complement of this bit into the ZS 212 register, and then shifts the contents of the YS 210 register left by one bit position and loads the vacated bit position with the contents of the memory buffer M 208, while the RAM 102 provides the bit"C2"' (of the previously calculated quotient"C"') to the memory buffer M 208. Fig. 4

therefore depicts the contents of the memory buffer M 208 as"C2'" ; and, the respective contents of the ACS 202, BS 204, ZS 212, and YS 210 registers as"11111","XXXXX", "0010", and"XXXC3"'at the end of the tenth memory cycle.

It is noted that the contents of the ZS 212 register at this time is representative of the resulting quotient"C" (i. e.,"C = 2"or"C3C2C1Co = 0010"). During the eleventh memory cycle, the PE 200 shifts the contents of the YS 210 register left by one bit position and loads the vacated bit position with the contents of the memory buffer M 208, while the RAM 102 provides the bit C1''' (of the previously calculated quotient"C"') to the memory buffer M 208. Fig. 4 therefore depicts the contents of the memory buffer M 208 as"C1"' ; and, the respective contents of the ACS 202, BS 204, ZS 212, and YS 210 registers as"XXXXX","XXXXX","0010", and"XXC3'C2'"at the end of the eleventh memory cycle.

During the twelfth memory cycle, the PE 200 shifts the contents of the YS 210 register left by one bit position and loads the vacated bit position with the contents of the memory buffer M 208, while the RAM 102 provides the bit"Co"' (of the previously calculated quotient"C"') to the memory buffer M 208. Fig. 4 therefore depicts the contents of the memory buffer M 208 as ; and, the respective contents of the ACS 202, BS 204, ZS 212, and YS 210 registers as"XXXXX","XXXXX", "0010", and"XC3C2Cl"'at the end of the twelfth memory cycle.

As mentioned above, this second example for dividing two (2) integers involves a conditional operator.

Accordingly, operations performed by the PE 200 in each

of the thirteenth through sixteenth memory cycles are dependent on whether the YS 210 register is enabled to provide the previously calculated quotient"C"'to memory. It is noted that if the YS 210 register is so enabled, then the YS 210 register provides"C"'to the memory buffer M 208 by way of the line 226. Otherwise, the ZS 212 register provides the quotient"C"to the memory buffer M 208 by way of the line 226.

During the thirteenth memory cycle, the PE 200 shifts the contents of the YS 210 register left by one bit position and loads the vacated bit position with the contents of the memory buffer M 208. Further, if the YS 210 register is enabled as described above, then the YS 210 register provides"C3"'to the memory buffer M 208.

Otherwise, the ZS 212 register provides the bit"C3 = 0" to the memory buffer M 208 ; and, the PE 200 shifts the contents of the ZS 212 register left by one bit position.

Fig. 4 therefore depicts the contents of the memory buffer M 208 as"0"or"C3"' ; and, the respective contents of the ACS 202, BS 204, ZS 212, and YS 210 registers as "XXXXX","XXXXX","OlOX", and"C3'CZ'Cl'Co"'at the end of the thirteenth memory cycle. During the fourteenth memory cycle, the RAM 102 receives"C3 = 0"or"C3"'from the memory buffer M 208 ; and, the PE 200 shifts the contents of the YS 210 register left by one bit position.

Further, if the YS 210 register is enabled, then the YS 210 register provides"C2"'to the memory buffer M 208.

Otherwise, the ZS 212 register provides the bit"C2 = 0" to the memory buffer M 208 ; and, the PE 200 shifts the contents of the ZS 212 register left by one bit position.

Fig. 4 therefore depicts the contents of the memory

buffer M 208 as"0"or"C2"" ; and, the respective contents of the ACS 202, BS 204, ZS 212, and YS 210 registers as "XXXXX","XXXXX","lOXX", and"C2'C1'Co'X"at the end of the fourteenth memory cycle.

During the fifteenth memory cycle, the RAM 102 receives = 0"or"C2"'from the memory buffer M 208 ; and, the PE 200 shifts the contents of the YS 210 register left by one bit position. Further, if the YS 210 register is enabled, then the YS 210 register provides C1'''to the memory buffer M 208. Otherwise, the ZS 212 register provides the bit = 1"to the memory buffer M 208 ; and, the PE 200 shifts the contents of the ZS 212 register left by one bit position. Fig. 4 therefore depicts the contents of the memory buffer M 208 as ; and, the respective contents of the ACS 202, BS 204, ZS 212, and YS 210 registers as"XXXXX", "XXXXX","OXXX", and"C1'Co'XX"at the end of the fifteenth memory cycle. During the sixteenth memory cycle, the RAM 102 receives"C1 = 1"or"C1"'from the memory buffer M 208 ; and, the PE 200 shifts the contents of the YS 210 register left by one bit position.

Further, if the YS 210 register is enabled, then the YS 210 register provides"Co"'to the memory buffer M 208.

Otherwise, the ZS 212 register provides the bit"Co = 0" to the memory buffer M 208 ; and, the PE 200 shifts the contents of the ZS 212 register left by one bit position.

Fig. 4 therefore depicts the contents of the memory buffer M 208 as"0"or"Co"' ; and, the respective contents of the ACS 202, BS 204, ZS 212, and YS 210 registers as "XXXXX","XXXXX","XXXX", and"Co'XXX"at the end of the sixteenth memory cycle.

Finally, during the seventeenth memory cycle, the RAM 102 receives"C0 = 0"or"Co"'from the memory buffer M 208, and the divide operation involving the two (2) unsigned, fixed-point, 4-bit integers"A = 8"and"B = 3" to obtain the resulting quotient"C = 2"is completed.

Fig. 4 therefore depicts the contents of the memory buffer M 208 as"0"or"Co"' ; and, the respective contents of the ACS 202, BS 204, ZS 212, and YS 210 registers as "XXXXX", "XXXXX", "XXXX", and "XXXX" et the end of the seventeenth memorty cycle. In this second example, it should be noted that the process of dividing the operand "A"by the operand"B"is performed concurrently with the process of reading the operand"A"from memory during the memory cycles five (5) through eight (8) and the process of reading the previously calculated quotient"C'"from memory during the memory cycles nine (9) through twelve (12), as described above.

A third illustrative example comprises multiplying two (2) unsigned, fixed point, 5-bit fractions, e. g.,"A = 31/32" (i. e., 5A4A3A2AlAo l' (l/2) that lo (1/4) + le (1/8) + 1* (1/16) + 1* (1/32) = 31/32) and"B = 17/32" (i. e.,"B4B3B2BiBo = 10001"such that I* (1/2) + 09 (1/4) + Oe (1/8) + 0#(1/16) + le (1/32) = 17/32). In this third example, it is understood that the ACS 202 and BS 204 registers are 5-bit registers, the parallel adder 206 is a 5-bit parallel adder, and the PE 200 includes circuitry configured for addressing a column of memory in the RAM 102. For example, binary values representative of the operands"A"and"B"and the resulting product"C" (i. e.,"C = 1/2"or"C4C3C2CICo = 10000"such that 1* (1/2)

+ 0* (1/4) + 09 (1/8) + Oo (1/16) + 0f (1/32) = 1/2) may be stored in consecutive locations of the column of memory that the PE can access. Although the actual product of operands"A"and"B"is"527/1024", it should be understood that the process of this third example truncates the result to"1/2"because the resulting product"C"comprises only five (5) bits.

In this third example, Fig. 5 depicts the contents of the ACS 202 and BS 204 registers and the contents of the memory buffer M 208 at the end of each memory cycle of the RAM 102. During the first memory cycle, the RAM 102 provides the bit"A4 = 1" (i. e., the MSB of the operand"A") to the memory buffer M 208. Fig. 5 therefore depicts the contents of the memory buffer M 208 as"1", and the respective contents of the ACS 202 and BS 204 registers as"XXXXX"and"XXXXX"at the end of the first memory cycle. During the second memory cycle, the PE 200 shifts the contents of the ACS 202 register left by one bit position and loads the vacated bit position with the contents of the memory buffer M 208 ; and, the RAM 102 provides the bit"A3 = 1"to the memory buffer M 208. Fig. 5 therefore depicts the contents of the memory buffer M 208 as"1", and the respective contents of the ACS 202 and BS 204 registers as"XXXX1"and"XXXXX"at the end of the second memory cycle. During the third memory cycle, the PE 200 shifts the contents of the ACS 202 register left by one bit position and loads the vacated bit position with the contents of the memory buffer M 208 ; and, the RAM 102 provides the bit = 1" to the memory buffer M 208. Fig. 5 therefore depicts the contents of the memory buffer M 208 as"1", and the

respective contents of the ACS 202-and BS 204 registers as"XXX11"and"XXXXX"at the end of the third memory cycle.

During the fourth memory cycle, the PE 200 shifts the contents of the ACS 202 register left by one bit position and loads the vacated bit position with the contents of the memory buffer M 208 ; and, the RAM 102 provides the bit"A1 = 1"to the memory buffer M 208.

Fig. 5 therefore depicts the contents of the memory buffer M 208 as"1", and the respective contents of the ACS 202 and BS 204 registers as"XX111"and"XXXXX"at the end of the fourth memory cycle. During the fifth memory cycle, the PE 200 shifts the contents of the ACS 202 register left by one bit position and loads the vacated bit position with the contents of the memory buffer M 208 ; and, the RAM 102 provides the bit = 1" to the memory buffer M 208. Fig. 5 therefore depicts the contents of the memory buffer M 208 as"1", and the respective contents of the ACS 202 and BS 204 registers as"X1111"and"XXXXX"at the end of the fifth memory cycle. During the sixth memory cycle, the PE 200 shifts the contents of the ACS 202 register left by one bit position, loads the vacated bit position with the contents of the memory buffer M 208, and loads the BS 204 register with the contents of the ACS 202 register and clears the ACS 202 register ; and, the RAM 102 provides the bit 8Bo = 1" (i. e., the LSB of the operand"B") to the memory buffer M 208. In this third example, it is noted that the process of reading the operand"B"from memory is performed in reverse bit order. Fig. 5 therefore depicts the contents of the memory buffer M 208 as"1",

and the respective contents of the ACS 202 and BS 204 registers as"00000"and"11111"at the end of the sixth memory cycle.

In this third example, operations performed by the PE 200 in each of the seventh through eleventh memory cycles are dependent on whether bits of the operand"B" sequentially stored in the memory buffer M 208 are"0"or "1". Specifically, if a"0"is stored in the memory buffer M 208, then the PE 200 clears the C 216 register, and shifts the contents of the ACS 202 register right by one bit position and loads the vacated bit position with the contents of the C 216 register by way of the line 228. Otherwise, if a"1"is stored in the memory buffer M 208, then the PE 200 adds the respective contents of the ACS 202 and BS 204 registers and loads the resulting sum into the ACS 202 register and the resulting"carry bit"into the C 216 register, and then shifts the contents of the ACS 202 register right by one bit position and loads the vacated bit position with the contents of the C 216 register.

At the end of the sixth memory cycle, the bit stored in the memory buffer M 208 is"Bo = 1". Accordingly, during the seventh memory cycle, the PE 200 adds the respective contents of the ACS 202 and BS 204 registers and loads the resulting sum into the ACS 202 register and the resulting carry bit into the C 216 register, and then shifts the contents of the ACS 202 register right by one bit position and loads the vacated bit position with the contents of the C 216 register, while the RAM 102 provides the bit"BI = 0"to the memory buffer M 208.

Fig. 5 therefore depicts the contents of the memory

buffer M 208 as"0", and the respective contents of the ACS 202 and BS 204 registers as"01111"and"11111"at the end of the seventh memory cycle.

The bit stored in the memory buffer M 208 is B1 = 0". Accordingly, during the eighth memory cycle, the PE 200 clears the C 216 register, and shifts the contents of the ACS 202 register right by one bit position and loads the vacated bit position with the contents of the C 216 register, while the RAM 102 provides the bit = 0"to the memory buffer M 208. Fig. 5 therefore depicts the contents of the memory buffer M 208 as"0", and the respective contents of the ACS 202 and BS 204 registers as"00111"and"11111"at the end of the eighth memory cycle.

The bit stored in the memory buffer M 208 is"B2 = 0". Accordingly, during the ninth memory cycle, the PE 200 clears the C 216 register, and shifts the contents of the ACS 202 register right by one bit position and loads the vacated bit position with the contents of the C 216 register, while the RAM 102 provides the bit"B3 = 0"to the memory buffer M 208. Fig. 5 therefore depicts the contents of the memory buffer M 208 as"0", and the respective contents of the ACS 202 and BS 204 registers as"00011"and"11111"at the end of the ninth memory cycle.

The bit stored in the memory buffer M 208 is"B3 = 0". Accordingly, during the tenth memory cycle, the PE 200 clears the C 216 register, and shifts the contents of the ACS 202 register right by one bit position and loads the vacated bit position with the contents of the C 216 register, while the RAM 102 provides the bit = 1"to

the memory buffer M 208. Fig. 5 therefore depicts the contents of the memory buffer M 208 as"1", and the respective contents of the ACS 202 and BS 204 registers as"00001"and"11111"at the end of the tenth memory cycle.

The bit stored in the memory buffer M 208 is"B4 = 1". Accordingly, during the eleventh memory cycle, the PE 200 adds the respective contents of the ACS 202 and BS 204 registers and loads the resulting sum into the ACS 202 register and the resulting carry bit into the C 216 register, and shifts the contents of the ACS 202 register right by one bit position and loads the vacated bit position with the contents of the C 216 register. Fig. 5 therefore depicts the contents of the memory buffer M 208 as"X", and the respective contents of the ACS 202 and BS 204 registers as"10000"and"XXXXX"at the end of the eleventh memory cycle. It is noted that the contents of the ACS 202 register at this time is representative of the resulting product"C" (i. e.,"C = 1/2"or C4C3C2C1C0 = 10000").

During the twelfth memory cycle, the PE 200 shifts the contents of the ACS 202 register left by one bit position to provide the bit"C4 = 1"to the memory buffer M 208 by way of the line 230. Fig. 5 therefore depicts the contents of the memory buffer M 208 as"1", and the respective contents of the ACS 202 and BS 204 registers as"OOOOX"and"XXXXX"at the end of the twelfth memory cycle. During the thirteenth memory cycle, the RAM 102 receives the bit"C4 = 1"from the memory buffer M 208 by way of the line 218, and the PE 200 shifts the contents of the ACS 202 register left by one bit position to

provide the bit"C3 = 0"to the memory buffer M 208. Fig.

5 therefore depicts the contents of the memory buffer M 208 as"0", and the respective contents of the ACS 202 and BS 204 registers as"OOOXX"and"XXXXX"at the end of the thirteenth memory cycle. During the fourteenth memory cycle, the RAM 102 receives the bit = 0"from the memory buffer M 208, and the PE 200 shifts the contents of the ACS 202 register left by one bit position to provide the bit = 0"to the memory buffer M 208.

Fig. 5 therefore depicts the contents of the memory buffer M 208 as"0", and the respective contents of the ACS 202 and BS 204 registers as"OOXXX"and"XXXXX"at the end of the fourteenth memory cycle.

During the fifteenth memory cycle, the RAM 102 receives the bit"C2 = 0"from the memory buffer M 208, and the PE 200 shifts the contents of the ACS 202 register left by one bit position to provide the bit C1 = 0"to the memory buffer M 208. Fig. 5 therefore depicts the contents of the memory buffer M 208 as"0", and the respective contents of the ACS 202 and BS 204 registers as the end of the fifteenth memory cycle. During the sixteenth memory cycle, the RAM 102 receives the bit C1 = 0"from the memory buffer M 208, and the PE 200 shifts the contents of the ACS 202 register left by one bit position to provide the bit"Co = 0"to the memory buffer M 208. Fig. 5 therefore depicts the contents of the memory buffer M 208 as"0", and the respective contents of the ACS 202 and BS 204 registers as"XXXXX"and"XXXXX"at the end of the sixteenth memory cycle.

Finally, during the seventeenth memory cycle, the RAM 102 receives the bit"Co = 0"from the memory buffer M 208, and the multiplication of the two (2) unsigned, fixed-point, 5-bit fractions"A = 31/32"and"B = 17/32" to obtain the resulting product"C = 1/2"is completed.

Fig. 5 therefore depicts the contents of the memory buffer M 208 as"X", and the respective contents of the ACS 202 and BS 204 registers as"XXXXX"and"XXXXX"at the end of the seventeenth memory cycle. In this third illustrative example, it should be noted that the process of multiplying the operands"A"and"B"is performed concurrently with the process of reading the operand"B" from memory during the memory cycles six (6) through ten (10), as described above.

Having described the above embodiments, other alternative embodiments or variations may be made.

Specifically, it was described that each of the PE's 104 through 134 of the SIMD array processor 100 (see Fig. 1) is connected to one and only one of the I/O's 0 through 15 of the RAM 102 to provide 1-bit serial access to data contained therein, and that each of the ACS 202, BS 204, YS 210, and ZS 212 registers of the PE 200 (see Fig. 2) is preferably 64-bits wide. However, it should be understood that the SIMD array processor may alternatively provide n-bit serial access to data stored in memory, and the ACS, BS, YS, and ZS registers of the PE may alternatively be m bits wide, wherein"m"is greater than"n". The memory buffer M of the PE may therefore be n bits wide to provide the n-bit serial data access, and the parallel adder of the PE may have a suitable width for adding in parallel the contents of the

m-bit wide ACS and BS registers. The SIMD array processor of this alternative embodiment provides enhanced data transfer efficiency by performing data processing operations using the m-bit wide ACS, BS, YS, and ZS registers while data is being transferred to (from) memory using the n-bit wide memory buffer M.

Those of ordinary skill in the art should further appreciate that variations to and modification of the above-described SIMD array processor may be made without departing from the inventive concepts disclosed herein.

Accordingly, the present invention should be viewed as limited solely by the scope and spirit of the appended claims.