Abstract:
A finite state machine has outputs variable between a finite number of logical outputs states. A clock provides a clock signal having clock pulses, with a frequency, to the state machine. A functional circuit determines the logical output states of the state machine based on state inputs to the functional circuit. A variable timer is coupled to the clock and the functional circuit. The variable timer controls the duration of each logical output state to adjust for changes in the clock frequency based on timing parameters provided to the variable timer. The variable timer varies a number of clock pulses corresponding to each logical output state so the duration of each logical output state remains within a predetermined time limit.

Description:
BACKGROUND OF THE INVENTION 
     The present invention deals with a state machine. More particularly, the present invention deals with a state machine which provides an interface between first and second bus systems in a computer system. 
     A computer system typically has a number of components or devices. The components are coupled to one another through busses. A bus, along with the particular component or components supported by the bus, are collectively referred to as a bus environment. Various bus environments in a computer system serve as connection points for the components in the system so that the components can communicate with one another, or so that one component can access or manipulate another component. 
     However, it is common that different components have different communication systems or protocols. Thus, the different components need different bus environments to support them in communication with other components. 
     As an example, a typical computer system has a processor device (or several processor devices) and input/output (I/O) devices. The processor runs on a processor clock. Therefore, the processor bus environment runs on a time system based on the processor clock. A typical processor bus is defined or specified by the manufacturer or designer of the processor device. For example, the output signals from a processor device step through a certain cycle when performing a read operation on I/O devices. The logical state of the output signals, as well as the timing of those logical states are specified by the manufacturer or designer of the processor device. The processor is typically connected to a processor bus and the I/O devices are typically connected to an I/O bus. 
     However, the I/O devices are not synchronous with the processor clock and the I/O bus therefore runs on a different time system, other than the processor clock. Further, the logical output states provided by the controller to perform a certain operation may be incompatible, both logically and temporally, with the I/O bus specification. Thus, there is a need to facilitate communication between the processor bus environment and the I/O bus environment so that the processor device can manipulate or communicate with the I/O devices. A circuit which facilitates communication between the two bus environments is typically referred to as a bus interface circuit. 
     In addition, another aspect of computer systems magnifies the communication problem addressed by a bus interface circuit. Processor specifications have historically been a moving target. In other words, processor designers improve both the functional and speed performance features of the processor with each new generation of processor device. Therefore, with each new generation of processor device, it is typical for a processor bus to have new specifications making the new processor incompatible with previous bus interface circuitry. 
     Specifically, new processors may contain two types of changes over previous processors. The first is a functional change. If the processor is functionally different than the previous processor, the functional definition of the output signals, or control signals, which are provided from the processor during any given cycle (e.g. a read cycle) are different than they were in the previous generation processor. The output signals simply have different logical output states which define a read cycle. It is evident that such a change requires redesign of the bus interface circuitry responsible for providing the communication link between the processor bus environment and I/O bus environment. 
     The second type of change which may be made to the processor is a change in the timing or the speed at which the processor operates. It is very common for a new generation of processor to operate at higher speeds than the preceding processor. The problem with such a speed or timing change, in the context of the example in which a processor is coupled to I/O devices such as memory devices, is that the bus interface circuitry is typically designed to optimize the performance of the processor in accessing the I/O devices at the particular speed at which the processor runs. To accomplish this, the bus interface-circuitry is typically synchronized with the processor clock. Therefore, when the speed of the processor clock increases or changes, the interface circuitry (if it is even capable of accommodating the faster or slower operation) tracks the processor clock resulting in a corresponding speed or timing change in the output from the bus interface circuitry. Such a change in speed causes the bus interface circuitry to be incompatible with the I/O bus characteristics. 
     While new generation processors typically change in both speed and function, there are usually no corresponding changes to the I/O bus environment. Unlike the processor bus environment, the I/O bus environment has timing and functional characteristics that do not change (or change quite minimally) over a long period of time. Such a stable I/O bus specification is valuable to the end user of the system because as long as the new generation processors have bus interface circuits which make the new generation processors compatible with the stable I/O bus specification, the end user can upgrade a processor system without incurring the cost of changing all I/O devices. Instead, the end user can use the same I/O devices on a wide a variety of processor systems. Such a feature saves expense because the end user can buy I/O devices in greater quantity, the I/O devices can be used in a wide variety of systems, and the I/O devices will not become incompatible with new processor bus environments. 
     Given the fact that the I/O bus is typically a static design target in that it does not change over many years, and given the fact that the processor bus does change with each new generation of processor, the bus interface circuitry has to change because it is typically synchronously coupled to the processor bus environment. Any significant functional or timing change in the processor therefore renders previous bus interface circuitry unusable with later generation processors. This is true even though the I/O bus specification remains the same. 
     The reason the bus interface circuitry is relatively inflexible is due to the traditional design of the bus interface circuitry. It is typically designed as a synchronous state machine which specifically relates to the speed of the processor clock. Thus, when the speed of the synchronous processor clock changes, the logical and timing operation of the bus interface circuitry changes. 
     One method used in the past in an attempt to solve the problem of providing communication between the relatively fixed specification for the I/O bus environment and an ever changing processor bus environment was adaptation of functional state machine equations to accommodate several speeds of processor clock. However, this task proved to be very complicated. Further, the logical outputs were still specific to the particular clock speeds chosen by the designer. The root of the problem was that in an efficient state machine, no distinction was made between the logical functions which are accomplished and the timing associated with those functions. 
     In short, simply running the processor clock faster resulted in the outputs provided to the I/O bus from the interface circuitry also being faster. However, the I/O bus control signals are specified with specific timing parameters which are not, in any way, related to the processor clock. By increasing the speed at which the output signals from the bus interface circuitry are provided at the I/O bus, the output signals from the bus interface circuitry move outside the specification of timing parameters for the I/O bus and therefore the interface circuitry becomes incompatible with the I/O bus and needs to be redesigned. 
     Therefore, there is a need for bus interface circuitry which remains compatible with the I/O bus specifications regardless of the speed at which the processor is operating. Such a mechanism would save both time and money previously spent in redesigning bus interface circuitry to properly interface the I/O bus environment with the rapidly changing processor bus environment. 
     SUMMARY OF THE INVENTION 
     In the present invention, a finite state machine has outputs variable between a finite number of logical output states. Clock means provides a clock signal, having clock pulses with a frequency, to the state machine. Functional circuit means determines the logical output states based on state inputs to the functional circuit means. Variable timing means is coupled to the clock means and the functional circuit means. The variable timing means controls the duration of each logical output state to adjust for changes in the clock frequency based on timing parameters provided to the variable timing means. The variable timing means varies the number of clock pulses corresponding to each logical output state so the duration of each logical output state remains within a predetermined time limit associated with each logical output state. 
    
    
     BRIEF DESCRIPTION OF THE DRAWINGS 
     FIG. 1 is block diagram of a computer system. 
     FIG. 2 is a block diagram of a typical state machine. 
     FIG. 2A is a timing diagram associated with a typical bus interface circuit. 
     FIG. 3 is a timing diagram associated with a bus interface circuit having a 20 ns processor clock. 
     FIG. 4 is a timing diagram associated with a bus interface circuit of the present invention. 
     FIG. 5 is a block diagram of a bus interface circuit of the present invention. 
     FIG. 6 is a block diagram of the timing controller shown in FIG. 5. 
    
    
     DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS 
     1. Overview 
     FIG. 1 shows a typical computer system 10 which includes a number of master devices 12, 14, and 16, associated with a number of slave devices 18, 20, and 22. Master devices 12, 14, and 16, as well as slave devices 18, 20, and 22, are coupled to bus 24. Bus 24 provides means by which the master devices communicate with one another, and with the slave devices. 
     In the embodiment shown in FIG. 1, each of the master devices 12, 14, and 16 include a processor 26, processor bus 28, interface circuit 30, and clock 32. Processor 26 is typically any type of microprocessor used in a computer system. Processor bus 28 is a bus which is specified for operation with processor 26 and which is used by processor 26 to communicate with other devices or components in computer system 10. Processor 26 and bus 28 are synchronous with one another and are driven by processor clock 32. Processor 26 provides, through processor bus 28, signals such as control signals, address signals, and data signals along signal paths indicated by lines 34, 36, and 38. 
     In this preferred embodiment, slave devices 18, 20, and 22 contain memory devices which provide storage capacity for the processors in master devices 12, 14, and 16. It should be noted that slave devices 18, 20 and 22 can be any type of slave devices. However, memory devices are commonly used in computer systems such as system 10. Therefore, memory devices, being preferred slave devices, are chosen for illustrative purposes. Thus, the memory devices which comprise slave devices 18, 20, and 22 are accessed and manipulated by master devices 12, 14, and 16. Processor 26 provides signals, through bus 28, to bus interface circuit 30 along signal paths 34, 36, and 38. Bus interface circuit 30, in turn, provides signals to bus 24 along signal paths 46, 48, and 50. Bus 24 provides the signals (which may comprise address, data and control signals) to the memory devices of slave device 18 along signal paths represented by lines 40, 42, and 44. Also, slave device 18 provides return signals (such as data and timing signals) to processor 26 via bus 24, interface circuit 30. 
     The memory devices in slave device 18 are typically not synchronous with processor 26 or processor bus 28 because the memory devices are not driven by processor clock 32. Therefore, bus 24, which in this embodiment is referred to as an input/output (I/O) bus is not synchronous with processor bus 28. 
     In fact, I/O bus 24 typically has specifications for timing and functional control which are vastly different than, and therefore incompatible with, signals provided by processor bus 28 along signal paths 34, 36, and 38. The specifications for I/O bus 24 are commonly set out in a written specification provided by the manufacturer or designer of I/O bus 24. Therefore, bus interface circuit 30 is provided to facilitate communication between processor bus 28 and I/O bus 24. 
     Interface circuit 30 accepts at its input the control, address, and data signals along paths 34, 36, and 38 from processor bus 28. Further, interface circuit 30 accepts at its input a clock signal from clock 32. In response to the instructions received from processor 26, through processor bus 28, interface circuit 30 provides outputs which follow the logical and timing cycle specified for I/O bus 24 in the written specification provided by the manufacturer or designer of I/O bus 24. Interface circuit 30 provides these outputs along signal paths 46, 48, and 50, respectively. 
     For example, when processor 26 needs to access a certain portion of the memory in slave device 18, processor 26 provides a data request (e.g. signals requesting that a read cycle be performed on the memory devices in slave device 18), through processor bus 28, to bus interface circuit 30. Since processor 26 is driven by processor clock 32, and since I/O bus 24 is not synchronous with clock 32, the data request provided to bus interface circuit 30 is, in all likelihood, incompatible with I/O bus 24. Therefore, bus interface circuit 30 converts the data request from processor bus 28 into a read cycle compatible with bus 24. The read cycle is provided, through bus 24, to the memory devices on slave device 18 to access data from those memory devices. 
     Bus interface circuit 30 provides the read cycle at its outputs in the form of a plurality of logical output states. The duration of each logical output state on the outputs of bus interface circuit 30 is timed properly so that the read cycle meets the logical and temporal specifications for I/O bus 24. While the function of bus interface circuit 30 has been described with reference to a read cycle, the function of providing communication between processor bus 28 and I/O bus 24 is performed by bus interface circuit 30 for any number of desired operations including write operations. 
     2. Prior Art Bus Interface Circuits 
     In the past, interface circuits such as bus interface circuit 30 were designed in the form of a state machine to convert processor requests into output cycles based on a clock signal having a given frequency. A variety of prior art state machines are described in some detail in An Engineering Approach To Digital Design, pp. 290-295, by William I. Fletcher published M80 by Prentice-Hall, Inc. of Englewood Cliffs, N.J. 07632. Those pages are hereby incorporated by reference. 
     FIG. 2 shows one example of a prior art bus interface circuit 52. The state machine of prior art bus interface circuits included combinational logic 54 and output register 56. The processor request would be provided to combinational logic 54. Based on the processor request, combinational logic 54 would provide a logical output to output register 56. Output register 56 would, in turn, be clocked by processor clock 24 and the outputs from combinational logic 54 would be provided through output register 56 as the logical outputs to I/O bus 24. The logical outputs would also be fed back to combinational logic 54 to determine the next logical output state to be provided to I/O bus 24. On the next processor clock pulse, the new logical output state would be clocked through output register 56 to I/O bus 24. 
     By using bus interface circuit 52, the logical output states provided to I/O bus 24 were directly tied to the processor clock frequency of processor 32. While combinational logic 54 can be designed to accommodate the frequency of processor clock 32, if that frequency changed, combinational logic 54 would need to be redesigned to accommodate the new processor clock frequency. This concept can be further illustrated using timing diagrams. 
     FIG. 2A is a timing diagram associated with bus interface circuit 52 shown in FIG. 2. The clock period of the processor clock is 40 ns. FIG. 3 is a timing diagram associated with bus interface circuit 52 where the clock period is 20 ns. In FIG. 2A a processor request is initiated by processor 26. The processor request is generically indicated by a Request signal which lasts for two clock pulses. The Request signal is asserted high and begins with the rising edge of the first clock pulse and ends with the rising edge of the third clock pulse. A typical processor request may involve more than one signal. However, for the sake of clarity, the processor request shown in FIG. 2A is represented by a single signal. 
     In response to the processor Request signal, bus interface circuit 52 provides three output signals. Those signals include a Status Strobe signal, an Address Strobe signal, and a Command Strobe signal. The required logical state of the three outputs in order to perform a read cycle is specified by the specification for I/O bus 24. The specification ensures that the three signals reach the memory devices in slave device 18 in the proper state and with proper timing in order the achieve the desired request from processor 26. Thus, combinational logic 54 is designed to provide the three outputs as shown in FIG. 2A. The Status Strobe goes high (becomes asserted) with the rising edge of the fourth clock pulse. The Address Strobe signal goes high with the rising edge of the fifth clock pulse and goes low (becomes de-asserted) with the rising edge of the sixth clock pulse. The Command Strobe signal goes high with the rising edge of the seventh clock pulse. Finally, the Status Strobe returns to a logic low level with the rising edge of the eighth clock pulse. 
     Typically, a specification which defines I/O bus 24 provides that the Status Strobe, Address Strobe, and Command Strobe signals must be provided in the appropriate logical states within a minimum or maximum time period. The time period is entirely unrelated to the period of the processor clock signal. For example, a typical specification defining I/O bus 24 would state that the Address Strobe signal can only become asserted (go to a logic high level) at least 40 ns after the Status Strobe becomes asserted. Then, the Address Strobe must become de-asserted at least 80 ns before the Status Strobe becomes de-asserted. In addition, the specification defining I/O bus 24 would typically state that the Command Strobe must become asserted at least 40 ns prior to the time that the Status Strobe becomes de-asserted. Based on such specifications, combinational logic 54 is designed so that when processor 26 requests such a cycle, the output signals from the bus interface circuitry 52 are provided at the appropriate logic levels and at the appropriate times given the period of the processor clock signal. 
     However, if a new generation of processor chip is manufactured, and the new chip runs twice as fast as the old processor chip (i.e., the processor clock has a period of 20 ns), the new chip would not work with the old bus interface circuit 52. The result of using the new processor with the old bus interface circuit 52 is illustrated by the timing diagram shown in FIG. 3. In essence, since combinational logic 54 is designed for a given processor clock period, all of the output signals move through the desired cycle twice as fast since the processor clock is twice as fast. 
     In other words, the Status Strobe signal still becomes asserted with the rising edge of the fourth clock pulse and de-asserted with the rising edge of the eighth clock pulse. In addition, the Address Strobe signal still becomes asserted with the rising edge of the fifth clock pulse and becomes de-asserted with rising edge of the sixth clock pulse. Finally, the Command Strobe still becomes asserted with the rising edge of the seventh clock pulse. Even though the three signals are still controlled by the same clock pulse, they violate the specification for I/O bus 24. The Address Strobe, for example, becomes asserted 20 ns after the Status Strobe signal became asserted. This violates the minimum time separation between the two signals specified as 40 ns. The same is true for the other timing specifications which define I/O bus 24. Therefore, prior art bus interface circuit 52 no longer works with the new generation processor and the bus interface circuit must be redesigned. 
     3. The Present Bus Interface Circuit 
     a. The Output Cycle 
     The present invention overcomes the problems associated with changing processor specifications and relatively static I/O bus specifications. The present invention recognizes that the functional or logical output state of the signals from bus interface circuit 30 are separable from the timing aspects of the logical output states. 
     Depending upon the type of access which processor 26 is trying to gain to the slave devices, or depending on the type of manipulation which processor 26 is attempting, the outputs of bus interface circuit 30 must cycle through a plurality of logical states. Each logical state must exist for a duration of time specified by the specification for I/O bus 24. Such a sequential cycle of outputs from bus interface circuit 30 can be referred to generically as an output cycle, and may specifically be a read operation (or read cycle) or a write operation or any type of communicative cycle. 
     Each specific cycle can be broken into a finite number of states in which the output signals must exist. For example, FIG. 4 is a timing diagram showing three signals which are designated, for the sake of simplicity, as control signal A, control signal B, and control signal C. If, for example, during a read cycle, control signals A, B, and C must go through the output cycle shown in FIG. 4 in order to accomplish the desired task, then such a cycle can be broken into seven logical output states. The seven logical output states are indicated in FIG. 4 as output states 0-6. 
     In state 6, all of control signals A, B, and C are in a de-asserted (i.e., logic low) position. In state 5, control signal A becomes asserted and control signals B and C are still de-asserted. In state 4, control signals A and B are asserted but control signal C remains de-asserted. In state 3, all three control signals A, B, and C are asserted. In state 2, control signals A and C are asserted while control signal B is de-asserted. In state 1, control signal A is asserted and control signals B and C are de-asserted. Finally, in state 0, all three signals return to the de-asserted position. 
     While the control signals shown in FIG. 4 are labeled A, B, and C, and while the specific communicative duty which they perform is not specified, it will be understood that such signals could be any signals required by I/O bus 24 to accomplish any manipulative or communicative task. For the sake of simplicity, the cycle shown in FIG. 4 will simply be referred to as an output cycle. Any desired cycle can be similarly broken down into a plurality of states in the same manner. 
     b. Functional Block Diagram of Bus Interface Circuit 30 
     The present invention recognizes that, not only can an output cycle be broken down into a finite number of logical output states, each state has a required duration. The duration is specified by the specification for I/O bus 24. 
     The present invention separates bus interface circuit 30 into one portion which determines the desired logical output states for the output cycle requested by processor 26, and a second portion which assigns a number of clock pulses to each logical output state to achieve the desired duration for each state, and to thereby achieve proper timing for I/O bus 24. This is indicated more clearly in FIG. 5. 
     FIG. 5 shows a more detailed block diagram of bus interface circuit 30 shown in FIG. 1. Bus interface circuit 30 of the present invention includes processor request interpreter 58, logical controller 60, timing controller 62, timing parameter register 64, and output register 66. 
     In operation, bus interface circuit 30 is initialized prior to undertaking any requests from processor 26. During initialization, timing parameter register 64 is provided with timing data which is indicative of the period of the processor clock 32 being used with the specific type of processor 26 installed in master device 12. 
     After initialization, and when processor 26 desires to perform some operation requiring communication with, for example, slave device 18, processor 26 provides a processor request signal to processor request interpreter 58 through processor bus 28. Based on the request received from processor 26, processor request interpreter 58 provides a cycle input signal to logical controller 60 and timing controller 62. This is indicated by arrows 68 and 70. The cycle input signal indicates to logical controller 60 and timing controller 62 the desired output cycle which bus interface circuit 30 is to provide to I/O bus 24. Based on the cycle input signal, logical controller 60 determines which logical output states are required at the output of bus interface circuit 30. Timing controller 62 determines the duration that each logical output state in the desired output cycle must have in order to meet the specification for I/O bus 24. 
     Based on the timing parameter signals received from timing parameter register 64, and based on the specific output cycle being executed by bus interface circuit 30, timing controller 62 provides control signals to logical controller 60. This is indicated by arrow 72. The control signals provided by timing controller 62 control logical controller 60 so that logical controller 60 only provides the next logical output state of the output cycle to output register 66 after the current logical output state has been in place for a desired minimum duration. In essence, based on the particular output cycle being executed, and based on the timing data received from timing parameter register 64, timing controller 62 provides control signals (indicated by arrow 72) to logical controller 60 which cause an adequate number of pulses of the processor clock 32 to be assigned to each logical output state from logical controller 60 so that the output cycle provided to I/O bus 24 meets the specification requirements of I/O bus 24. 
     The signals provided by timing controller 62 are hereinafter referred to as intermediate state signals. The intermediate state signals are also provided to processor request interpreter 58. This is indicated by arrow 74. Based on the intermediate state signals received from timing controller 62, processor request interpreter 58 indicates to processor 26, through processor bus 28, when the desired output cycle has been completed. Processor request interpreter 58 then awaits another processor request from processor 26. This &#34;handshaking&#34; is indicated by arrow 76. 
     Output register 66 is also provided. Output register 66 synchronizes the output of logical controller 60 in order to avoid glitches or spurious signal anomalies being provided to I/O bus 24. 
     In addition, bus interface circuit 30 also receives return signals from I/O bus 24. This is indicated by arrow 71 and dashed arrow 73. The return signals typically include information representative of a condition of slave device 18. The return signals are provided to logical controller 60 to modify subsequent functional behavior of bus interface circuit 30 to achieve appropriate handshaking with I/O bus 24 and slave device 18. The return signals may also be provided to timing controller 62 to modify subsequent timing behavior of bus interface circuit 30. 
     c. Timing Controller 62 
     FIG. 6 shows a more detailed block diagram of one embodiment of timing controller 62. Timing controller 62 includes microcounter 78, macrocounter 80, and multiplexor 82. Macrocounter 80 has, as its input, the cycle input signal from processor request interpreter 58. The output of macrocounter 80 provides the intermediate state signals to logical controller 60 and to processor request interpreter 58. The intermediate state signals are also provided to the select input of multiplexor 82. This is indicated by arrow 84. Multiplexor 82 has, at its input, the timing parameters from timing parameter register 64 shown in FIG. 5. Multiplexor 82 provides, at its output, the inputs selected by the intermediate state signals provided by macrocounter 80. The output of multiplexor 82 is provided to the input of microcounter 78. The count enable input of microcounter 78 is coupled to the output of processor request interpreter 58. Microcounter 78 also has a zero output which indicates when it has reached a zero count. The zero output of microcounter 78 is provided to the count enable input of macrocounter 80 and is also fed back to the load enable input of microcounter 78. 
     In operation, macrocounter 80 is initially loaded, based on the cycle input from processor request interpreter 58, with a number which represents the total number of logical output states that exist in the requested cycle. For instance, with the output cycle shown by the timing diagram in FIG. 4, there are a total of seven logical output states. Thus, if processor 26 requests an operation requiring the output cycle shown in FIG. 4, macrocounter 80 is loaded to the number 6. 
     Based on the total number of states loaded into macrocounter 80, multiplexor 82 selects from a number of timing parameters provided by timing parameter register 64. Those timing parameters represent the total number of clock pulses of the processor clock (PCLK) which must be assigned to logical output state number 6 in the output cycle in order for that state to obtain its minimum duration. Since microcounter 78 initially contains the number zero, its zero output enables it to be loaded with the information provided at the input of microcounter 78. The number of clock pulses which must be assigned to state 6 is consequently loaded into microcounter 78. 
     Referring, for example, to FIGS. 4 and 6, if the processor clock has a 40 ns period, macrocounter 80 is first loaded to the number 6 since there are a total of 7 states in the requested output cycle. The output of macrocounter 80 is provided to the select input of multiplexor 82. Since the timing parameters in timing parameter register 64 are provided based on the period of the processor clock, the output of macrocounter 80 selects the number 2 from the timing parameter inputs to multiplexor 82 because in order to meet the timing specifications shown in FIG. 4, three 40 ns clock pulses must be assigned to state 6 of the desired output cycle. Thus, microcounter 78 is loaded to the number 2. 
     The output of macrocounter 80 is provided, in turn, to logical controller 60. Based on the output of macrocounter 80, logical controller 60 provides, at its output, three logical low signals on control signal lines A, B, and C. The output from processor request interpreter 58 provides an enable signal to the count enable input of microcounter 78. Thus, with the next clock pulse, microcounter 78 begins to count down with each count of PCLK. When microcounter 78 counts from 2 to 0 (after 120 ns) the zero output of microcounter 78 enables macrocounter 80 to count down. With the next clock pulse on PCLK, macrocounter 80 counts from 6 to 5. 
     With the new output of macrocounter 80 being 5, logical controller 60 provides a new logical output state where control signal A is asserted (in a logical high position) and control signals B and C are de-asserted. Also, the outputs of macrocounter 80 select a new set of timing parameters from timing parameter register 64 at multiplexor 82. Since the zero output from microcounter 78 now enables microcounter 78 to be loaded, the new timing parameters are loaded into microcounter 78. The new timing parameters are the number 1, since two 40 ns clock pulses must be assigned to state 5, and microcounter 78 is loaded to the number 1. As microcounter 78 counts from 1 to 0 with each count of PCLK (after 80 ns) the zero output of microcounter 78 again enables macrocounter 80 to decrement by one count. Thus, the new output of macrocounter 80 decrements to 4. 
     The new output is provided to logical controller 60 which provides a new logical output state (control signals A and B high and control signal C low) to output register 66. The output of macrocounter 80 also selects new timing parameters from timing parameter register 64 through multiplexor 82. The new timing parameters correspond to the fourth state in the desired output cycle and are therefore the number 5. Thus, the number 5 is loaded into microcounter 78. Microcounter 78 then begins to count down with each count of PCLK. After microcounter 78 reaches 0 (after 240 ns) the zero output of microcounter 78 again enables macrocounter 80 to decrement by 1 count. 
     This process continues throughout the entire seven states in the output cycle until the entire output cycle is completed. Once the output cycle is completed, the intermediate state signals provided by macrocounter 80 to processor request interpreter 58 cause processor request interpreter 58 to initiate a handshake signal 76 with processor 26 through processor bus 28. This indicates to processor 26 that the desired output cycle has been completed and that a new request can be initiated. 
     Bus interface circuit 30 operates identically no matter what the period of the processor clock 32. The only things which change are the timing parameters loaded into timing parameter register 64 upon initialization of the system. 
     For example, FIG. 4 also shows the necessary timing parameters if the processor clock has a 20 ns period. To accomplish the identical output cycle as that accomplished with a processor having a clock with a 40 ns period, the timing parameters simply need to be doubled. Thus, rather than requiring microcounter 78 to count three clock pulses in logical output state 6, microcounter 78 must count 6 clock pulses before allowing logical controller 60 to change states. Further, microcounter 78 must count 4 clock pulses rather than 2 while the outputs are in logical output state 5. Rather than counting 6 clock pulses in state 4, microcounter 78 must count 12 pulses, and so on. Thus, timing parameter register 64 must simply be loaded with the proper values based on the speed of clock 32. 
     It should be noted that the examples given in the present specification are primarily illustrative. Thus, while FIG. 6 shows two interleaved counters (microcounter 78 and macrocounter 80) and one multiplexor (multiplexor 82) it may be necessary in some implementations, with a large number of output cycles, to have a larger number of nested counters. In addition, several multiplexors may be needed to implement any specific application. Also, while the embodiment of timing controller 62, shown in FIG. 6, includes counters and a multiplexor, timing controller 62 could be implemented using a variety of other means including programmable array logic. 
     Logical controller 60, in the preferred embodiment, is a memory device wherein the cycle input signal provides a portion of the address to the memory device and the intermediate state signals from timing controller 62 provide the remainder of the address signals. Logical controller 60 can be a read only type memory (ROM) or it can be a random access type memory (RAM). The advantages of having a RAM device are that the functional equations provided by logical controller 60 can then be rewritten upon each initialization of the system. This essentially provides a universal type system where not only the timing parameters can be changed whenever desired, but the functional equations provided at the output of the bus interface circuitry can also be changed as desired. Such a system is highly flexible and can be adapted to accommodate not only changes in processor speed and function, but also changes in the speed and function of the I/O bus. 
     4. Conclusion 
     The present invention substantially overcomes the problems associated with communication between a processor bus environment, which changes both functionally and temporally quite often, and an I/O bus environment, which is typically defined by a non-changing specification. The present invention separates the logical and temporal functions of the bus interface circuit so that timing can be changed to accommodate substantially any clock frequency. All that needs to be done is program the appropriate timing parameters into a register upon initialization of the system. The present invention also provides a system which can be programmed, with each initialization, to accommodate changes in logical function. Logical controller 60 can be a dynamic device which is programmable with different functional equations upon each initialization system. Thus, the present invention provides a highly flexible and universal-type system which essentially eliminates the time and cost associated with redesigning bus interface circuitry each time changes are made to either the processor bus environment, or the slave bus environment. 
     Although the present invention has been described with reference to preferred embodiments, workers skilled in the art will recognize that changes may be made in form and detail without departing from the spirit and scope of the invention.