Forum Discussion

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

How to make NCO compiler use M9K blocks and not M144K

I am using the NCO compiler V10.1 to generate a ROM based NCO. I am using a stratix IV (EP4SE230F29C2) device.

According to both the manual and the wizard itself, the ROM should be implemented with M9K memory blocks. But to my disappointing surprise, it is implementing the NCO with M144K blocks. The NCO compiler manual even provides resource estimates in terms of M9K blocks.

Yet the compiler is ignoring its own estimation and goes on to use only M144K blocks. This is a major problem. I am instantiating multiple NCOs and the design won't fit. I have all the M9K blocks available in the world but the tool is insisting on using the M144K, which I don't have enough. Does anybody know what to do? Is this [yet] another Quartus II bug, or is there some hardware limitation here?

18 Replies

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

    i see the problem now. it doesn't happen in Small ROM but does in Large ROM

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

    Thanks. I'll try it also a little bit later to confirm. But this is still a problem. I need the large ROM because I can't spare the latency.

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

    i think the problem is the deep RAM in the Large ROM, still taking a look

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

    i think Quartus doesn't want to put a 64k deep RAM into M9K because it would need an 8:1 mux (8 M9K in 8k x 1b)

    using M144K you can go 16k deep, so you only need a 4:1 mux (4 M144K in 16k x 18b/19b)

    you can file an SR, at this point i think the issue is synthesis, not the actual NCO IP. i expect a significant fmax hit if you got the synthesizer to use M9K instead of M144K. what speed are you targeting? any way to trade fmax for latency?
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    Thanks,

    Ok, I see this now also. But it seems that anything beyond around 2K deep it switches to M144K.

    I need to run at about 268 MHz. I probably can afford the trade-off (let fmax take a hit). The synthesis should allow you to make that trade off.
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    i guess i was wondering whether you could run the NCO at double the frequency to try and compensate for lost latency in Small Table mode

    i would probably write my own NCO at this point. you are using the easiest mode to recreate and none of the additional features. i don't think you'll get synthesis to use the RAMs as you'd like, so you'll have to stitch them together yourself
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    it would be a nice synthesis enhancement, but i don't know exactly how you'd implement it