Softmax calculation and architecture using a modified coordinate rotation digital computer (CORDIC) approach

Information

  • Patent Grant
  • 11455144
  • Patent Number
    11,455,144
  • Date Filed
    Thursday, November 21, 2019
    5 years ago
  • Date Issued
    Tuesday, September 27, 2022
    2 years ago
  • Inventors
    • Figliolia; Tomas (San Jose, CA, US)
  • Original Assignees
  • Examiners
    • Larocque; Emily E
    • Waje; Carlo
    Agents
    • Patterson + Sheridan, LLP
Abstract
Apparatus and associated methods relate to providing a modified CORDIC approach and implementing the modified CORDIC approach in SoftMax calculation to reduce usage of hardware resources. In an illustrative example, a system may include (a) a first circuit configured to transform each element Vi of an input vector V into Vi=Vpi+ki·ln 2 to generate a second data set, (b) a second circuit configured to perform exponential calculations on the second data set to generate a third data set that has a first mantissa
Description
TECHNICAL FIELD

Various embodiments relate generally to neural network processing systems.


BACKGROUND

Machine learning is the science of inducing computing systems to act without being explicitly programmed. Classical machine learning includes various clustering and classification techniques, including K—means clustering, linear and logistic regressions, stochastic gradient decent, association rule learning, and the like. Deep learning is a newer frontier in machine learning. Deep learning is a class of machine learning algorithms that uses multiple layers of nonlinear processing units for feature extraction and transformation. Deep learning algorithms can be unsupervised (e.g., pattern analysis) or supervised (e.g., classification). The deep learning algorithm can be implemented using layers of an artificial neural network (ANN) (referred to herein as a “neural network”).


In general, a neural network is a collection of nodes (e.g., the “neurons”) that are connected in a graph. A node in a neural network computes a sum of weighted inputs and adds an optional bias to the sum. The output of the node is a function of the final sum (referred to as an “activation function”). Example activation functions include the sigmoid function, the hyperbolic tangent (tan h) function, the Rectified Linear Unit (ReLU) function, and the identity function. Neural network models are often organized into layers of nodes, which define a specific topology, and corresponding weights and biases. The weights and biases are referred to as network parameters.


In general, a neural network includes an input layer and an output layer and can optionally include one or more hidden layers between the input and output layers. A neural network used in deep learning applications typically includes many hidden layers, which gives rise to the term deep neural network (DNN). The layers of a neural network can be densely connected (e.g., each node in a layer is fully connected to all nodes in a previous layer) or sparsely connected (e.g., each node in a layer is connected to only a portion of the nodes in a previous layer). A convolutional neural network (CNN) is a type of DNN that includes one or more sparsely connected layers, referred to as convolutional layers. CNN is well-suited for processing image or video data. Other types of DNNs include recurrent neural network (RNNs), which are well-suited for processing speech and text data.


SUMMARY

Apparatus and associated methods relate to providing a modified Coordinate Rotation Digital Computer (CORDIC) approach and implementing the modified CORDIC approach in SoftMax calculation to reduce the usage of hardware resources. In an illustrative example, a system may include (a) a first circuit configured to transform each element Vi of an input vector V into Vi=Vpi+ki·ln 2 to generate a second data set, (b) a second circuit configured to perform exponential calculations on the second data set to generate a third data set that has a first mantissa










j
=
1

n








2

k
j


·


f
exp



(

V
pj

)





2

k
total







and an exponent Ktotal, (c) a third circuit configured to perform logarithm calculations to generate a third sub data set that has a second mantissa







2







f
ln

(





j
=
1

n








2

k
j


·


f
exp



(

V
pj

)





2

k
total



)


,





and, (d) a fourth circuit configured to perform exponential calculations to generate an output data set that has







2


k
i

-

k
total



·


f
exp

