CMIC Application Note

Table of Content

 

Introduction

The CMIC is an embedded engine performing automatic verification and repair of the configuration memory.

CMIC reference memory is integrated into the FPGA and contains all references signatures to verify the configuration memory integrity.

This memory is initialized during the bitstream download process with reference data computed by NXmap software.

By default, the CMIC is disabled.

 

CMIC Operation

CMIC Definition

CMIC is the module that checks the integrity of the configuration memory.

The bitstream manager downloads the bitstream (Design configuration + CMIC reference memory). CMIC memory is included in the FPGA.

The fabric is divided into 5 rows of 28 columns each division is a region.

Each region is made of configuration word lines and is protected with 4 signatures.

The CMIC memory contains all signatures which allows to detect 2 errors and correct 1 error by word line in the configuration memory.

The total correction capacity is 560 simple errors.

Each configuration word line will be checked/corrected by CMIC.

At startup, a CMIC verification is made before the rising edge of “ready” signal on the prog bank.

 

CMIC storage

The CMIC has its own memory protected by ECC in the FPGA.

The ECC can correct 1 error and detect 2 errors.

The ECC will correct automatically the single error detected in the CMIC memory.

The CMIC does not need to access the external memory (used to store the bitstream) when performing checks and repairs at run time.

 

The CMIC process needs to be activated during the bitstream generation.

CMIC Reference Generation

 

CMIC Sequencing

Once the initialization is done, the CMIC engine can be periodically activated to perform the following sequence:

1. Read configuration data

2. Calculate signature

3. Compare the signature with CMIC reference

4. If a mismatch is detected:

a. Calculate faulty bit location

b. Read configuration data

c. Repair flipped bit

d. Write configuration data

 

At the end of the configuration process if CMIC is enabled an automatic CMIC verification is made before the ready flag rise.

A successful verification notification signals is generated:

READY: NG-MEDIUM output pin. Goes high after successful configuration. When READY goes high, the user’s I/O banks are activated and NG-MEDIUM enters in user’s defined behavior mode.

 

To check if an uncorrectable error has been found the user has to read the ERROR1 and ERROR2 registers. Please refer to Configuration Guide documentation.

In case of an uncorrectable error, the bitstream must be reloaded by asserting RST_N to low level during at least 50 CLK cycles – or 3 us (to reset the internal configuration engine), before going high to restart the configuration process.

Additional related CMIC signals can be monitored in the FPGA fabric as part of the NG-MEDIUM interface, located in the programming bank. This includes:

 

  • CMIC_CORR(10:0): 11-bit counter value that gives the number of corrected errors on fabric configuration.

  • Upon configuration, READY is asserted (high) when the bitstream is loaded and a first CMIC cycle has been successfully executed (if CMIC is not disable).

 

CMIC Activation/Deactivation

By default, the CMIC is deactivated,

The CMIC can be directly activated in NXmap, this option is documented in NXmap user manual.

The CMIC can be activated/deactivated by programming the LOADER_CTRL register.

This register is documented in the Configuration Guide.

CMIC Period

The CMIC period can be set by defining parameters used during the bitstream generation.

The CMIC is working on the internal 50 MHz Bitstream manager clock or external provided clock.

CLK in Slave Parallel configuration modes, whose frequency can range from 20 to 50MHz.

Period calculation

CMIC activation is periodic:

(CMIC_DELAY+1)*65536 clk cycles.

CMIC correct multiple ROW at the same time. Each ROW has its own check duration.

Each time an error is corrected in a ROW, the CMIC restart at the beginning of this ROW automatically.

 

At 50Mhz:

With a minimum CMIC delay configuration, the CMIC is requested to start every 1.3ms.

If the previous scan of a ROW is not done yet, it will wait for the next request to start again.

CMIC ROW duration are:

  • ROW1: 3.93ms

  • ROW2: 2.40ms

  • ROW3: 2.98ms

  • ROW4: 2.43ms

  • ROW5: 3.93ms

CMICs progress example:

Time

STATUS:

STOP

STATUS:

RUNNING

T0

(CMIC START)

ROW1,2,3,4,5

NONE

T+1.3ms

NONE

ROW1,2,3,4,5

T+2.6ms

ROW2(2,40ms)

ROW4(2,43ms)

ROW1,3,5

T+3.9ms

ROW3(2,98ms)

ROW1,2,4,5

T+5.3ms

ROW1(3,93ms), ROW2(2,60ms+2.40ms=4.40ms), ROW4(2,60ms+2,43ms=4.86ms),

ROW5(3,93ms)

ROW3

 

 

At 20Mhz:

With a minimum CMIC delay configuration, the CMIC is requested to start every 3.25ms.

CMIC ROW duration are:

  • ROW1: 9.83ms

  • ROW2: 6ms

  • ROW3: 7.45ms

  • ROW4: 6.08ms

  • ROW5: 9.83ms

 

CMICs progress example:

Time

STATUS:

STOP

STATUS:

RUNNING

T0

(CMIC START)

ROW1,2,3,4,5

NONE

T+3.25ms

NONE

ROW1,2,3,4,5

T+6.5ms

ROW2(6ms)

ROW4(6.08ms)

ROW1,3,5

T+9.75ms

ROW3(7.45ms)

ROW1,2,4,5

T+13ms

ROW1(3,93ms), ROW2(6.5ms+6ms=12.5ms), ROW4(6.5ms+6.08ms=12.58ms),

ROW5(9.83ms)

ROW3

 

At 50 MHz:

The minimum period is 5.3 ms (4 ms running + 1.3 ms delay) and the maximum 65 days.

The configuration memory scan takes 4 ms.

The minimum delay setting to launch again the CMIC is 1.3 ms (20 ns x 2**16) and the maximum delay is ~65 days (20 ns x 2**48).

At 20 MHz:

The minimum period is 13.25 ms (10 ms running + 3.25 ms delay) and the maximum 162.5 days.

The configuration memory scan takes 10 ms.

The minimum delay setting to launch again the CMIC is 3.25 ms (50 ns x 2**16) and the maximum delay is ~162,5 days (50 ns x 2**48).

Set configuration

The CMIC period is set by default at the minimum value.

To adjust the time interval between two consecutive CMIC the user needs to program it during bitstream generation.

 

 

© NanoXplore 2022