Uh oh!
There was an error while loading. Please reload this page.
Interface for determining package pins - #38
Conversation
|
Uh oh!
There was an error while loading. Please reload this page.
| @property | ||
| @abc.abstractmethod | ||
| def heartbeat(self) -> Dict(int, Pin): |
There was a problem hiding this comment.
The clock in some cases comes as two pins close to each other to be connected to XTAL.
There was a problem hiding this comment.
hmm, good point. Is that a config option to generate a oscillator?
There was a problem hiding this comment.
There was a problem hiding this comment.
Currently we have nothing to specify use of XTAL, this needs to be added somehow.
There was a problem hiding this comment.
The clock in some cases comes as two pins close to each other to be connected to XTAL.
If you have external crystal you will need a crystal oscillator analog block on the chip. The actual clock will then be an output of this oscillator.
There was a problem hiding this comment.
What also can happen is that clock is delivered as differential signal; but this can also be for digital signals. Likely only to add when use case is there.
robtaylor
commented
Mar 18, 2025
I've updated this PR to implement a complete interface for package pins as discussed. Key enhancements:
All tests are passing. Ready for review! |
|
4146e57 to
e14af0cCompare
gatecat
left a comment
There was a problem hiding this comment.
Haven't looked through the tests yet, but these are my comments so far
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
| core_jtag: JTAGPins | ||
| def to_set(self) -> Set[Pin]: | ||
| return {p for pp in self.core_power for p in asdict(pp).values()} | \ |
There was a problem hiding this comment.
what is the asdict doing here?
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
| ret = [] | ||
| for q in range(0,3): | ||
| ret.append(sorted(quadrants[q])) | ||
| return ret |
There was a problem hiding this comment.
it's worth noting that this won't give pins in bonding pad order which might be relevant in some cases - this can only be determined on a pattern-by-package (or by custom design in the case of a substrate or RDL for a WLCSP package).
An example for the PGA144 we used for the previous tapeout is the table on page 3 of https://europractice-ic.com/wp-content/uploads/2019/06/CD_PGA144.pdf but this is always going to differ
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
7d71c83 to
5fc63cfCompare3ec99b5 to
203e0d6Compare2ceb202 to
d63aa26Compare…efinition Also enables grid array and quad format packages
robtaylor
commented
Sep 26, 2025
Has some WIP for better pin allocation. This should become shell and padring aware |
robtaylor
commented
Dec 17, 2025
This is massively outdated, but keeping it around as there were some good ideas that need extracting |
Package Pin Interface
This PR implements a structured interface for determining package pins in ChipFlow.
Key Changes
Added abstract methods to define standard pin types in package definitions:
Implemented these methods in both package types:
Enhanced the Package class to:
Added comprehensive tests in test_package_pins.py
Created documentation in docs/package_pins.md
Backward Compatibility
The implementation maintains backward compatibility with the existing TOML configuration format while introducing a new, more flexible format.
Ready for Review
All tests are passing, and the implementation is ready for review.