-
Notifications
You must be signed in to change notification settings - Fork 69
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
Connect-by-name has no vpiHighConn #3958
Comments
pieter3d this is working just fine:
|
You need to look at the elaborated tree |
Are you sure that's right? the port "clk" has both the the HighConn and LowConn vpiActual as the inner net of the sub module - |
It's more obvious when the same module is connected different ways (all logically equivalent): module sub (
input logic clk
);
endmodule
module test;
logic clk;
sub sub0 ( .* );
sub sub1 ( .clk );
sub sub2 ( .clk (clk) );
endmodule |
UHDM dump of module sub (
input logic clk
);
endmodule
module test;
logic clk;
logic clk_wire;
sub sub0 ( .* );
sub sub1 ( .clk );
sub sub2 ( .clk (clk) );
sub sub3 ( .clk (clk_wire) );
endmodule
Interestingly, even sub2 gets an incorrect High_conn. Only sub3 has the right one, there is some kind of name collision happening somewhere, it seems. |
I poked around some in NetlistElaboration.cpp, thanks for the suggestion. At the point where UHDM::any* con =
((UHDM::design *)((uhdm_handle *)vpi_design)->object)
->TopModules()
->at(0)
->Modules() // name is "sub0"
->at(0)
->Ports()->at(0)->High_conn();
UHDM::ref_obj* o = (UHDM::ref_obj*)con;
printf("debug: %d %d %s\n",
o->Actual_group()->VpiType(),
o->Actual_group()->VpiLineNo(),
std::string(o->Actual_group()->VpiName()).c_str()); shows the So either the elaborated module gets replaced, or I am not looking at the right elaborated tree somehow. I don't think the High_conn itself is getting overwritten later, based on some debug prints and watching addresses in a debugger, but I am not 100% sure. So - not quite sure yet where the issues lies. |
Ok, making some progress. The High_conn's Culprit line: https://github.com/chipsalliance/UHDM/blob/b918b5d5c82cfbaf71e04f87ab69fc7e182e41aa/templates/ElaboratorListener.cpp#L907 During write-out, if the net name matches any local nets, it gets replaced. |
The instStack_ has to be popped temporarily while binding high_conn so is skips the current module scope. |
Yeah that's kinda what I figured, but the Listener classes need some new state to know to do that, i.e. when they are processing a High_conn |
Set a bp in the bind function, check the stack, you should see the high conn relation traversal, the python code generator in scripts/ needs to change to pop and push back the context before and after the traversal of that particular relation |
Yes, but that's all c++ code... Where does python come into this? |
Most of the C++ code is auto generated by Python |
Dumping the UHDM for that shows this (instance only):
So at least two things look wrong to me:
clk
but it's a valid connect-by-name constructdata_out
output is totally missing, the port has a blank name.The text was updated successfully, but these errors were encountered: