[libre-riscv-dev] [Bug 178] first coriolis2 tutorial, workflow and "test project" page

bugzilla-daemon at libre-riscv.org bugzilla-daemon at libre-riscv.org
Wed Feb 26 10:03:24 GMT 2020


http://bugs.libre-riscv.org/show_bug.cgi?id=178

--- Comment #126 from Jean-Paul.Chaput at lip6.fr ---
(In reply to Luke Kenneth Casson Leighton from comment #125)
> (In reply to Jean-Paul.Chaput from comment #124)

OK I see your vision of hierarchical P&R.

* The bottom up assembly approach is completely legitimate for the
  netlists.

* For the layout, less so. I reason along the same lines as Staf, but
  maybe less radically (or I'm lagging behind).

  * If you break your design in too tiny blocks you will prevent
    the placer to perform some placement optimization. So, in
    my opinion you should have one or two level of hierarchy in
    the layout placement.
      The top level floorplan (full chip) and maybe a supplemental
    one in big top-level sub-blocks.
      Staf recommend to do it completely flat (his arguments makes
    perfect sense, but I need to see it by myself).

  * Another argument is that I'm not sure that Coriolis will handle
    well (or in reasonnable time) blocks of more than 100K gates.
    So your approach is important at least as "backup plan".

  * Still another point to consider is how much "block layout" reuse
    do you have ? Sub-block layout may be interesting if you have
    one block used multiple time that can have the same form factor
    and pin positions.

Anyway there is always a lot of tradeoff in that stage of a design.
Ideally you should make a check for all three of them, at least on
significant part of the design.

Now, for the technical part of recursively building layout with
Coriolis:

* The placer can only handle cells. So only the "leaf" netlists can
  be done by him.

* Do not put blocks in libraries, that would confuse some Alliance
  tools that would see them as "terminal black boxes".

* To assemble placed layout you must write Python scripts. They are
  not complicated once you know what to do, but still, it implies
  that *you* know beforehand how the blocks must be placeds.
  This is *automated* *manual* floorplan.
    You can even develop a Python program to furhter ease the
  automation.

There are still questions left open:

* Should we place the whole chip (whatever the method) then route
  in one go. This may avoid the creation of channel routing.

* Or should we route each sub-block as we go up. Which may allow to
  create guard ring, but will need the creation of routing channels,
  and place the external terminals of the blocks.

All of the above are difficult questions, even so because the answer
may emerge only after starting to implement.

-- 
You are receiving this mail because:
You are on the CC list for the bug.


More information about the libre-riscv-dev mailing list