-
Notifications
You must be signed in to change notification settings - Fork 208
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
Pin rotations from DEF/LEF #209
Comments
Yes, that is what I expect too but I see this is not the case. I have linked a DEF/LEF of a simpler example. Looking at MAS2845 P2, the LEF component is 7 x 3 and the pin is at (5.5, 0) I would expect the pin to be at (3, 5.5) when rotated west. But the database offset reports (0, 1.5) which is consistent with it being rotated east. I think this problem originates here in PyPlaceDB::convertOrient() because the dest orientation is "N" and the src is the DEF orientation. I have also run with these flags to maintain my current orientations:
|
I figured out the problem. The cases 90 and 270 in |
I don't think that resolves the bug, and it also doesn't address inconsistencies with "S". Although I mentioned it earlier, I also don't think it originates with convertOrient(), because I see the pin offsets before that function is called isn't directly from the LEF like I expected. I'll take a look at it later today though. |
I verified the example you gave in simple00. It looks correct. Here is the log after I printed the pin offsets before and after rotation.
|
Thats my mistake. You are right, west and east are resolved. But when I change the orientation to "S" and print the original / after rotation, my original changes from the LEF to be (142, 384) and the after rotation is the original (559, 0). Why would the original change? Same thing with a2 in your snippet. |
To clarify: the I cannot catch your new question. Could you give an example? |
Take a2 for example, the LEF states the pin is at (80, 101) meaning the rotated pin is at (21, -21). Your output for a2 shows the opposite (21, -21) -> (80, 101). The rotation is correct, but the original point was already rotated. I was trying to point out in the prev comment the same thing happens to P0 when I change node a1. |
But the LEF places the pin at (80, 101) originally
|
I'll also be on this zoom for the next ~1hr if you have time: <> |
I see your point. Will take a detailed look later. I have a meeting right now. Will come back to you. |
Looks like PlaceDB.cpp rotated the Pin objects and changes the offset in the Pin.h object in PlaceDB::updateNodePinOffset() so the pin offsets are already rotated when accessed by PyPlaceDB.cpp. |
You are right. Commenting line 1752-1755 in PlaceDB.cpp should resolve the issue. (
The pins were rotated twice. |
This commit (132474b) comments out line 1752-1755 in PlaceDB.cpp. It should resolve the issue. |
Hello!
I'm adding to the DREAMPlace repo, but noticed that the pins in rawdb or pydb object in PlaceDB.py has "unrotated pins" from PyPlaceDB::convertOrient(), but rotated sizes. Why is that?
For example: if a LEF has a pin at (0, 3) when the component is sized 5 x 3 and the DEF defines the orientation as "placed west", I would expect the db report the pin to be at (0, 0). Instead, I've seen that its been rotated east to (3, 5).
The text was updated successfully, but these errors were encountered: