The present invention relates generally to reconfigurable circuits, and more specifically to programming reconfigurable circuits.
Some integrated circuits are programmable or configurable. Examples include microprocessors and field programmable gate arrays. As programmable and configurable integrated circuits become more complex, the tasks of programming and configuring them also become more complex.
In the following detailed description, reference is made to the accompanying drawings that show, by way of illustration, specific embodiments in which the invention may be practiced. These embodiments are described in sufficient detail to enable those skilled in the art to practice the invention. It is to be understood that the various embodiments of the invention, although different, are not necessarily mutually exclusive. For example, a particular feature, structure, or characteristic described herein in connection with one embodiment may be implemented within other embodiments without departing from the spirit and scope of the invention. In addition, it is to be understood that the location or arrangement of individual elements within each disclosed embodiment may be modified without departing from the spirit and scope of the invention. The following detailed description is, therefore, not to be taken in a limiting sense, and the scope of the present invention is defined only by the appended claims, appropriately interpreted, along with the full range of equivalents to which the claims are entitled. In the drawings, like numerals refer to the same or similar functionality throughout the several views.
In some embodiments of the present invention, configurable circuit 100 may have a “heterogeneous architecture” that includes various different types of PEs. For example, PE 102 may include a programmable logic array that may be configured to perform a particular logic function, while PE 104 may include a processor core that may be programmed with machine instructions. In some embodiments, some PEs may implement various types of “micro-coded accelerators” (MCAs). MCAs may be employed to accelerate particular functions, such as filtering data, performing digital signal processing (DSP) tasks, or convolutional encoding or decoding. In general, any number of PEs with a wide variety of architectures may be included within configurable circuit 100.
In some embodiments, one or more PEs may be implemented as a filter micro-coded accelerator (FMCA). A FMCA may be configured to perform computationally-intensive communications signal processing tasks. A FMCA may be configured to perform a variety of functions, such as operating as a resampling filter, digital filter, channel estimator, decimation filter, adaptive LMS equalizer, fast Fourier transformer, frequency corrector, rake receiver, spread spectrum uplink and downlink spreader/despreader, preamble detector, transmit filter, and other DSP numerically intensive functions based on a multiply/accumulate structure. An example embodiment of a FMCA is described further below with reference to
As shown in
In some embodiments, each PE is individually configurable. For example, PE 102 may be configured by loading a table of values that defines a logic function, and PE 104 may be programmed by loading a machine program to be executed by PE 104. In some embodiments, a PE may be configured or programmed to perform multiple functions. For example, a PE may perform multiple filtering functions or multiple coding or decoding functions. In some embodiments, multiple functions may operate in parallel in a PE.
In some embodiments, the routers communicate with each other and with PEs using packets of information. For example, if PE 102 has information to be sent to PE 104, it may send a packet of data to router 112, which routes the packet to router 114 for delivery to PE 104. Packets may include control information or data, and may be of any size. In embodiments that utilize packets, configurable circuit 100 may be referred to as a “packet-based heterogeneous reconfigurable architecture.”
Configurable circuit 100 may be configured by receiving configuration packets through an IO element. For example, IO element 130 may receive configuration packets that include configuration information for various PEs and IOs, and the configuration packets may be routed to the appropriate elements. Configurable circuit 100 may also be configured by receiving configuration information through a dedicated programming interface. For example, a serial interface such as a serial scan chain may be utilized to program configurable circuit 100.
Various method embodiments of the present invention may be performed by a processing element within configurable circuit 100. For example, various methods described below with reference to later figures may be performed by a processor within configurable circuit 100.
Configurable circuit 100 may have many uses. For example, configurable circuit 100 may be configured to instantiate particular physical layer (PHY) implementations in communications systems, or to instantiate particular media access control layer (MAC) implementations in communications systems. For example, configurable circuit 100 may be configured to operate in compliance with any of a variety of communication protocols, such as IEEE 802.11, IEEE 802.16, General Packet Radio Service (GPRS), Enhanced GPRS (EGPRS), Bluetooth, Ultra Wideband (UWB), third generation cellular (3GPP) wideband code division multiple access (WCDMA) spread spectrum, fourth generation cellular (4G), ITU G.992.1 Asymmetrical Digital Subscriber Line (ADSL), ADSL2+, and so forth.
In some embodiments, multiple configurations for configurable circuit 100 may exist, and changing from one configuration to another may allow a communications system to quickly switch from one PHY to another, one MAC to another, or between any combination of multiple configurations.
In some embodiments, configurable circuit 100 is part of an integrated circuit. In some of these embodiments, configurable circuit 100 is included on an integrated circuit die that includes circuitry other than configurable circuit 100. For example, configurable circuit 100 may be included on an integrated circuit die with a processor, memory, or any other suitable circuit. In some embodiments, configurable circuit 100 coexists with radio frequency (RF) circuits on the same integrated circuit die to increase the level of integration of a communications device. Further, in some embodiments, configurable circuit 100 spans multiple integrated circuit dies.
As shown in
In some embodiments, data router adapter 208 operates as a PE-independent interface to an external data router, such as router 116 (
In some embodiments, memory 216 includes a multi-ported data memory to store incoming data for processing (X data), coefficients and constants (Y data) and data generated by the Arithmetic Unit and Logic Unit (Z data). The ports on memory 216 may include the Z read for accessing data in memory, the W data write port for writing incoming data packets, X and Y read ports for reading data and coefficients during function execution, and the Z write port for storing configuration data prior to function execution and for writing data during execution by the execution units, such as logic unit 204 and data paths 1-S. In some embodiments, data selector 212 receives X and Y data reads from memory 216 plus data from RFM 214, and distributes the data to the multiple data paths 1-S and logic unit inputs. In some embodiments, RFM 214 may be configured to store previously read X data during function execution when multiple read cycles are needed to provide data for calculations.
In some embodiments, logic unit 204 may be configured to perform scalar arithmetic operations. Logic unit 204 may also supply triggered function identifiers to control unit 202, as well as register status signals for handling data dependent branching of control operations. A function identifier may be an identifier used to uniquely identify a function to be executed by the execution units. A triggered function identifier may comprise a function identifier for a function having sufficient input data to begin function execution by the execution units.
In some embodiments, FMCA 200 includes a plurality of data path execution units, such as data paths 1-S, that may be configured to perform various arithmetic operations. For example, in some embodiments, FMCA 200 may comprise eight data path execution units. Each of data paths 1-S may include a multiply-accumulator (MACC) structure, and each MACC structure may include, for example, a pre-adder 222, multiplier 224 and accumulator 226. In these embodiments, data paths 1-S may be capable of two complex multiplies or eight real multiplies per clock cycle.
In some embodiments, the pre-adders for each of the MACCs are programmable split pre-adders. For example, pre-adders may receive control information from logic unit 204 that determines the operation of one or more pre-adders. In some embodiments, pre-adders may be programmed to perform 16 bit arithmetic on 16 bit operands, and may also be programmed as split adders that treat each 16 bit operand as two eight bit operands sharing an interconnect bus. In general, a programmable split pre-adder may be any number of bits in length, and may be divisible into any number of smaller adders. For example, in some embodiments, a programmable split pre-adder may be “b” bits in length, and may be split into two adders that are “b/2” in length.
Programmable pre-adders provide flexibility when programming FMCA 200 to perform different functions in support of various communications protocols. For example, a 16 bit pre-adder may be useful when performing Fast Fourier Transforms (FFT) butterfly operations in support of orthogonal frequency division multiplexing (OFDM) protocols. Also for example, a split adder may be useful when despreading a CDMA signal with real and imaginary components represented as eight bit numbers. Examples of a programmable pre-adder programmed for this purpose are described below with reference to later figures.
In some embodiments, control unit 202 may control execution for logic unit 204 and data paths 1-S. Control unit 202 may have a function queue to store function identifiers. The function queue stores triggered function identifiers received from logic unit 204 for functions that have received sufficient data to start function execution. Control unit 202 may read the function identifiers one at a time, and generates function control signals (FCS) as necessary to perform the desired function on a clock-by-clock basis.
Configuration memory 210 may store configuration information for control unit 202. For example, in some embodiments, configuration memory 210 may store programmable logic array (PLA) configurations and look up table (LUT) configurations for a plurality of different protocols.
Data packer 206 may receive processed input data from logic unit 204 and data paths 1-S, select the desired data, and output 32 bit words to a data router adapter 208 for transmit packet assembly.
In some embodiments, FMCA 200 may perform a set of function execution operations. For example, function execution may start with control unit 202 reading a function identifier from the function queue. As data is read from memory 216, control unit 202 issues control signals on a clock-by-clock basis as necessary to logic unit 204 and data paths 1-S. The set of control signals determines how the data is processed by logic unit 204 and data paths 1-S.
In code division multiple access (CDMA) systems, channel spreading is a fundamental operation performed. It consists of two sub operations: channelization and scrambling. Channelization transforms every data symbol into a number of chips, thereby spreading the signal in frequency, and scrambling applies a scrambling code to the spread signal. Per symbol instant, the spread operation is given by
(I+jQ)C(Is+jQs) (1)
At a receiver, Ik,n″+jQk,n″ is the received kth symbol with chips n=1,2 . . . N, and I′+jQ′ is a known sequence (see eq. (2), above). The data symbol (I+jQ) may be recovered by performing the following operations:
As shown in
PLA 320 generates I′+jQ′ using scramble sequence generator 326, N-bit registers 322 and 324, and N-bit XOR operators 332 and 334, where N may be any number. N is shown as 512 in
As shown in
Referring to equation (4), above, in various embodiments of the present invention, pre-adder 350 performs I″I′+Q″Q′ for each chip or multiple chips, and accumulator 352 performs a summation over the number of chips per symbol to yield the real portion of the current symbol, I. Referring to equation (5), above, in various embodiments of the present invention, pre-adder 350 performs −I″Q′+Q″I′ for each chip, and accumulator 352 performs a summation over the number of chips per symbol to yield the imaginary portion of the current symbol, Q. The operation of the pre-adder is further described with reference to
As shown in
Pre-adder 350 provides two paths after 17 bit split adder 406. The left path is for normal 16 bit pre-adder operation, and the right path is for split-adder operation. Pre-adder 350 operates in normal 16 bit operation or split adder operation based on the state of the “S” control signal on node 430.
As shown in
Pre-adder 350 is shown computing a portion of equation (4), above, to compute the real portion I of the current symbol. In some embodiments, pre-adder includes circuitry to compute the imaginary portion Q of the current symbol. In other embodiments, an additional data path having a pre-adder and accumulator is utilized to compute the imaginary portion Q of the current symbol. Further, in some embodiments, pre-adder 350 may be dynamically reconfigured to alternate between performing equation (4) and equation (5) to calculate both I and Q.
Although
When in split mode operation (S=1), the two eight bit operands concatenated on input 503 are separately multiplied against a control input value. Instead of A, I′ and Q′ are provided on the add/subtract control signal inputs. As a result, I″ is multiplied with I′, and Q″ is multiplied with Q′. The multiplication is provided between the eight bit values I″ and Q″ and the single bit values I′ and Q′ on a bit-wise basis by the exclusive-or operation provide by the data path multiplexers 516 and 518.
Adder 522 receives the S control signal and performs 16 bit arithmetic when in normal 16 bit operation, and performs two eight bit operations when in split mode operation. When in split mode operation, split adder 402 outputs two separate sums of products as shown on node 523.
Method 600 is shown beginning with block 610 in which a despreading sequence is received as a control signal at an adder. In some embodiments, this corresponds to the despreading sequence I′+Q′ on control input 356 (
At 630, an exclusive-or is performed between the control signal and spread spectrum input data as shown and described with reference to
Method 700 is shown beginning with block 710 in which a processing element is configured within a reconfigurable circuit for byte-based despreading of a spread spectrum signal. At 720, the processing element is configured to generate a spreading sequence. At 730, a pre-adder within the processing element is configured to perform split add operations with the spreading sequence on control inputs, and at 740, an accumulator within the processing element is configured to accumulate a sum of products output from the pre-adder.
In some embodiments, the configuration acts of method 700 correspond to configuring a FMCA with a programmable split pre-adder as shown in the previous figures. The configuration acts of method 700 may be performed by reading configuration packets and programming a reconfigurable circuit such as reconfigurable circuit 100 (
In some embodiments, processor 810 may be a processor that can perform various method embodiments of the present invention. For example, processor 810 may configure configurable circuit 100 by communicating with both memory 820 and configurable circuit 100. Configurations for configurable circuit 100 may be stored in memory 820, and processor 810 may read the configurations from memory 820 when configuring configurable circuit 100. Further, processor 210 may store one or more configurations in memory 820. Processor 810 represents any type of processor, including but not limited to, a microprocessor, a microcontroller, a digital signal processor, a personal computer, a workstation, or the like.
In some embodiments, system 800 may be a communications system, and processor 810 may be a computing device that performs various tasks within the communications system. For example, system 800 may be a system that provides wireless networking capabilities to a computer. In these embodiments, processor 810 may implement all or a portion of a device driver, or may implement all or part of a MAC. Also in these embodiments, configurable circuit 100 may implement one or more protocols for wireless network connectivity. In some embodiments, configurable circuit 100 may implement multiple protocols simultaneously, and in other embodiments, processor 810 may change the protocol in use by reconfiguring configurable circuit 100. Further, processor 810 may change the behavior of a protocol in use by reconfiguring a portion of configurable circuit 100.
Memory 820 represents an article that includes a machine readable medium. For example, memory 820 represents any one or more of the following: a hard disk, a floppy disk, random access memory (RAM), dynamic random access memory (DRAM), static random access memory (SRAM), read only memory (ROM), flash memory, CDROM, or any other type of article that includes a medium readable by a machine such as processor 810. In some embodiments, memory 820 can store instructions for performing the execution of the various method embodiments of the present invention. Also in some embodiments, memory 820 can store one or more configurations for configurable circuit 100.
In operation of some embodiments, processor 810 reads instructions and data from memory 820 and performs actions in response thereto. For example, various method embodiments of the present invention may be performed by processor 810 while reading instructions from memory 820.
Antenna 842 may be either a directional antenna or an omni-directional antenna. For example, in some embodiments, antenna 842 may be an omni-directional antenna such as a dipole antenna, or a quarter-wave antenna. Also for example, in some embodiments, antenna 842 may be a directional antenna such as a parabolic dish antenna or a Yagi antenna. In some embodiments, antenna 842 is omitted, and in other embodiments, antenna 842 includes multiple antennas or multiple antenna elements.
In some embodiments, RF signals transmitted or received by antenna 842 may correspond to voice signals, data signals, or any combination thereof. For example, in some embodiments, configurable circuit 100 may implement a protocol for a wireless local area network interface, cellular phone interface, global positioning system (GPS) interface, or the like. In these various embodiments, RF interface 840 may operate at the appropriate frequency for the protocol implemented by configurable circuit 100. RF interface 840 may include any suitable components, including amplifiers, filters, mixers, and the like. In some embodiments, RF interface 840 is omitted.
Although the present invention has been described in conjunction with certain embodiments, it is to be understood that modifications and variations may be resorted to without departing from the spirit and scope of the invention as those skilled in the art readily understand. Such modifications and variations are considered to be within the scope of the invention and the appended claims.