Abstract:
A programmable digital controller has an address matrix memory (20) and an instruction matrix memory (10). The address memory stores address words each having the address of the first sample and the number of samples in a unique group of samples. Unique groups of samples are sequentially stored in an instruction matrix memory. Each column of the instruction memory has data bits for regenerating an instruction set for controlling any one of many apparatus or processes. Each row of the instruction memory has a sample from each instruction set. In response to an enabling signal, the words from the address memory are sequentially read, interpreted, and the samples from the instruction memory caused to be read and for reconstructing the instruction set.

Description:
TECHNICAL FIELD 
     This invention relates to digital controllers and, more particularly, to digital controllers with matrix memories. 
     BACKGROUND OF THE INVENTION 
     Manufacturing processes, data processing, telephone call connections, and the like, require many repetitious tasks. Furthermore, many different tasks may be simultaneously performed. The instructions for controlling these tasks may be generated, for each use, from sequential machines. Use of sequential machines, however, occasionally gives rise to errors. Consequently, a more reliable apparatus is required for use in telecommunications where there is a high volume of repetitious tasks. 
     SUMMARY OF THE INVENTION 
     A complete cycle of a plurality of instructions for controlling several machines or processes is represented in binary form. Samples are obtained by taking data bits from each instruction. The samples are examined, and repetitious groups of samples are identified. 
     Each unique group of samples is stored sequentially in an instruction matrix memory. Thus, each row in the instruction matrix memory comprises one sample, i.e., one bit, from each of the instructions. Furthermore, each column of the instruction matrix memory comprises bits for one complete instruction set for controlling one of the aforesaid apparatus or processes. Because only unique groups of samples are stored in the instruction matrix memory, some of the groups must be read out more than once. 
     Accordingly, an address matrix memory is used for storing the order in which the aforesaid unique groups of samples are to be read from the instruction matrix memory. The address matrix memory comprises a plurality of words. Each word comprises the location of the first sample of a unique group, in the instruction memory, and the number of samples in the unique group. 
     In response to an enabling signal, a word is read from the address memory. The word is decoded and a pointer indicates the location of the first sample, in the instruction memory, which is then read out. In response to clock signals, the aforesaid pointer is sequentially moved for permitting the remaining samples in the unique group to be read. When the last sample in the unique group has been read from the instruction matrix memory, a pointer associated with the address matrix memory is indexed and the next word is read therefrom. The aforesaid method for reading samples from the instruction matrix memory is repeated until all words have been read from the address matrix memory. 
     Many advantages accrue from the present invention. First, there is an economical use of memory. 
     Second, errors in generating instructions from the use of sequential machines are avoided. Instructions are stored in a read-only-memory (ROM), a programmable read-only-memory (PROM), or an erasable programmable read-only-memory (EPROM). 
     Third, instructions are read by using a programmable matrix memory, thereby introducing flexibility in that the same hardware may be reused by reprogramming. 
    
    
     BRIEF DESCRIPTION OF THE DRAWINGS 
     FIG. 1 shows a plurality of instructions, in analog form, for controlling a plurality of apparatus or processes; 
     FIG. 2 shows the binary form of the instructions in FIG. 1 and the identification of unique groups of samples therein; 
     FIG. 3 shows an instruction matrix memory for storing the unique groups of samples in FIG. 2; 
     FIG. 4 shows a set of address words for reconstructing the instructions in FIG. 1; 
     FIG. 5 shows in binary form the set of address words of FIG. 3; 
     FIG. 6 shows an address matrix memory for storing the set of address words of FIG. 5; 
     FIG. 7 shows a system for using the set of address words of FIG. 4 for reconstructing the instructions of FIG. 1; 
     FIG. 8 shows a simplified version of the system in FIG. 7; and 
     FIG. 9 shows a system comprising a plurality of systems as in FIG. 8. 
    
    
     DETAILED DESCRIPTION 
     Referring to FIG. 1, there is shown a plurality of instructions, C 1  (nT), C 2  (nT), C 3  (nT) . . . C k  (nT), in analog form for a portion of a cycle comprising n time periods, T. 
     Some of the aforesaid instructions may have fewer periods then others. That is, some of the aforesaid instructions may begin after others; and, some of the aforesaid instructions may end before others. The instructions with fewer periods are built-out, by stuffing with zeros (to indicate no activity), so that all instructions are equally long. 
     Referring to FIG. 2, there is shown in binary form the instructions, B 1  (nT), B 2  (nT), B 3  (nT) . . . B k  (nT), corresponding to the aforesaid instructions in analog form of FIG. 1. At each of the n periods, a sample, S, or vector, comprising one binary bit from each of the instructions is observed. Thus, samples S 1 , S 2 , S 3  . . . S n  are observed. Twenty-two such samples, as an example, are shown in FIG. 2. 
     By observing the entire set of samples, unique groups of samples may be seen to be repetitious. Thus, in FIG. 2, group G 1 , comprising samples S 1  and S 2 , is observed again as comprising samples S 5  and S 6 . Likewise, groups G 2 , G 3 , G 4  and G 5  are repetitious in the twenty-two samples shown in FIG. 2. It is necessary then to store the samples in each unique group only once. In order to generate or to reconstruct the instruction set, however, it is necessary to know the order in which each group of samples is to be read from storage, the location of the first sample in each group, and the number of samples in each group. 
     Referring to FIG. 2 again, there is shown the group length, i.e., the number of samples in each group, the location of the first sample in each group for retrieval from memory, and the order in which each group of samples is to be read from memory. 
     Referring to FIG. 3, there is shown a matrix memory 10 for storing the instruction set. Sample S 1  is stored in row 0 and Sample S 2  in row 1. Thus, the samples in unique group G 1  are stored in rows 0 and 1. As stated hereinabove, group G 1  also comprises samples S 5  and S 6 . Instead of storing samples S 5  and S 6  again, they will be generated by rereading samples S 1  and S 2 , respectively, thereby achieving economical use of memory space. 
     The remaining groups G 2 , G 3 , G 4  . . . are likewise stored (sequentially) in the instruction matrix memory 10. Each column of instruction memory 10 has stored therein the bits for regenerating the instruction for controlling any one process or apparatus. When the instructions are read from instruction memory 10, an entire row of bits is read; that is, one bit from each column of instructions is read. 
     Accurate regeneration of the instructions of FIG. 2, however, requires that the order for reading the rows of bits from instruction memory 10 be stored. Referring briefly to FIG. 2, there is shown the order in which each group of samples is to be read. A program for reading out the groups is then constructed and stored. 
     Referring to FIG. 4, there is shown a set of address words 1(0,2), 2(2,2), 3(0,2) . . . 11(6,1) necessary for reading the twenty-two samples from the six unique groups. Address word 1(0,2) indicates that row 0 should be read from the instruction matrix memory 10 in FIG. 3. The 2 in word 1(0,2) indicates that two rows should be read: row 0 and row 1 in FIG. 3. 
     Likewise, address word 2(2,2) indicates that row 2 in FIG. 3 should be read; and, two rows should be read. Word 3(0,2) indicates that row 0, in FIG. 3, should be read; and, two rows should be read. Because word 3(0,2) refers to samples S 5  and S 6  of FIG. 2, and because S 5  and S 6  are identical to S 1  and S 2 , respectively, rows 0 and 1 are read again after the rows corresponding to word 2(2,2) are read. All the remaining address words are likewise accessed for reading the rows from instruction matrix memory 10 in FIG. 3. 
     Referring to FIG. 5, there is shown in binary form the set of address words of FIG. 4 suitable for storage in an address matrix memory. 
     Such an address matrix memory 20 is shown in FIG. 6. Referring to FIG. 6, there is shown stored in row 0 of address matrix memory 20 the address word 1(0,2) in binary form. The first three bits `000` indicate the location of the first sample S 1  to be read from the instruction matrix memory 10 of FIG. 3. The next two bits &#34;10&#34; indicate that two samples, S 1  and S 2 , are to be read from the instruction matrix memory 10 of FIG. 3. Whereas only five bits, &#34;00010&#34;, are shown as being stored in each row of the address memory of 20 of FIG. 6, it is merely illustrative as other longer or shorter codes may be stored for other applications. 
     The remaining address words 2(2,2), 3(0,2), 4(4,2) . . . 11(6,1) . . . are likewise stored in successive rows of the address memory 20 of FIG. 6. 
     Referring to FIG. 7, there is shown a system for generating the instructions of FIG. 2 for controlling a plurality of apparatus or processes. There is shown a write lead 21 connected to address memory 20 for enabling address words to be entered therein through leads 23. By a similar mechanism, the unique groups of samples are entered in the instruction matrix memory 10. 
     In response to an enabling signal on read lead 25, an address word, for example, 1(0,2), is read from the address memory 20. The row or location, 0, or `000` in binary form, of the sample, S 1 , to be read from instruction memory 10 is transferred on leads 27 from address memory 20 to a binary counter 30. At the same time, the number 2, or `10` in binary form, of rows of samples to be read from instruction memory 10 is transferred on leads 29 from address memory 20 to binary counter 32. Binary counter 32 is a variable modulo q counter, where q is determined by the maximum number of rows to be read in any of the aforesaid groups of samples. 
     Simultaneously with the read signal on lead 25, a run signal lead 31 is enabled. In synchronization with clock signals on lead 33, a pulse is passed through the AND gate 34 to AND gate 36 and to binary counter 32. In response to the pulse from AND gate 34, the modulo q binary counter 32 is indexed by one and a pulse is transmitted on lead 35 to AND gate 36. Because of the pulse from AND gate 34 on lead 37, the pulse on lead 35 is passed on lead 39 through AND gate 36 to counter 30 for entering the aforesaid row location from the address memory 20 and for passing the row location to decoder 38. 
     At decoder 38, the row location is decoded and pointer 41 is moved to the location of the row to be read. Thereafter, the row is read out from instruction memory 10 on leads 43 for controlling the plurality of apparatus or processes. 
     In response to each subsequent clock pulse through AND gate 34, counter 32 is indexed and a pulse generated for transmission to counter 30. In response thereto, counter 30 is indexed, i.e., the row number is changed to the next and passed to the decoder 38. The pointer 41, thus, is sequentially moved to the next row and its contents read. 
     When modulo q binary counter 32 has a count which equals the preset number q, in addition to the aforesaid pulse being transmitted to the counter 30 a pulse is transmitted through OR gate 40 to the binary counter 42. With each pulse from OR gate 40, the counter 42 is indexed by one. The number stored in counter 42 represents the row of address memory 20, from which the address word is to be read. After the counter 42 is indexed by one and the number stored therein, the number is transmitted to decoder 44 for moving pointer 45 to the location of the address word to be read. By the aforesaid method, the entire contents of the address memory 20 is read out therefrom, one address word at a time. For each address word, a corresponding group of samples is read from instruction memory 10. Thus, the entire set of control instructions of FIG. 2 is reconstructed. 
     As stated hereinabove with reference to FIG. 2, unique groups of samples that were repetitious were identified and each unique group was stored in instruction memory 10. Where, however, no unique groups are identified, each and every sample is stored by the method described hereinabove. 
     Referring to FIG. 8, there is shown a binary counter 50 for receiving clock pulses on lead 51, for increasing the counted number by one with each clock pulse, and for transmitting the number counted, in response to each of the aforesaid clock pulses, on address leads 53 to decoder 52. In response to each number received from counter 50, decoder 52 causes pointer 55 to be moved sequentially from one row to the next of instruction memory 54. Thus, the control instructions stored in the instruction memory 54 are sequentially read out onto leads 57. Because each row of instruction memory 54 is read sequentially, there is no need for an address memory. 
     Referring to FIG. 9, there is shown a system using a plurality of instruction memories 60,62, each memory storing samples as in FIG. 8. Memories 60,62, however, comprise instructions for controlling different processes or apparatus, i.e., memory 62 is not a duplicate of memory 60. In response to clock pulses on lead 61, binary counter 64 is indexed by one. The indexed number stored in counter 64 is gated onto leads 63 to decoders 66,68 simultaneously, thereby permitting instruction memories 60,62 to be addressed by pointers 65,67, respectively. Thus, the contents of each row of instructions in memories 60,62 are sequentially read out onto leads 69,71, respectively. 
     In response to a chip select code on leads 73, selector 70 identifies the instruction memory to be read. By this method, the control instructions are staggered.