Abstract:
An apparatus and method for controlling the stopping of the clock signal utilized by the processing unit of a computer system comprises the use of a novel external pin which can be enabled to initiate a sequence of events that results in the halting of the internal clock signal. The invention includes a microcode engine that responds to the/assertion of the external pin by executing a sequence of steps which stops the current instruction on an instruction boundary. A logic circuit then generates a signal that masks the clock signal produced by the system&#39;s phase-locked loop. An interrupt mechanism is also utilized to prioritize the occurrence of the external signal among other system interrupts. The interrupt mechanism insures that the processor never has its clock stopped in the middle of a bus cycle.

Description:
This is a continuation of application Ser. No. 08/534,575 filed Sep. 27, 1995, now U.S. Pat. No. 5,657,483, which is a continuation of application Ser. No. 07/970,576 filed Nov. 3, 1992, now U.S. Pat. No. 5,473,767. 
    
    
     FIELD OF THE INVENTION 
     The present invention relates to the field of computers and computer systems. More specifically, the invention relates to features incorporated within a computer system or within a microprocessor for controlling clocking signals. 
     BACKGROUND OF THE INVENTION 
     The related technologies of computer and microcomputer design have made incredible advances in the past several decades. New architectural ideas combined with advances in integrated circuit technology have created a series of machines which achieve remarkable performance results. 
     One way that computer architects and designers can further improve the performance of their machines is by creating an apparatus or mechanism for stopping a processor regardless of the current instruction it is executed. Stopping a processors operation is useful, for example, when testing the state of the processor. One of the problems that has plagued previous technologies is that a processors state could only be tested, and therefore guaranteed to be valid, when the internal clock signal was stopped and certain predetermined conditions were satisfied. By way of example, such conditions usually occurred during a HALT state or during an input/output (I/O) read. under these conditions, the processor&#39;s state was known, so that the processor could be tested at that point. The problem with this prior art approach, however, is obvious; namely, that testing a processor only when a certain number of predetermined conditions are satisfied is highly impractical. 
     The alternative to stopping a processor on predetermined conditions is to stop the processor asynchronously by disabling the externally-generated signal used as a reference to generate the internal clock rate of the device. The drawback to stopping the processor asynchronously in this manner is that the processing unit is very often in the middle of executing one of its instruction. In the middle of an instruction or micro-instruction, both internal and external buses are precharged. Stopping the processor in the middle of a bus cycle discharges the bus, with the result being a complete loss of the information being transferred. 
     Another problem with asynchronously disabling the external reference frequency generator involves the fact that most microprocessors and computer systems utilize a phase-locked loop (PLL) circuit to multiply the reference frequency by some factor to generate the system&#39;s internal clock rate. The internal clock signal is utilized by the central processing unit (CPU) of the computer during the execution of its various functions and instructions. The problem arises that if the clock is stopped externally, then the internal phase-locked loop circuitry is likewise disabled. Under such circumstances, reenabling the external reference frequency does not produce an instantaneous response from the PLL; that is, the PLL requires some fixed time period (e.g., several hundred milliseconds) to stabilize. During this start-up time period, spurious signals and glitches are commonly generated, leading to unpredictable results. Thus, starting and stopping of the processor&#39;s clock by disabling the external reference input frequency results in a loss of psuedo-instantaneous response. 
     What is needed then is a means for stopping the CPU&#39;s clock at any time, regardless of the instruction that the processor is presently executing, while guaranteeing that the processor is in a known state. As will be seen, the present invention allows the user to stop the clock of a processor within a computer system asynchronously, while still guaranteeing that the state of the processor is preserved. Guaranteeing the processors environment just previous to stopping the processor&#39;s clock allows the device to be tested in a manufacturing environment. Another advantage of the present invention is that the processor can be re-enabled without having to restart the system&#39;s PLL circuitry. This obviates the need to otherwise wait an inordinate length of time for a stable clock signal to be generated. 
     SUMMARY OF THE INVENTION 
     A computer system which includes a processor as described. The invention covers an apparatus and method of controlling the stopping of the clock utilized by a central processing unit (CPU) of a computer system. While stopping of the clock, the invention also guarantees the state of the processor. 
     In one embodiment, the invention comprises the use of a novel external pin which can be enabled to initiate a sequence of events that results in the halting of the internal clock signal coupled to the CPU. 
     In one embodiment, the invention includes a microcode engine coupled to receive the signal provided by the external pin. In response, the microcode engine then executes a sequence of steps which stops the execution of the current instruction on an instruction boundary. The external pin is also coupled to a logic circuit which generates a signal that masks the CPU&#39;s clock. An interrupt mechanism is also utilized to prioritize the occurrence of the external stop --  clock signal among other system interrupts. The interrupt mechanism insures that the processor never has its clock stopped in the middle of a bus cycle. 
     One of the added benefits of the present invention is that is may be utilized to emulate the division of the clock (e.g., divide by 2,4 etc.) by throttling the clock signal on for a given time, and then off for another time period. This has a number of advantages. First, the PLL that generates the internal clock does not need to be modified to allow the division of clock cycles. This means that the present invention allows stopping and starting of the clock function without alteration of the system&#39;s phase-lock loop circuitry. 
     Furthermore, the present invention makes bus designs across multiple time domains much easier; that is, going from the local CPU bus to a standard frequency bus (e.g., like an 8 Mhz ISA bus) is greatly simplified. This result is achieved because of two primary reasons. First, because the clock is stopped on instruction boundaries, bus cycles are never accidentally extended. This means that slave logic coupled to the processor&#39;s bus need not be designed in a way that comprehends master extended bus cycles. The second reason simply has to do with the fact that the processor&#39;s bus always operates at the same frequency. In prior art designs where the processor&#39;s clock signal was divided, as opposed to being throttled, logic coupled to the processor&#39;s bus had to comprehend not only the processor&#39;s maximum frequency, but all potential divided clock frequencies as well. On the other hand, devices coupled to a throttled processor&#39;s bus only see bus cycles occurring at the maximum frequency. 
     Another advantage of the invention is that the bus connected to the CPU is made much easier to design since the CPU is not required to have its clock stopped in the middle of a bus cycle. Guaranteeing the state of the processor just prior to stopping the processor&#39;s internal clock signal makes the computer system highly testable in a manufacturing environment. 
    
    
     BRIEF DESCRIPTION OF THE DRAWINGS 
     The present invention will be understood more fully from the detailed description which follows and from the accompanying drawings, which however, should not be taken to limit the invention to the specific embodiments shown, but are for explanation and understanding only. 
     FIG. 1 illustrates prior art method of stopping the clock signal coupled to a central processing unit of a computer system. 
     FIG. 2 is a block diagram of one embodiment of the present invention. 
     FIG. 3 illustrates the relationship of the STPCLK pin to a set of instructions being executed within the execution unit of a computer system. 
     FIG. 4 is a timing diagram which illustrates the sequence of events which takes place within the computer system when the invented STPCLK pin is asserted and then deasserted. 
     FIG. 5 is a flow chart depicting the sequence of events involved in stopping of a processor&#39;s internal clock signal. 
    
    
     DETAILED DESCRIPTION 
     An apparatus and method for stopping the clock signal coupled to a central processing unit of a computer, regardless of the instruction the processing unit is presently executing, is described. In the following description, numerous and specific details are set forth such as specific event types, circuits, instruction types, etc., in order to provide a thorough understanding of the present invention. It will be obvious, however, to one skilled in the art that these specific details may not be needed to practice the present invention. 
     FIG. 1 illustrates a prevalent prior art technique for stopping or halting the clock signal coupled to a central processing unit (CPU) within a computer system. By way of example, the scheme illustrated in FIG. 1 is commonly found in such microprocessors as the 80286 microprocessor manufactured by Intel Corporation. As shown, an oscillator 11 provides a periodic signal coupled to CPU 10 through AND gate 12. The output of AND gate 12 represents the external frequency input (EFI) provided to CPU 10. The other input of AND gate 12 is coupled to a signal labeled STOP#, which provides a means for decoupling the EFI signal from CPU 10. If the STOP# signal is low, then the output of AND gate 12 will be low regardless of the signal provided by oscillator 11. On the other hand, if the STOP# signal is at a logical high level, then the output of oscillator 11 will be coupled directly to CPU 10. 
     As discussed above, there exists a variety of problems associated with the prior art scheme of FIG. 1. For instance, testing the CPU under such a scheme is difficult since it is virtually impossible to test the stopping of the clock on all combinations of instructions which might cause the product to fail. Another related problem is that stopping of the clock in the manner shown in FIG. 1 does not preserve the state of any of the buses in the computer system. This means that the clock could be stopped in the middle of a bus cycle, in which case the information associated with that bus cycle would be irretrievably lost. 
     With reference now to FIG. 2, a block diagram of the currently preferred embodiment of the present invention is shown. The present invention is preferably implemented on a single integrated circuit (IC) 20 which includes a CPU driven by an internal clock signal, labeled ICLK, on line 33. The internal clock signal of the CPU is generated by means of an external reference oscillatory signal which drives a phase-lock loop (PLL) circuit 21. PLL 21 multiplies the reference frequency by a predetermined factor to produce a clock signal along line 31, coupled to one input of AND gate 22. Note that line 31 is labeled CLK; it is this signal which provides the clock signal to computers circuits which cannot tolerate an interruption in the clock signal. For example, a constant clock signal is often required for various cache operations, snooping logic, hold, hold acknowledge operations and arbitration logic. Functions such as these receive the CLK signal. 
     In the current embodiment, it is only the ICLK signal which is interrupted or halted in accordance with the present invention. The ICLK signal, shown being provided on line 33, clocks the vast majority of CPU operations, including program and instruction execution. As shown in FIG. 2, it is the ICLK signal that is selectively masked by AND gate 22. This masking operation is achieved by taking line 30 to a logical low potential, i.e., active low. Line 30 is labeled as STP --  MY --  CLK and is provided as an output from the STPCLK logic block 24. The STPCLK logic block 24 includes an ordinary state machine which is coupled to receive the CLK signal provided by PLL 21. In addition, STPCLK block 24 receives inputs from interrupt prioritizer 26 along line 29, from microcode engine 27, and also from the external STPCLK pin along line 28. 
     Likewise, line 28 is also shown being coupled to microcode engine 27 and 5 interrupt prioritizer 26. 
     It should be understood that the present invention represents a distinct change from the prior art approach in several respects. To begin with, instead of decoupling the external reference frequency signal from the processor --as shown in the prior art --the present invention utilizes an internal mechanism for decoupling the internal clock signal without disturbing the operation of the phase-lock loop. At the same time it guarantees that the clock is stopped in a known state (e.g., on an instruction boundary). 
     Note also that the embodiment shown in FIG. 2 includes an interrupt prioritizer 26. Prioritizer 26 controls events other than branches that change the normal flow of instruction execution. Interrupt prioritizer 26 operates by detecting interrupt conditions external to integrated circuit 20, and then granting a priority status to each of those interrupt events. By way of example, in FIG. 2 prioritizer 26 is shown receiving a plurality of interrupt signals, including a non-maskable interrupt signal (NMI). A NMI signal may, for instance, represent a parity error generated by the system logic. Also shown are interrupt signals generated by the system management (SMI), and a RESET interrupt signal. 
     In the embodiment of FIG. 2, the STPCLK# signal is shown being routed to interrupt prioritizer 26 as well as to STPCLK logic block 24 and microcode engine 27. When the external STPCLK# signal is asserted, it generates an interrupt to microcode engine 27. This interrupt will be recognized on the next instruction boundary and is granted a high interrupt priority status by interrupt prioritizer 25. Microcode engine 27 includes a STPCLK microcode entry point and microcode program, designed to implement a number of specialized tasks associated with stopping of the internal clock. By way of example, when the STPCLK# signal is asserted, control is passed to the STPCLK microcode handler on the very next instruction boundary. The STPCLK microcode then waits until the prefetcher is idle and then sets an internal STPRDY bit. The STPRDY bit is shown coupled to STPCLK logic block 24. The STPRDY signal from the processor indicates that the ICLK signal is ready to be stopped. Engine 27 then initiates execution of a microcode loop which examines the STPCLK micro-flag (i.e., driven by the STPCLK# pin). When the STPCLK# signal becomes inactive, control then falls out of the STPCLK microcode loop and the processor begins executing the next instruction in the sequence of instructions given by the user code. 
     At this point of the process, the STPCLK logic block 24,--upon seeing both the STPCLK# and STPRDY signals active,--stops the internal clock to the CPU core by forcing line 32 to a low logic potential. With the STP --  MY --  CLK signal at a logical low potential, the internal clock signal, ICLK, becomes inactive. Finally, when the STPCLK logic block 24 recognizes that the STPCLK# signal is externally deactivated, it then restarts the clock to the processor by de-asserting the STP --  MY --  CLK signal. 
     It will be appreciated by practitioners in the art that the use of an interrupt prioritizer in the present invention insures that the processor will be testable, since every time the clock is stopped the processor will be in a known state. Internally, the STPCLK pin is treated as if it were any other interrupt generated by system logic. Externally, of course, the STPCLK# pin appears like any other external input to the processor. When the STPCLK# pin is asserted, the CPU halts its internal clock without interfering with either the external reference oscillatory signal or the operation of the internal PLL. When the STPCLK# pin is deasserted, the CPU then restarts its internal clock. 
     It should also be apparent from the above discussion that any user could assert the STPCLK# pin active so that internally the processor would stop its clock. In addition, the STPCLK microcode might include micro-instructions to generate a bus cycle which would acknowledge that the processor is in fact stopping its clock (i.e., an acknowledge bus cycle). For example, issuing an acknowledge bus cycle could be important at the system level. 
     One of the ways in which the present invention is especially useful is in laptop computer systems in which power management is a primary consideration. In such a system, external logic could be used to disable the internal clock function of the CPU when the computer system was idle or otherwise not in use. When the external logic detects an event that normally would wake up the processor, the STPCLK# pin would then be de-asserted so that the processor could then resume operating without the need for a lengthy start-up period. 
     With reference now to FIG. 3, there is shown an exemplary timing diagram illustrating the relation of the STPCLK# pin to a normal sequence of instructions being executed in the execution unit of a microprocessor. 
     Essentially, FIG. 3 illustrates the STPCLK# pin transitioning from a logical high to a logical low level, where a logical low level represents an active state. As soon as the STPCLK# pin transitions low, a STPCLK interrupt signal is generated on the next instruction boundary. At this point, the microcode engine recognizes that a jump to the STPCLK microcode program is to occur. This activity is shown occurring in FIG. 3 by arrow 40. Note that in FIG. 3, the STPCLK# pin is asserted in the middle of a MOV instruction; however, the internal clock signal of the processor is not halted until the end of the current instruction, i.e., the instruction boundary before the next STO instruction. 
     The STPCLK microcode program performs several important functions in the current embodiment. To begin with, all of the pipelines within the processor are flushed and then idled. Preferably, the microcode would then indicate to the bus unit to execute a STPCLK acknowledge cycle. After that, the microcode then indicates to the STPCLK logic block 24 to stop the internal clock by asserting the STP --  MY --  CLK signal on line 30 (see FIG. 2). At this point, the microcode engine simply waits until the STPCLK# pin is deasserted; that is, it simply loops on itself until the user or system decides to restart the internal clock. 
     When the STPCLK# pin is de-asserted, the STPCLK logic block 24 automatically restarts the clock by deactivating the STP --  MY --  CLK signal. During the time that the internal clock signal is halted, PLL 21 remains active so that the CLK signal provided on line 31 is also active. After the STPCLK# pin has been deasserted, the microcode engine detects that the ICLK signal is now active and generates a return. Following the return, the next instruction in the normal sequence of instructions can begin execution. 
     The present invention ensures that the processor is testable because it is always in a known state (i.e., the STPCLK microcode stops execution on an instruction boundary) whenever the ICLK signal is stopped. Furthermore, all pipelines and instruction queues are flushed by the microcode program. Microcode control also guarantees that execution is never halted in the middle of a bus cycle. This eliminates any precharging problems associated with bus cycles or pipeline stages. Because the STPCLK pin provides control of the ICLK signal at a point in the circuit beyond the phase-lock loop, this also permits an overdrive strategy, where in a new processor can be inserted where the PLL is internally multiplying the clock by some factor (e.g., 2×). 
     To better understand the operation of the present invention consider the example of FIG. 4 and the flowchart of FIG. 5. FIG. 4 illustrates the timing relationship of the sequence of events which typically occurs whenever the internal clock of the processor is to be stopped. In FIG. 4, the execution unit (EU) is shown having three current instructions, I1, I2, and I3. These instructions may be part of a sequence of instructions currently being executed by the processor. The STPCLK microcode program is shown being run between instructions I2 and I3. 
     In the example of FIG. 4, the STPCLK# pin is shown being asserted by the high-to-low transition 42 which occurs during the middle of instruction 12. 
     The assertion of the STPCLK# pin is shown by ellipse 50 in FIG. 5. When the STPCLK# pin is asserted, it sets a microflag in the microcode engine, and also signals the state machine in the STPCLK logic block. Interrupt prioritizer 26 makes sure that the microcode engine recognizes this input as an interrupt to be asserted at the next instruction boundary. Note that FIG. 4 illustrates the STPCLK# signal being recognized on the instruction boundary following the execution of instruction I2. It is appreciated that there is an associated set-up time between the time that the STPCLK# pin is asserted, and the time that interrupt prioritizer 26 grants it priority status. 
     On the instruction boundary following the I2 instruction, the microcode engine determines that the STPCLK interrupt is pending and jumps to the STPCLK microcode program. The STPCLK microcode program then makes sure that the CPU is in a known and stable state prior to halting to the internal clock signal. This is shown occurring in FIG. 5 at decision block 51. Once the CPU is in a known state on an instruction on an instruction boundary, the STPCLK microcode program empties the bus unit of any outstanding bus cycles, generates a stop --  clock acknowledge bus cycle, and then empties the internal pipelines. This is shown occurring in FIG. 5 by blocks 52, 53 and 54. The STPCLK microcode program also stops the prefetcher from prefetching. In a preferred implementation, once all bus activity has been halted, a STPCLK acknowledge bus cycle can be run. The STPCLK ACK bus cycle is shown occurring in FIG. 4 just prior to the bus unit being deactivated. 
     What happens next is that the STPCLK microcode program tells the STPCLK logic block to assert the STP --  MY --  CLK signal, thereby masking the ICLK. FIG. 4 shows the STP --  MY --  CLK # signal going low just after the STPCLK ACK bus cycle is completed. At the same time, the ICLK signal is shown being deactivated. Once the STP --  MY --  CLK signal has been asserted, the ICLK signal to the CPU is halted and CPU logic operation ends. Assertion of the STP --  MY --  CLK signal is represented in the flowchart of FIG. 5 by block 55. 
     At this stage, the microcode program simply checks to see whether the STPCLK# pin is still active (e.g., decision block 55 in FIG. 5). Once the STPCLK# pin is de-asserted by external logic, the CPU clock is restarted and execution of the next instruction (I3) is returned. This is shown occurring at ellipse 57 in FIG. 5. Arrow 45 in FIG. 4 shows how the low-to-high transition of the STPCLK# pin initiates the sequence of events which results in de-assertion of the STP --  MY --  CLK signal and reactivation of the ICLK to the CPU. After ICLK is activated once again, bus activity also resumes. 
     Note that with the clock restarted, the microcode engine detects that the STPCLK signal has been deasserted and ends the STPCLK microcode sequence so that the CPU can execute the next instruction. If the CPU had stopped its clock from a HALT state, then it would be necessary to set the CPU&#39;s context (i.e., register states, etc.) so that upon leaving the STPCLK microcode program, the processor would reenter the HALT state. 
     Whereas many alternations and modifications to the present invention will no doubt become apparent to the person of ordinary skill in the art after having read the foregoing description, it is to be understood that the particular embodiments shown and described by way of illustration are in no way intended to be limiting. For example, although this disclosure has shown a particular list of events that may be included as part of a microcode program for stopping the internal clock of a processor, other means are also possible without detracting from the spirit or scope of the present invention. Therefore, reference to the details of the illustrated diagrams is not intended to limit the scope of the claims which themselves recite only those features regarded as essential to the invention.