Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add library of useful functions for doing manual placement of cells #4041

Open
mithro opened this issue Sep 25, 2023 · 11 comments
Open

Add library of useful functions for doing manual placement of cells #4041

mithro opened this issue Sep 25, 2023 · 11 comments
Labels
good first issue Good for newcomers

Comments

@mithro
Copy link
Contributor

mithro commented Sep 25, 2023

Description

It would be nice if the OpenROAD tool provides a set of functions to the TCL & Python scripting interface which made it quick and easy to do manual placement of a certain sets of cells.

Some ideas include;

  • place_column -- Place the selected cells into a vertical column. Options could include;
    • packed for placing them as close together as possible.
    • equal for placing them equally distributed between top and bottom coordinates.
    • global for placing them in the rough locations which need to be legalized into actual valid positions.
    • legalize (or maybe detailed) for placing them directly into legalized positions.
  • place_row -- Place the selected cells into a horizontal row
    • Same as place_column.
  • place_array -- Place the selected cells into a grid / array pattern.
    • Same as place_column.

Some related functions could include;

  • legalize_cells -- Legalize the set of cells into correct placements.
  • route_net -- Route the selected set of nets.

This are likely to be very useful in things like;

  • Automated analog like OpenFASoC
  • Building blocks like DFFRAM does
  • Distributing cells for wave style computation
  • Placing input / output flops in certain locations
  • Other things I haven't thought of

Suggested Solution

No response

Additional Context

No response

@Dolu1990
Copy link

Dolu1990 commented Jan 5, 2024

Hi,

I think I hit the same issue. I have congestions problems on a register-file using sky130 (doesn't pass at 20% density), and wanted to try helping the place and route by providing "fixed location" in column for the register-file latches.

@mithro
Copy link
Contributor Author

mithro commented Jan 5, 2024

@Dolu1990 - You might find using DFFRAM as an alternative solution.

@maliberty
Copy link
Member

Note that DFFRAM is rather skywater specific and some layouts are far from optimal.

@Dolu1990
Copy link

Dolu1990 commented Jan 5, 2024

@mithro Thanks ^^
It seems like DFFRAM won't work for my usecase (i would need 4R 2W and more)

@mithro
Copy link
Contributor Author

mithro commented Jan 5, 2024

@Dolu1990 - You should know how to build a 4R 2W out of DFFRAM blocks, same thing we do as in FPGAs -- https://tomverbeure.github.io/2019/08/03/Multiport-Memories.html :-)

@mithro
Copy link
Contributor Author

mithro commented Jan 5, 2024

@Dolu1990 - You should also log a feature request on the DFFRAM repository. BTW If you are doing this as part of funded research, funding AUC is extremely cheap.

@Dolu1990
Copy link

Dolu1990 commented Jan 6, 2024

@mithro

You should know how to build a 4R 2W out of DFFRAM blocks, same thing we do as in FPGAs

Yes right ^^

You should also log a feature request on the DFFRAM repository

Done : AUCOHL/DFFRAM#192

If you are doing this as part of funded research, funding AUC is extremely cheap.

It is part of a small exploratory project (~100h work) to see where are the bottleneck in porting NaxRiscv to asic, not enough left for it, but thanks for the tips, i keep it in mind :)

@maliberty
Copy link
Member

Fwiw I did start a rewrite of DFFRAM in OR as a spare time project. If someone has interest in picking it up I would be glad to share the in progress code.

@rovinski
Copy link
Member

rovinski commented Jan 6, 2024

@maliberty that might be a good student project? If you share the code I can determine further.

@maliberty
Copy link
Member

fwiw I put the code at #4496 - this is not complete and is not proposed a solution to anything in its current form. If someone wants to pick it up and complete it that would be great.

@QuantamHD
Copy link
Collaborator

We should take a page from CSS Grid https://css-tricks.com/snippets/css/complete-guide-grid/ if we're looking for more generic layout primitives.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
good first issue Good for newcomers
Projects
None yet
Development

No branches or pull requests

5 participants