-
Notifications
You must be signed in to change notification settings - Fork 25
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
Verilog ports shorted with assign statements in subcells are not handled correctly. #81
Comments
I have fixed the segfault issue, although generally speaking, netgen is not expected to do syntax checking on a netlist; the netlist should be assumed to be syntactically correct. Especially as it is difficult to code in checks for every type of error, and LVS is something you're supposed to be doing between two netlists that are produced by tools incapable of generating bad syntax. Anyway, I just fix them as you find them. . . Now, on to the more complicated issue. . . |
@d-m-bailey : If you look at the netgen output, the first (and underlying) error is that the SRAMs are not connected to the power supply (e.g., |
But okay, I get your point about the |
The sram's do not have power connections at the |
@d-m-bailey : I haven't looked at the layout, only at the layout netlist, but the layout netlist is pretty clear that the SRAM power is unconnected. If the SRAM in the layout was black-boxed, then it could be that the power supplies were connected at a point not marked as a pin, otherwise the extraction is being done wrong somehow. |
@d-m-bailey : Tentatively, this is fixed (netgen version 1.5.257). There was a block of code that moves shorted pins together. What it ends up doing is changing the pin order of the cell with respect to the pin order of instances of the same cell, and all the pin number gets messed up. However, I'm not sure if there is any code (if there is, it would be in MatchPins()) that depends on shorted pins being adjacent. If so, this code change might prevent pin matching where there are shorted pins. Since this example fails anyway, I can't tell if I have caused an issue with pin matching. |
Follow-up on this: Issue #87 is exactly what I was concerned about above: An issue caused by not moving shorted pins together. That is now fixed, and I think that is the only other place in the code dependent on the shorted pins being together. |
Netgen 1.5.253
Using verilog generated from Cadence Innovus.
From sky130 mpw-4 slot-005, the
user_proj_example
has many ports shorted.When used as is, netgen generates results indicating that the internal netlist has been corrupted.
These terminals are not connected in either the layout or verilog.
_noconnect_4_
is a net name generated by netgen.Moving the assign statements to the top level
user_project_wrapper
level yields expected results.VWPR
is a typo that only exists inuser_proj_example
. Moving this assign statement to the top level causes a segmentation error.It appears that assign statements to non-existent nets cause a segfault.
(Note:
user_project_wrapper.v
has been modified from the original data to connect power touser_project_example
.)Test case
test_netgen.tgz
lvs.script.error
uses the original verilog and will producelvs.report.error
which contains the_noconnect 4_
net explained above.lvs.scrip.fix
uses verilog that has been modified by moving the assign statements fromuser_proj_example
touser_project_wrapper
. This yields the expected results inlvs.report.fix
. The sram power is not connected at theuser_proj_example
level, so there are many errors at that level.lvs.script.flatten
uses the original verilog but explicitly flattens theuser_proj_example
before comparison. It also yields expected results inlvs.report.flatten
(no difference withlvs.report.fix
at theuser_project_wrapper
level).lvs.script.segfault
has an assign statement to a non-existing net. It segfaults without any output files.In summary, the work-around is to explicitly flatten any verilog submodules that have assign statements.
The text was updated successfully, but these errors were encountered: