This invention relates generally to programmable devices, and more particularly concerns methods and systems for remotely programming programmable devices such as non-volatile memory devices.
Programmable integrated circuit (IC) devices such as complex programmable logic devices (CPLDs) are typically a non-volatile type of device in which the configuration of the device is held in some sort of permanent memory that is local to the chip on which the device is fabricated. An IC device typically originates as a blank device that is not programmed to implement any specific type of functionality. The functionality of the device is derived from configuration data that is used to program or configure the device. The configuration data generally originates at a location that is remote from the chip on which the device is fabricated, and must be introduced onto the chip so that it can be programmed accordingly.
In the past, different approaches or programming methods have evolved for programming these types of devices or providing the necessary configuration data for imparting the desired functionality to the device.
An exemplary programming method makes use of stand alone programming tools. In such a tool, an individual might have a programming unit sitting next to and operably coupled with a personal computer or work station. A device to be programmed is placed into a programming socket in the programming unit, and a configuration file is accessed by the host programmer. The configuration file is then converted into a binary structure that is then downloaded onto the device to program it. The programmed device can then be tested and used for its intended purpose.
This type of programming can be inconvenient and slow. One primary reason that this and other known programming methods are slow is because the external hardware that is utilized to program the device must often wait while programming activities take place incrementally on the device. For example, in some programming devices, the external stand alone tools are responsible for producing not only the configuration data, but also programming pulses that are used by the device for programming. The stand alone programmers are only able to provide measured amounts of the configuration data, and then must wait until the programming pulses are used by the programmable device. Once the programming pulses are used by the device, additional programming data and pulses can be provided. In addition, programming using stand alone programmers requires additional hardware that some users might not have on hand.
In some programmable devices, such as the CoolRunner(copyright) CPLDs from Xilinx, Inc., the configuration data is first loaded into a non-volatile memory, then copied from the non-volatile memory into a xe2x80x9cshadow memoryxe2x80x9d that actually controls the device. This modification reduces power consumption and allows reconfiguration from the non-volatile memory after power-down. However, this technique does not reduce programming time, because the non-volatile memory still requires programming pulse delays of meaningful duration.
As programming methods evolved, so-called xe2x80x9cin-systemxe2x80x9d techniques were developed and began to find use. In-system programming or xe2x80x9cISPxe2x80x9d opened up a wide range of manufacturing, design and test techniques that had not previously existed. These techniques allow for a completely blank (unprogrammed) device to be placed on a circuit board, connected to a communication port of a PC, work station, or automated test equipment (ATE) box (e.g., using four or more wire connections), and configured while on the circuit board. This technique eliminates the need for stand alone programming units and addresses some of their associated problems such as pin damage due to mishandling and electrostatic discharge (ESD).
One problem with ISP, however, is that it employs serial and sequential operations. This means that data and programming control commands have to be shifted in serially and applied in a time consuming manner. Another problem with ISP is that the programmable device takes a relatively long time to program, especially with technologies such as EEPROM (e2) and flash memory. For example, to program these types of devices, one typically has to shift a block of data into a shift register inside of the device. This block of data is held in the shift register for a short period of time while internal control circuitry prepares to program the block of data into the device. The internal control circuitry typically examines a specific address that has been shifted in with the data, which determines where it is going to place the data in the device""s long term or permanent memory. The internal control circuitry then loads the data into the appropriate position in permanent memory and provides a programming pulse or delay to adequately complete the programming of the data block. A programming pulse can take a fairly long time, on the order of 10 milliseconds (ms) or more. With flash memory this process is typically longer, because the floating gate charge level must be checked to ensure that over-programming or over-erasing has not occurred. Accordingly, long periods of time are required by the process while these devices are being programmed. For each block of data that is shifted in, there is a delay until the next block of programming data can be shifted in. When there are many blocks of data to be shifted in (as there usually are), these sequential delays accumulate and can become significant. A compounding problem is the situation where multiple devices are desired to be programmed. If the data is not interleaved using a special algorithm (which is typically complex and expensive to develop), one must wait until all of the data for a particular device has been shifted in before moving on to a new device.
One adaptation that has evolved has been the use of automated test equipment (ATEs) to do both testing and programming. ATEs allow users to examine a complete, assembled printed circuit board (PC board) and make sure, by applying a series of so-called vector tests, that all the solder points are connected to all the other appropriate solder points on the board. According to one method, an ATE performs vector tests by applying signals through so-called boundary scan technology. This is primarily the purpose of ATE technology. ATE engineers, however, also found that they could manipulate the JTAG (Joint Test Actions Group) port (i.e., the boundary scan port) to allow for in-system programming while they were doing ATE processing. This technique is known as xe2x80x9cprogramming-at-time-of-testxe2x80x9d. This approach works well, because it allows engineers to take a PC board including a blank device, place the board into a test environment, program the device, and then do a boundary scan test to test the device and board.
One problem with using an ATE in this manner is that ATE test time can be fairly expensive in terms of dollar cost per minute. Additionally, ATE programming using the boundary scan technique is typically a serial programming technique. Thus, if there are multiple devices on a board, the user may program one device, shift data to a second device, program the second device, and so on. When programming is done sequentially, it takes a very long period of time to program multiple devices; board tests usually cannot proceed until all of the devices are programmed.
Thus, programming multiple programmable devices such as CPLDs (or any sort of programmable logicxe2x80x94e.g., micro controllers, memory, or any type of programmable logic element) takes a fairly long period of time. One continuing goal is to reduce the amount of time that is required to program a device. Further, the length of time required to program single or multiple programmable devices using known methods renders impractical the programming or re-programming of these devices over a shared network such as the internet.
Accordingly, this invention arose out of concerns associated with improving efficiencies with which programmable devices are programmed.
Programmable devices and methods of programming programmable devices are described.
In one embodiment, a programmable device comprises a controller that is configured to self-program the programmable device. It does so by configuring the device from a state in which the programmable device does not possess a desired functionality, to a programmed state in which the programmable device possesses the desired functionality. At least one first data-holding location is provided and is configured to hold the configuration data that is utilized by the controller to program the device. At least one second data-holding location is provided and is configured to receive at least some of the configuration data under the influence of the controller so that the device can be programmed to possess the desired functionality (i.e., can be xe2x80x9cdesirably programmedxe2x80x9d). In one embodiment, the first data-holding location comprises a temporary memory (such as RAM, and the like), and the second data-holding location comprises a permanent memory (such as an EEPROM, flash memory, antifuse structures and the like). In one embodiment, a host programming unit contains the configuration data that enables the programmable device to program itself. The programming unit engages the programmable device, downloads the configuration data to the first data-holding location, and then disengages the programmable device. Because the temporary memory can be programmed much more quickly than the permanent memory, the invention provides for much faster sequential programming of multiple programmable devices.
In one embodiment of the invention, the configuration data or a portion of the data is provided by the host programming unit to the programmable device all at one time (i.e., as a single block of data, whether provided in serial or parallel format), preferably before the device is permanently programmed. More time-consuming programming activities are performed by the programmable device itself, while the programming unit is free to engage in other activities, e.g., providing configuration data to other programmable devices. In this manner, multiple programmable devices can be programmed in a fraction of the time required to program the same number of devices using known programming techniques.
In another embodiment, a computerized system for programming a programmable device comprises a host programming unit that is configured to provide configuration data to a programmable device, and a programmable device that is selectively engageable by the host programming unit. The programmable device comprises a controller that is configured to self-program the programmable device by configuring the device from a state in which the programmable device is not desirably programmed, to a programmed state in which the programmable device is desirably programmed. The programmable device also comprises at least one first memory that is configured to hold the configuration data that is necessary to program the programmable device, and at least one second memory that is configured to receive the configuration data under the influence of the controller, thereby programming the device.
In yet another embodiment, a programmable logic device comprises a controller that is configured to self-program the programmable logic device. It does so by configuring the device from a state in which the programmable device is not desirably programmed, to a programmed state in which the programmable device is desirably programmed. At least one first memory is provided and is configured to hold the configuration data that is necessary to program the programmable device. At least one second memory is provided and is configured to receive the configuration data under the influence of the controller, thereby programming the device.
In a further embodiment, a programming method for programming a programmable device comprises receiving configuration data into a first memory of a programmable device. The configuration data may provide all of the data that is necessary in order to program the device, and is preferably received into the first memory all at one time (i.e., as a single block of data, whether provided in serial or parallel format). The method also comprises programming the programmable device by providing the configuration data into a second memory of the programmable device.
In yet another embodiment, a method of programming a programmable logic device comprises sending configuration data from a host programming unit to a programmable logic device. The configuration data may comprise all of the data that is necessary to program the programmable logic device. The configuration data is received into a first memory on the programmable logic device. The programmable logic device is then programmed by providing the configuration data from the first memory into a second memory on the programmable logic device.
In some embodiments, the programmable device comprises a programmable logic device such as a complex programmable logic device (CPLD).
According to another aspect of the invention, the host programming unit is remotely situated from the programmable device. The programming unit and the programmable logic device are connected through a data communications link. (The term xe2x80x9cdata communications linkxe2x80x9d as used herein includes but is not limited to the internet, intranets, Wide Area Networks (WANs), Local Area Networks (LANs), and transducer links such as those using Modulator-Demodulators (modems). The term xe2x80x9cinternetxe2x80x9d as used herein refers to a wide area data communications network, typically accessible by any user having appropriate software. The term xe2x80x9cintranetxe2x80x9d as used herein refers to a data communications network similar to an internet but typically having access restricted to a specific group of individuals, organizations, or computers. A data communications link may be a wired network, a wireless network connected, for example, by radio or satellite communications, or a combination network.) When this aspect of the invention is applied to the exemplary systems disclosed herein, the resulting time savings enables the programming and reprogramming of the target programmable logic devices while consuming a minimal amount of data communications resources.
In some embodiments, both the first memory and the second memory control the functionality of the programmable device. By providing this dual control, these embodiments allow the programmable device to become functional as soon as the first memory has been programmed, without waiting for the later (and generally slower) programming of the second memory.
In other embodiments, only the first memory controls the functionality of the programmable device. The second memory is a non-volatile memory that is used to store the configuration data when power to the device is turned off. In these embodiments, the controller is configured to load the configuration data from the second memory to the first memory after power is restored.
In other embodiments, one or both of the controller and the first memory are implemented outside of the programmable device. In one embodiment, the system of the invention comprises: a host programming unit at a first physical location; a target system at a second physical location, where the target system includes a controller, a clock generator circuit, a first memory, and a programmable logic device comprising a second memory; and a data communications link between the host programming unit and the target system. In other embodiments, the programmable logic device includes more or all of the described components of the target system.
In a further embodiment, a programming method for remotely programming a programmable device comprises receiving configuration data from a data communications link; loading the configuration data into a first data-holding location; and programming the programmable logic device by loading the configuration data from the first data-holding location into a second data-holding location included in the programmable device.