Skip to content
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

hierarchical compilation of designs for scalability #225

Closed
veripoolbot opened this issue Mar 17, 2010 · 6 comments
Closed

hierarchical compilation of designs for scalability #225

veripoolbot opened this issue Mar 17, 2010 · 6 comments
Labels
area: elaboration Issue involves elaboration phase resolution: duplicate Closed; issue or pull request already exists type: feature-IEEE Request to add new feature, described in IEEE 1800 type: feature-non-IEEE Request to add new feature, outside IEEE 1800

Comments

@veripoolbot
Copy link
Contributor


Author Name: joe barjo
Original Redmine Issue: 225 from https://www.veripool.org
Original Date: 2010-03-17


Hi

Our tests show that verilator is unusable for rather big designs.
The reason for this (from what I understand) is that it doesn't support hierarchical compilation.
I don't know much about verilator internals, I think I have a suggestion to handle hierarchy with cycle based simulators.
SystemCass is a systemC "compatible" simulator which has a much better performance because the models are composed of 3 functions:
* Transition function;
* Moore generation function;
* Mealy generation function.
These 3 functions should be "easily" generated by verilator.
A hierarchical compilation not only brings scalability, but it should also ease parallelism for the code generation.
This feature would be an overkill.

More info at
https://www-asim.lip6.fr/trac/systemcass/

Thanks

@veripoolbot
Copy link
Contributor Author


Original Redmine Comment
Author Name: Wilson Snyder (@wsnyder)
Original Date: 2010-03-17T15:01:00Z


From reading the webpage (annoying it's https without a certificate, but anyhow)
I seriously doubt that SystemCass could get even remotely close
to the performance of Verilator, which does much more than what they optimize

  • the code Verilator generates in the internal model is not SystemC.

Anyhow, how large is your design? Very large (>>10M gates) designs can
have a SystemC shell to instantiate separately verilated modules. See
[[http://www.veripool.org/boards/2/topics/show/84-Verilator-Verilator-best-practice-flow-Large-designs-bottom-up]]

I would like to have Verilator generate such shells, but as with all things, time limits.
If you want to look at implementing hierarchical compiles I'll give you pointers.

@veripoolbot
Copy link
Contributor Author


Original Redmine Comment
Author Name: joe barjo
Original Date: 2010-03-17T16:08:08Z


Thanks for your response

For systemCass, the internal model can also be something different from system C.

The test design we used was about 1.5M gates.
Our flow actually generates vhdl, and we are actually switching to verilog.

For the test (I know this is a bad test...), we synthetised the vhdl (with synDc), and tried to simulated the generated structural verilog.
Verilator simply blew out the memory (more than 3Gb) and never went through.
Then we post processed the generated verilog and transformed gate instances into equations.
It took verilator about 1h to generate 1000 cpp files.
Then it took about 1 hour per cpp file to compile. (We haven't compiled this)

With icarus verilog, it took about 18h to generate a binary.

Today we are generating native verilog code that is much more compact.
We will keep you posted with the test results.
We are currently evaluating verilator, icarus verilog and gpl cver.

I don't fully understand how to use the system perl shells, and how they integrate with verilator.

@veripoolbot
Copy link
Contributor Author


Original Redmine Comment
Author Name: Wilson Snyder (@wsnyder)
Original Date: 2010-03-17T16:16:40Z


Oh, you're simulating gates, not RTL?

For that large a gatesim, you'll want a commercial simulator. That's not what
any of the open source tools are designed for (to my knowledge), the "market" is
just too small.

Converting it to RTLish is interesting though... I'm surprised it goes that
slowly, though the memory isn't a surprise - that's fine. Can you run with --stats and send the resulting file? I'm guessing your outputter needs to remove more hierarchy.

@veripoolbot
Copy link
Contributor Author


Original Redmine Comment
Author Name: joe barjo
Original Date: 2010-03-17T17:05:10Z


Gate simulation is not our goal. This was just a test
gplcver eats this gate level verilog instanly...
But it is slow...

We now do output rtl level verilog. But it currently has interfaces with vhpi or vpi.
So we will use a much smaller design without vpi for a new verilator test.
I'll keep you updated with results

Thanks

@veripoolbot
Copy link
Contributor Author


Original Redmine Comment
Author Name: Wilson Snyder (@wsnyder)
Original Date: 2010-03-17T20:14:00Z


BTW, I suspect you already thought of this, but make sure your system isn't paging.
I ran our whole chip, it's 7.3 GB but only 18 minutes.

@veripoolbot veripoolbot added area: elaboration Issue involves elaboration phase effort: weeks Expect this issue to require weeks or more of invested effort to resolve type: feature-IEEE Request to add new feature, described in IEEE 1800 type: feature-non-IEEE Request to add new feature, outside IEEE 1800 labels Dec 22, 2019
@wsnyder wsnyder added resolution: duplicate Closed; issue or pull request already exists and removed effort: weeks Expect this issue to require weeks or more of invested effort to resolve labels Apr 5, 2020
@wsnyder
Copy link
Member

wsnyder commented Apr 5, 2020

#2182 is addressing this issue.

@wsnyder wsnyder closed this as completed Apr 5, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area: elaboration Issue involves elaboration phase resolution: duplicate Closed; issue or pull request already exists type: feature-IEEE Request to add new feature, described in IEEE 1800 type: feature-non-IEEE Request to add new feature, outside IEEE 1800
Projects
None yet
Development

No branches or pull requests

2 participants