Asynchronous processors
AssigneeCalifornia Institute of Technology
InventorsA. J. Martin, S. M. Burns
Life of this patent
Estimating the term…
Abstract
An asynchronous and delay-insensitive data processor comprises a plurality of components communicating with each other and synchronizing their activities by communication actions on channels and buses. Each component consists of a control part and a data part. All control parts are implemented with a lazy-active-passive handshake protocol and a sequencing means called a left/right buffer that provides the minimal sequencing constraints on the signals involved. The data parts comprise novel asynchronous ALU, buses, and registers. The control parts and data parts are connected together in an asynchronous and delay-insensitive manner.
Claims42
A process performed by an asynchronous processor using a plurality of acknowledge/receive handshake communication actions which are control handshakes between pairs of elements of said processor, said communication actions being taken in lieu of a synchronous clock signal so that said asynchronous processor is independent of any synchronous clock signal, said processor comprising an instruction fetcher and a program counter maintaining a current program count pc, said instruction fetcher being in communication with said program counter and with an instruction memory containing a sequence of instructions to be executed by said processor, said process comprising:
- (A) an instruction fetching operation comprising:
- (1) upon completion of a first handshake communication action between said instruction fetching operation and said program counter to indicate that a current operation should be carried out, fetching a current instruction from said instruction memory at a memory location corresponding to a current value of said program count pc in response to said first handshake, and completing a second handshake communication action thereafter with said program counter without a clock signal;
- (B) a program count process performed by said program counter comprising:
- (1) upon completion of said first handshake communication action, computing an incremented program count from said program count without a clock signal, and
- (2) upon completion of said second handshake communication action, replacing said program count with said incremented program count without a clock signal.
An asynchronous processing apparatus, comprising:
- a fetching module operating to fetch a instruction to be executed from an instruction memory, and to produce an instruction output indicating an instruction to be executed;
- an execution module, operating based on the instruction output from said fetching module, to decode the instruction produced by the fetching module, to produce parameters indicative of how the instruction decoded by the fetching module should be used;
- a plurality of other processing modules, each module carrying out a processing operation, and each module operating independently and without a common clock, all of said other processing modules commonly connected to at least first and second parameter buses and at least one result bus, said other processing modules including:
- (A) at least two registers;
- (B) an arithmetic unit, which operates based on values that are supplied from said first and second registers on said first and second parameter buses to form a result which is communicated to said result bus;
- and
- (C) a memory unit, which carries out memory fetch operations using values supplied from and to said first and second registers,
- wherein each of said plurality of modules including components operates asynchronously relative to one another, without a common clock therebetween, said modules each including a first element, operating by evaluating input information to detect whether valid information is present as a beginning of an information cycle, to operate on the valid information during its information cycle and to prepare a confirmation when the operation is complete, lack of valid data being detected as an end of an information cycle.
An asynchronous processing apparatus, comprising:
- a fetching module operating to fetch a instruction to be executed from an instruction memory, and to produce an instruction output indicating an instruction to be executed;
- an execution module, operating based on the instruction output from said fetching module, to decode the instruction produced by the fetching module, to produce parameters indicative of how the instruction decoded by the fetching module should be used;
- a plurality of other processing modules, each module carrying out a processing operation, and each module operating independently and without a common clock, all of said other processing modules commonly connected to at least first and second parameter buses and at least one result bus, said other processing modules including:
- (A) at least two registers;
- (B) an arithmetic unit, which operates based on values that are supplied from said first and second registers on said first and second parameter buses to form a result which is communicated to said result bus;
- and
- (C) a memory unit, which carries out memory fetch operations using values supplied from and to said first and second registers,
- wherein each of said plurality of modules including components operates asynchronously relative to one another, without a common clock therebetween, said modules each including a first element, operating by evaluating input information to detect whether valid information is present as a beginning of an information cycle, to operate on the valid information during its information cycle and to prepare a confirmation when the operation is complete, lack of valid data being detected as an end of an information cycle;
- each of said plurality of units being divided into two separated and communicating parts:
- a control part and a data part, each control part including elements which sequence action to determine when valid data is present and to provide an indication that processing is complete, and each said data part carrying ies out data manipulation of the valid data so received,
- wherein said data part includes a completion detection circuit, an output of said completion detection circuit driving an element in said control circuit which sends a confirmation that a current process is completed.
An asynchronous processing apparatus, comprising:
- a fetching module, operating to fetch an instruction to be executed from an instruction memory to produce an instruction output indicating an instruction to be executed;
- an execution module, operating based on an instruction output of said fetching module, to decode the object of the fetching module to produce parameters indicative of how the instruction from said fetching module should be used;
- a plurality of other processing modules, each module carrying out an operation for processing, and each module operating independently and without any common clock, each module receiving in parallel at least first and second parameter buses, and at least one other result bus, said modules including:
- (A) at least first and second registers;
- (B) an arithmetic logic unit, which operates on values that are supplied from said first and second registers, and
- C) a memory unit, which carries out memory fetch operations using values supplied to and from said first and second registers, each of said plurality of modules including an information part, controlling operation asynchronously relative to other modules without a common clock therebetween, each module operating to detect whether valid data is present as a beginning of an information cycle to appropriately operate on the valid data during its information cycle, and
- (D) a confirmation element, operating to send a confirmation that a current operation is complete, and to detect lack of valid data as an end of information cycle,
- wherein said execution module includes an element which investigates a particular instruction output to determine a module which is needed to execute said particular instruction, determines registers to be used by said module, said execution module defining functions of those registers according to a function which is needed by said module, said module using said registers according to said functions.
An asynchronous processing apparatus, comprising:
- a fetching module, operating to fetch a instruction to be executed from an instruction memory;
- an execution module, operating based on an output of said fetching module, to decode the object of the fetching module, to produce parameters indicative of how the instruction decoded by the fetching module should be used;
- a plurality of modules, each module carrying out an operation for processing, and each module operating independently and without any common clock, each module receiving in parallel at least first and second parameter buses, and at least one other result bus, said modules including:
- (A) at least two registers;
- (B) an arithmetic logic unit, which operates on values that are supplied to and from said first and second registers, and a memory unit, which carries out memory fetch operations using values supplied from and to said first and second registers, each of said plurality of units operating asynchronously relative to one another, without a common clock therebetween, and each unit including an information part operating to detect whether valid data is present, to appropriately operate on the valid data during its information cycle, to send a confirmation that the operation is complete;
- and wherein the command decoded by the execution unit includes an index which selects one of said buses for exclusive use with a register whose address is indicated by said index.
An asynchronous processor, comprising:
- first and second processes which communicate with one another, said first process comprising a control part which sequences actions within the process and a data part which manipulates data within the process, said data part including at least an element for carrying out an operation on values in registers;
- said control part in said first process including a handshake line which goes to a predetermined state to command action from said second process, said control part and said second process receiving said predetermined state, and producing a first signal indicative thereof, said data part in said second process receiving said first signal as an enable signal, said data part in said second unit including an element which produces an output that can be recognized as an invalid state when said enable is not active, and, when said enable is brought active, changes said invalid state into a valid state, said valid state being sent to said data part of said first process,
- said data part of said first process receiving said valid state, decoding said valid state to remove the data therefrom, and passing the data therefrom to another element, an indication of said data being valid also being sent to said control part of said first unit which removes said handshaking signal, which causes said control part of said second unit to change state which removes the enable from said data part of said second unit thereby unenabling said second unit and causing an invalid output therefrom to indicate that no data is present thereon.
An asynchronous processing apparatus, comprising:
- a fetching module operating to fetch a instruction to be executed from an instruction memory, and to produce an instruction output indicating an instruction to be executed;
- an execution module, operating based on the instruction output from said fetching module, to decode the instruction produced by the fetching module, to produce parameters indicative of how the instruction decoded by the fetching module should be used;
- a plurality of other processing modules, each module carrying out a processing operation, and each module operating independently and without a common clock, all of said other processing modules commonly connected to at least first and second parameter buses and at least one result bus, said other processing modules including:
- (A) at least two registers;
- (B) an arithmetic unit, which operates based on values that are supplied from said first and second registers on said first and second parameter buses to form a result which is communicated to said result bus;
- and
- (C) a memory unit, which carries out memory fetch operations using values supplied from and to said first and second registers,
- wherein each of said plurality of modules including components operates asynchronously relative to one another, without a common clock therebetween
- X and Y buses, commonly connected to all of said modules, said execution module interpreting said command and assigning two processes to each bus, one process being a register and the other being a module.
An asynchronous processing apparatus, comprising:
- a fetching module operating to fetch a instruction to be executed from an instruction memory, and to produce an instruction output indicating an instruction to be executed;
- an execution module, operating based on the instruction output from said fetching module, to decode the instruction produced by the fetching module, to produce parameters indicative of how the instruction decoded by the fetching module should be used;
- a plurality of other processing modules, each module carrying out a processing operation, and each module operating independently and without a common clock, all of said other processing modules commonly connected to at least first and second parameter buses and at least one result bus, said other processing modules including:
- (A) at least two registers;
- (B) an arithmetic unit, which operates based on values that are supplied from said first and second registers on said first and second parameter buses to form a result which is communicated to said result bus;
- and
- (C) a memory unit, which carries out memory fetch operations using values supplied from and to said first and second registers,
- wherein each of said plurality of modules including components operates asynchronously relative to one another, without a common clock therebetween
- said execution module interpreting said command and determining registers and buses which will be used to execute said command, said execution module including an allocation function of allocating registers and buses for predetermined functions, and reserving said registers and buses, said command sent to a module to carry out said command, said module always using X and Y buses to obtain said information.
An asynchronous processing apparatus, comprising:
- a fetching module operating to fetch a instruction to be executed from an instruction memory, and to produce an instruction output indicating an instruction to be executed;
- an execution module, operating based on the instruction output from said fetching module, to decode the instruction produced by the fetching module, to produce parameters indicative of how the instruction decoded by the fetching module should be used;
- a plurality of other processing modules, each module carrying out a processing operation, and each module operating independently and without a common clock, all of said other processing modules commonly connected to at least first and second parameter buses and at least one result bus, said other processing modules including:
- (A) at least two registers;
- (B) an arithmetic unit, which operates based on values that are supplied from said first and second registers on said first and second parameter buses to form a result which is communicated to said result bus;
- and
- (C) a memory unit, which carries out memory fetch operations using values supplied from and to said first and second registers,
- wherein each of said plurality of modules including components operates asynchronously relative to one another, without a common clock therebetween
- said execution module interpreting said command and determining registers and buses which will be used to execute said command, said execution module including an allocation function of allocating registers and buses for predetermined functions, and reserving said registers and buses, said command sent to a module to carry out said command, said module always using X and Y buses to obtain said information,
- wherein said data part includes a completion detection circuit, an output of said completion detection circuit driving an element in said control circuit which sends a confirmation that a current process is completed.
An asynchronous processing apparatus, comprising:
- a fetching module operating to fetch a instruction to be executed from an instruction memory, and to produce an instruction output indicating an instruction to be executed;
- an execution module, operating based on the instruction output from said fetching module, to decode the instruction produced by the fetching module, to produce parameters indicative of how the instruction decoded by the fetching module should be used;
- a plurality of other processing modules, each module carrying out a processing operation, and each module operating independently and without a common clock, all of said other processing modules commonly connected to at least first and second parameter buses and at least one result bus, said other processing modules including:
- (A) at least two registers;
- (B) an arithmetic unit, which operates based on values that are supplied from said first and second registers on said first and second parameter buses to form a result which is communicated to said result bus;
- and
- (C) a memory unit, which carries out memory fetch operations using values supplied from and to said first and second registers,
- wherein each of said plurality of modules including components operates asynchronously relative to one another, without a common clock therebetween, said execution module decoding and creating a selection action for a predetermined bus, a communication on said predetermined bus occurring at the same time as said selection action, each selection action being a guarded command which excludes in time other guarded commands, to ensure that said bus carries out only one of said selection actions at any one time.
An asynchronous processing apparatus, comprising:
- a fetching module operating to fetch a instruction to be executed from an instruction memory, and to produce an instruction output indicating an instruction to be executed;
- an execution module, operating based on the instruction output from said fetching module, to decode the instruction produced by the fetching module, to produce parameters indicative of how the instruction decoded by the fetching module should be used, wherein said execution module includes a command line for a particular bus, said particular bus being reserved for a register whose index has a predetermined relationship with a field and a command;
- a plurality of other processing modules, each module carrying out a processing operation, and each module operating independently and without a common clock, all of said other processing modules commonly connected to at least first and second parameter buses and at least one result bus, said other processing modules including:
- (A) at least two registers;
- (B) an arithmetic unit, which operates based on values that are supplied from said first and second registers on said first and second parameter buses to form a result which is communicated to said result bus;
- and
- (C) a memory unit, which carries out memory fetch operations using values supplied from and to said first and second registers,
- wherein each of said plurality of modules including components operates asynchronously relative to one another, without a common clock therebetween, said execution module decoding and creating a selection action for a predetermined bus, a communication on said predetermined bus occurring at the same time as said selection action, each selection action being a guarded command which excludes in time other guarded commands, to ensure that said bus carries out only one of said selection actions at any one time.
A method of sharing registers in an asynchronous processing system, comprising:
- obtaining an instruction from a program memory;
- decoding said instruction into a form which can be used by an execution module;
- determining a second, consecutive instruction;
- determining if uses of a first register during said first instruction could interfere with use of the register during the second instruction;
- setting a variable to a true state when the register is selected for writing;
- setting the variable back to a false state after the register has been used for writing;
- and
- blocking subsequent selection of the register until the writing is complete.
A method of operating a processor without a clock, comprising:
- providing a pair of wires between a first part of the processor and a second part of the processor;
- initially, leaving said wires in a state relative to one another which represents invalid data;
- changing the state of said wires to represent valid data, said state representing a request for action from the second part of the processor;
- the second part of the processor changing the state of another one of the wires to indicate from an invalid state to a first state to indicate that the command has been received, said first part of the processor then changing the state of the first set of wires to a different, valid state;
- said second processor completing the operation and changing said second wire to a second state, different from the first state of the second wire;
- said first part of the processor receiving said second state, recognizing that said second state signals a completion, and, in response to said completion, bringing said first wires back to the invalid state;
- and
- said second processor recognizing the invalid state, and responding by bringing said second set of wires to the invalid state.
A method of operating a processor without a clock, comprising:
- providing a pair of wires between a first part of the processor and a second part of the processor;
- initially, leaving said wires in a state relative to one another which represents invalid data;
- changing the state of said wires to represent valid data, said state representing a request for action from the second part of the processor;
- the second part of the processor changing the state of another one of the wires to indicate from an invalid state to a first state to indicate that the command has been received, said first part of the processor then changing the state of the first set of wires to a different, valid state;
- said second processor completing the operation and changing said second wire to a second state, different from the first state of the second wire;
- said first part of the processor receiving said second state, recognizing that said second state signals a completion, and, in response to said completion, bringing said first wires back to the invalid state;
- and
- said second processor recognizing the invalid state, and responding by bringing said second set of wires to the invalid state,
- wherein said wires use a four-phase return to zero protocol.
An asynchronous processing apparatus, comprising:
- a fetching module operating to fetch a instruction to be executed from an instruction memory, and to produce an instruction output indicating an instruction to be executed;
- an execution module, operating based on the instruction output from said fetching module, to decode the instruction produced by the fetching module, to produce parameters indicative of how the instruction decoded by the fetching module should be used;
- a plurality of other processing modules, each module carrying out a processing operation, and each module operating independently and without a common clock, all of said other processing modules commonly connected to at least first and second parameter buses and at least one result bus, said other processing modules including:
- (A) at least two registers;
- (B) an arithmetic unit, which operates based on values that are supplied from said first and second registers on said first and second parameter buses to form a result which is communicated to said result bus;
- and
- (C) a memory unit, which carries out memory fetch operations using values supplied from and to said first and second registers,
- wherein each of said plurality of modules including components operates asynchronously relative to one another, without a common clock therebetween
- wherein said modules are connected to one another by a communication channel which allows communicating at least true, false and invalid, said executing module communicating with said other modules by first requesting an operation via a first valid value, receiving an indication that the first valid value has been received via second valid value, receiving an indication that the operation has been completed via a second valid value, and acknowledging that the operation has been completed by using an invalid value.
A method of operating an asynchronous processor, comprising:
- fetching an instruction to be executed from an instruction memory;
- operating on the fetched instruction and decoding the instruction to produce parameters indicative of how the decoded instruction should be used;
- said parameters including at least an indication of a module among at least an arithmetic logic unit module and a memory module which will execute the instruction, and an indication of parameters to be used by an executing module;
- reserving first and second buses to transmit the parameters from the registers to the executing module;
- and
- reserving a third bus to transmit the parameters from the executing module to another register, wherein buses are used without arbitration since the buses have been reserved.
A method of operating an asynchronous processor, comprising:
- fetching an instruction to be executed from an instruction memory;
- operating on the fetched instruction and decoding the instruction to produce parameters indicative of how the decoded instruction should be used;
- said parameters including at least an indication of a module among at least an arithmetic logic unit module and a memory module which will execute the instruction, and an indication of parameters to be used by the executing module;
- reserving first and second buses to transmit the parameters from the registers to the executing module;
- and
- reserving a third bus to transmit the parameters from the executing unit to another register, wherein buses are used without arbitration since the buses have been reserved,
- wherein the executing module communicates to the receiving module by issuing a request by changing an invalid state signal into a valid state signal to request an operation, and recognizing an invalid state as an end of an operation cycle.
An asynchronous processing apparatus, comprising:
- a fetching module operating to fetch a instruction to be executed from an instruction memory, and to produce an instruction output indicating an instruction to be executed;
- an execution module, operating based on the instruction output from said fetching module, to decode the instruction produced by the fetching module, to produce parameters indicative of how the instruction decoded by the fetching module should be used;
- a plurality of other processing modules, each module carrying out a processing operation, and each module operating independently and without a common clock, all of said other processing modules commonly connected to at least first and second parameter buses and at least one result bus, said other processing modules including:
- (A) at least two registers;
- (B) an arithmetic unit, which operates based on values that are supplied from said first and second registers on said first and second parameter buses to form a result which is communicated to said result bus;
- and
- (C) a memory unit, which carries out memory fetch operations using values supplied from and to said first and second registers,
- first, second and third buses, and a bus allocation device, reserving the first and second buses to transmit the parameters from the registers to the executing module and reserving a third bus to transmit the parameters from the executing unit to another register, wherein buses are used without arbitration since the buses have been reserved.
A method of operating an asynchronous processor, comprising:
- fetching an instruction to be executed from an instruction memory;
- operating on the fetched instruction and decoding the instruction to produce parameters indicative of how the decoded instruction should be used;
- said parameters including at least an indication of a module among at least an arithmetic logic unit module and a memory module which will execute the instruction, and an indication of parameters to be used by the executing module;
- reserving first and second buses to transmit the parameters from the registers to the executing module;
- and
- reserving a third bus to transmit the parameters from the executing unit to another register, wherein buses are used without arbitration since the buses have been reserved,
- wherein the executing module communicates to the receiving module by issuing a request by changing an invalid state signal into a valid state signal to request an operation, and recognizing an invalid state as an end of an operation cycle.
An asynchronous processing apparatus, comprising:
- a fetching module operating to fetch a instruction to be executed from an instruction memory, and to produce an instruction output indicating an instruction to be executed;
- an execution module, operating based on the instruction output from said fetching module, to decode the instruction produced by the fetching module, to produce parameters indicative of how the instruction decoded by the fetching module should be used;
- a plurality of other processing modules, each module carrying out a processing operation, and each module operating independently and without a common clock, all of said other processing modules commonly connected to at least first and second parameter buses and at least one result bus, said other processing modules including:
- (A) at least two registers;
- (B) an arithmetic unit, which operates based on values that are supplied from said first and second registers on said first and second parameter buses to form a result which is communicated to said result bus;
- and
- (C) a memory unit, which carries out memory fetch operations using values supplied from and to said first and second registers,
- wherein each of said plurality of modules including components operates asynchronously relative to one another, without a common clock therebetween, wherein each module includes a valid/invalid logic therein, said module operating by detecting a request for information as a transition from an invalid signal to a valid signal, said units receive information from said valid signals, and an end of the information period being signalled by a return to an invalid signal.
Dependencies are inferred from the claim text.