(



V
pi

+

2







f
ln

(





j
=
1

n








2

k
j


·


f
exp



(

V
pj

)





2

k
total



)



,







the output data set may be interpreted as a probability distribution of each element Vi of the input vector V.


Various embodiments may achieve one or more advantages. In some embodiments, the modified CORDIC approach may be achieved by avoiding the calculation of multiplication and division. For example, some embodiments may implement the modified CORDIC approach in hardware to reduce hardware resources usage in, for example, silicon area by reducing the usage of multipliers and division circuits. Some embodiments may implement the modified CORDIC approach in software, allowing for simple instructions to take place (allowing simple processors to execute), without the necessity of implementing multiplications or divisions that might take many more clock cycles to execute. Accordingly, the implementation of SoftMax calculation may be simplified. In some embodiments, the SoftMax calculation with the modified CORDIC approach may be applied in convolutional neural networks to be used in different technical fields. In some embodiments, hardware resources used to implement the CORDIC approach may be shared to further save hardware sources and reduce the cost of silicon area. In some embodiments, hardware resources may be programmed to provide a programmable architecture with different resolutions.


In an exemplary aspect, a system includes (a) a first circuit configured to receive an input vector V representative of a first data set and transform each element Vi of the input vector V into Vi=Vpi+ki·ln 2 to generate a second data set, the second data set comprising a first sub data set that has Vpi and a second sub data set that has ki, −1≤Vpi≤1, and each ki is an integer. The system also includes (b) a second circuit configured to receive the second data set from the first circuit and perform exponential calculations on the second data set to generate a third data set, the third data set comprising a third sub data set that has a first mantissa







V

total





1


=





j
=
1

n




2

k
j


·


f

e

x

p




(

V

p

j


)





2

k
total








and a fourth sub data set having a first exponent ktotal, −1≤Vtotal1≤1. The system also includes (c) a third circuit configured to receive the third sub data set and perform logarithm calculations on the third sub data set to generate a fifth sub data set that has a second mantissa








V

total





2


=

2







f
ln

(





j
=
1

n








2

k
j


·


f
exp



(

V
pj

)





2

k
total



)



,


-
1



V

total





2



1.






The system also includes (d) a fourth circuit configured to receive the fourth sub data set that has the first exponent ktotal, the fifth sub data set that has the second mantissa, and the second data set that has Vpi and ki, and perform exponential calculations to generate an output data set that has







2


k
i

-

k
total



·


f
exp

(



V
pi

+

2







f
ln

(





j
=
1

n








2

k
j


·


f
exp



(

V
pj

)





2

k
total



)



,







the output data set is representative of a probability distribution of each element Vi of the input vector V.


In some embodiments, the first circuit may also include (1) a demultiplexer configured to receive each element Vi of the input vector V representative of the first data set, (2) Kint transformation circuits commonly coupled to the output of the demultiplexer to perform sequential subtraction of value In2 to an absolute value of element Vi, (3) Kint casting circuits, each casting circuit of the Kint casting circuits may be coupled to a transformation circuit of the Kint transformation circuits, and, (4) a multiplexer coupled to receive outputs from the Kint transformation circuits and outputs from the Kint casting circuits to generate the first sub data set that has Vpi and the second sub data set that has ki.


In some embodiments, the first circuit may also include a data store configured to store the first sub data set that has Vpi and the second sub data set that has ki. In some embodiments, the second circuit may also include (1) a first N-stage pipelined CORDIC circuit configured to receive the first sub data set that has Vpi and perform exponential calculations on the received Vpi to generate a sixth sub data set that has fexp(Vpi), (2) a delay circuit configured to introduce a delay on the received the second sub data set that has ki to match a delay introduced by the first N-stage pipelined CORDIC circuit, and (3) a state machine coupled to the first N-stage pipelined CORDIC circuit and the delay circuit to perform operations on the sixth sub data set to make an integer part of fexp(Vpi)≤1. In some embodiments, the operations may also include right shifting fexp(Vpi) and increasing a corresponding ki if fexp(Vpi)>1.


In some embodiments, the second circuit may also include (4) a floating point adder coupled to the state machine to perform summation on every fexp(Vpi), and (5) a floating point register coupled to the floating point adder to generate and store the third sub data set and the fourth sub data set. In some embodiments, the third circuit may also include a second N-stage pipelined CORDIC circuit coupled to the floating point register to receive the third sub data set that has the first mantissa







V

total





1


=





j
=
1

n




2

k
j


·


f

e

x

p




(

V

p

j


)





2

k
total








and perform logarithm calculations on the first mantissa Vtotal1 to generate the fifth sub data set that has the second mantissa







V

total





2


=

2








f
ln

(





j
=
1

n








2

k
j


·


f
exp



(

V
pj

)





2

k
total



)

.






In some embodiments, the fourth circuit may also include (1) a summing circuit configured to retrieve the first sub data set that has Vpi from the data store and retrieve the fifth sub data set that has the second mantissa Vtotal2 from the floating point register and generate a seventh sub data set, (2) a subtracting circuit configured to retrieve the second sub data set that has ki from memory and retrieve the fourth data set that has the exponent Ktotal from the floating point register and subtract the exponent Ktotal from ki to generate an eighth sub data set, (3) a N-stage pipelined CORDIC circuit coupled to the output of the summing circuit and configured to perform exponential calculations on the seventh sub data set to generate a ninth sub data set that has







f
exp

(



V
pi

+

2







f
ln

(





j
=
1

n








2

k
j


·


f
exp



(

V
pj

)





2

k
total



)



,






(4) a second delay path configured to introduce a delay on the received eighth sub data set, and, (5) a state machine coupled to the N-stage pipelined CORDIC circuit and the delay path to perform operations on the ninth sub data set to make an integer part of







f
exp

(



V
pi

+

2







f
ln

(





j
=
1

n








2

k
j


·


f
exp



(

V
pj

)





2

k
total



)



,






≤1 and generate the output data set.


In another exemplary aspect, a system includes a processing engine and a data storage device coupled to the processing engine and containing a program of instructions that, when executed by the processing engine, cause the processing engine to perform operations to conduct SoftMax calculation, the operations includes (a) receiving an input vector V representative of a first data set and transforming each element Vi of the input vector V into Vi=Vpi+ki·ln 2 to generate a second data set, the second data set comprising a first sub data set that has Vpi and a second sub data set that has ki, −1≤Vpi≤1, and ki is an integer, (b) performing exponential calculations on the second data set to generate a third data set, the third data set comprising a third sub data set that has a first mantissa







V

total





1


=

2






f
ln







j
=
1

n








2

k
j


·


f
exp



(

V
pj

)





2

k
total









and a fourth sub data set having a first exponent ktotal, −1≤Vtotal≤1, (c) performing logarithm calculations on third sub data set (225a) to generate a fifth sub data set that has a second mantissa








V

total





2


=

2







f
ln

(





j
=
1

n








2

k
j


·


f
exp



(

V
pj

)





2

k
total



)



,





and, (d) receiving the fourth sub data set that has the first exponent ktotal, the fifth sub data set that has the second mantissa, and the second data set that has Vpi and ki, and performing exponential calculations to generate an output data set that has







2


k
i

-

k
total



·


f
exp

(



V
pi

+

2







f
ln



(





j
=
1

n








2

k
j


·


f
exp



(

V
pj

)





2

k
total



)




,







the output data set is representative of a probability distribution of each element Vi of the input vector V.


In some embodiments, the operations may also include (a1) performing sequential subtraction of value In2 to an absolute value of element Vi. In some embodiments, the operations may also include storing the first sub data set that has Vpi and storing the second sub data set that has ki in the data storage device. In some embodiments, the operations may also include storing the first sub data set that has Vpi and storing the second sub data set that has ki in memory.


In some embodiments, the operations may also include (b1) performing exponential calculations on the received first sub data set that has Vpi to generate a sixth sub data set that has fexp(Vpi) and (b2) if fexp(Vpi)>1, right shifting fexp(Vpi) and increasing a corresponding ki to make an integer part of fexp(Vpi)≤1.


In some embodiments, the operations may also include (b3) performing summation on every fexp(Vpi), and, (b4) generating and storing the third sub data set and the fourth sub data set. In some embodiments, the operations may also include (c1) retrieving the third sub data set that has the first mantissa







V

total





1


=





j
=
1

n








2

k
j


·


f
exp



(

V
pj

)





2

k
total








and performing logarithm calculations on the first mantissa Vtotal1 to generate the fifth sub data set that has the second mantissa







V

total





2


=

2








f
ln



(





j
=
1

n








2

k
j


·


f
exp



(

V
pj

)





2

k
total



)


.






In another exemplary aspect, a method includes (a) receiving, by a first circuit, an input vector V representative of a first data set and transforming each element Vi of the input vector V into Vi=Vpi+ki·ln 2 to generate a second data set, the second data set comprising a first sub data set that has Vpi and a second sub data set that has ki, −1≤Vpi≤1, and ki is an integer, (b) receiving, by a second circuit, the second data set from the first circuit and performing exponential calculations on the second data set to generate a third data set, the third data set comprising a third sub data set that has a first mantissa







V

total





1


=





j
=
1

n








2

k
j


·


f
exp



(

V
pj

)





2

k
total








and a fourth sub data set having a first exponent ktotal, −1≤Vtotal≤1, (c) receiving, by a third circuit the third sub data set, and performing logarithm calculations on third sub data set to generate a fifth sub data set that has a second mantissa








V

total





2


=

2







f
ln



(





j
=
1

n








2

k
j


·


f
exp



(

V
pj

)





2

k
total



)




,





and, (d) receiving, by a fourth circuit, the fourth sub data set that has the first exponent ktotal, the fifth sub data set that has the second mantissa, and the second data set that has Vpi and ki, and performing exponential calculations to generate an output data set that has







2


k
i

-

k
total



·


f
exp

(



V
pi

+

2







f
ln



(





j
=
1

n








2

k
j


·


f
exp



(

V
pj

)





2

k
total



)




,






the output data set is representative of a probability distribution of each element Vi of the input vector V.


In some embodiments, the method may also include (a1) receiving, by a demultiplexer, each element Vi of the input vector V representative of the first data set, and (a2) performing, by Kint transformation circuits commonly coupled to the output of the demultiplexer, sequential subtraction of value In2 to an absolute value of element Vi. In some embodiments, the method may also include (b1) performing exponential calculations on the received first sub data set that has Vpi to generate a sixth sub data set that has fexp(Vpi), and, (b2) if fexp(Vpi)>1, right shifting fexp(Vpi) and increasing a corresponding ki to make an integer part of fexp(Vpi)≤1.


In some embodiments, the method may also include (b3) performing summation on every fexp(Vpi), and, (b4) generating and storing the third sub data set and the fourth sub data set. In some embodiments, the method may also include (c1) retrieving the third sub data set that has the first mantissa







V

total





1


=





j
=
1

n








2

k
j


·


f
exp



(

V
pj

)





2

k
total








and performing logarithm calculations on the first mantissa Vtotal1 to generate the fifth sub data set that has the second mantissa







V

total





2


=

2








f
ln



(





j
=
1

n








2

k
j


·


f
exp



(

V
pj

)





2

k
total



)


.






The details of various embodiments are set forth in the accompanying drawings and the description below. Other features and advantages will be apparent from the description and drawings, and from the claims.





BRIEF DESCRIPTION OF THE DRAWINGS


FIG. 1 depicts an exemplary programmable integrated circuit (IC) on which the disclosed circuits and processes may be implemented.



FIG. 2 depicts an exemplary modified Coordinate Rotation Digital Computer (CORDIC) engine implemented in a SoftMax layer of a convolutional neural network.



FIG. 3 depicts an exemplary vector conversion engine of the modified CORDIC engine.



FIG. 4A depicts a first exemplary rotation mode engine of the modified CORDIC engine.



FIG. 4B depicts an exemplary unit cell implemented in rotation mode.



FIG. 4C depicts another exemplary unit cell implemented in rotation mode.



FIG. 5A depicts an exemplary vectoring mode engine of the modified CORDIC engine.



FIG. 5B depicts an exemplary unit cell implemented in vectoring mode.



FIG. 5C depicts another exemplary unit cell implemented in vectoring mode



FIG. 6 depicts a second exemplary rotation mode engine of the modified CORDIC engine.



FIG. 7A depicts a block diagram of an exemplary configuration system having a development environment and an implementation environment to implement the modified CORDIC engine in a field programmable gate array (FPGA) device.



FIG. 7B depicts an exemplary method to calculate mantissa and exponent.



FIG. 8A depicts a flow chart of an exemplary design-time fabric reconfiguration method for a modified CORDIC engine.



FIG. 8B depicts a flowchart of an exemplary run-time method for performing SoftMax calculation using a modified CORDIC engine.



FIG. 9 illustrates an exemplary architecture for a System-on-Chip (SOC) on which the disclosed circuits and processes may be implemented.





Like reference symbols in the various drawings indicate like elements.


DETAILED DESCRIPTION OF ILLUSTRATIVE EMBODIMENTS

Apparatus and associated methods relate to providing a modified CORDIC approach and implementing the modified CORDIC approach in SoftMax calculation to reduce usage of hardware resources. In an illustrative example, a system may include (a) a first circuit configured to transform each element Vi of an input vector V into Vi=Vpi+ki·ln 2 to generate a second data set, (b) a second circuit configured to perform exponential calculations on the second data set to generate a third data set that has a first mantissa










j
=
1

n








2

k
j


·


f
exp



(

V
pj

)





2

k
total







and an exponent Ktotal, (c) a third circuit configured to perform logarithm calculations to generate a third sub data set that has a second mantissa







2







f
ln



(





j
=
1

n








2

k
j


·


f
exp



(

V
pj

)





2

k
total



)



,





and, (d) a fourth circuit configured to perform exponential calculations to generate an output data set that has







2


k
i

-

k
total



·


f
exp

(



V
pi

+

2







f
ln



(





j
=
1

n








2

k
j


·


f
exp



(

V
pj

)





2

k
total



)




,







the output data set may be interpreted as a probability distribution of each element Vi of the input vector V.


To aid understanding, this document is organized as follows. First, an exemplary platform (e.g., an FPGA) suitable to perform SoftMax calculation is briefly introduced with reference to FIG. 1. Second, with reference to FIGS. 2-6, the discussion turns to exemplary embodiments that illustrate architectures of a modified CORDIC engine used to perform the SoftMax calculation. Then, with reference to FIGS. 7A-8B, systems and methods to configure and operate the modified CORDIC engine are discussed. Finally, with reference to FIG. 9, another exemplary platform (e.g., a system-on-Chip (SOC)) suitable to perform SoftMax calculation is briefly introduced.



FIG. 1 depicts an exemplary programmable integrated circuit (IC) on which the disclosed circuits and processes may be implemented. A programmable IC 100 includes FPGA logic. The programmable IC 100 may be implemented with various programmable resources and may be referred to as a System on Chip (SOC). Various examples of FPGA logic may include several diverse types of programmable logic blocks in an array.


For example, FIG. 1 illustrates a programmable IC 100 that includes a large number of different programmable tiles including multi-gigabit transceivers (MGTs) 101, configurable logic blocks (CLBs) 102, blocks of random access memory (BRAMs) 103, input/output blocks (IOBs) 104, configuration and clocking logic (CONFIG/CLOCKS) 105, digital signal processing blocks (DSPs) 106, specialized input/output blocks (I/O) 107 (e.g., clock ports), and other programmable logic 108 (e.g., digital clock managers, analog-to-digital converters, system monitoring logic). The programmable IC 100 includes dedicated processor blocks (PROC) 110. The programmable IC 100 may include internal and external reconfiguration ports (not shown).


In various examples, a serializer/deserializer may be implemented using the MGTs 101. The MGTs 101 may include various data serializers and deserializers. Data serializers may include various multiplexer implementations. Data deserializers may include various demultiplexer implementations.


In some examples of FPGA logic, each programmable tile includes a programmable interconnect element (INT) 111 having standardized inter-connections 124 to and from a corresponding interconnect element in each adjacent tile. Therefore, the programmable interconnect elements taken together implement the programmable interconnect structure for the illustrated FPGA logic. The programmable interconnect element INT 111 includes the intra-connections 120 to and from the programmable logic element within the same tile, as shown by the examples included in FIG. 1. The programmable interconnect element INT 111 includes the inter-INT-connections 122 to and from the programmable interconnect element INT 111 within the same tile, as shown by the examples included in FIG. 1.


For example, a CLB 102 may include a configurable logic element (CLE) 112 that may be programmed to implement user logic, plus a single programmable interconnect element INT 111. A BRAM 103 may include a BRAM logic element (BRL) 113 and one or more programmable interconnect elements. In some examples, the number of interconnect elements included in a tile may depend on the height of the tile. In the pictured implementation, a BRAM tile has the same height as five CLBs, but other numbers (e.g., four) may also be used. A DSP tile 106 may include a DSP logic element (DSPL) 114 and one or more programmable interconnect elements. An 10B 104 may include, for example, two instances of an input/output logic element (IOL) 115 and one instance of the programmable interconnect element INT 111. The actual I/O bond pads connected, for example, to the I/O logic element 115, may be manufactured using metal layered above the various illustrated logic blocks, and may not be confined to the area of the input/output logic element 115.


In the pictured implementation, a columnar area near the center of the die (shown shaded in FIG. 1) is used for configuration, clock, and other control logic. Horizontal areas 109 extending from the column distribute the clocks and configuration signals across the breadth of the programmable IC 100. Note that the references to “columnar” and “horizontal” areas are relative to viewing the drawing in a portrait orientation.


Some programmable ICs utilizing the architecture illustrated in FIG. 1 may include additional logic blocks that disrupt the regular columnar structure making up a large part of the programmable IC. The additional logic blocks may be programmable blocks and/or dedicated logic. For example, the processor block PROC 110 shown in FIG. 1 spans several columns of CLBs 102 and BRAMs 103.



FIG. 1 illustrates an exemplary programmable IC architecture. The numbers of logic blocks in a column, the relative widths of the columns, the number and order of columns, the types of logic blocks included in the columns, the relative sizes of the logic blocks, and the interconnect/logic implementations are provided purely as examples. For example, in an actual programmable IC, more than one adjacent column of CLBs 102 may be included wherever the CLBs 102 appear, to facilitate the efficient implementation of user logic.


Field programmable gate arrays (FPGAs) have been used to implement circuits that can perform different functions. A subset of artificial intelligence (AI), machine learning (ML) encompasses a wide range of methods and algorithms. FPGAs may serve as the hardware platform for implementing machine learning algorithms.


Some matrices may allow an input vector to be rotated by a certain angle (I). In the R2 case, the matrix that may rotates counterclockwise an input vector by is:










R
ϕ

=

[




cos





ϕ





-
sin






ϕ






sin





ϕ




cos





ϕ




]





(
1
)








One exemplary hyperbolic rotation matrix in the R2 case may be:







[




x







y





]

=



R

hyp





ϕ




[



x




y



]


=


[




cos





h





ϕ




sin





h





ϕ






sin





h





ϕ




cos





h





ϕ




]

×

[



x




y



]









x′=x·cos hϕ+y·sin   (2a)
y′=x·sin hϕ+y·cos   (2b)


For an input vector










[



x




y



]

=

{




x
=


cos





h





Φ

=



e
Φ

+

e

-
Φ



2








y
=


sin





h





Φ

=



e
Φ

-

e

-
Φ



2











(
3
)








when hyperbolically rotated by ϕ, the input vector may become:










x


=



cos





h






ϕ
·
cos






h





Φ

+

sin





h






Φ
·
sin






h





Φ


=






e
ϕ

+

e

-
ϕ



2

·



e
Φ

+

e

-
Φ



2


+




e
ϕ

-

e

-
ϕ



2

·



e
Φ

-

e

-
Φ



2



=




e

ϕ
+
Φ


2

+


e

-

(

ϕ
+
Φ

)



2


=

cos






h


(

ϕ
+
Φ

)










(
4
)







y


=



sin





h






ϕ
·
cos






h





Φ

+

cos





h






ϕ
·
sin






h





Φ


=






e
ϕ

-

e

-
ϕ



2

·



e
Φ

+

e

-
Φ



2


+




e
ϕ

+

e

-
ϕ



2

·



e
Φ

-

e

-
Φ



2



=




e

ϕ
+
Φ


2

-


e

-

(

ϕ
+
Φ

)



2


=

sin






h


(

ϕ
+
Φ

)










(
5
)







Equation (2a) and equation (2b) may also be rewrote:













x


=



x
·
cosh






ϕ

+


y
·
sinh






ϕ








=

cosh





ϕ






(

x
+


y
·
tanh






ϕ


)









(
6
)










y


=



x
·
sinh






ϕ

+


y
·
cosh






ϕ








=

cosh





ϕ






(

y
+


x
·
tanh






ϕ


)









(
7
)







As matrix Rhypϕ may rotate by any angle ϕ, the rotation may be decomposed into more elementary rotations ϕi, with i∈N. When there is a sequence di and ϕi, di∈{−1, 1}, the following iterative equations may converge to a desired ϕ rotation:











x

i
+
1


=

cosh







ϕ
i

·

(


x
i

+



y
i

·

d
i

·
tanh







ϕ
i



)











y

i
+
1


=

cosh







ϕ
i

·

(


y
i

+



x
i

·

d
i

·
tanh







ϕ
i



)











z

i
+
1


=


z
i

-


d
i

·

ϕ
i








(
8
)







(xi+1, yi+1) may converge to the (x, y) coordinates of an input vector (x0, Y0) that has been rotated clockwise or counterclockwise according to the di values, with elementary rotations determined by the sequence ϕi. If the input vector will be rotated by z0, then the equation (8) may be used to determine if di is 1 or −1. If at a certain iteration, zi is negative, then di=−1. If zi is positive, then di=1. Different di values may make the value in z converge to 0 as more iterations are added. In some embodiments, z may be not the one desired to converge to 0, but x or y. For example, if y is selected to converge to 0, then di may take values according to the current value of yi. For example, di may be chose to be −1 when yi is positive, which may make the second iterative equation in the equation (8) converge to 0. Then, equation (6) and equation (7) may become:














x
=


cos







h
(





a





tan






h


(

-


y
0


x
0



)



)

·

(


x
0

+



y
0

·
a






tan






h


(

-


y
0


x
0



)




)











=



1


1
-


(


y
0

/

x
0


)

2




·

(


x
0

-


y
0
2

/

x
0



)


=



x
0
2

-

y
0
2










(
9
)











y
=
0





(
10
)











z
=


z
0

+

a





tan






h


(


y
0


x
0


)









(
11
)







Two different modes can be derived from these iterative equations. A first mode, Rotation Mode, makes z→0. A second mode, Vectoring Mode, makes y→0 or x→0. And the iterative equations (8) may be then rewritten:

xi+1=xi+yi·di·f(i)
yi+1=yi+xi·di·f(i)
zi+1=zi−di·a tan h(f(i))

In Rotation Mode Convergence:

xn=An−1·(x0·cos h(z0)+y0·sin h(z0))
yn=An−1·(y0·cos h(z0)+x0·sin h(z0))
zn=0











A
n

=




i
=
1

n







cos





h






ϕ
i











Rule
:

d
i


=

-
1


,



when






z
i


<
0

;


otherwise






d
i


=
1






(
12
)








Rule: di=−1, when zi<0; otherwise di=1  (12)


In Vectoring Mode Convergence:







x
n

=


A
n

-
1


·



x
0
2

-

y
0
2











y
n

=
0







z
n

=


z
0

+


a

tan

h



(


y
0

/

x
0


)









y
n=0
Zn=Z0+a tan h(y0/x0)
Rule:di=−1, when yi>0; otherwise di=1


In iterative equations (12), tan hϕi is replaced by f(i), and ϕi=a tan h(f(i)). This modification only generates the elementary ϕi angles using a chosen f(i) sequence and does not change the convergence of the algorithm. The f(i) sequence may have particular characteristics to make the iterative algorithm work. In order to make the iterative algorithm work, any choice ϕ of may be represented as













i
=
1


+






d
i

·

ϕ
i



,




(
13
)








for a particular range:






ϕ


[


-




i
=
1


+





ϕ
i



;




i
=
1


+





ϕ
i



]





The boundaries for ϕ's input range may represent the choice of all −1 s or 1s for the di sequence. A first condition over sequence ϕi is that









i
=
1


+





ϕ
i






converge to provide input boundaries.










2
·




i
=
1


+










d
i

·

ϕ
i




=


2
·




i
=
1


+





a





tan






hf


(
i
)





=






i
=
1


+





ln


(


1
+

f


(
i
)




1
-

f


(
i
)




)









i
=
1


+





(


1
+

f


(
i
)




1
-

f


(
i
)




)


-
1


=




i
=
1


+






2
·

f


(
i
)




1
-

f


(
i
)











(
14
)







Because of the logarithm calculation, a condition needed for








f


(
i
)







is







1
+

f


(
i
)




1
-

f


(
i
)





>
0.





Two cases may be possible: (a) both (1+f(i)) and (1−f(i)) are negative, which is incompatible; or (b) both (1+f(i)) and (1−f(i)) are positive, which is compatible. Thus, sequence f(i) may be bounded −1<f(i)<1. By using this condition over f(i), and knowing that f(i) needs to converge to 0 for i→∞, using the limit comparison theorem,









i
=
1


+






2
·

f


(
i
)




1
-

f


(
i
)









is bounded, as long as









i
=
1


+





f


(
i
)







converges. From equation 14, is concluded that: if −1<f(i)<1 and









i
=
1


+





f


(
i
)







converges, then









i
=
1


+






2
·

f


(
i
)




1
-

f


(
i
)









will converge. Accordingly, 2·









i
=
1


+






d
i

·

ϕ
i







will converge. The first condition may be concluded as:









i
=
1


+





ϕ
i






needs to converge, which will happen if









i
=
1


+





f


(
i
)







converges, with −1<f(i)<1, ∀i.


For iteration (k−1) in Rotation Mode, if at the iteration, the algorithm has already reached a desired angle ϕ, then the choice of the remaining di sequence has to be so that










i
=
k


+






d
i

·

ϕ
i



=
0.





If this condition is not held, then the algorithm may not be able to reach the target rotation. There will be a sequence di, for i={k, k+1, k+2, . . . }, so that











ϕ

k
-
1


=





i
=
k


+






d
i

·

ϕ
i



=





i
=
k


+





ϕ
i


-

2
·











i

k


,


s
.
t
.
di

=

-
1






ϕ
i














(
16
)







In some embodiments, when the iterative algorithm is finally mapped into hardware, a more relaxed condition may be that at least the summation of all of the ϕi angles for i≥k will be greater than ϕk−1.


A second condition to make the iterative algorithm to work is any element in sequence ϕi will be equal or lower than the summation of the remaining ϕi values. That is:








ϕ
k






i
=

k
+
1



+





ϕ
i



,



k


N
.







If the iterative algorithm converges, then all of the subsequences representing the distance between the target angle and the current angle in the algorithm will converge to 0. When a condition ϕnn+1 is applied, for n>c, with c being a finite constant, there will be a value k such that from iteration k−1 to k, the iteration may always get closer to the target ϕ. The iterative algorithm may be divided into two sequences, one for which i is odd, and the other one for which i is even. For both cases, the subsequences representing the distance to the target ϕ may both converge to 0. When considering ϕnn+1, for n>c, with c∈N, and applying f (i):











ln






(


1
+

f


(
n
)




1
-

f


(
n
)




)


>

ln






(


1
+

f


(

n
+
1

)




1
-

f


(

n
+
1

)




)












(

1
-

f


(

n
+
1

)



)

·

(

1
+

f


(
n
)



)


>


(

1
+

f


(

n
+
1

)



)

·

(

1
-

f


(
n
)



)






f


(
n
)


>

f


(

n
+
1

)








(
17
)







A third condition to make the iterative algorithm to work is that there has to be a value c, for which ϕnn+1 when n>c, with c∈N. This is equivalent to ask that there is a value c∈N, for which f(n)>f(n+1), when n>c. For the first condition and the third condition, the condition on ϕn may be translated to the condition on f(i). For the second condition, a particular sequence f(i) may be tested to see whether the second condition is satisfied in the ϕi domain.


CORDIC (Coordinate Rotation Digital Computer), is a simple and efficient algorithm to calculate hyperbolic and trigonometric functions. For CORDIC sequences, in some embodiments, f(i) may be selected to be 2−i (original CORDIC f(i)=2−i sequence). This sequence may satisfy the first condition and the third condition easily, as











i
=
i


+





2

-
i



=
1

,





and 2−n>2−(n+1). Whether this sequence satisfies the second condition may be checked:










ϕ
i

=



a





tan






h


(

f


(
i
)


)








i
=
k


+





ϕ
i



=




i
=
k


+





a





tan






h


(

f


(
i
)


)









(
18
)








Taylor expansion around 0 for at atanh











atanh


(
x
)







is





n
=
0


+






x


2

n

+
1




2

n

+
1




,













so
















i
=
k


+





ϕ
i


=





i
=
k


+





atanh


(

f


(
i
)


)



=




i
=
k


+








n
=
0


+







f


(
i
)




2

n

+
1




2

n

+
1











=




n
=
0


+






1


2

n

+
1




(




i
=
k


+






f


(
i
)




2

n

+
1



)










(

19

a

)
















i
=
k


+





x
i


=


x
k


1
-
x



,



x


<
1

,





the equation (19a) may be transformed to:













i
=
k


+









ϕ
i


=




n
=
0


+






1


2

n

+
1


·


2

-

k


(


2

n

+
1

)





1
-

2

-

(


2

n

+
1

)











(

19

b

)











ϕ

k
-
1


-




i
=
k


+





ϕ
i



=





n
=
0


+






1


2

n

+
1


·

2


-

(

k
-
1

)




(


2

n

+
1

)





-




n
=
0


+






1


2

n

+
1


·


2

-

k


(


2

n

+
1

)





1
-

2

-

(


2

n

+
1

)














=




n
=
0


+






1


2

n

+
1






·

2

-

k


(


2

n

+
1

)




·

(


2

(


2

n

+
1

)


-

1

1
-

2

-

(


2

n

+
1

)






)










(
20
)








As term 2−k(2n+1)>0, then term







2

(


2

n

+
1

)


-

1

1
-

2

-

(


2

n

+
1

)










should be negative which only happens if 22n<1 (21), which is not possible. Thus, original CORDIC f(i)=2−i sequence is not satisfying the second condition.


In Rotation mode, if x0=y0=1, then:













x
n

=


y
n

=


A
n

-
1




(


1
·

cosh


(

z
0

)



+

1
·

sinh


(

z
0

)




)









=



A
n

-
1




(




e

z
0


+

e

-

z
0




2

+



e

z
0


-

e

-

z
0




2


)


=


A
n

-
1


·

e

z
0











(
22
)








This result shows that in Rotation mode, if x0=y0=1, then both xn and yn converge to a value proportional to ez0.


For the case of Vectoring Mode, if z0=0, then:










z
n

=


0
+

a


tanh


(


y
0

/

x
0


)




=



1
2


ln






(




y
0

/

x
0


+
1




y
0

/

x
0


-
1


)


=


1
2



ln


(



y
0

+

x
0




y
0

-

x
0



)









(
23
)






And
,


if






x
0


=

ϕ
+
1


,


and






y
0


=

ϕ
-
1


,


then


:



z
n


=


a


tanh


(


ϕ
-
1


ϕ
+
1


)



=


1
2


ln





ϕ







(
24
)








Thus, zn will actually converge to a value that is proportional to a logarithmic value.


In one example, f(i) sequence may be:












f


(
i
)


=

1
2


,


1
4

+

1
8


,

1
4

,


1
8

+

1

1

6



,

1
8

,


1

1

6


+

1

3

2



,

1

1

6


,


1

3

2


+

1

6

4



,

1

3

2













(

25

a

)









i=1,2,3,4,5,6,7,8,9, . . .   (25b)


The values in equation (25a) shows that additional values






(


e
.
g
.

,


1
4

+

1
8


,


1
8

+

1

1

6



,


1

1

6


+

1

3

2



,


1

3

2


+


1

6

4















)





have been added to the original CORDIC f(i)=2−i sequence. In the original CORDIC f(i) sequence is







1
2

,

1
4

,

1
8

,

1

1

6


,

1

3

2







etc. in the modified cordic version, there is a change to that sequence. For example, the modified f(i) sequence shown in Equation 25a. In this sequence, intermediate values are used, for example







(


1
4

+

1
8


)

.





In order to achieve a multiplication by this value, the hardware resources are incremented with respect to the original CORDIC implementation. The modified CORDIC engine may be implemented with significantly reduced hardware resources. The modified CORDIC sequence in equation (25a) can be shown to satisfy the second condition. The exponential function is computed in Rotation mode, and the desired input to the exponential function may be represented as









i
=
k


+






d
i

·


ϕ
i

.







For example, to calculate the exponential function in [−a; a], the condition is













i
=
k


+





ϕ
i




a
.





(
26
)








The logarithm function is computed in Vectoring mode, and the desired resulted may appear in zn in equation (12) as may be represented as ½ lnϕ. Then, all values ½ lnϕ may be representable as









i
=
k


+






d
i

·


ϕ
i

.







The supported input range for the logarithm calculation may be achieved.











-




i
=
k


+





ϕ
i






1
2


ln





ϕ






i
=
k


+





ϕ
i










e


-
2






i
=
k


+





ϕ
i





ϕ


e

2





i
=
k


+





ϕ
i









(
27
)








FIG. 2 depicts an exemplary modified CORDIC engine implemented in a SoftMax layer of a convolutional neural network. SoftMax is a function that may be used at the output of neural networks (e.g., Convolutional neural networks (CNNs)), and allows for predictions to be non-linearly scaled in such a way that large numbers may be amplified, and small numbers may be attenuated. The equation for SoftMax is:










SoftMax
(

V


)

=


(


e

V
1


,

e

V
2


,





,

e

V
n



)





j
=
1

n



e

V
j








(
28
)








For a single element in the equation (28),











SoftMax
i



(

V


)


=


e

V
i






j
=
1

n



e

V
j








(
29
)








Values Vi may be assigned any value. In some embodiments, the integer part of Vi may be constrained to [−2Kint−1; 2Kint−1], which means Kint bits may be assigned to represent the signed integer part of Vi, with i∈{1, 2, . . . , n}.


A modified CORDIC engine 200 may be used to receive an input vector V representative of an input data set 205 and perform SoftMax computation on the input data set 205 to obtain an output data set 255 that may be interpreted as a probability distribution of each element Vi in the input vector V. In some embodiments, the modified CORDIC engine 200 may also include a data store configured to store the data set 205. In order to compute SoftMax using the Rotation mode and the Vectoring mode of the modified-CORDIC method, which allows to compute both the exponential and logarithm function, every value Vi in {right arrow over (V)} may be transformed to a new representation:

Vi=Vpi+ki·ln2, withVpi∈(−1,1), ki∈Z  (30)

As Vi∈[−2Kint−1; 2Kint−1], a binary search may be performed with values:

2Kint−1·ln2,2Kint−2·ln2,2Kint−3·ln2, . . . ,1·ln2  (31)










ln






2
·




i
=
0



K

i

n

t


-
1




2
i




=


ln






2
·


1
-

2

K
int




1
-
2




=


ln






2
·

(


2

K

i

n

t



-
1

)






2

K

i

n

t



-
1







(
32
)








Equation (32) shows that with just Kint iterations, for every Vi value, its ki and the remainder of that iterative search may be assigned to Vpi, which will be a value ∈(−1,1).


The modified CORDIC engine 200, in this depicted example, includes a Vector Conversion Engine (VCE) 210 used to receive the input data set 205 and perform the transformation (shown in equation (30)) to generate a second data set 215 that includes a second-sub1 data set 215a (comprising Vpi) and a second-sub2 data set 215b (comprising ki). By introducing the VCE 210 with Kint parallel instantiations of the binary search shown in equation (32), a back to back stream of Vi may be translated into a back to back output of values Vpi and ki. An example of a VCE architecture is described in further detail with reference to FIG. 3. Based on the equation (30), the SoftMax of a single element may be defined as:











SoftMax
i



(

V


)


=



e

V
i






j
=
1

n



e

V
j




=



e


V

p

i


+



k
i

·

l

n







2







j
=
1

n



e


V

p

j


+



k
j

·
ln






2





=



2

k
i


·

e

V

p

i








j
=
1

n



(


2

k
j


·

e

V

p

j




)









(
33
)








SoftMax has been converted into exponential functions, with the Vpi being ∈(−1, 1).


In some embodiments, the Rotation mode of the modified-CORDIC method may be used for exponential calculation, and based on the equation (26), the following constraint may be met for all of the ϕi values:

Σ∀iϕi>1  (34)

Unscaled modified-CORDIC exponential output may be defined as fexp(V)=e V/An′ where An is the scaling factor in equation (12).











SoftMax
i



(

V


)


=




2

k
i


·

e

V

p

i








j
=
1

n



(


2

k
j


·

e

x

p

j




)



=



2

k
i


·

e

V

p

i








j
=
1

n



(


2

k
j


·


f

e

x

p




(

V

p

j


)


·
An

)








(
35
)








By applying the natural logarithm, and after the exponential,














SoftMax
i



(

V


)


=


e


l


n


(


2

k
i


·

e

V

p

i




)



-

ln
(




j
=
1

n



(


2

k
j


·


f

e

x

p




(

V

p

j


)






·
An

)















=



2

k
i


·
A




n

-
1


·

e


V

p

i


-

ln
(




j
=
1

n



(


2

k
j


·


f

e

x

p




(

V

p

j


)



)














(
36
)







Every value in the summation









j
=
1

n



(


2

k
j


·


f
exp



(

V

p

j


)



)






may be represented as a floating point number, and a floating point adder may be used to perform the summation. An example of a RME1 architecture is described in further detail with reference to FIG. 4A. The summation









j
=
1

n



(


2

k
j


·


f
exp



(

V

p

j


)



)






may add up to 2ktotal·Vtotal. The exponent result after the floating point addition of all of the values may be ktotal, the mantissa result after the floating point addition of all of the values may be Vtotal, and the SoftMax for a single element may be:











SoftMax
i



(

V


)


=



2


k
i

-

k

t

o

t

a

l




·
A




n

-
1


·

e


V

p

i


-

ln
(





j
=
1

n




2

k
j


·


f

e

x

p




(

V

p

j


)





2

k

t

o

t

a

l




)









(
37
)








The mantissa in the floating point adder holds values up to 1, then the most significant bit (MSB) of that mantissa may be 1, and:










1
2







j
=
1

n




2

k
j


·


f
exp



(

V

p

j


)





2

k
total




1




(
38
)







The modified CORDIC engine 200 includes a first Rotation Mode Engine (RME) 220 configured to perform the exponential calculation on the second data set 215 to obtain a third data set 225. The third data set 225 includes a third-sub1 data set 225a comprising Vtotal and a third-sub2 data set 225b comprising ktotal.


The modified CORDIC engine 200 also includes a floating point register 230 configured to receive the third data set 225 from the RME1 220. The modified CORDIC engine 200 also includes a Vectoring Mode Engine (VME) 240 coupled to the floating point register 230 to perform logarithm function on a third-sub1 data set 225a of the second processed data set 225. The VME 240 generates a fourth-sub1 data set 235a, and the fourth-sub1 data set 235a is then stored in the floating point register 230. An example of an VME architecture is described in further detail with reference to FIG. 5A. To compute the logarithm function using the Vectoring Mode of the modified-CORDIC, the condition may be:










-





i




ϕ
i






-

1
2




ln
(









j
=
1

n




2

k
j


·


f

e

xp




(

V

p

j


)





2

k
total



)








i




ϕ
i






(
39
)








The input to the logarithm function will be ∈[½, 1), and the constraint is:









-

ln
(






j
=
1

n




2

k
j


·


f

e

x

p




(

V

p

j


)





2

k
total





2
·





i




ϕ
i









(
40
)











j
=
1

n




2

k
j


·


f

e

x

p




(

V

p

j


)





2

k
total





e


-
2

·





i




ϕ
i








(
41
)








The smallest value that










j
=
1

n




2

k
j


·


f

e

x

p




(

V

p

j


)





2

k
total







may achieve is ½, and the constraint on ϕi may then be loosen:







1
2



e


-
2

·



i



ϕ
i






















i




ϕ
i





ln


(
2
)


2






(
42
)








This condition on ϕi is already satisfied considering the first condition in equation (34). The modified CORDIC method may be used to compute the








-

1
2




ln
(





j
=
1

n




2

k
j


·


f

e

x

p




(

V

p

j


)





2

k
total



)


,





and the modified CORDIC implementation may be called








f
ln



(
V
)


=


-

1
2



ln







(
V
)

.







By satisfying the equation (34), the exponential functions may be performed first, and the logarithm functions may be then performed. The SoftMax of a single element may become:










Soft







Max
i



(

V


)



=


2


k
i

-

k

t

o

t

a

l




·

An

-
1


·

e


V

p

i


+

2



f

l

n


(





j
=
1

n




2

k
j


·


f
exp



(

V
pj

)





2

k
total



)









(
43
)








The modified CORDIC may be implemented in Rotation Mode to calculate the exponential function







e


V

p

i


+

2



f

l

n


(





j
=
1

n




2

k
j


·


f
exp



(

V
pj

)





2

k
total



)




.





The modified CORDIC engine 200 also includes a second Rotation Mode Engine (RME) 250 configured to perform exponential calculations on the second data set 215 and a fourth data set 245 (comprising the fourth-sub1 data set 235a and the third-sub2 data set 225b) to generate the output data set 255. The condition to perform the exponential function is the exponential function may be representable as Σ∀idi·ϕi.











-
1




V

p

i


+

2



f

l

n


(





j
=
1

n




2

k
j


·


f

e

x

p




(

V

p

j


)





2

k
total



)





1
-

ln


1
2




=

1
+

ln





2






(
44
)








A stronger constraint on the ϕi values may be obtained: Σ∀iϕi≥1+ln 2 (45) As long as the ϕi values satisfy the first condition, the second condition, the third condition and the condition shown in (44), the SoftMax of a single element may become:










Soft







Max
i



(

V


)



=


2


k
i

-

k

t

o

t

a

l




·


f

e

x

p


(


V

p

i


+

2



f

l

n


(





j
=
1

n




2

k
j


·


f

e

x

p




(

V

p

j


)





2

k
total



)









(
46
)








In this depicted example, the floating point register 230 is implemented in the modified CORDIC engine 200. In some embodiments, some parts or all of the floating point register 230 may be implemented in the RME1 220, the VME 240 and/or the RME2 250. For example, the floating point register 230 may be implemented in the RME1 220. Thus, by using the modified CORDIC method that mainly based on shifts and adds, and without the need of any multipliers or dividers, SoftMax calculations may be easily performed. Accordingly, the implementation of SoftMax calculations may advantageously reduce the cost of silicon area. Although, in this depicted example, the RME1 220, the VME 240 and the RME2 250 are discussed as three different circuits, in some embodiments, the RME1 220, the VME 240 and the RME2 250 may be implemented in a single programmable circuit that may perform all of these functions. Thus, hardware resources used to form the modified CORDIC engine to perform SoftMax calculations may be advantageously reduced.



FIG. 3 depicts an exemplary vector conversion engine of the modified CORDIC engine. As discussed before, every element Vi of a vector V in the input data set 205 may be converted into a new representation shown in equation (30). This conversion may be accomplished by performing a sequential subtraction of values ln2 for each Vi element. This conversion, as shown in equation (31), may take Kint clock cycles. The VCE 210 is configured to perform the vector conversion. The values Vi injected into the VCE 210 may be fixed point values, and a number of bits Kint may be used to represent the integer part, and a number of bits Kfrac may be used to represent the fractional part of the fixed point values.


In this depicted example, the VCE 210 includes a 1-to-Kint (Kint+Kfrac)-bit demultiplexer 305. The demultiplexer 305 is configured to receive Vi. A first selection signal 306 may be used to control the demultiplexer 305. The VCE 210 also includes Kint (e.g., 10) transformation circuits 3101-310Kint configured to perform sequential subtraction of the value ln(2) to the absolute value of transformation circuits' inputs Vi. The number of times the subtraction was able to take place will be ki values, and the remainder will be Vpi. In this depicted example, the number of bits utilized in this case for the precision of the value ln(2) has been chosen to be 24. The choice of 24 may be changed. The Kint transformation circuits 3101-310Kint are coupled to the output of the demultiplexer 305. Each transformation circuit 3101-310Kint is configured to generate a corresponding first signal 3111-311Kint (e.g., 24-bit signal) and a corresponding second signal 3121-312Kint. Each of the second signals 3121-312Kint is a Kint-bit signal.


The VCE 210 also includes Kint casting circuits 3151-315Kint configured to trim the number of precision bits from, for example, 24 bits to Cit+1 bits. The value Cit corresponds to the number of iterations chosen in the CORDIC algorithm. The additional bit in Cit+1 is used to consider the sign bit. Each of the casting circuits 3151-315Kint is coupled to a corresponding transformation circuit 3101-310Kint to receive a corresponding first signal 3111-311Kint and generate a corresponding third signal 3181-318Kint.


The VCE 210 also includes a Kint-to-1(Kint+Cit+1)-bit multiplexer 320. The Kint-to-1(Kint+Cit+1)-bit multiplexer 320 is configured to receive the third signals 3181-318Kint and the second signals 3121-312Kint. A second selection signal 322 may be used to control the multiplexer 320. The multiplexer 320 is configured to output the second data set 215. The second data set 215 includes the second-sub1 data set 215a and the second-sub2 data set 215b. The second-sub1 data set 215a includes (Cit+1)-bit Vpi. The second-sub2 data set 215b includes Kin-bit corresponding ki. Then, every element Vi is converted into a new representation Vi=Vpi+ki·ln 2, with Vpi ∈(−1,1), ki ∈Z shown in equation (30). The VCE 210 also includes memory 330 of N words of (Kint+Cit+1) bits. The memory 330 is configured to receive the second-sub1 data set 215a and the second-sub2 data set 215b. A counter 335 may be used to point to the address in memory 330 where a next bit of the second-sub1 data set 215a and the second-sub2 data set 215b to be stored.



FIG. 4A depicts a first exemplary rotation mode engine of the modified CORDIC engine. The RME1 220 is coupled to the output of the VCE 210 to receive the second data set 215. In this depicted example, the RME1 220 includes a casting circuit 410 configured to cast its (Cit+1)-bit input (e.g., Vpi) into (Cit+Z)-bit input.


The RME1 220 also includes a first pipeline-CORDIC architecture 415 coupled to the output of the casting circuit 410. The first pipeline-CORDIC architecture 415 is configured by cascade-connecting Cit stages of unit cells 4201-420Cit. Each stage of unit cell may be configured to work in rotation mode. An exemplary architecture of the rotation mode stage is discussed in further detail with reference to FIG. 4B. Each unit cell 4201-420Cit configured to receive four inputs Xin, Yin, Zin, ϕi, and generate three outputs Xout, Yout, Zout. Each unit cell 4201-420Cit may introduce one clock cycle delay Z−1. The four inputs Xin, Yin, Zin, and ϕi are configured to receive input data (e.g., incoming values Xi, Yi, Zi, and a corresponding angle ϕ1˜ϕcit, respectively). The incoming values received by the first unit cell 4201 are 1, 1, Vpi, and ϕ1.


The RME1 220 also includes a first delay path 425 configured to receive the second-sub2 data set 215b. The first delay path 425 may include one or more delay units connected in series to introduce a delay equal to the delay caused by the first pipeline-CORDIC architecture 415. The RME1 220 also includes a first state machine 430. The first state machine 430 is configured to the output of the first pipeline-CORDIC architecture 415 to receive a sixth signal 423 that includes fexp(Vpj) and the output of the first delay path 425 to receive a seventh signal 427 that includes a delayed ki. The first state machine 430 is configured to perform operations to generate an eighth signal 431 that includes fexp′(Vp1) and a ninth signal 432 in response to the received sixth signal 423 and the received seventh signal 427. The first state machine 430 is configured to make sure that the value of fexp(Vpj) doesn't have any integer part. If fexp(Vpj) has an integer part, then fexp(Vpj) will be shifted and ki will be increased accordingly, and the eighth signal 431 (e.g., shifted fexp(Vpj)) and the ninth signal 432 (e.g., increased ki) are obtained. For example, when fexp(Vpj)>1, then a shift to the right of up to two positions may be performed, with an increase in the corresponding ki value. In the first pipeline-CORDIC architecture 415, the exponential calculation is performed, and the maximum input value in input Zin of unit cell 4201 will be the numeric value 1, making the maximum possible output fexp(Vpj) 2.71=e{circumflex over ( )}1. Thus, the integer part of the result fexp(Vpj) may be up to 2 (e.g., integer part=0, 1 or 2) and the state machine 430 is configured to perform the transformation only when integer part is 1 or 2 (which maps to the cases of MSBs=‘01’ and MSB=‘1’ in FIG. 4A).


The RME1 220 also includes a summing circuit (e.g., a floating point adder) 440. The summing circuit 440 is configured to receive the eighth signal 431 and the ninth signal 432 from the first state machine 430. Both a tenth signal 441 that includes fexp(Vpj) and an eleventh signal 442 that includes corresponding ki value will be added and accumulated for all the samples into the floating point register 230. The final values (e.g., the third data set 225) held by the floating point register 230 may include mantissa Vtotal (included in a third-sub1 data set 225a) and the exponent ktotal (included in a third-sub2 data set 225b), the mantissa







V
total

=






j
=
1

n




2

k
j


·


f

e

x

p




(

V

p

j


)





2

k
total



.






FIG. 4B depicts an exemplary unit cell implemented in rotation mode. In the original CORDIC, f(i) sequence is







1
2

,

1
4

,

1
8

,

1

1

6


,


1

3

2








etc
.







In the modified CORDIC version, there is a change to that f(i) sequence. For example, the modified f(i) sequence shown in Equation 25a. In the modified f(i) sequence, intermediate values are used, for example







(


1
4

+

1
8


)

.





In order to achieve a multiplication by this value, the hardware resources are incremented with respect to the original CORDIC implementation. The intermediate values may be used very seldomly so that the three conditions mentioned before are satisfied. When θi=1, an exemplary unit cell 420i implemented in the first pipeline-CORDIC architecture 415 includes a first buffer 450a configured to receive xi, a second buffer 450b configured to receive yi, and a third buffer 450c configured to receive zi. xi, yi, and zi represent the respective input values from port Xin, Yin and Zin in a given CORDIC stage i. The value θi=1 indicates a value that is the interpolation of two consecutive values is in the 2{circumflex over ( )}(−i) sequence. The third buffer 450c is configured to output a first intermediate output signal 451 and a second intermediate output signal 452. The first intermediate output signal 451 includes the MSB of input zi to identify the sign of the input zi, and the second intermediate output signal 452 includes the whole input zi.


The unit cell 420i also includes a first shifter 455a coupled to the output of the first buffer 450a. The first shifter 455a may right shift the input xi (i−∈(i)+1) bits and then generates a first shifted signal 460a. The unit cell 420i also includes a second shifter 455b coupled to the output of the first buffer 450a. The second shifter 455b may right shift (i−∈(i)) bits of the input xi and then generates a second shifted signal 460b. The unit cell 420i also includes a third shifter 455c coupled to the output of the second buffer 450b. The third shifter 455c may right shift (i−∈(i)+1) bits of the input yi and then generates a third shifted signal 460c. The unit cell 420i also includes a fourth shifter 455d coupled to the output of the second buffer 450b. The fourth shifter 455d may right shift (i−∈(i)) bits of the input yi and then generates a fourth shifted signal 460d.


A first summing circuit 465a receives the third and fourth shifted signal 460c and 460d and generates a first summing signal 467a. The first summing signal 467a is inverted by a first inversion circuit 470a (e.g., an inverter). The first summing signal 467a and the inverted first summing signal 472a are received by a two-input multiplexer 475a. A second summing circuit 465b receives the first and second shifted signal 460a and 460b and generates a second summing signal 467b. The second summing signal 467b is inverted by a second inversion circuit 470b. The second summing signal 467b and the inverted second summing signal 472b are received by a two-input multiplexer 475b.


The first intermediate output signal 451 is used as a selection signal for both the multiplexer 475a and the multiplexer 475b. The multiplexer 475a then generates a first selected signal 478a, the first selected signal 478a and the input signal xi are received by a third summing circuit 480a to generate a first iteration signal 485a that includes xi+1. The multiplexer 475b generates a second selected signal 478b, the second selected signal 478b and the input signal yi are received by a fourth summing circuit 480b to generate a second iteration signal 485b that includes yi+1. The unit cell 420i also includes a third inversion circuit 470c receives and inverts a first angle signal that includes ϕi. The first angle signal ϕi and the first inverted angle signal 472c are received by a third multiplexer 475c. The first intermediate output signal 451 is also used as a selection signal for the multiplexer 475c. The multiplexer 475c generates a third selected signal 478c, the third selected signal 478c and first angle signal ϕi are received by a fifth summing circuit 480c to generate a third iteration signal 485c that includes zi+1.



FIG. 4C depicts another exemplary unit cell implemented in rotation mode. When θi=0, an exemplary unit cell 420i′ implemented in the first pipeline-CORDIC architecture 415 includes the first buffer 450a configured to receive xi, the second buffer 450b configured to receive yi, and the third buffer 450c configured to receive z1. The value θi=0 indicates a value that is the interpolation of two consecutive values is not in the 2{circumflex over ( )}(−i) sequence.


The unit cell 420i′ includes the second shifter 455b coupled to the output of the first buffer 450a. The second shifter 455b may right shift the input xi (i−∈(i)) bits and then generates the second shifted signal 460b. The unit cell 420i also includes the fourth shifter 455d coupled to the output of the second buffer 450b. The fourth shifter 455d may right shift the input yi (i−∈(i)) bits and then generates the fourth shifted signal 460d.


The fourth shifted signal 460d is then inverted by the first inversion circuit 470a (e.g., an inverter). The fourth shifted signal 460d and the inverted fourth shifted signal 473a are received by the multiplexer 475a. The second shifted signal 460b is inverted by the second inversion circuit 470b. The second shifted signal 460b and the inverted second shifted signal 473b 472b are received by the multiplexer 475b. The first intermediate output signal 451 is used as a selection signal for both the multiplexer 475a and the multiplexer 475b. The multiplexer 475a then generates a first selected signal 479a, the first selected signal 479a and the input signal xi are received by the third summing circuit 480a to generate a first iteration signal 490a that includes xi+1. The multiplexer 475b generates a second selected signal 479b, the second selected signal 479b and the input signal yi are received by the fourth summing circuit 480b to generate a second iteration signal 490b that includes yi+1. The unit cell 420i also includes the third inversion circuit 470c receives and inverts the first angle signal that includes ϕi. The first angle signal ϕi and the first inverted angle signal 472c are received by the third multiplexer 475c. The first intermediate output signal 451 is also used as a selection signal for the multiplexer 475c. The multiplexer 475c generates a third selected signal 478c, the third selected signal 478c and first angle signal ϕi are received by the fifth summing circuit 480c to generate the third iteration signal 490c that includes zi+1.



FIG. 5A depicts an exemplary vectoring mode engine of the modified CORDIC engine. The VME 240 is configured to receive the third-sub1 data set 225a and perform logarithm calculations on the third-sub1 data set 225a to generate a fourth-sub1 data set 235a. In this depicted example, the VME 240 includes a casting circuit 505 casting its (Cit 2)-bit input into (Cit+XY)-bit input. The casting circuit 505 is coupled to the floating point register 230 to receive the mantissa Vtotal (e.g., the third-sub1 data set 225a). The mantissa Vtotal is then received by a first subtracting circuit 510a and a fourth summing circuit 510b, respectively. The first subtracting circuit 510a subtracts one from the mantissa Vtotal to generate a first subtracting signal 512. The fourth summing circuit 510b adds 1 to the mantissa Vtotal to generate a first summing signal 513.


The VME 240 also includes a second pipeline-CORDIC architecture 515 coupled to the output of the first subtracting circuit 510a and the output of the fourth summing circuit 510b. The second pipeline-CORDIC architecture 515 is configured by cascade-connecting Cit stages of unit cells 5201-520Cit. Each stage of unit cell may be configured to work in vectoring mode. An exemplary architecture of the vectoring mode stage is discussed in further detail with reference to FIG. 5B. Each unit cell 5201-520Cit includes four inputs Xin, Yin, Zin, ϕi and three outputs Xout, Yout, Zout. The four inputs Xin, Yin, Zin, and ϕi are configured to receive input data (e.g., incoming values Xi, Yi, Zi, and a corresponding angle ϕ1˜ϕcit, respectively). The incoming values received by the four inputs Xin, Yin, Zin, ϕi of the first unit cell 5201 are the first summing signal 513, the first subtracting signal 512, 0, and ϕ1, respectively.


The VME 240 also includes a shifter and trimming circuit 525 coupled to the output Zout zof the last unit cell 520Cit in the second pipeline-CORDIC architecture 515 to shift the output Zout of the last unit cell 520Cit by one position to achieve the multiplication by 2 required, and trimming the input number of bits from Cit+Z to Cit. The shifter and trimming circuit 525 outputs a logarithm signal (e.g., fourth-sub1 data set 235a) that includes






2




f

l

n


(





j
=
1

n




2

k
j


·


f

e

x

p




(

V

p

j


)





2

k
total



)

.






The fourth-sub1 data set 235a is then stored in the floating point register 230.



FIG. 5B depicts an exemplary unit cell implemented in vectoring mode. When θi=1, an exemplary unit cell 520i implemented in the second pipeline-CORDIC architecture 515 includes a first buffer 550a configured to receive xi, a second buffer 550b configured to receive yi, and a third buffer 550c configured to receive zi. xi, yi, and zi represent the respective input values from port Xin, Yin and Zin in a given CORDIC stage i. The second buffer 550b is configured to output a first intermediate output signal 551 and a second intermediate output signal 552. The first intermediate output signal 551 includes the MSB of input yi to identify the sign of the input yi, and the second intermediate output signal 552 includes the whole input yi.


The unit cell 520i also includes a first shifter 555a coupled to the output of the first buffer 550a. The first shifter 555a may right shift the input xi (i−∈(i)+1) bits and then generates a first shifted signal 560a. The unit cell 520i also includes a second shifter 555b coupled to the output of the first buffer 550a to receive second intermediate output signal 552 includes the whole input yi. The second shifter 555b may right shift the input xi (i−∈(i)) bits and then generates a second shifted signal 560b. The unit cell 520i also includes a third shifter 555c coupled to the output of the second buffer 550b. The third shifter 555c may right shift the input yi (i−∈(i)+1) bits and then generates a third shifted signal 560c. The unit cell 520i also includes a fourth shifter 555d coupled to the output of the second buffer 550b. The fourth shifter 555d may right shift the input yi (i−∈(i)) bits and then generates a fourth shifted signal 560d.


A summing circuit 565a receives the third and fourth shifted signal 560c and 560d and generates a first summing signal 567a. The first summing signal 567a is inverted by a first inversion circuit 570a (e.g., an inverter). The first summing signal 567a and the inverted first summing signal 572a are received by a two-input multiplexer 575a. A second summing circuit 565b receives the first and second shifted signal 560a and 560b and generates a second summing signal 567b. The second summing signal 567b is inverted by a second inversion circuit 570b. The second summing signal 567b and the inverted second summing signal 572b are received by a two-input multiplexer 575b.


The first intermediate output signal 551 is used as a selection signal for both the multiplexer 575a and the multiplexer 575b. The multiplexer 575a then generates a first selected signal 578a, the first selected signal 578a and the input signal xi are received by a third summing circuit 580a to generate a first iteration signal 585a that includes xi+1. The multiplexer 575b generates a second selected signal 578b, the second selected signal 578b and the input signal yl are received by a fourth summing circuit 580b to generate a second iteration signal 585b that includes yi+1. The unit cell 520i also includes a third inversion circuit 570c receives and inverts a first angle signal that includes ϕi. The first angle signal ϕi and the first inverted angle signal 572c are received by a third multiplexer 575c. The first intermediate output signal 551 is also used as a selection signal for the multiplexer 575c. The multiplexer 575c generates a third selected signal 578c, the third selected signal 578c and first angle signal ϕi are received by a fifth summing circuit 580c to generate a third iteration signal 585c that includes zi+1.



FIG. 5C depicts an exemplary unit cell implemented in vectoring mode. When θi=0, an exemplary unit cell 520i′ implemented in the second pipeline-CORDIC includes the first buffer 550a configured to receive xi, the second buffer 550b configured to receive yi, and the third buffer 550c configured to receive zi. The second buffer 550b is configured to output the first intermediate output signal 551 and the second intermediate output signal 552. The first intermediate output signal 551 includes the MSB of input yi to identify the sign of the input yi, and the second intermediate output signal 552 includes the whole input yi.


The unit cell 520i also includes the second shifter 555b coupled to the output of the first buffer 550a. The second shifter 555b may right shift the input xi (i−∈(i)) bits and then generates the second shifted signal 560b. The unit cell 520i also includes the fourth shifter 555d coupled to the output of the second buffer 550b to receive the second intermediate output signal 552 includes the whole input yi. The fourth shifter 555d may right shift the input yi (i−∈(i)) bits and then generates the fourth shifted signal 560d.


The fourth shifted signal 560d is inverted by a first inversion circuit 570a (e.g., an inverter). The fourth shifted signal 560d and the inverted fourth shifted signal 573a are received by the multiplexer 575a. The second shifted signal 560b is inverted by the second inversion circuit 570b. The second shifted signal 560b and the inverted second shifted signal 573b are received by the multiplexer 575b.


The first intermediate output signal 551 is used as a selection signal for both the multiplexer 575a and the multiplexer 575b. The multiplexer 575a then generates a first selected signal 579a, the first selected signal 579a and the input signal xi are received by the third summing circuit 580a to generate a first iteration signal 590a that includes xi+1. The multiplexer 575b generates a second selected signal 579b, the second selected signal 579b and the input signal yi are received by the fourth summing circuit 580b to generate a second iteration signal 590b that includes yi+1. The unit cell 520i also includes the third inversion circuit 570c receives and inverts a first angle signal that includes ϕi. The first angle signal ϕi and the first inverted angle signal 572c are received by the third multiplexer 575c. The first intermediate output signal 551 is also used as a selection signal for the multiplexer 575c. The multiplexer 575c generates a third selected signal 578c, the third selected signal 578c and first angle signal ϕi are received by the fifth summing circuit 580c to generate a third iteration signal 590c that includes zi+1. In some embodiments, as hardware resources used in the first pipelined-architecture 415 are similar to the hardware resources used in the second pipelined-architecture 515, a hybrid architecture may be designed to work in a rotation mode or a vectoring mode by a control signal. For example, a multiplexer may be used to receive both the sign signal 451 of input Zi and sign signal of input yi, and the control signal may select between the two sign signals 451 and 551 to control working mode of the hybrid architecture.



FIG. 6 depicts a second exemplary rotation mode engine of the modified CORDIC engine. The RME2 250 is configured to receive the second data set 215 (having Vpi and ki) and the fourth data set 425 (having






2



f

l

n


(





j
=
1

n




2

k
j


·


f

e

x

p




(

V

p

j


)





2

k
total



)






and ki).


In this depicted example, the RME2 250 includes a second subtracting circuit 602 configured to subtract exponent ktotal (included in the third-sub2 data set 225b) from ki (included in the second-sub2 data set 215b) and generate a second subtracting signal 604 (that includes ki−ktotal). The RME2 250 also includes an eighth summing circuit 608 configured to receive the second-sub1 data set 215a that includes Vpi and the fourth-sub1 data set 235a that includes






2



f

l

n


(





j
=
1

n




2

k
j


·


f

e

x

p




(

V

p

j


)





2

k
total



)






to generate a second summing signal 609. The second summing signal 609 (includes







V

p

i


+

2



f

l

n


(





j
=
1

n




2

k
j


·


f

e

x

p




(

V

p

j


)





2

k
total



)







is then casted from Cit+2 bits into Cit+Z bits in a casting circuit 610. A third pipeline-CORDIC architecture 615 coupled to the output of the casting circuit 610. The third pipeline-CORDIC architecture 615 is configured by cascade-connecting Cit stages of unit cells 6201-620Cit. Each stage of unit cell may be configured to work in rotation mode. Each unit cell 6201-620Cit includes four inputs Xin, Yin, Zin, ϕi, and three outputs Xout, Yout, Zout. The four inputs Xin, Yin, Zin, and ϕi are configured to receive input data (e.g., incoming values Xi, Yi, Zi, and a corresponding angle ϕ1˜ϕcit, respectively). The incoming values received by the first unit cell 6201 are 1, 1, the second summing signal 609, and ϕ1. In some embodiments, the third pipeline-CORDIC architecture 615 may have the same architecture with the first pipeline-CORDIC architecture 415 as shown in FIGS. 4A-4C.


The RME2 250 also includes a second delay path 625 configured to receive the second subtracting signal 604 (that includes ki−ktotal). The second delay path 625 may include one or more delay units connected in series to introduce a delay equal to the delay caused by the third pipeline-CORDIC architecture 615. The RME2 250 also includes a second state machine 630. The second state machine 630 is configured to the output of the third pipeline-CORDIC architecture 615 to receive a twelfth signal 623 that includes







f

e

x

p


(


V

p

i


+

2



f

l

n


(





j
=
1

n




2

k
i


·


f

e

x

p




(

V

p

i


)





2

k
total



)








and the output of the delay path 625 to receive a thirteenth signal 627 that includes a delayed second subtracting signal. The second state machine 630 is configured to perform operations to generate the output data set 255 in response to the received twelfth signal 623 and the received thirteenth signal 627. For example, when







f

e

x

p


(




V

p

i


+

2



f

l

n


(





j
=
1

n




2

k
i


·


f
exp



(

V

p

i


)





2

k
total



)



>
1

,






then a shift to the right of up to two positions may be performed, with an increase in the corresponding ki value. Thus, SoftMax calculation may be easily performed by the modified CORDIC engine 200.



FIG. 7A depicts a block diagram of an exemplary configuration system having a development environment and an implementation environment to implement the modified CORDIC engine in a field programmable gate array (FPGA) device. A configuration system 700 includes a development environment 705. The development environment 705 may be a software suite (such as the Vivado® Suite distributed by Xilinx, Inc) including a number of tools for performing EDA design. A user may, via a user interface, use a high-level language to generate, at design time, instructions that can produce, via register transfer logic (RTL) generation at compile time, a modified CORDIC engine (e.g., the modified CORDIC engine 200) that, at run-time, can efficiently perform SoftMax calculation. The environment 705 includes a, for example, high-level language program 710, such as HDL code, that is used for designing hardware systems. The program 710 may be compiled by a high-level language compiler 715. The HLL compiler 715 operatively connects with the HLL program 710 and a database 720. In this depicted example, the database 720 includes user libraries 720a and HLL libraries 720b. For example, the user libraries 720a may include different multiplexers, inversion circuits, and delay circuits. The HLL compiler 715 may select available library files in the database 720 to compile HLL commands into one or more sets of instructions, which may also be referred to as data structures.


The environment 705 may be running on a processor 723 operably coupled to non-volatile memory (NVM) 725. NVM 725 contains instructions, that when executed by the processor 723, cause the processor 723 to perform operations that enable the various tools and functionality of the environment 705. For example, the NVM 725 may include design-time executable instructions that perform various operations involving EDA design. NVM 725 also may include design-time executable instructions that include various programs, routines, and/or operations that are executed during design time for a target device (e.g., when the target device is being configured/set up).


The configuration system 700 includes an implementation environment 730. In some examples, the implementation environment 730 may be packaged with the development environment 705. The implementation environment 730 includes various tools 730a for hardware and/or software simulation, synthesis/regeneration, and/or implementation (e.g., place and route). An implementation engineer, for example, may employ some compiler tools to convert the instructions stored in the NVM 725 into hardware/software implementations 730a that can be loaded via a bitstream, for example, into a target device such as an FPGA. In some embodiments, the implementation environment 730 may generate the appropriate data files to realize fixed hardware (e.g., in an ASIC) in accordance with the design specified by, for example, the user-input high-level language programming in the development environment 705.


A target device 735 may, for example, be a system on a chip (SOC) that includes various components, at least one among them being a field programmable gate array (FPGA) 740. The FPGA 740 may be programmed/configured “on-the-fly” to the modified CORDIC engine 200 by taking a bitstream of the implementation generated by environments 705 and 730 and writing the bitstream into programmable logic (PL) of the FPGA 740.


The target device 735 includes a number of buffers 745a (e.g., which may form an I/O interface) that connect external signals into the FPGA 740. The FPGA 740 may include n programmable logic blocks that represent programmable hardware resources available to realize circuitry in accordance with the design specified by, for example, the user-input high-level language programming in the development environment 705. The FPGA 740 also connects with other devices 745b, which may provide a variety of auxiliary functions. Exemplary process flow steps that may be performed at design time are described in further detail, for example, with reference to FIG. 8A. Thus, by using the modified CORDIC method that mainly based on shifts and adds, and without the need of any multipliers, SoftMax calculations may be easily performed. Accordingly, the implementation of SoftMax calculations may advantageously reduce the cost of silicon area and/or the instructions performed by a processing engine.


In some embodiments, part or all functions of the modified CORD IC engine 200 may be implemented in the processor 723. A data storage device (e.g., NVM 725) may be coupled to the processor 723 and containing a program of instructions that, when executed by the processor 723, cause the processor 723 to perform operations to conduct SoftMax calculation. The operations may include (a) retrieving an input vector V representative of an input data set, (b) transforming each element Vi of the input vector V into another expression shown in equation 30 to generate a second data set (e.g., the second data set 215), (c) determining (e.g., by the processor 723) whether each and every element Vi in the input vector V has been transformed. If all elements have been transformed, the operations may also include (d) performing exponential calculations on the second data set 215 to generate a third data set 225 comprising a third-sub1 data set 225a and a third-sub2 data set 225b, and (e) performing logarithm calculations to generate a fourth-sub1 data set 235a and storing the fourth-sub1 data set 235a in the floating point register 230. The operations may also include (f) performing exponential calculations to generate an output data set (e.g., the output data set 255). Thus, SoftMax calculations may be easily performed by using the modified CORDIC method that mainly based on shifts and adds, and without the need of any multipliers.


An example to implement the modified-CORDIC method in software is discussed. The following pseudo code explains an exemplary way to calculate the exponential function using the modified-CORDIC method. According to the number of iterations used (cordic_iter or Cit shown in FIG. 4A), and the input range of values for which the exponential function is evaluated, sequences f(i), ϕi, and ϕi may be defined. In a modified-CORDIC implementation, there are values of i for which








f


(
i
)


=

2

-

(

i
-


Σ

j
=
1


i
-
1



j


)




,





and there are also values of i for which








f


(
i
)


=


2

-

(

i
-


Σ

j
=
1


i
-
1



j


)



+

2

-

(

i
+
1
-


Σ

j
=
1


i
-
1



j


)





,





which may be determined by the values of sequence θi. When θi=0,








f


(
i
)


=

2

-

(

i
-


Σ

j
=
1


i
-
1



j


)




,





and when θi=1,







f


(
i
)


=


2

-

(

i
-


Σ

j
=
1


i
-
1



j


)



+


2

-

(

i
+
1
-


Σ

j
=
1


i
-
1



j


)



.











θ
i



{

0
,
1

}








ϵ


(
i
)


=




j
=
1


i
-
1




θ
j









f


(
i
)


=

{







2

-

(

i
-

ϵ


(
i
)



)



,


if






θ
i


=
0









2

-

(

i
-

ϵ


(
i
)



)



+

2

-

(

i
+
1
-

ϵ


(
i
)



)




,


if






θ
i


=
1











ϕ
i


=


atanh






(

f


(
i
)


)







exp
range


=





i
=
1


+










ϕ
i







A
n



=




i
=
1

n



cosh






ϕ
i












Exemplary algorithm ALGORITHM-1 to perform exponential calculations may be:















1:
Procedure EXP_CORDIC


2:
   cordic_iter ← number of cordic iterations


3:
   xystate ← 1


4:
   in_value ← exponential input value ϵ (−exprange, exprange)


5:
   zstate ← in_value


6:
    i ← 1


7:
 loop:


8:
  while i ≤ cordic_iter do


9:
     if zstate < 0 then


10:
        if θi == 0 then


11:
          xystate ← xystate −(xystate >> i − ϵ(i))


12:
        else


13:
          xystate ← xystate − (xystate >> i − ϵ(i)) − (xystate >> i + 1 − ϵ(i))


14:
      zstate ← zstate i


15:
     else


16:
       if θi == 0 then


17:
         xystate ← xystate +(xystate >> i − ϵ(i))


18:
       else


19:
          xystate ← xystate + (xystate >> i − ϵ(i)) + (xystate >> i + 1 − ϵ(i))


20:
      zstate ← zstate −ϕi


21:
     i = i + 1









The final value of variable xystate variable in the ALGORITHM-1 may be proportional to desired exponential, with a value of An−1·e−in_value. The following pseudo code explains an exemplary way to calculate the logarithm function using the modified-CORDIC method. In some embodiments, sequences f(i), ϕi, and θi used in the exponential and the logarithm CORDIC-based calculations may be kept the same. According to the choice of ϕi, a new input range may be defined for the logarithm implementation. In this example,








ln
range

=

e


2
·

Σ

i
=
1


+






ϕ
i




,





and the input range of values for the logarithm calculation may be ∈(lnrange−1, lnrange). Exemplary algorithm ALGORITHM-2 to perform logarithm calculations may be:















1:
Procedure LN_CORDIC


2:
   cordic_iter ← number of cordic iterations


3:
    in_value ← logarithm input value ϵ (lnrange−1, lnrange)


4:
    xstate ← in_value +1


5:
    ystate ← in_value −1


6:
   zstate ← 0


7:
     i ← 1


8:
 loop:


9:
  while i ≤ cordic_iter do


10:
      if ystate > 0 then


11:
         if θi == 0 then


12:
           xstate ← xstate −(ystate >> i − ϵ(i))


13:
           ystate ← ystate −(xstate >> i − ϵ(i))


14:
      else


15:
           xstate ← xstate − (ystate >> i − ϵ(i)) − (ystate >> i + 1 − ϵ(i))


16:
           ystate ← ystate − (xstate >> i − ϵ(i)) − (xstate >> i + 1 − ϵ(i))


17:
       zstate ← zstate i


18:
     else


19:
        if θi == 0 then


20:
          xstate ← xstate +(ystate >> i − ϵ(i))


21:
          ystate ← ystate +(xstate >> i − ϵ(i))


22:
        else


23:
          xstate ← xstate + (ystate >> i − ϵ(i)) + (ystate >> i + 1 − ϵ(i))


24:
          ystate ← ystate + (xstate >> i − ϵ(i)) + (xstate >> i + 1 − ϵ(i))


25:
       zstate ← zstate −ϕi


26:
     i = i + 1









The final value of the variable zstate in the ALGORITHM-2 may be proportional to a desired logarithm, with a value of ½ ln (in_value). The following pseudocode depicts a way that SoftMax is calculated over in input vector {right arrow over (V)}=(V(1), V(2), . . . , V(n)), using the exponential and logarithm calculations based on the modified-CORDIC method. In this depicted example, each number V(i) may not be a very large number, and input transformation steps may be achieved by performing an iterative subtraction instead of dividing. Exemplary algorithm ALGORITHM-3 to perform input transformation may be:















1:
Procedure SOFTMAX_CORDIC


2:
 {right arrow over (V)} ← input vector of values V(1) to V(n)


3:
1. Input transformation: Each value in the input vector {right arrow over (x)} is transformed into two values







VP(i) and kP(i), so that V(i) = VP(i) + kP(i) · ln2.








4:
 {right arrow over (kP)}← {right arrow over (0)}


5:
 {right arrow over (VP)}← {right arrow over (0)}


6:
 for (i = 1; i ≤ n;i + + ) do


7:
  if V(i) < 0 then


8:
    aux← −V(i)


9:
  else


10:
    aux← V(i)


11:
  while aux − ln2 >0 do


12:
     aux ← aux - ln2


13:
     kP(i) ← kP(i) + 1


14:
  VP(i) ← aux


15:
  if V(i) < 0 then


16:
   kP(i) ← − kP(i)


17:
   VP(i) ← −V(i)


18:
2. Calculate Normalizing Factor: For each −1<VP(i)<1, a condition may need to meet is



















exp
range

=





i
=
1


+





ϕ
i



1.








This





step





may





generate





the





dominator





of





the





Softmax





expression

,





which





is









i
=
1


+







2


k
P



(
i
)



·
exp








CORDIC


(


V
P



(
i
)


)


.




























This normalizing value will be then scaled by An.


19:
   norm← 0


20:
   for (i = 1; i ≤ n; i + + ) do


21:
    norm ← norm +( expCORDIC (VP(i)) >>kP(i))


22:
3. Calculate the logarithm: The normalizing constant may be expressed in its floating







point representation norm=normmant · 2normexp . The logarithm is applied to the variable norm,


and ln(norm)=ln(normmant · 2normexp)=ln(normmant)+ ln(2normexp )= ln(2normexp )+ 2.


lnCORDIC(normmant). In this example, mantissa may be a number between 0.10... and 0.11...,


meaning that it will be ∈ [0.5, 1), making the input range of the lnCORDIC(normmant) function





work with the condition
i=1+ϕi1.












23:
    level 1 ← −2· lnCORDIC(normmant)


24:
    level 2 ← -normexp


25:
4. Calculate the second exponential: the input will be VP(i) + lnval1. The







variable val1 may achieve a maximum value of ln(2), and the input range of the exponential


function expCORDIC may go up to I +ln(2), and the new condition for ϕi may become























i
=
1


+





ϕ
i




1
+


ln


(
2
)


.













The values in the variables xSF will be the output of SoftMax.






26:
   {right arrow over (VSF)}← {right arrow over (0)}


27:
   for (i = 1; i ≤ n;i + + ) do


28:
     VP(i) ← expCORDIC (VP(i) + lnval1)


29:
     kP(i) ← kP(i) + lnval2


30:
     VSF(i) ← (VP(i) << kP(i))









The following exemplary sequences are defined for a number of CORDIC iterations equal to, for example, 12. Other sequences may be used as long as the previously mentioned three conditions are satisfied.







θ


=

[

0
,
1
,
0
,
1
,
0
,
0
,
1
,
0
,
0
,
1
,
0
,
1

]








f


=

[


1
2

,


1
4

+

1
8


,

1
4

,


1
8

+

1

1

6



,

1
8

,

1

1

6


,


1

3

2


+

1

6

4



,

1

3

2


,

1

6

4


,


1

1

2

8


+

1

2

5

6



,

1

1

2

8


,


1

2

5

6


+

1

5

1

2




]








ϕ


=

[



0
.
5


493

,

0.3

942

,
0.2552
,
0.1897
,


0
.
1


2

5

7

,

0.0626











,
0.0469
,

0.0313
.




0.0156

,

0.

0

1

1

7

,


0
.
0


0

7

8

,


0
.
0


059


]








ϵ


=

[

0
,
0
,
1
,
1
,
2
,
2
,
2
,
3
,
3
,
3
,
4
,
4

]








V


=

(


-
3.73

,


4
.
1


3

,
1.32
,


-
4.0


2

,


2
.
2


1

,
0.46
,


4
.
5


7

,


2
.
6


4

,

-
3.42

,
3.00

)





The method to calculate SoftMax is explained step by step. In the first step, input vectors are transformed. By iteratively subtracting ln(2), the new format of vectors are obtained. For example, Vp(1)+kp(1)ln(2)=−0.2643−5*ln2=−3.72=V(1). {right arrow over (Vp)}=[−0.2643, 0.6643, 0.6269, −0.5543, 0.1306, 0.4600, 0.4111, 0.5606, −0.6474, 0.2274], {right arrow over (kp)}=[−5, 5, 1, −5, 3, 0, 6, 3, −4, 4].


Then, a first exponential function is used to calculate the normalizing factor. The exponential calculation will be shown for the first element of {right arrow over (Vp )} and {right arrow over (kp)}. The zstate is set to Vp(1)=−0.2643.

  • 1: zstate≥0, θ(i)=0, iter=1,
    • xystate=xystate+(xystate>>iter+ϵ(j))=1−(1>>1+0)=1.5
    • zstate=Zstate−ϕ(j)=0.22741−0.54931=−0.32189
  • 2: zstate<0,θ(i)=1, iter=2,
    • xystate=xystate−(xystate>>iter−ϵ(j))−(xystate>>iter+1−ϵ(j))
    • =1.5−(1.5>>2−0)−(1.5>>2+1−0)=0.9375
    • zstate=zstate+ϕ(j)=−0.32189+0.39423=0.072334
  • 3: zstate≥0, θ(i)=0, iter=3,
    • xystate=xystate+(xystate>>iter−ϵ(j))=0.9375−(0.9375>>3+1)=1.1719
    • zstate=zstate−ϕ(j)=0.072334−0.25541=−0.18308
  • 4: zstate<0, θ(i)=1, iter=4,
    • xystate=xystate−(xystate>>iter−ϵ(j))−(xystate>>iter+1−ϵ(j))
    • =1.1719−(1.1719>>4−1)−(1.1719>>4+1−1)=0.95215
    • zstate=zstate+ϕ(j)=−0.18308+0.18974=0.0066658
  • 5: zstate≥0, θ(i)=0, iter=5,
    • xystate=xystate+(xystate>>iter−ϵ(j))=0.95215>>5+2)=1.0712
    • zstate=zstate−ϕ(j)=0.0066658−0.12566=−0.11899
  • 6: zstate<0, θ(i)=0, iter=6,
    • xystate=xystate−(xystate>>iter−ϵ(j))=1.0712−(1.0712>>6−2)=1. 0042
    • zstate=zstate+ϕ(j)=−0.11899+0.0.6582=−0.05641
  • 7: zstate<0, θ(i)=1, iter=7,
    • xystate=xystate−(xystate>>iter−ϵ(j))−(xystate>>iter+1−ϵ(j))
    • =1.0042−(1.0042>>7−2)−(1.0042>>7+1−2)=0.95715
    • zstate=zstate+ϕ(j)=−0.05641+0.046909=−0.0095005
  • 8: zstate<0, ϕ(i)=0, iter=8,
    • xystate=xystate−(xystate>>iter−ϵ(j))=0.95715−(0.95715>>8−3)=0.92724
    • zstate=zstate+ϕ(j)=−0.0095005+0.03126=0.02176
  • 9: zstate≥0, θ(i)=0, iter=9,
    • xystate=xystate+(xystate>>iter−ϵ(j))=0.92724−(0.92724>>9+3)=0.94172
    • zstate=zstate−ϕ(j)=0.02176−0.015626=0.0061335
  • 10: zstate≥0, θ(i)=0, iter=10,
    • xystate=xystate+(xystate>>iter−ϵ(j ))+(xystate>>iter+1−ϵ(j))=0.94172+(0.94172>>10−1−3)=0.95276
    • zstate=zstate−ϕ(j)=0.0061335−0.011719=−0.0055858
  • 11: zstate<0, θ(i)=0, iter=11,
    • xystate=xystate−(xystate>>iter−ϵ(j))=0.95276−(0.95276>>11−4)=0.94532
    • zstate=zstate+ϕ(j)=−0.0055858+0.0078127=0.0022268
  • 12: zstate≥0, θ(i)=0, iter=12,
    • xystate=xystate+(xystate>>iter−ϵ(j))+(xystate>>iter+1−ϵ(j))=0.94532+(0.94532>>12−4)+(0.94532>>12+1−4)=0.95085
    • zstate=zstate−ϕ(j)=0.0022268−0.0058594=−0.0036326


In the last iteration, xystate=0.58057, which, if multiplied by An=1.3250, is very close to the value e−0.2643. The output of the exponential calculation with CORDIC is: expCORDIC ({right arrow over (Vp)})=[0.58057, 1.4677, 1.4059, 0.4347, 0.86031, 1.1965, 1.1417, 1.3257, 0.39573, 0.39573]. The resulting normalizing value when adding up all the elements of expCORDIC({right arrow over (VP)}) is 156.7983, for which normexp=8, and normmant=0.61249.


Then, the logarithm is calculated:

  • 1: ystate≥0, θ(i)=0, iter=1,
    • xstate=xstate+(ystate>>iter−ϵ(j))=1.6125+(−0.38751>>1−0)=1.4187,
    • ystate=ystate+(xstate>>iter−ϵ(j))=−0.38751+(1.6125 >>1−0)=0.41874
    • zstate=zstate−ϕ(j)=0−0.54931=−0.54931
  • 2: ystate>0, θ


(i)=1, iter=2,

    • xstate=xstate−(ystate>>iter−ϵ(j))−(ystate>>iter+1−ϵ(j))=1.4187+(0.32186>>2−0)−(0.32186>>2+1−0)=1.298,
    • ystate=ystate−(xstate>>iter−ϵ(j))−(xstate>>iter +1−ϵ(j))=0.32186+(1.4187>>2−0)−(1.4187>>2+1−0)=−0.21016
    • zstate=zstate+ϕ(j)=−0.54931+0.39423=−0.15508
  • 3: ystate≤0, θ(i)=0, iter=3,
    • xstate=xstate+(ystate>>iter−ϵ(j))=1.298+(−0.1649>>3−1)=1.2568,
    • ystate=ystate+(xstate>>iter−ϵ(j)=−0.1649+(1.298>>3−1)=0.15961
    • zstate=zstate−ϕ(j)=0.15508−0.25541=−0.41049
  • 4: ystate>0, θ(i)=1, iter=4,
    • xstate=xstate−(ystate>>iter−ϵ(j))−(ystate>>iter+1−ϵ(j))=1.2568−(0.1493>>4−1)−(0.1493>>4+1−1)=1.2288,
    • ystate=ystate−(xstate>>iter−ϵ(j))−(xstate>>iter +1−ϵ(j))=0.1493+(1.2568>>4−1)−(0.1493>>4+1−1)=−0.086351
    • zstate=zstate+ϕ(j)=−0.41049+0.18974=−0.22075
  • 5: ystate≤0, θ(i)=0, iter=5,
    • xstate=xstate+(ystate>>iter−ϵ(j))=1.2288+(−0.081102>>5−2)=1.2187,
    • ystate=ystate+(xstate>>iter−ϵ(j))=−0.081102+(1.2288>>5−2)=0.072501
    • zstate=zstate−ϕ(j)=0.22075−0.12566=−0.3464
  • 6: ystate<0, θ(i)=0, iter=6,
    • xstate=xstate−(ystate>>iter−ϵ(j))=1.2187−(−0.071233>>6−2)=1.2142,
    • ystate=ystate−(xstate>>iter−ϵ(j))=−0.071233+(1.2187>>6−2)=−0.0049343
    • zstate=zstate+ϕ(j)=−0.3464+0.062582=−0.28382
  • 7: ystate≤0, θ(i)=1, iter=7,
    • xstate=xstate−(ystate>>iter−ϵ(j))+(ystate>>iter+1−ϵ(j))=1.2142+(−0.004656>>7−2)+(−0.004656>>7+1−2)=1.214,
    • ystate=ystate+(xstate>>iter−ϵ(j))+(xstate>>iter+1−ϵ(j))=−0.004656+(1.2142>>7−2)+(1.2142>>7+1−2)=0.052261
    • zstate=zstate+ϕ(j)=−0.28382−0.046909=−0.33073
  • 8: ystate<0, θ(i)=0, iter=8,
    • xstate=xstate−(ystate>>iter−ϵ(j))=1.214−(0.052251>>8−3)=1.21242,
    • ystate=ystate−(xstate>>iter−ϵ(j))=0.52251+(1.214>>8−3)=0.014313
    • zstate=zstate+ϕ(j)=−0.33073+0.03126=−0.29947
  • 9: ystate<0, θ(i)=0, iter=9,
    • xstate=xstate−(ystate>>iter−ϵ(j))=1.2124−(0.014364>>9−3)=1.2122,
    • ystate=ystate−(xstate>>iter−ϵ(j))=0.014364+(1.2124>>9−3)=−0.0045795
    • zstate=zstate+ϕ(j)=−0.29947+0.015626=−0.28384
  • 10: ystate≤0, θ(i)=1, iter=10,
    • xstate=xstate−(ystate>>iter−ϵ(j))+(ystate>>iter+1−ϵ(j))=1.2122+(−0.004576>>10−3)+(−0.004576>>10+1−3)=1.2121,
    • ystate=ystate+(xstate>>iter−ϵ(j))+(xstate>>iter+1−ϵ(j))=−0.004576+(1.2122>>10−3)+(1.2122>>10+1−3)=0.009629
    • zstate=zstate+ϕ(j)=−0.28384−0.011719=−0.29556
  • 11: ystate<0, θ(i)=0, iter=11,
    • xstate=xstate−(ystate>>iter−ϵ(j))=1.2121−(0.096283>>11−4)=1.212,
    • ystate=ystate−(xstate>>iter−ϵ(j))=0.096283+(1.2121>>11−4)=0.00015878
    • zstate=zstate+ϕ(j)=−0.29556+0.0078127=−0.28775
  • 12: ystate<0, θ(i)=0, iter=12,
    • xstate=xstate−(ystate>>iter−ϵ(j))−(ystate>>iter+1−ϵ(j))=1.212−(0.00015937>>12−4)−(0.00015937>>12+1−4)=1.212,
    • ystate=ystate−(xstate>>iter−ϵ(j))−(xstate>>iter+1−ϵ(j))=−0.00015937−(1.212>>12−4)−(1.212>>12+1−4)=0.0069424
    • zstate=zstate+ϕ(j)=−0.28775+0.00585949=−0.28189


The two values of interest at this step are lnval1=−2 normmant=−2*(−0.28189)=0.56378, and lnval2=−normexp=−8. Then, the second exponential calculation is briefly discussed. First, lnval1=0.56378 is added to all the elements of {right arrow over (Vp)}, resulting in [0.2995, 1.2280, 1.1906, 0.0095, 1.0238, 0.9749, 1.1243, −0.0836, 0.7912]. Then, the exponential of the modified elements of {right arrow over (Vp)} are calculated using the expCORDIC approach, resulting in [1.0202, 2.5915, 2.4749, 0.7613, 1.5189, 2.1001, 2.0096, 2.3248, 0.6973, 1.6684]. The value lnval2=−normexp=−8 is then added to all of the elements of {right arrow over (kp)}, resulting in [−13, −3, −7, −13, −5, −8, −2, −5, −12, −4]. Finally, every element of the expCORDIC approach is shifted to the right by the amount shown in the following corresponding value [0.0001, 0.3239, 0.0193, 0.0001, 0.0475, 0.0082, 0.5024, 0.0726, 0.0002, 0.1043], resulting in the final SoftMax output, the SoftMax function may be calculated with an accuracy set by the number of CORDIC iterations. Thus, the types of operations executed by the processing engine to accurately perform a very complicated function are simple (e.g., add, subtract, shifts), no multiplications or divisions are needed.


An example to implement the modified-CORDIC method in hardware is also discussed. First, the calculation of the exponential function is shown. The restrictions mentioned in equation 26 are applied to the input value, which is that a value









(


-




i
=
k


+





ϕ
i



,




i
=
k


+





ϕ
i



)

.






The same parameters mentioned in the software implementation may be used here. In this depicted example, the values in vector {right arrow over (ϕ)} have been scaled and rounded so that the vector may be represented in 12 bits.

{right arrow over (θ)}=[0,1,0,1,0,0,1,0,0,1,0,1]
{right arrow over (ϕ)}=[2250,1615,1046,777,515,256,192,128,64,48,32,24]
{right arrow over (∈)}=[0,0,1,1,2,2,2,3,3,3,4,4]


A first pipelined architecture (e.g., the RME1 220) may be used for the calculation of the exponential function using N number of steps in rotation mode. According to the value of 0, different unit cells with different shifters may be used. In some embodiments, the first pipelined architecture may be further optimized to utilize each of the stage multiple times, limiting the pipelined throughput capability, but reducing the amount of hardware resources used. In this depicted example, 12 bits is chosen to be the number of bits representing the {right arrow over (ϕ)}, which is the total number of pipelined stages in the first pipelined architecture and the resolution of the input values. When an input value 3710 (Zin) is applied to the RME1 220, which represents the value 0.9058, the calculation happened in each stage of the first piped architecture is discussed for the chosen input value. The values of X and Y will change in every iteration, and in this depicted example, X will always be equal to Y in the calculation of the exponential using rotation mode. Thus, in the following example, X and Y have been collapsed into XY.


1: stage i=1, θ1=0, xy1=4096, z1=3710


First Shift to the right, with i−ϵ(i)=1, xy1>>1=2048


Because z1>0, xy2⇐xy1+2048=6144, z2⇐z1−ϕ1=3710−2249=1461


2: stage i=2, θ2=1, xy2=6144, z2=1461


First Shift to the right, with i−ϵ(i)+1=3 and i−ϵ(i)=2, xy2>>3+xy2>>2=2304


Because z2>0, xy3⇐xy2+2304=8448, z3⇐z2−ϕ2=1461−1614=−153


3: stage i=3, θ3=0, xy3=8448, z3=−153


First Shift to the right, with i−ϵ(i)+2, xy3>>2=2112


Because z3>0, xy4⇐xy3−2122=6336, z4⇐z33=−153+1046=893


4: stage i=4, θ4=0, xy4=6336, z4=893


First Shift to the right, with i−ϵ(i)+1=4, i−ϵ(i)=3, xy4>>4+xy4>>3=1188


Because z4>0, xy5⇐xy4+1188=7524, z5⇐z4−ϕ4=893−777=116


5: stage i=5, θ5=0, xy5=4096, z5=3710


First Shift to the right, with i−ϵ(i)=3, xy5>>3=940


Because z5>0, xy6⇐xy5+940=8464, z6⇐z5−ϕ5=116−514=−398


6: stage i=6, θ6=0, xy6=8464, z6=−398


First Shift to the right, with i−ϵ(i)=4, xy6>>4=529


Because z6<0, xy7⇐xy6−529=7935, z7⇐z66=−398+256=−142


7: stage i=7, θ7=0, xy7=7935, z7=−142


First Shift to the right, with i−ϵ(i)+1=6 and i−ϵ(i)=5, xy7>>6+xy7=370


Because z7<0, xy8⇐xy7−370=7565, z8⇐z77=−142+192=5−


8: stage i=8, θ8=0, xy8=7565, z8=50


First Shift to the right, with i−ϵ(i)=5, xy8>>5=236


Because z8>0, xy9⇐xy8+236=7801, z9⇐z8−ϕ8=50−128=−78


9: stage i=9, θ9=0, xy9=7801, z9=−78


First Shift to the right, with i−ϵ(i)=6, xy9>>6=121


Because z9<0, xy10⇐xy9−121=7680, z10⇐z99=−78+64=−14


10: stage i=10, θ10=1, xy10=7680, z10=−14


First Shift to the right, with i−ϵ(i)+1=8 and i−ϵ(i)=7, xy10>>8+xy10>>7=90


Because z10<0, xy11⇐xy10−90=7590, z11⇐z1010=−14+48=34


11: stage i=11, θ11=0, xy11=7590, z11=34


First Shift to the right, with i−ϵ(i)=7, xy11>>7=59


Because z11>0, xy12⇐xy11+59=7649, z12⇐z11−ϕ11=34−32=2


12: stage i=12, θ12=0, xy12=7649, z12=2


First Shift to the right, with i−ϵ(i)+1=9 and i−ϵ(i)=8, xy12>>9+xy12>>8=43


Because z12>0, xy13⇐xy12+43=7692, z13⇐z12−ϕ12=2−24=−22


The final output value of the first pipelined architecture is 7692, which represents 1.8779, and if it is multiplied by An=1.3250, the value obtained is 2.4483≈e0.9058. A second pipelined architecture (e.g., the VME 240) is implemented in the calculation of the natural logarithm. The constraints on the input values are shown in equation 27, which dictates that the input value is









(


e

2
·




i
=
k


+





ϕ
i




,

e

2
·




i
=
k


+





ϕ
i





)

.





According to the value of 0, different unit cells may be used. In this depicted example, the same number of iterations is used, with the input represented with 12 bits. When an input value 0.8003 is applied to the second pipelined architecture, which represents the value 3278 in 12 bits, the calculation happened in each stage of the second piped architecture is discussed for the chosen input value. x1=7374, y1=−818.


1: stage i=1, θ1=0, x1=7374, y1=−818, z1=0


First Shift to the right, with i−ϵ(i)=1, x1>>1=3678, y1>>1=−409


Because y1<0, x2⇐x1−409=6965, y2⇐y1+3678=2869, z2⇐z1−ϕ1=0−2249=−2249


2: stage i=2, θ2=1, x2=6965, y2=2869, z2=−2249


First Shift to the right, with i−ϵ(i)+1=3 and i−ϵ(i)=2, x2>>3+x2>>2=2611, y2>>3+y2>>2=1075


Because y2≥0, x3⇐x2−1075=5890, y3⇐y2−2611=258, z3⇐z22=−2249+1614=−635


3: stage i=3, θ3=0, x3=5890, y3=258, z3=−635


First Shift to the right, with i−ϵ(i)+2, x3>>2=1472, y3>>2=64


Because y3≥0, x4⇐x3−64=5826, y4⇐y3−1472=−1214, z4⇐z33=−635+1046=411


4: stage i=4, θ4=0, x4=5826, y4=−1214, z4=411


First Shift to the right, with i−ϵ(i)+1=4 and i−ϵ(i)=3, x4>>4+x4>>3=1092, y4>>4+y4>>3=−228


Because y4<0, x5⇐x4−228=5598, y5⇐y4+1092=−122, z5⇐z4−ϕ4=411−777=−366


5: stage i=5, θ5=0, x5=5598, y5=−366, z1=0


First Shift to the right, with i−ϵ(i)=3, x5>>3=699, y5>>3=−16


Because y5<0, x6⇐x5−16=5582, y6⇐y5699=577, z6⇐z5−ϕ5=−366−514=−880


6: stage i=6, θ6=0, x6=5582, y6=577, z6=−880


First Shift to the right, with i−ϵ(i)=4, x6>>4=348, y6>>4=36


Because y6≥0, x7⇐xy6−36=5546, y7⇐y6−348=229, z7⇐z66=−880+256=−624


7: stage i=7, θ7=0, x7=5546, y7=229, z1=−624


First Shift to the right, with i−ϵ(i)+1=6 and i−ϵ(i)=5, x7>>6+x7>>5=259, y7>>6+y7>>5=10


Because y7≥0, x8⇐x7−10=5536, y8⇐y7−259=−30, z8⇐z77=−624+192=−432


8: stage i=8, θ8=0, x8=5536, y8=−30, z8=−432


First Shift to the right, with i−ϵ(i)=5, x8>>5=173, y8>>5=−1


Because y8<0, x9⇐x8−1=5535, y9⇐y8+173=143, z9⇐z8−ϕ8=−432−128=−560


9: stage i=9, θ9=0, x9=5535, y9=143, z9=−560


First Shift to the right, with i−ϵ(i)=6, x9>>6=86, y9>>6=2


Because y9≥0, x10⇐x9−2=5533, y10⇐y9−86=57, z10⇐z99=−560+64=−496


10: stage i=10, θ10=1, x10=5533, y10=57, z10=−496


First Shift to the right, with i−ϵ(i)+1=8 and i−ϵ(i)=7, x10>>8+x10>>7=64, y10>>8+y10>>7=0


Because y10≥0, x11⇐x10−0=5533, y11⇐y10−64=−7, z11⇐z1010=−496+48=−448


11: stage i=11, θ11=0, x11=5533, y11=−7, z11=−448


First Shift to the right, with i−ϵ(i)=7, x11>>7=43, y11>>7=−1


Because y11<0, x12⇐x11−1=5532, y12⇐y11+43=36, z12⇐z11−ϕ11=−448−32=−480


12: stage i=12, θ12=1, x12=5532, y12=36, z12=−480


First Shift to the right, with i−ϵ(i)+1=9 and i−ϵ(i)=8, x12>>9+x12>>8=31, y12>>9+y12>>8=0


Because y12≥0, x13⇐x12−0=5532, y13⇐y12−31=5, z13⇐z1212=−480+24=−456


The final output value of the second pipelined architecture is −456, which represents −0.1113, and if it is multiplied by 2, the value obtained is −0.222≈ln (0.8003). As the exponential and the logarithm implementations share lots of hardware resources, an architecture (e.g., a hybrid architecture) programmable for any of the two function approximations may be used. Then, the calculation of SoftMax in hardware (e.g., the architecture disclosed in FIG. 6) is discussed. At Step 1, the input resolution may be selected as Kint=4 bits and Kfrac=16 bits, the input vector values are selected the same as the ones used in the software implementation, which have been rounded to the chosen precision bits. The value of Cint is chosen to be 12.


{right arrow over (V)}=(−244449, 270664, 86508, −263455, 144835, 30147, 299500, 173015, −224133, 196609)/216=(−3.7300, 4.1300, 1.3200, −4.0200, 2.2100, 0.4600, 4.5700, 2.6400, −3.4200, 3.0000). The value In2 will be quantized using 24 bits, with a value of 11629080/224. By transforming the input vector, the resulting values (e.g., the transformed values Vpi and ki) may be stored in memory (e.g., the memory 330), shown in Table 1.











TABLE 1





Vpi
Represented Vpi
ki

















−17319
−0.2643
−5


43534
0.6643
5


41082
0.6249
1


−36325
−0.5543
−5


8557
0.1306
3


30147
0.4600
0


26943
0.4111
6


36737
0.5606
3


−42429
−0.6474
−4


14904
0.2274
4









At Step 2, the RME1 may be used. In some embodiments, the hybrid architecture may be configured in rotation mode to perform the rotation. In this step, only the {right arrow over (Vp )} values may be transformed, with the {right arrow over (k)} values left untouched until the floating point adder is reached. The same parameters as in the case of the exponential and logarithm calculation may be used, and the {right arrow over (ϕ)} values will be represented with 16 bits.

{right arrow over (θ)}=[0,1,0,1,0,0,1,0,0,1,0,1]
{right arrow over (ϕ)}=[35999,25836,16738,12435,8235,4101,3074,2048,1024,768,512,384]
{right arrow over (∈)}=[0,0,1,1,2,2,2,3,3,3,4,4]

The following results (shown in table 2) may be obtained after the exponential calculation is applied to the {right arrow over (Vpi)} values.











TABLE 2





Vpi
fexp(vpi)
ki

















−17319
37898
−5


43534
96184
5


41082
92138
1


−36325
28487
−5


8557
56382
3


3-147
78416
0


26943
74822
6


36737
86882
3


−42429
25933
−4


14904
62317
4









At this point, the values for fexp(vpi) will then be transformed to make sure the values fexp(vpi) are kept in 16 bits precision, then, the calculation of the summation of all the values are calculated using a simple floating point adder (e.g., the floating point register 230). And the calculated mantissa=40189, and the calculated exponent=8. The method to calculate the mantissa and the exponent is shown in FIG. 7B. At Step 3, The mantissa in the floating point register is then sent through the second pipeline architecture (in Vectoring Mode) to calculate the logarithm. The value at the output of the second pipeline architecture will be −15910 for the mantissa value. Then the output of the second pipeline architecture is shifted to the left and the sign is changed to achieve the value 31820, 31820/216=0.4855≈ln(40189/216).


At Step 4, the values stored in the memory are streamed out, and all the {right arrow over (vpL)} values are added by the mantissa in the floating point register, and {right arrow over (k)} is subtracted from the exponent in the floating point register. Because of the operation of the {right arrow over (vpl)} added the mantissa value, the integer part of the values sent to the third pipeline architecture (e.g., the architecture shown in FIG. 6) may not be 0. After performing a second exponential calculation, SoftMax output (shown in Table 3) may be obtained.











TABLE 3







Values in Memory
Added/subtracted
SoftMax Output












vpi
ki
vpi + mantissa
ki − exponent
mantissa
exponent















−17319
−5
14501
−13
61831
−13


43534
5
75354
−3
155983
−3


41082
1
72902
−7
150577
−7


−36325
−5
−4505
−13
46240
−13


8557
3
40377
−5
91414
−5


3-147
0
61967
−8
127639
−8


26943
6
58763
−2
121169
−2


36737
3
68557
−5
141448
−5


−42429
−4
−10609
−12
41835
−12


14904
4
46724
−4
100718
−4










FIG. 8A depicts a flow chart of an exemplary design-time fabric reconfiguration method for a modified CORDIC engine. An exemplary method 800A to obtain a modified CORDIC engine (e.g., the modified CORDIC engine 200) includes, at 805, configuring a vector conversion engine (e.g., the VCE 210) to receive an input vector V representative of a first data set (205) and transform each element Vi of the input vector x into


Vi=Vpi+ki·ln 2 to generate a second data set (e.g., the second data set 215), −1≤Vpi≤1, and ki is an integer. The method 800A also includes, at 810, configuring a first rotation mode engine (e.g., the RME1 220) to receive the second data set 215 and perform exponential calculations on the second data set 215 to generate a third data set (e.g., the third data set 225) that includes a third-sub1 data set (e.g., the third-sub1 data set 225a) and a third-sub2 data set (e.g., the third-sub2 data set 225b).


The method 800A also includes, at 815, configuring a floating point register (e.g., the floating point register 230) and coupling the floating point register 230 to the RME1 220 to receive the third data set 225. The method 800A also includes, at 820, configuring a vectoring mode engine (e.g., the VME 240) and coupling the VME 240 to the floating point register 240 to receive the third-sub1 data set 225a and perform logarithm calculations on the third-sub1 data set 225a to generate a fourth-sub1 data set 235a.


The method 800A also includes, at 825, coupling the floating point register 230 to the VME 240 to store the fourth-sub1 data set 235a. The method 800A also includes, at 830, configuring a second RME (e.g., the RME2 250) and couple the RME2 220 to the VCE 210 and the floating point register 230 to receive the third-sub2 data set 225b, the fourth-sub1 data set 235a and the second data set 215 and perform exponential calculations to generate an output data set 255 that may be interpreted as a probability distribution of each element Vi of the input vector V. Thus, by using the modified CORDIC method that mainly based on shifts and adds, and without the need of any multipliers, SoftMax calculations may be easily performed. Accordingly, the implementation of SoftMax calculations may advantageously reduce the cost of silicon area.



FIG. 8B depicts a flowchart of an exemplary run-time method for performing SoftMax calculation using a modified CORD IC engine. An exemplary method 800B to operate the modified CORDIC engine 200, includes, at 835, retrieving an input vector V representative of an input data set. The method 800B also includes, at 840, introducing a variable i and initialize the variable i to 1. The method 800B also includes, at 845, transforming, by a vector conversion engine (e.g., the VCE 210), each element Vi of the input vector V into another expression shown in equation 30 to generate a second data set (e.g., the second data set 215).


The method 800B also includes, at 850, determining (e.g., by the processor 723) whether i=n, n is the number of elements in the input vector V (whether each and every element Vi in the input vector V has been transformed). If not all elements have been transformed, then the variable i is incremented at 855 and the method 800B loops back to 845. If all elements have been transformed, then the method 800B also includes, at 860, storing the second data set 215 in memory (e.g., memory 330) of the VCE 210.


The method 800B also includes, at 865, retrieving, by a first rotation mode engine (e.g., the RME1 220), the second data set 215 and performing exponential calculations on the second data set 215 to generate a third data set 225 comprising a third-sub1 data set 225a and a third-sub2 data set 225b, and at 870, storing the third data set 225 in a floating point register 230.


The method 800B also includes, at 875, retrieving the third-sub1 data set 225a and performing, by a vectoring mode engine (e.g., the VME 240), logarithm calculations to generate a fourth-sub1 data set 235a, and at 880, storing the fourth-sub1 data set 235a in the floating point register 230.


The method 800B also includes, at 885, retrieving the third-sub2 data set 225b, the fourth-sub1 data set 235a, and the second data set 215 and performing, by a second rotation mode engine (e.g., the RME2 250), exponential calculations to generate an output data set (e.g., the output data set 255). Thus, SoftMax calculations may be easily performed by using the modified CORDIC method that mainly based on shifts and adds, and without the need of any multipliers.


In this depicted example, the modified CORDIC engine 200 is arranged on a single integrated circuit. The integrated circuit may be a field programmable gate array (FPGA). In some embodiments, the modified CORDIC engine 200 may be implemented as hard block fixed circuitry. For example, an application specific integrated circuit (ASIC) may provide a modified CORDIC engine with customized hardware circuitry.


In some embodiments, some or all of the functions of modified CORDIC engine 200 may be implemented in a different integrated circuit. For example, the VCE 210 may be implemented in an ASIC, and the RME1 220 and the RME2 250 may be implemented in a FPGA.


In some embodiments, some or all of the functions of modified CORDIC engine 200 may be implemented in a processor that is configured to execute a set of instructions stored in a data store to perform SoftMax calculation. The processor may be arranged on the same integrated circuit with the data store. The data store may be implemented in a programmable logic block of a system-on-chip (SOC) or implemented in a hard block using fixed circuitry of the SOC.



FIG. 9 illustrates an exemplary architecture for a System-on-Chip (SOC). SOC 900 is an example of a programmable IC and an integrated programmable device platform. In the example of FIG. 9, the various, different subsystems or regions of the SOC 900 illustrated may be implemented on a single die provided within a single integrated package. In other examples, the different subsystems may be implemented on a plurality of interconnected dies provided as a single, integrated package.


In the example, the SOC 900 includes a plurality of regions having circuitry with different functionalities. In the example, the SOC 900 optionally includes a data processing engine (DPE) array 902. SOC 900 includes programmable logic (PL) regions 904 (hereafter PL region(s) or PL), a processing system (PS) 906, a Network on-Chip (NOC) 908, and one or more hardwired circuit blocks 910. DPE array 902 is implemented as a plurality of interconnected, hardwired, and programmable processors having an interface to the other regions of the SOC 900.


PL 904 is circuitry that may be programmed to perform specified functions. As an example, PL 904 may be implemented as field programmable gate array type of circuitry. PL 904 can include an array of programmable circuit blocks. Examples of programmable circuit blocks within PL 904 include, but are not limited to, configurable logic blocks (CLBs), dedicated random access memory blocks (BRAM and/or UltraRAM or URAM), digital signal processing blocks (DSPs), clock managers, and/or delay lock loops (DLLs).


Each programmable circuit block within PL 904 typically includes both programmable interconnect circuitry and programmable logic circuitry. The programmable interconnect circuitry typically includes a large number of interconnect wires of varying lengths interconnected by programmable interconnect points (PIPs). Typically, the interconnect wires are configured (e.g., on a per wire basis) to provide connectivity on a per-bit basis (e.g., where each wire conveys a single bit of information). The programmable logic circuitry implements the logic of a user design using programmable elements that may include, for example, look-up tables, registers, arithmetic logic, and so forth. The programmable interconnect and programmable logic circuitries may be programmed by loading configuration data into internal configuration memory cells that define how the programmable elements are configured and operate.


The PS 906 is implemented as hardwired circuitry that is fabricated as part of the SOC 900. The PS 906 may be implemented as, or include, any of a variety of different processor types each capable of executing program code. For example, PS 906 may be implemented as an individual processor, e.g., a single core capable of executing program code. In another example, PS 906 may be implemented as a multicore processor. In still another example, PS 906 may include one or more cores, modules, co-processors, interfaces, and/or other resources. PS 906 may be implemented using any of a variety of different types of architectures. Example architectures that may be used to implement PS 906 may include, but are not limited to, an ARM processor architecture, an x86 processor architecture, a GPU architecture, a mobile processor architecture, a DSP architecture, or other suitable architecture that is capable of executing computer-readable instructions or program code.


NOC 908 includes an interconnecting network for sharing data between endpoint circuits in SOC 900. The endpoint circuits can be disposed in DPE array 902, PL regions 904, PS 906, and/or in hardwired circuit blocks 910. NOC 908 can include high-speed data paths with dedicated switching. In an example, NOC 908 includes horizontal paths, vertical paths, or both horizontal and vertical paths. The arrangement and number of regions shown in FIG. 9 is merely an example. The NOC 908 is an example of the common infrastructure that is available within the SOC 900 to connect selected components and/or subsystems.


NOC 908 provides connectivity to PL 904, PS 906, and to selected ones of the hardwired circuit blocks 910. NOC 908 is programmable. In the case of a programmable NOC used with other programmable circuitry, the nets that are to be routed through NOC 908 are unknown until a user circuit design is created for implementation within the SOC 900. NOC 908 may be programmed by loading configuration data into internal configuration registers that define how elements within NOC 908 such as switches and interfaces are configured and operate to pass data from switch to switch and among the NOC interfaces.


NOC 908 is fabricated as part of the SOC 900 and while not physically modifiable, may be programmed to establish connectivity between different master circuits and different slave circuits of a user circuit design. NOC 908, for example, may include a plurality of programmable switches that are capable of establishing packet switched network connecting user specified master circuits and slave circuits. In this regard, NOC 908 is capable of adapting to different circuit designs, where each different circuit design has different combinations of master circuits and slave circuits implemented at different locations in the SOC 900 that may be coupled by NOC 908. NOC 908 may be programmed to route data, e.g., application data and/or configuration data, among the master and slave circuits of the user circuit design. For example, NOC 908 may be programmed to couple different user-specified circuitry implemented within PL 904 with PS 906, and/or DPE array 902, with different hardwired circuit blocks, and/or with different circuits and/or systems external to the SOC 900.


The hardwired circuit blocks 910 may include input/output (I/O) blocks, and/or transceivers for sending and receiving signals to circuits and/or systems external to SOC 900, memory controllers, or the like. Examples of different I/O blocks may include single-ended and pseudo differential I/Os and high-speed differentially clocked transceivers. Further, the hardwired circuit blocks 910 may be implemented to perform specific functions. Examples of hardwired circuit blocks 910 include, but are not limited to, cryptographic engines, digital-to-analog converters, analog-to-digital converters, and the like. The hardwired circuit blocks 910 within the SOC 900 may be referred to herein from time-to-time as application-specific blocks.


In the example of FIG. 9, PL 904 is shown in two separate regions. In another example, PL 904 may be implemented as a unified region of programmable circuitry. In still another example, PL 904 may be implemented as more than two different regions of programmable circuitry. The particular organization of PL 904 is not intended as a limitation. In this regard, SOC 900 includes one or more PL regions 904, PS 906, and NOC 908. DPE array 902 may be optionally included.


In other example implementations, the SOC 900 may include two or more DPE arrays 902 located in different regions of the IC. In still other examples, the SOC 900 may be implemented as a multi-die IC. In that case, each subsystem may be implemented on a different die. The different dies may be communicatively linked using any of a variety of available multi-die IC technologies such stacking the dies side-by-side on an interposer, using a stacked-die architecture where the IC is implemented as a Multi-Chip Module (MCM), or the like. In the multi-die IC example, it should be appreciated that each die may include single subsystem, two or more subsystems, a subsystem and another partial subsystem, or any combination thereof.


A programmable integrated circuit (IC) refers to a type of device that includes programmable logic. An example of a programmable device or IC is a field programmable gate array (FPGA). An FPGA is characterized by the inclusion of programmable circuit blocks. Examples of programmable circuit blocks include, but are not limited to, input/output blocks (IOBs), configurable logic blocks (CLBs), dedicated random access memory blocks (BRAM), digital signal processing blocks (DSPs), processors, clock managers, and delay lock loops (DLLs). Modern programmable ICs have evolved to include programmable logic in combination with one or more other subsystems. For example, some programmable ICs have evolved into System-on-Chips or “SOCs” that include both programmable logic and a hardwired processor. Other varieties of programmable ICs include additional and/or different subsystems.


Although various embodiments have been described with reference to the figures, other embodiments are possible. For example, memory 330 arranged in the VCE 210 may be placed in the modified CORDIC engine 200. In some embodiments, the floating point register 230 may be coupled to the VCE 210 the store the second data set 215.


Various examples may be implemented using circuitry, including various electronic hardware. By way of example and not limitation, the hardware may include transistors, resistors, capacitors, switches, integrated circuits and/or other devices. In various examples, the circuits may include analog and/or digital logic, discrete components, traces and/or memory circuits fabricated on a silicon substrate including various integrated circuits (e.g., FPGAs, ASICs). In some embodiments, the circuits may involve execution of preprogrammed instructions and/or software executed by a processor. For example, various systems may involve both hardware and software.


Some aspects of embodiments may be implemented as a computer system. For example, various implementations may include digital and/or analog circuitry, computer hardware, firmware, software, or combinations thereof. Apparatus elements can be implemented in a computer program product tangibly embodied in an information carrier, e.g., in a machine-readable storage device, for execution by a fixed hardware processor; and methods can be performed by a programmable processor executing a program of instructions to perform functions of various embodiments by operating on input data and generating an output. Some embodiments may be implemented advantageously in one or more computer programs that are executable on a programmable system including at least one processor coupled to receive data and instructions from, and to transmit data and instructions to, a data store, at least one input, and/or at least one output. A data store may include one or more registers or memory locations in, for example, a memory space. A computer program is a set of instructions that can be used, directly or indirectly, in a computer to perform a certain activity or bring about a certain result. A computer program can be written in any form of programming language, including compiled or interpreted languages, and it can be deployed in any form, including as a stand-alone program or as a module, component, subroutine, or other units suitable for use in a computing environment.


In various embodiments, a computer system may include non-transitory memory. The memory may be connected to the one or more processors, which may be configured for storing data and computer readable instructions, including processor executable program instructions. The data and computer readable instructions may be accessible to the one or more processors. The processor executable program instructions, when executed by the one or more processors, may cause the one or more processors to perform various operations.


A number of implementations have been described. Nevertheless, it will be understood that various modification may be made. For example, advantageous results may be achieved if the steps of the disclosed techniques were performed in a different sequence, or if components of the disclosed systems were combined in a different manner, or if the components were supplemented with other components. Accordingly, other implementations are within the scope of the following claims.

Claims
  • 1. A system comprising: a first circuit configured to receive an input vector V representative of a first data set and transform each element Vi of the input vector V into Vi=Vpi+ki·ln 2 to generate a second data set, the second data set comprising a first sub data set that has Vpi and a second sub data set that has ki, wherein −1≤Vpi≤1, and each ki is an integer;a second circuit configured to receive the second data set from the first circuit and perform first exponential calculations on the second data set to generate a third data set, the third data set comprising a third sub data set that has a first mantissa
  • 2. The system of claim 1, wherein the first circuit comprises: a demultiplexer configured to receive each element Vi of the input vector V representative of the first data set;Kint transformation circuits commonly coupled to the output of the demultiplexer to perform sequential subtraction of value In2 to an absolute value of element Vi;Kint casting circuits, each casting circuit of the Kint casting circuits is coupled to a transformation circuit of the Kint transformation circuits; anda multiplexer coupled to receive outputs from the Kint transformation circuits and outputs from the Kint casting circuits to generate the first sub data set that has Vpi and the second sub data set that has ki.
  • 3. The system of claim 2, wherein the first circuit further comprises: a data store configured to store the first sub data set that has Vpi and the second sub data set that has ki.
  • 4. The system of claim 1, wherein the second circuit comprises: a first N-stage pipelined CORDIC circuit configured to receive the first sub data set that has Vpi and perform the first exponential calculations on the first sub data set that has Vpi to generate a sixth sub data set that has fexp(Vpi);a delay circuit configured to introduce a delay on the second sub data set that has ki to match a delay introduced by the first N-stage pipelined CORDIC circuit; anda state machine coupled to the first N-stage pipelined CORDIC circuit and the delay circuit to perform operations on the sixth sub data set to make an integer part of fexp(Vpi)≤1.
  • 5. The system of claim 4, wherein the operations further comprise: if fexp(Vpi)>1, right shifting fexp(Vpi) and increasing a corresponding ki.
  • 6. The system of claim 5, wherein the second circuit further comprises: a floating point adder coupled to the state machine to perform summation on every fexp(Vpi); anda floating point register coupled to the floating point adder to generate and store the third sub data set and the fourth sub data set.
  • 7. The system of claim 6, wherein the third circuit comprises: a second N-stage pipelined CORDIC circuit coupled to the floating point register to receive the third sub data set that has the first mantissa
  • 8. The system of claim 7, wherein the fourth circuit comprises: a summing circuit configured to retrieve the first sub data set that has Vpi from a data store and retrieve the fifth sub data set that has the second mantissa Vtotal2 from the floating point register and generate a seventh sub data set;a subtracting circuit configured to retrieve the second sub data set that has ki from memory and retrieve the fourth data set that has the first exponent Ktotal from the floating point register and subtract the first exponent Ktotal from ki to generate an eighth sub data set;a N-stage pipelined CORDIC circuit coupled to the output of the summing circuit and configured to perform the second exponential calculations on the seventh sub data set to generate a ninth sub data set that has
  • 9. A method comprising: (a) receiving, at a first circuit, an input vector V representative of a first data set and transforming each element Vi of the input vector V into Vi=Vpi+ki·ln 2 to generate a second data set, the second data set comprising a first sub data set that has Vpi and a second sub data set that has ki, wherein −1≤Vpi≤1, and ki is an integer;(b) receiving, at a second circuit, the second data set and performing first exponential calculations on the second data set to generate a third data set, the third data set comprising a third sub data set that has a first mantissa
  • 10. The method of claim 9, further comprising: (a1) receiving each element Vi of the input vector V representative of the first data set; and(a2) performing sequential subtraction of value In2 to an absolute value of element Vi.
  • 11. The method of claim 10, further comprising: (b1) performing the first exponential calculations on the first sub data set that has Vpi to generate a sixth sub data set that has fexp(Vpi); and(b2) if fexp(Vpi)>1, right shifting fexp(Vpi) and increasing a corresponding ki to make an integer part of fexp(Vpi)≤1.
  • 12. The method of claim 11, further comprising: (b3) performing summation on every fexp(Vpi); and(b4) generating and storing the third sub data set and the fourth sub data set.
  • 13. The method of claim 12, further comprising: (c1) retrieving the third sub data set that has the first mantissa
US Referenced Citations (16)
Number Name Date Kind
5991788 Mintzer Nov 1999 A
8572150 Dick Oct 2013 B1
10949498 Enumula Mar 2021 B1
20070237255 Riccio Oct 2007 A1
20120054256 Langhammer Mar 2012 A1
20160335120 Gupta et al. Nov 2016 A1
20170076200 Nasu Mar 2017 A1
20190114534 Teng et al. Apr 2019 A1
20190114555 Akerib Apr 2019 A1
20200167402 Newns May 2020 A1
20200225913 Chen Jul 2020 A1
20210042260 Reinhardt Feb 2021 A1
20210073617 Bazzani Mar 2021 A1
20210117155 Vasyltsov Apr 2021 A1
20210117815 Creed Apr 2021 A1
20210350221 Elenes Nov 2021 A1
Non-Patent Literature Citations (20)
Entry
Massimo Vatalaro, Marco Lanuzza, Felice Crupi, Tatiana Moposita, Lionel Trojman, et al . . . A Low-Voltage, Low-Power Reconfigurable Current-Mode Softmax Circuit for Analog Neural Networks. Electronics, Penton Publishing Inc., 2021, 10 (9), pp. 1004. 10.3390/electronics10091004. hal-03218334 (Year: 2021).
Gaoming Du et al. Efficient Softmax Hardware Architecture for Deep Neural Networks. In Proceedings of the 2019 on Great Lakes Symposium on VLSI (GLSVLSI '19). Association for Computing Machinery, New York, NY, USA, 75-80. DOI:https://doi.org/10.1145/3299874.3317988 (Year: 2019).
A. Kagalkar and S. Raghuram, “CORDIC Based Implementation of the Softmax Activation Function,” 2020 24th International Symposium on VLSI Design and Test(VDAT), 2020, pp. 1-4, doi: 10.1109/VDAT50263.2020.9190498. (Year: 2020).
I. Kouretas and V. Paliouras, “Simplified Hardware Implementation of the Softmax Activation Function,” 2019 8th International Conference on Modern Circuits and Systems Technologies (MOCAST), 2019, pp. 1-4, doi: 10.1109/MOCAST.2019.8741677. (Year: 2019).
Kouretas, I.; Paliouras, V. Hardware Implementation of a Softmax-Like Function for Deep Learning. Technologies 2020, 8, 46. https://doi.org/10.3390/technologies8030046 (Year: 2020).
Wang et al. “A High-Speed and Low-Complexity Architecture for Softmax Function in Deep Learning” 2018 IEEE Asia Pacific Conference on Circuits and Systems, pp. 223-226, DOI: 10.1109/APCCAS.2018.8605654 (Year: 2018).
Yuan “Efficient Hardware Architecture of Softmax Layer in Deep Neural Network” 2017. DOI: 10.1109/SOCC.2016.7905501 (Year: 2017).
Patterson et al., “Computer Organization and Design: The Hardware/Software Interface”, Fifth Edition, 2014. Retrieved from <https://ict.iitk.ac.in/wp-content/uploads/CS422-Computer-Architecture-ComputerOrganizationAndDesign5thEdition2014.pdf> (Year: 2014).
Tanya Vladimirova, Hans Tiggeler, FPGA Implementation of Sine and Cosine Generators Using the CORDIC Algorithm, retrieved online on Aug. 26, 2019. Retrieved from the Internet <https://pdfs.semanticscholar.org/1a7e/d3becdad14d662af384f460620124a08f6a0.pdf>, 11 pages.
V. Soumya, Raghavendra Shirodkar, A.Prathiba, V.S. Kanchana Bhaaskaran,Design and Implementation of a Generic CORDIC Processor and its Application as a Waveform Generator, Indian Journal of Science and Technology, vol. 8(19), DOI: 10.17485/ijst/2015/v8i19/76856, Aug. 2015, 10 pages.
Leonid Moroz, Volodymyr Samotyy,The CORDIC Method of Calculating the Exponential Function, Technical Transactions, vol. Apr. 2018, Apr. 2018, pp. 119-126.
U.S. Walther, A unified algorithm for elementary functions, AFIPS 71 Spring Proceedings of the May 18-20, 1971, Spring Joint Computer Conference, pp. 379-385., Atlantic City, New Jersey, USA. Hewlett-Packard Company, Palo Alto, California, retrieved online on Aug. 26, 2019. Retrieved from the Internet <https://pdfs.semanticscholar.org/0efd/e1502a5b16ba5929f6c20dc337d33663c6c3.pdf>, Computer History Museum.
Ray Andraka, A survey of CORDIC algorithms for FPGA based computers,retrieved online on Aug. 26, 2019. Retrieved from the Internet <http://www.andraka.com/files/crdcsrvy.pdf>, 10 pages.
Stephen Evanczuk, Get Started with Machine Learning Using Readily Available Hardware and Software, Aug. 29, 2019, retrieved online on Jul. 18, 2019. Retrieved from the Internet <https://www.digikey.com/en/articles/techzone/2018/aug/get-started-machine-learning-hardware-and-software>, 8 pages.
Xiaoyuan Liang, Guiling Wang, A Convolutional Neural Network for Transportation Mode Detection Based on Smartphone Platform, 2017 IEEE 14th International Conference on Mobile Ad Hoc and Sensor Systems (MASS), pp. 338-342. Oct. 22-25, 2017, Orlando, FL USA.
Wikipedia, Multiplication algorithm, retrieved online on Jun. 7, 2019. Retrieved from the Internet <https://en.wikipedia.org/wiki/Multiplication_algorithm>, 13 pages.
Xilinx, Inc., DPU for Convolutional Neural Network v2.0, DPU IP Product Guide, PG338 v2.0, Jun. 7, 2019, 51 pages, San Jose, CA USA.
Xilinx, Inc., VIVADO Design Suite, CORDIC v6.0, LogiCORE IP Product Guide, PG105, Dec. 20, 2017, 66 pages, San Jose, CA USA.
Xilinx, Inc., Nikhil Dhume, Ramakrishnan Srinivasakannan, Parameterizable CORDIC-Based Floating-Point Library Operations, Spartan-6, Virtex-6, 7 Series and Zynq-7000 Devices, XAPP552 v1.0, Jun. 1, 2012, 18 pages, San Jose, CA USA.
Mou Shengmei, Li Zhaogang, a method to calculate exponential/logorithm based on FPGA, Computer Engineering and Applications, 2011,47(33), pp. 59-61.