Showing results for 
Search instead for 
Did you mean: 
Intel Support hours are Monday-Fridays, 8am-5pm PST, except Holidays. Thanks to our community members who provide support during our down time or before we get to your questions. We appreciate you!

Need Forum Guidance? Click here
Search our FPGA Knowledge Articles here.

Cyclone III Active Serial Remote Update with Nios II

Cyclone III Active Serial Remote Update with Nios II

A step by step description for using Nios II to control dual boot configuration on Cyclone III with SPI flash.

Application note environment

For this AN, I’ve used a board from Devboards, the DBM2 module.

The AN demonstrates how to setup a dual boot configuration from a third party serial flash – The Numonyx M25PX32 - 64 sectors (64 Kbytes each).

The reboot request is managed by a NiosII application which is located in internal RAM.

This flow has been tested with the version 10.0 of QuartusII and NiosIIEds.

NiosII System Creation w/ SOPC_BUILDER

APP #1 9/94/App-1.JPG


 Take care to set the clock of the Remote_Update_Controller to 25Mhz.

APP #2 3/32/App-2.JPG


QuartusII Compilation

Set the “Configuration Mode to REMOTE” and select 

“Generates compressed bitstreams”

JIC file creation

That is the trickiest part.

The main recommendation is:

Do not let the tool setting the “Start Address” for you .

In fact, if you set the “Start Address” to “AUTO”, it will set addresses which are not aligned with what the Remote Update controller is capable to drive. The two LSB should be zero.

In my example, I took the Start Address of 0x60000


NiosII Application w/ SBT

Do create a “NiosII Application and BST” for each NiosII system.

Example code is:

#include "sys/alt_stdio.h"

#include "io.h"

#include "system.h"

  1. define ConfigStartAdd <PUT THE RIGHT START @>
  2. int main()
  3. int BootAddress ;
  4. int LastestBootAddress;
  5. int StatusRegs;
  6. alt_putstr("Hello from Application #1!\n");

/* Wait until CONF button pushed */

while(IORD(CONF_BASE, 0x0)) {};


BootAddress = IORD(RUC_BASE, 0x4);

LastestBootAddress = IORD(RUC_BASE, 0xC);

StatusRegs = IORD(RUC_BASE, 0xFF);*/

/* Let's go to App #2 */

IOWR( RUC_BASE, 0x3, 0x0); /*Disable Watchdog */

IOWR( RUC_BASE, 0x4, ConfigStartAdd/4);

IOWR( RUC_BASE, 0x20, 0x1 );

while (1);

return 0;


EPCS configuration

Using the QuartusII programmer, add the JIC file as the configuration file, select Program/Configure.



The default configuration will be APP1 at @=0x0

The second boot will be APP2 at @=0x60000

Using the nios2-terminal after each CONF assertion shows the following output.



© 2010 Altera Corporation. The material in this wiki page or document is provided AS-IS and is not

supported by Altera Corporation. Use the material in this document at your own risk; it might be, for example, objectionable,

misleading or inaccurate.

Version history
Last update:
‎06-25-2019 04:20 PM
Updated by: