efabless / caravel

Caravel is a standard SoC harness with on chip resources to control and read/write operations from a user-dedicated space.
https://caravel-harness.readthedocs.io/
Apache License 2.0
263 stars 63 forks source link

Modifications to the openframe padframe #503

Closed RTimothyEdwards closed 8 months ago

RTimothyEdwards commented 9 months ago

Modified the openframe padframe so that the GPIO "wrapped" cells are replaced with the base cells. Routing to pins is instead done in the "gpio_connects" cells while improving on the original routing (fewer cross-overs, multiple vias per contact, wider buses for the analog signals). Made small adjustments to many of the openframe wrapper pins to keep them all on a 10nm grid. Moved the connections previously from the "wrapped" GPIO cell back from the openframe project border, so that the border can be clear of all blockages. Added the DEF file of the wrapper (previously only in the openframe example repo) to the def/ directory. Note: The modified LVS scripts depend on the gate-level netlists of the frame, which have been committed in a prior pull request. This pull request does not conflict with those files.

RTimothyEdwards commented 9 months ago

For the record, this pull request should resolve the outstanding issues with geometry not belonging to pins extending into the user project area. Also the abutment bounding box is terminated at the ends of the pins and does not extend into the bounding boxes of the padframe or constant_block cells, but abuts cleanly.

RTimothyEdwards commented 9 months ago

@marwaneltoukhy : All issues should now be resolved except that there will be an overlap of the PR boundary between the user project wrapper and the padframe. I believe that this will not be a problem.

marwaneltoukhy commented 9 months ago

@RTimothyEdwards we need to increase the PR Boundary by 0.02um in the X direction, to respect the minimum width of metal 3. openroad routes outside the PR boundary when the Pin doesn't respect the minimum width, I created an issue here https://github.com/The-OpenROAD-Project/OpenLane/issues/2006

marwaneltoukhy commented 9 months ago

@RTimothyEdwards I manually stretched the pins inside the PR boundary by 0.02um in the def file, and tried the flow with it, and it fixed the issue, maybe we can stretch it a bit more just to be safe.

RTimothyEdwards commented 9 months ago

@marwaneltoukhy : The end result of the conversation over klayout is that the wire extension applies only to the extension at a via, and not for any arbitrary wire segment, so klayout's interpretation is correct, and I need to rework the code in magic to assume a default wire extension of 1/2 route width.

RTimothyEdwards commented 9 months ago

@marwaneltoukhy : If there is no problem routing to the metal2 pins on top and bottom but there is on the pins to the right and left, then that means that the router wants to see at least the minimum metal width available inside the PR boundary. Since the metal3 minimum with is 0.3um and the pin is sticking out by 0.28um, then it is short by 0.02um, so the 0.02um is sufficient and there should be no need to extend them further.

I will extend the pins and make what I hope is the last commit.

RTimothyEdwards commented 9 months ago

@marwaneltoukhy : I just made one additional commit to move all metal3 pins 0.02um further into the user project area so that the minimum length exposed is equal to the minimum metal width rule. This should be the same as what you did to test that the routing works. Please verify the solution.

marwaneltoukhy commented 9 months ago

@RTimothyEdwards The DEF file looks good, I took it through openlane and verified that there are no issues.

There's another issue that I just found, there are no pins in the empty wrapper mag for this power pad, I know that there's another power pad for VSSD1 and VCCD1, but shouldn't they all have pins in the wrapper?

image

RTimothyEdwards commented 9 months ago

Yes, they should, and let me do one more set of fixes.

RTimothyEdwards commented 9 months ago

@marwaneltoukhy : Okay, the missing power pins have been added to the wrapper layout, and I regenerated the DEF (and copied it to the openframe project example repository).

marwaneltoukhy commented 8 months ago

I added the empty project wrapper gds file for precheck's XOR

RTimothyEdwards commented 8 months ago

@marwaneltoukhy , @jeffdi : Per today's discussion at Efabless, I realized that one cell that has been modified for openframe, chip_io_gpio_connects, is shared with both caravel and caravan and must not be changed. I will need to fix this by copying the modified cell to a new name to be used by openframe while restoring the original contents of the cell. I should be able to make that update today or tomorrow.

RTimothyEdwards commented 8 months ago

The issue I mentioned above has now been fixed. The original chip_io_gpio_connects.mag layout for caravel and caravan has been restored, and the one modified for openframe has been renamed chip_io_gpio_connects_vert.mag so that it will not conflict.

RTimothyEdwards commented 8 months ago

@marwaneltoukhy : vddio and vssio pins added to RTL and GL netlists.