Forum Discussion

Altera_Forum's avatar
Altera_Forum
Icon for Honored Contributor rankHonored Contributor
16 years ago

how does quartus decide to remove logic?

I guess this is a bit of a newbie question (newbie to quartus not hardware design - I'm an old ASIC guy)...

I've crawled through the manual (well, it's 1200 pages long, so I'm sure I missed the discussion), but how does quartus decide to remove logic from a design? I have a big design (1.5M gates, 200K ff), and after mapping, 99% of the logic completely disappears and I am left with a few thousand luts.

I found the redundant logic options, noprune (which I am trying now with assorted regs, but so far by putting noprune everywhere except in tasks and functions, I get a hard crash:

Internal Error: Sub-system: VRFX, File: /quartus/synth/vrfx/verific/database/netlist.cpp, Line: 4538

What's confusing especially is that I think I've been careful to make sure data flows in and out of this design.. It simulates by driving data in from outside the chip only (though there may be an initial block somewhere?)

I presume that the problem is one of the follow:

1. map doesn't see clocks driven from registers (yes I read about clock generation), so it thinks all clocks a nailed to 0 or whatever...

2. map doesn't see that reset causes powerup fsms to start running..

3. ??? registers coming up 0 puts everything in a strange state and quartus removes logic thinking it won't start running..

I guess any of the above are fine, but *there's no clue* I can find in the reports or in the quartus that tells me *why* it tossed out all 200,000+ registers ? I suspect that design assistant might, but I haven't quite figured that out either?

Any hints much appreciated!

11 Replies

  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    I remember pulling my hair out many moons ago when initially trying to keep logic on FPGA's. You will find that if you provide input into a module and have it drive another module that ultimately hooks to an output pin that your logic will stay in place (albeit sometimes optimized). On occassion, especially with cominatorial logic you will see your logic get squished. It may seem like overkill but if you are using VHDL it is very handy to label things. You can even label if and case statements and it will make things much easier to search for in RTL diagrams and when looking for signal nodes. Maybe you can do something similar in Verilog. 99.99% chance if you are missing modules in the final synthesized or mapped design, somewhere along the data path it didn't make it to an output pin or drive logic, and it's because you didn't hook up a signal properly to an input or output somewhere along the way.