-
Notifications
You must be signed in to change notification settings - Fork 0
Description
Experiment Process
The .futil file is here (it's named 32-500 bc I am using 500 32 bit registers/adders). It essentially adds 20 + 10, writes results to register, then register writes to memory, then repeats this sequentially (w/ a different register + adder) 500 times.
I then ran resource estimates across the following bounds:
adders: 1,8,32,128,Unbounded
registers: 1,8,32,128,Unbounded
This means 5*5=25 experiments total.
You can see the table summary here.
Interpreting the Table
The first column just gives the resource type (e.g., registers, luts, cell_lut1, etc. I also included worst_slack as well).
For the following columns (e.g., default_8,-1,1): "default" just means I ran Calyx on the default compiler setting (although did disable group2invoke and tdst). 8 is the number of times we share adders. -1 means no bound for the sharing of registers. The third number,1 in this case, is not important for this table.
Some Takeaways
- predictably, registers go down the more you share them and are not affected by sharing of adders.
- predictably, muxes are lowest when we don't share at all.
- for most other resource types (luts, clbs, muxes), it seems there's some sort of cumulative effect, where sharing adders starts to helps if you share registers too... but it doesn't help if you only share adders. Likewise, the improvement of sharing registers seems to become more dramatic once you share adders as well.
- there's one really weird outlier result, when we don't share adders at all, and we share registers bounded at 32: it has much better resource usage than sharing of similar setting
- the settings with better resource usage also seem to have better timing too (or at least, they seem to have a better "worst slack")
- The last three points makes me think that the synthesis tools are trying to do some sort of resource optimization on their own, but only do it in certain situations maybe? Or at least, it seems the synthesis tools have some sort of "mind of their own" that we're not capturing.
Simulation
I still need to install verilator on Havarti.
But I did some simulation (i.e., simulation for some of the settings) on my local, and they all gave the expected results. You can see the simulation results here.