Forum Discussion

SrLam9's avatar
SrLam9
Icon for New Contributor rankNew Contributor
8 years ago

How does the Remote Update IP work?

Hi am trying to implement the Remote update IP core into my Arria 10 system with an EPCQ512. I want to have an application and factory configuration to fall back on. I am configuring the Remote update IP via a short Verilog file that I wrote. It checks the Reconfiguration Trigger Conditions parameter in the register and either attempts to reconfigure if the value is 0 (it should be zero at POR) or it just loops and does nothing. I have the watchdog timer enabled and I am using the input clock to reset the timer.

Currently, I have a .jic loaded into the EPCQ512L at 0x20 and nothing loaded at the specified address for the application configuration. How I figured this would work is since the address I specified has an invalid configuration, it should just load the factory page. If I load a .sof to my device it seems to load into configuration that is loaded at 0x20. I check this by having different system IDs. However, when I convert .sof into a .jic and load it into the EPCQ, it never boots. I cannot seem to figure out why it is not booting because my assumption would be that it loads the factory configuration because there is no configuration at the specified address, then the Verilog would read the reconfiguration trigger condition and check that the trigger was probably the watchdog timeout.

Are there any examples of implementing this IP?

Am I missing something here or am I interpreting something incorrectly?

Thank you

14 Replies

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

    Hi Nooraini,

    Sorry about the screenshot, I forgot to explain that the Signal Tap only shows reading parameter 000 (reconfiguration trigger register). It does not show writing the parameters. As you explained, the first step is to check this register. This is where my problem lies. I am expecting to read 0 on PoR, but instead I am reading 0x1f.

    As for providing screen shots for the signal tap for the reconfiguration, states 5'b00100 to 5'b01100 are for setting the reconfiguration application boot, wdt, and AnF bit, but Since I read a 0x1f from the reconfiguration trigger register it goes to 5'b11111 and does nothing there.

    The reset_sequencer_0_reset_out0_reset is the reset going into the remote update ip block in Platform Designer.

    Is there something wrong with my parameter read? It is similar to the example waveform given in the Remote Update IP Core User Guide, but I wait for the Busy signal to deassert before deasserting read_param whereas the example only asserts read_param for one clock cycle.

    Thank you.

  • Nooraini_Y_Intel's avatar
    Nooraini_Y_Intel
    Icon for Frequent Contributor rankFrequent Contributor

    Hi SrLam9,

    I have attached an example project design I just tested today on Arria 10 dev kit which works. You can refer to the rsu_cb.vhd which I wrote the parameters to read reconfiguration status register and write the AnF, disable watchdog timer and application image boot address. After power up the board (of course EPCQL was programmed with a .jic before), when I check using SignalTap to read the reconfiguration status register, I can observe the data_out[31..0] show 00000. You can try to check the rsu_cb.vhd and compare with yours.

    Regards,

    Nooraini

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

    We have been trying to implement a similar solution in one of our projects and have observed the same problem. In our case, the FPGA is configured in DTA mode and we have a simple FSM that reads the Reconfiguration Trigger Conditions to determine what caused the reconfiguration. The FSM essential only has 3 states that are performed when reset is de-asserted:

    1. Wait for the busy signal to be de-asserted

    2. Wait for 4 clocks (inherited from an old design)

    3. Read the Reconfiguration Trigger Conditions register

    However, the register was always returning 0x1f, in the exact same way as described in this post. Eventually, we discovered that the IP requires some initialisation time after the busy signal is de-asserted for the first time. By waiting for 1ms after the busy signal goes low, we were able to read the register. The updated FSM still only has 3 states that are performed when reset is de-asserted:

    1. Wait for the busy signal to be de-asserted

    2. Wait for 1 ms

    3. Read the Reconfiguration Trigger Conditions

    It's worth pointing out that the 1ms figure was reached after trial and error, as this initialisation time isn't documented it's not clear how long the delay actually needs to be.

    As this is an old post, I guess the original poster has solved this problem. However, this has proven to be a bit of a time sink for us so I'm posting this solution in case anyone else has this same issue.

    • paveetirrasrie_Altera's avatar
      paveetirrasrie_Altera
      Icon for Frequent Contributor rankFrequent Contributor

      Hi JDFPGA,

      The thread has been closed. Kindly open a new thread if you've any queries and Altera specialist will provide the support in new thread.

      Regards,

      Pavee