98 CIM Controller with BIST and Fault Map (GF180)

98 : CIM Controller with BIST and Fault Map (GF180)

Design render
  • Author: Prof. Santhosh Sivasubramani, IIT Delhi
  • Description: GF180mcuD digital compute-in-memory peripheral: 8x8 1-bit cell array with built-in self-test (march/checkerboard/diagonal patterns), 64-bit sticky fault map, 16-bit dot-product accumulator over user-programmable row activations, SPI-programmable, irq output, 25 MHz signoff clock, 1x2 tile
  • GitHub repository
  • Open in 3D viewer
  • Clock: 25000000 Hz

tt_um_santhosh_cim_bist_gf — how it works

Tile 6 of TTGF26a Scenario B (GF180mcuD, 1x1, 25 MHz).

An SPI-programmable compute-in-memory (CIM) controller with built-in self-test (BIST) and a persistent fault map.

Architecture

The block holds an 8x8 1-bit cell array (cmem), the digital stand-in for a memristive or SRAM CIM crossbar. Two orthogonal finite-state machines run against that array:

BIST FSM

On start_bist (CTRL[0] or rising edge on ui_in[0]):

  1. WRITE — walks rows 0..7, writing the pattern-specific expected byte into each row (march phase 0, checkerboard, or diagonal).
  2. READ — walks rows 0..7, XOR-ing the actual cell value against the expected byte. The mismatch mask is OR-merged into fault_row[r]. ui_in[1]=1 forces a mismatch on cell[0][0] for silicon-side testing.
  3. For the march pattern, the BIST re-runs WRITE then READ with the inverted phase (all-ones) so stuck-at-0 faults are also detected.
  4. DONE — sets sticky bist_done, clears bist_running.

A 4-bit zero-extended popcount of each mismatch byte is accumulated into a saturating 8-bit FAULT_COUNT, and any non-zero mismatch latches fault_ever.

CIM FSM

On start_cim (CTRL[1]):

  1. Walks rows 0..7. For each row where INPUT_VEC[r]=1, adds the 4-bit zero-extended popcount of cmem[r] into a 16-bit accumulator.
  2. DONE — sets sticky cim_done, clears cim_running.

This models a 1-bit-weight column sum: activated rows contribute their total "on" cells into the accumulator.

The two FSMs are mutually exclusive: CIM waits while BIST is running and vice versa.

SPI protocol

Shared spi_slave (16-bit frame {R/Wn, 7-bit addr, 8-bit data}, mode 0, MSB first). The full register map is in the main README.

Sticky flags (bist_done, cim_done, fault_ever) are cleared by writing 1 to the corresponding bit of STATUS (W1C). clear_fault_map in CTRL is a self-clearing pulse that zeros the fault map, fault counter, and fault_ever without disturbing the cell contents — useful for running BIST periodically as a watchdog without losing the stored weights.

How to test

  1. Via SPI, write the 8 rows of cmem (0x03 after setting ROW_SEL at 0x02) to load weights.
  2. Write INPUT_VEC (0x04) with the activation vector.
  3. Write CTRL (0x00) = 0x02 to start CIM. Poll cim_done (uo[2] or STATUS bit 6); read ACCUM_LO/HI (0x05/0x06).
  4. For BIST: set PATTERN (0x01), write CTRL = 0x01, poll bist_done, read FAULT_COUNT (0x09) and fault rows (0x08 after setting 0x07).

External interfaces

Pin Purpose
ui_in[0] External BIST start (rising edge)
ui_in[1] Inject fault (forces cell[0][0] mismatch)
uo_out[0] Busy
uo_out[1] bist_done sticky
uo_out[2] cim_done sticky
uo_out[3] fault_ever sticky
uo_out[4] cim_done && accum == 0
uio[6] irq (when irq_en and either sticky done is set)

Novelty

First TTGF tile to expose persistent cell-level defect data over a host interface — pairs with tt_um_santhosh_xbar_ctrl_gf (Tile 3) and tt_um_santhosh_rsd_char_gf (Tile 8) for a full memristive-array diagnostic flow.

IO

#InputOutputBidirectional
0start_ext (external BIST trigger; rising edge)busy (bist_running | cim_running)spi_cs_n
1inject_fault (BIST test aid: forces cell[0][0] mismatch)bist_done (sticky)spi_mosi
2reservedcim_done (sticky)spi_miso
3reservedfault_ever (sticky)spi_sck
4reservedaccum_zero (cim_done && accum==0)bist_running
5reservedaccum[8]cim_running
6reservedaccum[9]irq
7reservedaccum[10]reserved

Chip location

