[VTA] How is sequence of micro-ops created for GEMM instruction


I do not understand how sequence of micro-operations is generated for the GEMM instruction in this tutorial.

  1. Does the sequence of micro-ops (the range, the x,y,z fields) also depend on the type of the computation, matrix multiply and convolution? Is the sequence of micro-ops different when we do matrix-multiply from when we do convolution?
  2. If so, could you point me to the algorithm or the GitHub source file where this sequence is generated? I can’t seem to find it in the code.



From what I can tell from the functional sim these are all manually created and hard-coded in the fsim.

I have been looking for the architectural definitions of the data path and its control bits but have not found any documentation nor implementation. Also, I cannot find a ‘compilation’ phase that generates a ‘program’ for the VTA that can be executed by a state emulator. If you have found otherwise, love to be educated, so that I am not going to reinvent the wheel.