Skip to content

omap_mib: Architecture and Design Description

1. Block diagram

 AXI4-Lite --> olo_axi_lite_slave --> Rb_Wr, Rb_Rd --> MG-1 register file --> Cfg_* (Target, Initiator)
               (10-bit address)  <-- Rb_RdData   <--   configuration       <-- Tgt_Ind*, Tgt_Evt*
                                                       last command        <-- Ini_Evt*, Ini_Open
                                                       counters, flags     <-- Pkt_Evt*
 Irq <------------------------------------------------ interrupt
                                                       MG-2 olo_ft_ecc_monitor <-- Ecc_Sec, Ecc_Ded (3 channels)
                                                       injection commands      --> Inj_Valid, Inj_Double

All of omap_mib runs in Clk, the clock of the core.

2. Register file (MG-1)

The register map is in register_map.md. The file is one two-process entity:

Behaviour Implementation
Write Decoded from the word address in the cycle of Rb_Wr; byte enables are not used
Read Data selected in the cycle of Rb_Rd and registered (Rb_RdValid one cycle after Rb_Rd)
Commands (W1, WO) One-cycle pulses: ECC injection, ECC clear, ECC channel clear
Sticky flags (W1C) flags := (flags AND NOT written) OR events: an event in the cycle of a clear is kept
Counters (RC) 16 bits, saturating; a write clears both counters of the register, then the increment of the same cycle is applied
Last command Registered with every indication of the Target (Tgt_IndValid)
Status counters The status of an indication selects its counter; status 0 selects the counter of the command kind (cmdKind of the command code)
Windows Registers of the windows 0 to Windows_g - 1 only; the outputs of the others keep their reset values and are not used by the Target
Irq Registered OR of EVENTS AND IRQ_EN
Event flag Sources
TGT_ERROR, TGT_CMD Indication with a status other than 0, with status 0
TGT_DISCARD Header CRC error, incomplete header, reply received by the Target
INI_REPLY Reply confirmed without error
INI_ERROR Reply discarded for a header error, unexpected reply, data error, rejected request
INI_TIMEOUT Timeout of a command
ECC_SEC, ECC_DED Events of the EDAC monitor
PKT_DISCARD Packet without user port discarded, command received without Target

3. EDAC (MG-2)

olo_ft_ecc_monitor with 3 channels and 16-bit counters; Rd_Ena is always set, Rd_Channel is ECC_SELECT, a write to ECC_COUNT is the read and clear of the selected channel, a write to ECC_STATUS the global clear.

Channel Buffer
0 Write buffer of the Target (olo_ft_fifo_sync)
1 Write data of the AXI master (olo_ft_axi_master_full)
2 Read data of the AXI master (olo_ft_axi_master_full)

A write to ECC_INJECT with SINGLE or DOUBLE set gives a one-cycle pulse on Inj_Valid of the channel with Inj_Double; the Target flips codeword bit 3 (single) or bits 3 and 5 (double) of the next word written to the buffer. Channel 3 does not exist: its counters read zero and an injection into it is ignored.

4. Resources and timing

28 counters of 16 bits (448 flip-flops), 86 flip-flops per implemented window, about 120 flip-flops for the other registers, and the read multiplexer. The window comparators are in the Target; the MIB only holds the bounds.