RSU and ASMI Paralel. Safe Update and Reset-Handling
Hi together,
I have several questions on our new development containing two Cyclone 4GX devices. One EP4CGX22 and one EP4CGX15 each with its own EPCQ16A. Everything in AS. No dependency between the two devices except that they are connected to the same host PC via PCIe.
The Quartus-Version is: 18.1 Quartus-Prime Lite.
We are going to use the capability of updating the devices for the first time so the things around that are quiet new to us.
The designs don´t contain a NIOS II CPU. Everything is done in State-Machines.
For writing the image into the EPCQ16A we use the ASMI_Paralel Block.
Configured with EPCQ16 (without A) due to Bug-ID: 1408167652.
For the Two-Phase-Boot and handling of the configurations we use: Remote Update Intel FPGA IP
Our goal is:
The Device powers up and configures the device as Factory-Image from Flash address 0x0.
The Factory Image resets the RSU Block (Has to be done after Power up?)
The Factory Image sets several parameters and starts reconfiguration at address 0x100000 which is the second half of the EPCQ16A. That’s the location of our Application-Image.
Both Images have the capability of erasing and rewriting a new Image at start address 0x100000 in the flash.
When anything goes wrong (e.g. wrong/corrupt file, power-issue etc.) we want to have the Factory image to work as a backup system. It will be 95%-100% the same as the Application Image at the time of first delivery. When loading of a configuration fails the system shall use the Factory Image and maybe report that to the host.
Here we have the first issue/question. Our PCB-Design contains a MAX6390 Reset-Controller with a manual Reset-Input. With the conf_done connected to that input we generate a Reset-Signal for our logic to be sure that everything is fine at startup. How to decide if the Factory-Image is loaded for the first time after Power-On. We have to do a reset of the RSU only at this point. If we do a reset after a reconfig-issue we are going to lose all information where the FPGA comes from. In fact we will have a cyclic rebooting system if the application image is broken.
Our Workaround for now is that we have a second MAX6390 and don’t use the manual reset input. I don´t think that everybody does it that way. And it is a little tricky to handle which one comes first.Is there any best practice for that?
Second Question: The documentation of early pof-checking feature is not that deeply. Somewhere is written that it checks a small part of the next image to be used. So there is no full check of the image let’s say a CRC or something like that? Does it only check if the start-address is not empty? May this feature be used by Application-Image too (to have the designs identically) or is it only useful for the Factory-Image?
Third Question: The documentation of the registers reconfig_condition and current_state especially in combination with the read_source is not totally clear at all. Will the Factory-Images reported as well? In reconfig_condition register sometimes more than one bit is ‘1’. Is there a guidance or table where one can assume which event causes a combination of bits?
Thanks in advance
BR Nils