Open FrancescoConti opened 3 months ago
Ciao Francesco, thanks for your comment.
I agree that currently things are not entirely coherent in the build flow. I think your suggestions make sense, and I believe what is implemented currently is fairly close (if less streamlined) to what your first suggestion entails. Maybe we can have a chat about the top-down view of the build flow we would like, and converge to that vision.
I would like to bump this issue back to relevance. Having a single make target for the entire setup process would be very good!
imho a bit (a lot) more clarity would be nice in how the simulation platform is built. Disclaimer: I did not check anything in depth (no time unfortunately), so feel free to correct me!
right now i see:
bender checkout
make chs-hw-init
"initialize" all cheshire simulation platform (which I guess means generate register maps withreggen
, but maybe also other Cheshire-specific stuff, rather obscure to me)make snitch-hw-init
"initializes" the snitch cluster but it also checks out bender deps and then it actually also builds and optimizes it, is that then linked later with the rest of the platform? If Bender is called multiple times, how do we avoid issues with incompatible versions of deps?make chs-sim-all
script generation for cheshire postponed here?make chim-sim
script generation for the top-level chimera?IMHO it's a bit all mixed up (Chimera->Cheshire->Snitch->Cheshire->Chimera...) and clearly a lot of clutter will eventually be removed, but it makes sense to me to start a discussion on this pretty early. Personally I see two strategies:
Full-dependency Bender flow:
The main limitation here is that we can (will) run into dependency problems if one of the clusters and the top want to use different versions of an IP (I think this already happens with PULP clusters and the top with the iDMA version). As an alternative (more complicated):
Vendorized flow:
module cluster_peripherals
inpulp_cluster
becomesmodule pulp_cluster_v1.2.3_cluster_peripherals
)Personally, I very much prefer the former, keeping in mind that in some cases (e.g., projects with external partners) the latter strategy might also be used, at least for some IPs. I think particularly of the case of a cluster/accelerator provided by a partner that uses an older version of our own IPs... What do you think?