In many computer systems, the addition of new add-in cards, peripherals and other components to the system is a difficult procedure for the end user. For each new component that the end user adds, the user must know what resources the new component needs and what resources are currently being used. For example, the user must know which addresses are currently being used by components in the system and which addresses are available. Often the user must pull out the existing components in the system to examine the settings of the jumper blocks or DIP switches to determine what is in use and what is available. As a result, the end user must have a very detailed working knowledge of all of the components in the system. If two or more components are assigned the same resource, the user's computer may stop working, with no indication as to where the problem lies.
Additionally, in many computer systems, "hot" docking of new components into the computer system is not possible. The computer systems must be shut down before any new components can be added. This can be a significant limitation, for example, when using notebook computers with docking stations.
Personal computers based on the Intel architecture, and using the ISA bus, are particular examples of computer systems with such limitations. The desire to offer these computers to a wider variety of consumers, and the need to meet competition from other computer architectures, has made this limitation a matter of pressing interest to the industry.
Recently, Microsoft Corp., and Intel released a specification for a Plug and Play ISA Standard which is designed to address the above-noted problems. When the Standard is implemented in computer systems, components can be installed without setting jumper switches or loading new BIOS software and new components can be added while the system is running.
The Plug and Play ISA Standard operates by placing the assignment of hardware resources under software control. Specifically, memory addresses, input and output (I/O) addresses, interrupt (IRQ) levels, and direct memory access (DMA) channels are all assigned by software. The standard anticipates that each component added to a computer system will have a unique identifier which is used for two purposes.
1. The unique identifier of each component is used as a low-level name for that component by system software. Such a name is used, for example, to associate a drive letter with a given physical slot. For this reason, it is essential that this unique identifier have a constant value for as long as the component is installed in the computer system. PA1 2. The unique identifier is used as part of a hardware component selection algorithm, in order to individually select, in turn, each Plug and Play ISA component in the system. For this reason, it is essential that each Plug and Play ISA component in the system have a different unique identifier.
The Standard defines the identifier as a seventy-two bit sequence. Sixteen bits identify the vendor; sixteen bits identify the type of component; thirty-two bits identify the individual component (providing the so-called "serial number"); and eight bits are used as a checkcode. Under the Standard, the component serial number does not need to be a true serial number, but the number cannot be randomly assigned each time. For the reasons described previously, the serial number must remain the same each time the system starts up for the system to operate properly.
The state of the art in semiconductor manufacturing is such that it is usually not economical to assign a different serial number to a device when that device is manufactured. As a practical matter, all devices of a given type are therefore indistinguishable. For this reason, the standard anticipates that manufacturers will use a separate memory device, such as an E.sup.2 PROM, for each component to store the identifier. The standard also anticipates that in some cases (e.g, the case in which only one component of a given kind will ever be used in a given system), a component may have a constant unique ID.
The addition of a memory device, such as the E.sup.2 PROM, for each component in or to be added to the computer system creates several problems. Each memory device adds certain manufacturing and programming costs and takes up valuable space on the system board. The additional cost and space are particularly problematic for portable and laptop computer systems, where cost and space are premium considerations. Additionally, the memory device dissipates additional power.
The standard also anticipates that a vendor might decide to dedicate several pins on component (assumed to be implemented as an ASIC) to supply a "unit number". These pins might select from one of n pre-defined component serial numbers, where n=2.sup.p, p being the number of pins reserved for this purpose. For example, if p=three pins are reserved for this purpose, n=eight different components serial numbers can be selected. This approach has several disadvantages. First, ASIC package lead frames increase in cost as pins are added, so the cost of the product may increase. Second, adding three pins may result in jumping to a package with a much larger number of pins (due to restrictions in commonly available packages). Third, the cost of the silicon for an integrated circuit goes up as the square of the number of pins. Finally, this approach has limited flexibility.
Because the Plug and Play ISA standard is a compatible extension of existing ISA bus technology, it is desirable to be able to develop a device that is pin-compatible with older, non-Plug and Play ISA devices, and yet adds the Plug and Play ISA functionality.
It is a general object of the present invention to provide an apparatus and method for assigning a unique identifier to one or more components in a computer system, using at most a single pin on each device. This invention also provides a simple means of designing parts to be used to upgrade existing designs that were not based on Plug and Play ISA functionality to include Plug and Play ISA functions.