Programmable logic devices (PLDs) are a well-known type of integrated circuit that may be programmed by a circuit designer to perform user-specified logic functions. One type of PLD, a field programmable gate array (FPGA), typically includes elements such as configurable logic blocks (CLBs), input/output blocks (IOBs), and interconnect that programmably connects the CLBs and IOBs. The configuration of the CLBs, IOBs, and interconnect is determined by a bitstream which is generally stored in an external device including non-volatile memory, such as a PROM, EPROM, ROM, floppy disk, hard disk file, or network. The stored bitstream is loaded into the FPGA either at power-up or during a reconfiguration time after power-up. The FPGA itself may be implemented using volatile or non-volatile memory technology, such as static random access memory (SRAM) technology, thereby facilitating reconfiguration and providing design flexibility.
One limitation of SRAM FPGA devices is that circuit designers risk the theft of their intellectual property (i.e., their proprietary bitstream) by unauthorized persons who copy or reverse-engineer the designer's work product and then, having avoided non-recurring engineering and design costs, undercut the designer's price to customers and end users. Such copying results in significant economic injury to both the circuit designers who have lost the exclusive benefit of their own design efforts, and the FPGA manufacturers, who will likely lose design customers desiring a product less easily copied or reverse-engineered.
One available but fairly limited method of protecting the bitstream is encrypting the bitstream before it is stored in the non-volatile memory, and then decrypting the bitstream inside the FPGA using a factory-programmed, fixed key, hardwired into the device. However, using a key fixed within the FPGA at the factory is problematic if all of the FPGAs have the same key, because the design-copier need only buy a designer's product, copy the encrypted bitstream, and buy an FPGA that has the key that he needs. Then, the product can be replicated with ease on the decrypting devices without breaking the encryption code.
Therefore, a need arises in the art for a system and method for programming FPGAs, while protecting the proprietary data required to program those devices.