Accomplishments
This week I’ve been working on the FPU Job Manager Operations. I’ve been following my previous process of describing the FSM control signals state-by-state, then simply copying them over into SystemVerilog. Here’s what I have so far:
| Operation |
Described? |
Implemented? |
Testbench? |
| Linear Forward |
Yes |
Yes |
Yes |
| Linear Backward |
Yes |
Yes |
|
| Linear Weight Gradient |
Yes |
Yes |
|
| Linear Bias Gradient |
Yes |
Yes |
|
| Convolution Forward |
Yes |
|
|
| Convolution Backward |
Yes |
Yes |
|
| Convolution Weight Gradient |
Yes |
|
|
| Convolution Bias Gradient |
Yes |
|
|
| MaxPool Forward |
Yes |
|
|
| MaxPool Backward |
|
|
|
| ReLU Forward |
Yes |
|
|
| ReLU Backward |
Yes |
|
|
| Softmax Forward |
|
|
|
| Softmax Backward |
|
|
|
| Cross-Entropy Backward |
|
|
|
| Flatten Forward |
Yes |
|
|
| Flatten Backward |
Yes |
Yes |
|
| Parameter Update |
Yes |
|
|
Last week, I had the Convolutional Forward and Linear Forward operations described, and only the Linear Forward operation implemented.
I’ve consolidated all of the weight and bias operations into a single “Parameter Update” operation, since they’re all the exact same and the shape of each tensor can be read from memory.
Another work-around I’m implementing is for the Softmax Backward operation. I haven’t been able to find a working floating-point exponent calculator in Verilog, so in the case that I’m unable to find one, I will simply subtract the output from the label, which in terms of optimization will have the same effect as taking the backwards gradient of the softmax direction.
Schedule & Accomplishments for Next Weeks
I’ll be finishing up the FPU Job Manager operations over the next couple days, then preparing the Model Manager for the Demo.