Date Completed: September 03, 2003
The way that this array calculates the inverted matrix has been thoroughly studied in this paper: "Conical Systolic Array for Matrix Inversion" by H.S.Shahhoseini, A.Khayatzadeh, and M.Naderi (The paper). Herein, I explain the structure of the simulator program which was written by me with C++ language (2800+ LOC).
The mentioned conical systolic array (CSA) uses three types of processing elements (PEs). Each PE has been defined as an object in C++. For writing the program as modular as possible and taking advantage of virtual functions and also gathering the common functionalities of the PEs, a base class with the name of PE has been defined. The three types of PEs have been derived from this base class using public inheritance and the exclusive functionalities of each PE have been implemented in the respective class. These classes have been named according to their shapes in the paper as: EllipticPE, CircularPE, SquarePE. It should be mentioned that all four classes have been implemented regardless of the matrix dimension but due to some synchronization difficulties in one of the clock calculations, the main() function has some irregularities which prevents its generalization to any matrix dimension and in its current state, it is capable of matrix inversion calculation for a 3×3 matrix. The issue was under consideration of the authors of the paper but in the mean time, I was asked to conclude the project; in case that the problem is resolved, only the main() function will need modifications and the PEs' implementations won't need further changes.