Forum Discussion

JuanEscobedo's avatar
JuanEscobedo
Icon for New Contributor rankNew Contributor
8 months ago
Solved

Issues debugging DDR3 controller using SignalTap on Quartus Prime Standard 23.1 with Arria V GZ FPGA

Hello,

I have a simple design where a state machine writes synthetic data to DDR using the Avalon bus of the DDR3 controller and reads it back after some time, processes it, and writes new data to DDR.

The state machine and all the logic is driven by the afi_clk PLL output of the IP.

The issue I am encountering is when trying to add all the AVL signals to signal tap, I can only see the ones driven by the logic and all the signals coming from the IP either pre-synthesis or post-fitting, are missing.

I have added the pragmas keep and preserve to avoid the compiler from optimizing them away or merging them. I have also registered the outputs and neither the original signal nor the registered ones show up on the SignalTap signal selector.

What is weirder is I can see the signals driven by the logic advancing in the state machine as expected (minus being clocked by the wrong clock since I cannot see the output clock of the IP).

Any help would be appreciated.

  • sstrell's avatar
    sstrell
    8 months ago

    In this situation, it doesn't matter, it's the same signal no matter what.

    Using pre-synth vs. post-fit comes more into play if you're trying to reduce recompile times (short ECO compilation with post-fit vs. full recomp with pre-synth even though in Standard edition, that isn't really a big thing either unless you are using incremental compilation).

    Short answer for you: it doesn't really matter.

13 Replies

  • sstrell's avatar
    sstrell
    Icon for Super Contributor rankSuper Contributor

    Can you clarify better what signals you can and cannot see? You say you "see the ones driven by the logic", but you can't see "the signals coming from the IP"? It's not clear what you mean by this. Like you can see the address bits (signals from logic to IP) but not readdata from the IP?

    If you are talking about the memory signals that go out to the external memory, you can't tap those signals assuming you are using the hard controller.

    • JuanEscobedo's avatar
      JuanEscobedo
      Icon for New Contributor rankNew Contributor
      Hello. Yes, I am using the hard controller.

      My issue is the the avalon bus signals that are outputs of the IP. Namely, readdata, datavalid, and ready. They do not show up in signaltap neither presynthesis nor post fitting. Signals used as input to the controller which are driven by RTL show up fine.
      • sstrell's avatar
        sstrell
        Icon for Super Contributor rankSuper Contributor

        ready is not an Avalon signal. Do you mean waitrequest?

        Can you show your design instantiation or design in Platform Designer and screenshots of what you're seeing when you try to tap the nodes in Signal Tap? If you're leaving signals unconnected, they may have been optimized away.

    • JuanEscobedo's avatar
      JuanEscobedo
      Icon for New Contributor rankNew Contributor
      Oh and to reiterate, I also cannot use the afi_clk output as the signaltap clock even though the state machine is driven by it and I see the state variable as well as the signals driven by the logic (addr, write data, write req, read req) toggle so it must be present and driving logic.
  • sstrell's avatar
    sstrell
    Icon for Super Contributor rankSuper Contributor

    I forgot that some IP call the waitrequest signal "ready" for some reason. The official name is waitrequest.

    Does turning on "Include subentities" in the Node Finder do anything?

    Check that the missing signals exist in the RTL Viewer and Technology Map Viewers. If they show up there but not in the Node Finder, something strange is going on.

    • JuanEscobedo's avatar
      JuanEscobedo
      Icon for New Contributor rankNew Contributor

      Hello!

      A little bit of progress. I changed the state machine logic a little bit and now I can see the ready, data valid, and read data signals ( at least the registered version) so it seems it was indeed a problem of the logic was being optimized away. I have attached the latest version of my code for reference.

      However, I still cannot add the afi_clk as the SignalTap instance. Using the RTL viewer I can confirm all 4 output signals from the controller are present:

      And using the technology map viewer I can also confirm the missing signal (afi_clk) is present

      Enabling "Include Sub entities" on SignalTap shows the ddr3 controller instance if trying to view the top level, but still, the clock signal is not found:

      For completeness, here is a screenshot of the SignalTap instance running. You will see something is happening and in somewhat the right sequence, however, I am sampling using the system_clk which is 50MHz, and not the avl_clk which is 125MHz

  • sstrell's avatar
    sstrell
    Icon for Super Contributor rankSuper Contributor

    Have you tried searching on "afi_clk" instead of "avl_clk"? avl_clk does not appear in your tech map viewer screenshot even though you preserved it in your code.

    • JuanEscobedo's avatar
      JuanEscobedo
      Icon for New Contributor rankNew Contributor

      Afi_clk does appear, but only on pre-synthesis view in SignalTap

      The signal is missing on post-fitting view

      • sstrell's avatar
        sstrell
        Icon for Super Contributor rankSuper Contributor

        So tap it as pre-synthesis for use as the acquisition clock.