Abstract:
A method for dynamic bandwidth testing of a link between two computer subsystems useful for determining the amount of data which can be buffered in a transmission line by delay, in which at each end of the line circuit modules are provided to couple the subsystem by a bi-directional multi-bit (BiDi) link, and providing within each said circuit module a built-in circuit and logic for dynamic transmission characterization and test of a said BiDi link between computer subsystems using built-in characterization logic macros, and during a test mode, switching said said built-in circuit and logic to test mode and using the test mode to characterize the link performance, and after the completion of characterization, the switching built-in characterization logic macros back to a normal system mode after programmatically setting timing parameters for the BiDi link to ensure safe operation of data transfer before the BiDi link is switched to system mode.

Description:
FIELD OF THE INVENTION 
     This invention relates to networked computer subsystems, including chip busses and longer links, and particularly to a method for dynamic bandwidth testing of bi-directional transmission links between computer subsystems using built-in characterization logic. 
     BACKGROUND OF THE INVENTION 
     When two computer subsystems are connected by a bi-directional multi-bit transmission links bus (BiDi) linking two chips on a module or linking two modules within a computer system, several questions arise. They are: (1) What is the bandwidth of the link? (2) How many bits can be stored in the link during data transmission? (3) How fast one can change the BiDi direction? and (4) What is the timing/clocking relationships between two subsystems? These are not easy to answer questions. 
     SUMMARY OF THE INVENTION 
     Our invention provides a built-in circuit and logic for dynamic transmission characterization and test a BiDi between computer subsystems using built-in characterization logic. During test mode, the hardware of this invention is used to characterize the link performance. After the completion of characterization, the hardware is switched back to normal system mode. The hardware has programmable capability which involves the setting of timing parameters for the link to ensure safe operation of data transfer before the BiDi is switched to system mode. The hardware macro of this invention is placed on two chips of two linked computer subsystems. The illustrating our preferred embodiment of our invention we have assumed arbitrarily that the BiDi is 10 bit wide. 
     These and other improvements are set forth in the following detailed description. For a better understanding of the invention with advantages and features, refer to the description and to the drawings. 
    
    
     BRIEF DESCRIPTION OF THE DRAWINGS 
     The figures are a schematic overview of the preferred embodiment, in which: 
     FIG. 1 shows our preferred built-in test macros linked by a BiDi whose bandwidth and data transmission parameters are to be characterized. 
     FIG. 2 shows our preferred key elements within the macro. 
     FIG. 3 shows our preferred driver mode extension timing. 
     FIG. 4 shows our preferred 64 bit shift register element for sender logical view (a) and time-multiplex double speed implementation (b). 
     FIG. 5 shows a preferred detailed structure of one shift-register bit. 
     FIG. 6 shows our preferred time multiplex shift register structure showing scan-ring and clocking details. 
     FIG. 7 shows our preferred output multiplexer for even/odd registers. 
     FIG. 8 shows our preferred timing diagrams for scan-mode and system-mode. 
     FIG. 9 shows the C1 --  NEW and C2 --  NEW pulse generation. 
     FIG. 10 shows our preferred control logic flow chart. 
     FIG. 11 shows the &#34;simple transfer&#34; operation. 
     FIG. 12 shows our preferred detailed implementation of the sender control logic. 
     FIG. 13 shows our preferred detailed implementation of the receiver control logic. 
     FIG. 14 shows the &#34;exchange&#34; operation. 
     FIG. 15 shows our preferred the &#34;ping pong&#34; operation. 
     FIG. 16 shows our preferred method of stopping the ping pong operation. 
     FIG. 17 shows our preferred programmable delay line. 
    
    
     (Note: For convenience of illustration, FIGURES may be separated in parts and as a convention we place the top of the FIGURE as the first sheet, with subsequent sheets proceeding down and across when viewing the FIGURE, in the event that multiple sheets are used.) 
     Our detailed description explains the preferred embodiments of our invention, together with advantages and features, by way of example with reference to the following drawings. 
     DETAILED DESCRIPTION OF THE INVENTION 
     Before considering our preferred embodiments in detail, it may be worthwhile to illustrate, by way of example, . . . 
     Turning now to our invention in greater detail, it will be seen from FIG. 1 which illustrates our preferred embodiment in which we illustrate our architecture of our bandwidth testing macro. 
     Architecture of the Bandwidth Testing Macro 
     There are two identical macros placed on two computer subsystems between which the BiDi links. Refer to FIG. 1 which shows the system configuration with subsystem 1 and subsystem 2 respectively. During characterization or testing, one macro is defined as Master (Macro --  M), another macro is defined as Slave (Macro --  S). They are linked by a multi-bit (e.g. 10) BiDi bus. The BiDi may take on different form. They can be metal transmission lines or optical links. Also show are two one-bit unidirectional links labelled &#34;other --  receiver --  go&#34;. They serve as timing/command signals. A &#34;go&#34; signal (per macro) is used to initiate command execution. Detailed description will be given. 
     FIG. 2 shows the key elements within the Macro. The Macro has two sets of shift registers, one for sending and one for receiving serial data. In Macro --  M (FIG. 2), we have Macro --  M --  Sender and Macro --  M --  Receiver. Likewise, in Macro --  S (not shown), we have, Macro --  S --  Sender and Macro --  S --  Receiver. They are correspondingly identical. Macro --  M --  Sender and Macro --  S --  Sender are conveniently called &#34;Sender&#34; and Macro --  M --  Receiver and Macro --  S --  Receiver are conveniently called &#34;Receiver&#34;. We use the Master macro (Macro --  M of FIG. 2) nomenclature in most of our discussions. In the embodiment of this invention, each set of Sender or Receiver consists of 10 shift registers, and each shift register is 64 bit long. Sender shift registers are controlled by shift --  s signal. Receiver shift registers are controlled by shift --  r signal. 
     The clocking of Sender and Receiver are controlled by two Phase Lock Loop (PLL) driven clock blocks as shown in FIG. 2 In Macro --  M, Macro --  M --  Sender is controlled by PLL --  S clock block, and Macro --  M --  Receiver is controlled by PLL --  R clock block. The PLLs that drive these two clock blocks are not shown. PLL --  S receives a global reference clock from a PLL, clkg --  send, and generates a pair of non-overlapping clocks C1 and C2 for the Macro --  M --  Sender. PLL --  R receives a global reference clock from another PLL, clkg --  receive, and generates a pair of non-overlapping clocks C1 and C2 for the Macro --  M --  Receiver. Similar arrangement is for the Macro --  S of FIG. 1. 
     The arrival time of the clkg --  receive in the Macro --  S of subsystem 2 is experimentally tuned with respect to the clkg send in Macro --  M of subsystem 1, so that data transfer will work properly with a particular length of the BiDi bus. Similarly, the arrival time of the clkg --  receive in the Macro --  M of subsystem 1 is experimentally tuned with respect to the clkg --  send in Macro --  S of subsystem 2, so that data transfer will work properly in either direction. It is assumed that all wires of the BiDi bus are properly tuned to ensure identical transmission characteristic. 
     Refer to FIG. 2. There are two one-bit toggle flip-flops. They are driven by C1/C2 clocks generated from clkg --  send (PLL --  S) and clkg --  receive (PLL --  R) respectively. The outputs of these two flip-flops, labelled send --  phase and receive --  phase, are used to calibrate (or observe) the phases of the two global reference clocks. 
     In addition, Macro --  M sends a 1 bit unidirectional command bus to Macro --  S in a like manner as does the BiDi bus. Similarly, Macro --  S also has a 1 bit command sent to Macro --  M. The roles of master and slave are interchangeable due to the symmetry of FIG. 1. These lines are called &#34;other --  receiver --  go&#34; signals and they are electrically identical to the data BiDi links. This one bit command serves as a timing signal which activates the Receiver to shift in the receiving subsystem in conjunction with the Sender of the sending subsystem. 
     Each macro has an input called &#34;go&#34; as shown in FIG. 1. In FIG. 2, the macro which receives the &#34;go pulse&#34; is defined as Master. The one does not receive the &#34;go pulse&#34; is the Slave. The &#34;go --  pulse&#34; is a gated version of &#34;go&#34; gated by a scan-only register as shown in FIG. 2. This scan-only bit determines the role (Master or Slave) of the macro. For the Master, this scan-only register is scanned in with a logic ONE. For the Slave, this scan-only register is scanned in with a logic ZERO. The &#34;go --  pulse&#34; is used by the control logic to execute commands mentioned later. This arrangement allows the &#34;go&#34; signals of Macro --  S and Macro --  M to be common if subsystem 1 and subsystem 2 are adjacent. In actual implementation, the off-chip &#34;go&#34; signal may pipe down a train of latches in order to clean up its waveform before it reaches the AND gate of FIG. 2, giving rise to a snappy &#34;go --  pulse&#34; for the control logic to use. 
     FIG. 2 shows 10 BiDi Driver/Receivers (BiDi D/R) which connect among the Macro --  M --  Sender, Macro --  M --  Receiver, and the BiDi bus known as data &lt;0:9&gt;. The role of &#34;BiDi D/R&#34; is controlled by a &#34;set --  io --  to --  drive&#34; signal generated by the control logic. 
     Each macro has a 2-bit command register, cmd --  q &lt;0:1&gt;, as shown in FIG. 2. They are scan-only register bits. Both macros (Macro --  M and Macro --  S of FIG. 1) will be scanned in with identical content. Their control logics will look at these 2 command bits and determine what the global function should be. 
     The contents of two Senders, the one in Macro --  M --  Sender of subsystem 1 and the one in Macro --  S --  Sender of subsystem 2 are loaded with test patterns at the beginning of any operation by conventional scanning mechanism. 
     The cmd --  q registers for both the Master and the Slave macros are scanned in with the same values. These two bits determine how the pre-loaded data in the Senders are transferred: 
     
         __________________________________________________________________________cmd.sub.-- q(0:1)    Global Functions__________________________________________________________________________00       Simple Transfer:    Macro.sub.-- M.sub.-- Sender sends data to Macro.sub.-- S.sub.--    Receiver.    When task is completed, END signal is generated by     the Master.01       Exchange:    Macro.sub.-- M.sub.-- Sender sends data to Macro.sub.-- S.sub.--    Receiver.    After a programmable delay (a choice of 0 to 6 cycles,     known as &#34;BiDi turn-around time&#34;), Macro.sub.-- S.sub.-- Sender    sends     data to Macro.sub.-- M.sub.-- Receiver.    When task is completed, END signal is generated by     the Master.10       Ping-Pong:    Same as code &#34;01&#34; except that the &#34;exchange&#34; steps repeat    endlessly until a STOP pulse, applied to either Master or    Slave, is raised. In that event, the End signal will be    generated as long as the current packet of data is completely    transferred. If the last packet of data is sent by the    Slave, the Slave will raise the END signal. If the last    packet of data is sent by the Master, the Master will raise    the END signal.11       (not implemented)__________________________________________________________________________ 
    
     The BiDi Driver/Receiver is controlled by a set --  io --  to --  drive signal. When this signal is ONE, the (BiDi D/R) is in driver mode, otherwise, it is in receiver mode. After the data has left the Sender Register, the BiDi buffers must still be maintained in &#34;driver mode&#34; for a period of time known as &#34;driver mode extension time&#34; because the data has not yet arrived at the receiving macro. The timing diagram is shown in FIG. 3. How long the data takes to arrive at the receiving end depends on the length of the BiDi bus. The &#34;driver mode extension&#34; time is programmable, ranging from 0 to 6 cycles, offering 7 choices in our embodiment. 
     Dataflow 
     Since the BiDi is assumed to be 10 bit wide, the dataflow of Macro --  M or Macro --  S consists of 10 identical bit-slices. Only one bit-slice is described. Control logic is shared by these 10 bit-slices. We need to focus on the dataflow of just one bit-slice. 
     The key dataflow element of the macro is a 64 bit register whose content can be pre-set by scanning into it the users&#39; data patterns. The logical view of the 64 bit shift register for Macro --  M --  Sender is shown in FIG. 4a. Each bit is clocked by C1/C2 non-overlapping pulses generated from a PLL driven clock block. The output of the shift register of the Sender feeds its input, forming a re-circulating loop as shown in FIG. 4. The outputs of the Receiver&#39;s shift registers (not shown) are dangling. This is the main difference between the Sender shift register and the Receiver shift register. 
     This 64 bit shift register (for both Sender or Receiver) is implemented in two 32-bit registers (SR32 --  even and SR32 --  odd of FIG. 4b). They are operated in parallel but time-offset by half of a bit-time (a pair of C1 and C2 is called a bit time) and hence they together operate in a double speed time-multiplexing fashion. 
     More specifically, SR32 --  even is clocked by the following clock sequence: 
     
         (C1/C2, C1/C2, . . . , C1/C2), 
    
     whereas SR32 --  odd is clocked by a complementary sequence: 
     
         (C2/C1, C2/C1, . . . , C2/C1). 
    
     The details of each bit in FIG. 4 is shown in FIG. 5. Each bit has 3 inputs: system data (din), scan data (scan --  in), and shift control (shift). Each bit has one output (dout). Each bit receives 3 clock signals: the sample clock (S), the hold clock (H), and the scan clock (clka). The detailed circuit implementation consists of two &#34;bit-halves&#34;. The left half is a latch for sampling data or receiving scan data. The right half is for holding system data or scan data captured by the left half. The first part has a selector SEL which is controlled by signal &#34;shift&#34;. When &#34;shift&#34; is ONE, system data is sampled and latched. When &#34;shift&#34; is ZERO, the shift-register bit re-cycles (or keeps) its content. Although the pass-gates are shown as a single NMOS device (denoted by N) for clarity, they are each a pair of devices (one NMOS and one PMOS connected in parallel) in actual implementation. If the NMOS is gated by S, for example, its PMOS counterpart (not shown) is gated by S --  bar, the complementary of S. During non-scan mode, clka is set at ZERO and S and H are pulsed alternately. During scan mode, S is set at ZERO and clka and H are pulsed alternately. 
     FIG. 4b is further detailed in FIG. 6 in which the scan-ring (path from scan --  in to scan --  out) is also shown. The logical &#34;shift&#34; signal has two copies: shift --  even and shift --  odd. They are generated from the control logic yet to be discussed. They are logically the same but slightly different in timing. SR32 --  EVEN is clocked by C1 and C2, and SR32 --  ODD is clocked by C1 --  new and C2 --  new. From system operation point of view, C1 --  new is C2 and C2 --  new is C1 as simplified in FIG. 4b. During scan-mode operation, the two shift registers are no longer operate in parallel but in series. Therefore, SR32 --  ODD must be clocked in the same way as SR32 --  EVEN. The Truth Table of C1 --  new and C2 --  new is shown in FIG. 6. Note that FIG. 6 is for Sender shift register. Receiver shift register is identical with the exception that re-cycle loops are not present. 
     Examine the outputs of the shift register pair shown in FIG. 6. One bit of data is shifted out at C2 from SR32 --  EVEN and the subsequent data bit is shifted out at C1 (C2 --  new equals C1 in system mode) from SR32 --  ODD, resulting in two bits shifted per cycle. Same argument applies to the input end: During C1 time, a bit is shifted into SR32 --  EVEN, and during C2 time (C1 --  new equals C2 in system mode) a bit is shifted into SR32 --  ODD. It is clear now that one bit of data is shifted in or out when either C1 or C2 is clocked, resulting in doubling of the data transfer rate as compared to a conventional shift register scheme in which data is inputted only at C1 and outputted only at C2. 
     The two shift register halves are joined together at their outputs by a multiplexer (MUX). Detail circuitry for the MUX is shown in FIG. 7 in which a pair of passgates are shown. The purpose of the passgates is to ensure the common node (CN) always has valid data, either from SR32 --  EVEN or SR32 --  ODD. CN will remember the last data until it is replaced by the new data. Thus, CN will not be in undetermined states which may cause noise to the BiDi drivers. 
     Although the C1 and C2 are required to be connected in complementary way for SR32 --  EVEN and SR32 --  ODD during operation, they should be connected identically with respect to clka and C2 clocks during scan mode because they are chained together in series. Scan mode is used to load data pattern into the shift registers prior to functional operations. During scan mode, the &#34;shift&#34; signal is &#34;Don&#39;t Care&#34; and C1 is idling at ZERO. The timing diagram of this two modes of operations are shown in FIG. 8. 
     The alteration of clock line connections (according to Truth Table of FIG. 6) within the shift registers is controlled by a DC signal called SCAN --  ENABLE inputted to the control logic of FIG. 9 whose logic effect is defined below: 
     
         __________________________________________________________________________SCAN.sub.-- ENABLE = 0       C1/C2 for SR32.sub.-- EVEN and C2/C1 for SR32.sub.-- ODD as       has       been described above.SCAN.sub.-- ENABLE = 1       clka/C2 for both SR32.sub.-- EVEN and SR32.sub.-- ODD who       are       connected indentically but in series. C1 is__________________________________________________________________________       low. 
    
     In each macro, there are two 64 bit time-multiplexing registers per bit-slice. For example, in Macro --  M, there are a 64 bit &#34;Macro --  M --  Sender&#34; responsible for sending serial data, and a 64 bit &#34;Macro --  M --  Receiver&#34; responsible for receiving serial data (FIG. 2). Similarly in Macro --  S, there are &#34;Macro --  S --  Sender&#34; and &#34;Macro --  S --  Receiver&#34; respectively. Each shift register in the Sender of a macro and each shift register in the Receiver of the same macro are connected to a BiDi Buffer (BiDi D/R) which in turn connects to a single BiDi wire to form one bit slice. 
     The input of the macro&#39;s Sender shift register (Macro --  M --  Sender of FIG. 2) is fed by its own output for recycling its own data during the send operation as shown in FIG. 4b and FIG. 6. The input of the macro&#39;s Receiver shift register (Macro --  M --  Receiver of FIG. 2) is connected to the BiDi pad for receiving data from the sending macro. This is the only difference between the Sender and the Receiver shift registers. 
     Control Logic For Both Master and Slave 
     The concept of the control logic for both Master and Slave is shown in FIG. 10. The principle of operation of the control logic can best be described by examining the operations of each individual command. 
     FIG. 11 shows the operation of the &#34;Simple Transfer&#34;. The Macro which receives the go --  pulse is the Master whose SRL1 is set. The go --  pulse also sets SRL2 via OR1 gate. The output of SRL2 activates the Sender of the Master. The Receiver of the Slave is also activated by the output of SRL2 but through the other --  receiver --  go signal which is shown in FIGS. 1 and 11. 
     The details of the logic block called &#34;Activate Sender to Send 64 Bits&#34; is shown in FIG. 12 in which the output of SRL2 drives three elements: 
     
         __________________________________________________________________________(1)   SRL3 --- The L1 output of SRL3 is &#34;shift.sub.-- even&#34; and the L2   output is   &#34;shift.sub.-- odd&#34;. They are the shift control signals for the Sender   of   FIG. 6.(2)   The &#34;other.sub.-- receiver.sub.-- go&#34; signal --- first appeared in   FIG. 1. This   signal is used as the shift control for the Receiver of Macro.sub.--   S, the   Macro.sub.-- S.sub.-- Receiver. The shift control of the Sender and   the shift   control of the Receiver are thus synchronized via this wire.(3)-- This is a 5 bit counter used tofor.sub.-- Sender&#34;   keep track the amount of shifts in the Macro.sub.-- M.sub.-- Sender of   FIG. 2.   It counts from 0 to 31. When the counter has counted up from   &#34;00000&#34; to &#34;11111&#34;, the shift register has shifted a packet of 64   bits of data in 32 cycles because of its double speed capability. A   32 cycle wide &#34;count.sub.-- pulse&#34; which is the output of SRL2 is   continually high when counter is counting. When this counter   reaches &#34;11111&#34;, and &#34;end.sub.-- send.sub.-- pulse&#34; is generated which   resets SRL2   and thus stops the counter from counting and hence terminates the   shift operation of the local Sender as well as the remote Receiver   via the &#34;other.sub.-- receiver.sub.-- go&#34; signal.__________________________________________________________________________ 
    
     Refer to FIG. 12. The shift --  even and shift --  odd signals are used to set the &#34;BiDi D/R&#34; of FIG. 2 in &#34;driver mode&#34;. The shift --  even signal sets the signal set --  io --  to --  drive to logic ONE via an OR gate. The shift --  odd signal extends the reset via a programmable &#34;variable delay&#34; line and hence creates the &#34;driver mode extension time&#34; of FIG. 3. 
     The details of the logic block called &#34;Activate Receiver to Receive 64 Bits&#34; and the &#34;Done&#34; decision block of FIG. 11 is shown in FIG. 13. The data receiving mechanism is controlled by a 32 bit counter which is controlled by C1/C2 clocks derived from clkg receive. This counter counts from 0 to 31. But when it counts to &#34;one less than 31&#34;, a equal-to-30 signal is generated. This signal is going through a programmable circuit delay of 500 ps and sets a staging register SRL4 which is controlled by the C1/C2 clocks derived from clkg --  send. This register serves as a single point time domain transformation staging register. The output of this SRL4 which represents the full count (counting up to 31) is denoted as &#34;end --  receive --  pulse&#34;. This signal is the output of the &#34;Done&#34; logic of FIG. 11 on the Slave side. This signal is used to activate the sender shift register which is controlled by clocks derived from clkg --  send. The reason for doing this will be explained later. 
     FIG. 14 shows the operation of the &#34;Exchange&#34; command execution. After data has been received into the Macro --  S --  Receiver in the Slave, the &#34;end --  receive --  pulse&#34; is raised which will activate the Slave&#39;s Sender via the AND1 and OR2 gates. A BiDi turn-around time programmable delay line is inserted in the path and the Sender control logic of the Slave begins sending data from Slave&#39;s Sender into the Master&#39;s Receiver. The completion of the process is indicated by an END signal on the Master side. 
     The last command is &#34;Ping Pong&#34; which can be described by FIG. 15. Triggered by the go --  pulse on the Master side, the transfer operation between the Master and the Slave take place endlessly. This repetitive oscillation will be terminated when either the Master or the Slave raise a STOP pulse. The loop breaking mechanism is shown in in FIG. 16 assuming the Master side raises the Stop signal. 
     As mentioned in FIG. 2, registers for sending data are controlled by clkg --  send and registers for receiving data are controlled by clkg --  receive. Consider the &#34;Exchange&#34; and &#34;Ping-Pong&#34; commands. For example, when the Receiver of the Macro --  S has just completed the receiving of data sent from Macro --  M, Macro --  S will turn around the BiDi and activate its Sender to send data back to Macro --  M. Now we can see the control logic is crossing from the clkg --  receive domain to the clkg --  send domain on the Slave side. This clock domain change is accomplished by a single register SRL4 of FIG. 13 which is controlled by clocks generated from clkg --  send. This single-point domain transition is desirable because it has only one control point to tune rather than the need for worrying about many control points. 
     The relationship between clkg --  receive and clkg --  send is determined solely by the timeliness of data arrival which is a function of the BiDi length. Refer to FIG. 13. If the C1 clock (controlled by clkg --  send) of the Staging Register SRL4 is late and comes after the next-cycle C2 clock (controlled by clkg --  receive) of the receiving counter, the equal-to-30 signal will be missed and the macro ceases to function properly. To avoid this problem, a 500 ps delay block is programmably inserted between the equal-to-30 signal and the input of the Staging Register SRL4 to compensate for the lateness of the &#34;equal-to-30&#34; signal. Whether this delay insertion is needed or not is determined by the relationship between clkg --  receive and clkg --  send. Hence, it needs to be programmable. 
     There are two programmable delay line used in this embodiment. One is for the programming of the BiDi turn-around time (the center block of FIG. 10), another one is for the programmable driver --  Mode --  extension time of FIG. 3. FIG. 17 shows the logic implementation of the programmable delay line. Starting out with a ONE propagating along the 6 register chain, the ONE shoots out to the dout when one and only one of the S bit is high. The delay is determined by which bit of S &lt;0:6&gt; is programmed high. The S &lt;0:6&gt; is the output of a set of scan-only registers. 
     There is a bank of 18 bit Scan-Only registers used to control the operating mode of this bandwidth tester. They are: 
     
         ______________________________________cmd.sub.-- q(0:1)         2 bit commands(0:6)        7 bit Bidi turn-around controld(0:6)        7 bit driver mode extension controlone.sub.-- is.sub.-- master         1 bit determines who is Masteradd.sub.-- 500ps.sub.-- delay         1 bit for adding delay or not______________________________________ 
    
     System Integration 
     We have shown in this invention a Build-in Characterization Logic For Bandwidth Testing. Once the BiDi transmission Links has been fully characterized and proper variable delays have been programmed, the control logic can be electronically disengaged by inhibiting the &#34;go --  pulse&#34;. The Sender and Receiver shift registers can be properly switched in place to be data buffers to perform system operation. 
     While we have described our preferred embodiments of our invention, it will be understood that those skilled in the art, both now and in the future, may make make various improvements and enhancements which fall within the scope of the claims which follow. These claims should be construed to maintain the proper protection for the invention first disclosed.