Second Major release of the SUS Compiler
This release contains mostly technical improvements, and work towards the future of SUS.
The main events in this release are:
Standard Library is Shipped with the compiler now
That means you no longer need to provide core.sus and util.sus yourself, as they are shipped with the compiler and stored in $HOME/.sus/VERSION
Templates now use the #(SIZE: 3, T: type int[3])
syntax instead of ::<3; int[3]>
The motivation for mandatory named template arguments is that in Hardware Design, modules often have many parameters, often just ints. And MyModule::<32, 5, 2048, 3>
is just not very readable
Example use:
module BitSerialRow #(int SIZE, int[SIZE] WEIGHTS) {
interface BitSerialRow : bool[SIZE] bits'0 -> int row_total
//...
}
for int Y in 0..HEIGHT {
BitSerialRow #(SIZE: WIDTH, WEIGHTS: MATRIX[Y]) row
//...
}
Many internal technical changes, majorly the switch to Hindley-Milner type checking.
This switch is not yet complete, as Concrete Typechecking still needs the HM treatment, this is the plan for the next release, which will also include type and latency inferernce.
See CHANGELOG.md for more detail