Controller Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux tt_um_chip_rom (Chip ROM) tt_um_factory_test (Tiny Tapeout Factory Test) tt_um_Vincent2405_adder_tree (BSD Convolution Adder Tree) tt_um_BastiBudde_i2c_slave_sensor (I2C Slave Template with Emulated Sensor) tt_um_60hz_load (60 Hz Grid-Forming ASIC with Dump-Load Control) tt_um_spi_config_reg (Simple SPI configuration for analog designs) tt_um_ex_drosen766 (Project) tt_um_spi_cpu_top (SPI-CPU) tt_um_d5smith_mfa (Music for ASICs) tt_um_i2c_master (I2C Master Controller) tt_um_aswarby_mac (Aswarby INT8 MAC) tt_um_arrakeen_spsram_direct (TT-Arrakeen-SPSRAM-direct) tt_um_alu (8-bit Interactive ALU) tt_um_JCT_PoC (ttgf jct PoC) tt_um_jct_lea (LEA-128) tt_um_cwru_cpu (CWRU CPU) tt_um_teapot (100Mbps Ethernet Accelerator Wrapper) tt_um_jte_cordic (CORDIC sin/cos generator) tt_um_aidenkoch4 (Three Channel RGB PWM Controller) tt_um_pschuetz_tremolo (Tremolo guitar pedal ASIC) tt_um_jsabree11_fibonacci_checker (fibbonaci_tt) tt_um_connerdaehler_boop (Procedural ASIC) tt_um_Kieckenwama_Traffic_LIGHT_FSM (Traffic Light FSM) tt_um_KimLuu02_WashingMachine_FSM (WashingMachine_FSM) tt_um_PaulineKreis_PWM_Analyser (PWM-Analyser) tt_um_PWM (PWM Generator) tt_um_wokwi_466666882406199297 (Simple Sprinkler) tt_um_rebeccargb_universal_decoder (Universal Binary to Segment Decoder) tt_um_rebeccargb_hardware_utf8 (Hardware UTF Encoder/Decoder) tt_um_spi_master (SPI Master Slave Communication) tt_um_likitha_trng (Secure TRNG Entropy Generator) tt_um_wnn (8-bit WNN Pattern Recognizer) tt_um_raksha (Raksha) tt_um_uart_soc (UART_SOC) tt_um_ecdsa_verify (ECDSA Verification) tt_um_ecc_processor (ECC Processor) tt_um_fast_auth (Fast Authentication Accelerator) tt_um_karthik_trng (TRNG using Ring Oscillator) tt_um_push (Secure V2X Mini Demonstrator) tt_um_santosh_aes_sbox (AES S-Box Accelerator) tt_um_hardware_anomaly_detection (Hardware Anomaly Detection) tt_um_multi_protocol (Multi-Protocol Communication Controller) tt_um_pqc_ntt_butterfly (PQC NTT Butterfly Core) tt_um_cambridge_nlfsr (Programmable Chaotic NLFSR) tt_um_4b_accumulator_cpu (4 bit Accumulator CPU) tt_um_spi_slave (SPI Slave with 8-Register File) tt_um_geeta_doddamani_lfsr (4-bit Maximum-Length LFSR) tt_um_ecc_accelerator (ECC Scalar Accelerator) tt_um_egurapha_chacha20 (ChaCha20) tt_um_configurable_pwm (Configurable PWM Generator) tt_um_Arctic0 (Arctic0 16-bit CPU) tt_um_comp8 (8-bit Comparator) tt_um_pwm_cit (Configurable 8-bit PWM Generator) tt_um_rameshwar_door_lock (Digital Door Lock) tt_um_sandy_venky (8-bit LFSR Circuit) tt_um_ljhahne_pong (Pong) tt_um_v2x_warning (V2X Collision Warning) tt_um_ecc_scalar_mult (ECC Scalar Multiplication) tt_um_fhw_appel_spiPWMio (spiPWMio) tt_um_arrakeen_spsram_direct_sramrules (TT-Arrakeen-SPSRAM-direct-sramrules) tt_um_arrakeen_spsram_direct_5v (TT-Arrakeen-SPSRAM-direct-5V) tt_um_LukeSilva_cartrip (Car Trip) tt_um_coffeepot (100Mpbs 3 port Ethernet switch) tt_um_emiliopeju_lightscan (Lightscan) tt_um_Alanduan21_triad01_top (triad01) tt_um_lif_snn (4-Neuron LIF Spiking Neural Network) tt_um_smerity_mandelbrot (Smerity-Mandelbrot) tt_um_elvtide01_7SegmentDice (7SegmentDice) tt_um_elemental_harmony (Elemental Harmony Game) tt_um_pattern_gen (Programmable Waveform and PWM Generator) tt_um_antimatter15_pdm_vad (PDM Voice Activity Detector) tt_um_layla_spike_detector (Neural Spike Detector) tt_um_detronyx_arith_lab (Detronyx Arithmetic Lab Tile) tt_um_hasheddan_nni (Nearest Neighbor Interpolation) tt_um_brisq (BRISQ) tt_um_santhosh_spike_codec_gf (Neuromorphic Spike Codec (GF180)) tt_um_santhosh_aer_router_gf (Asynchronous-AER Spike Router (4-phase REQ/ACK, 16-entry routing table, GF180)) tt_um_santhosh_snn_wta_gf (Spiking Neural Network WTA Inference Engine (GF180)) tt_um_santhosh_cim_bist_gf (CIM Controller with BIST and Fault Map (GF180)) tt_um_santhosh_neuro_puf_gf (Neuromorphic PUF (distinct-tap LFSR arbiter + memristor XOR, GF180)) tt_um_detronyx_uart_trace_exerciser (Detronyx UART Trace Exerciser) tt_um_ro_puf (Tiny RIng Oscillator PUF) tt_um_franretfie_top (Quadrature sine generator) tt_um_cherny_xor_8bi (XORing given bits) tt_um_mealycpp_ascon_sdmc_uart (ASCON Integrated Crypto Processor) tt_um_reflex_s4 (AER Reflex Chip - MCP2515 CAN gateway) tt_um_polytrig_core (PolyTrig Digital Waveform Synthesis Core) tt_um_waferspace_vga_screensaver (Wafer.space Logo VGA Screensaver) tt_um_2048_vga_game (2048 sliding tile puzzle game (VGA)) tt_um_urish_simon (Simon Says memory game) Available