38 RRAM Characterization Platform (DC sweep + endurance + retention + histogram, GF180)

38 : RRAM Characterization Platform (DC sweep + endurance + retention + histogram, GF180)

Design render
  • Author: Prof. Santhosh Sivasubramani, IIT Delhi
  • Description: GF180mcuD standalone characterization platform for one external resistive-switching device (RRAM / memristor / PCM). Drives an 8-bit DAC rail and reads back an 8-bit ADC rail, with four SPI-selectable modes: DC sweep (VSTART..VSTOP by VSTEP with on-chip 16-bin histogram and min/max tracking), pulse endurance (N cycles of SET/read-verify/RESET/read-verify with THR_LO / THR_HI checks, latches FAIL_IDX on first miss), retention (SET pulse then periodic reads at programmable interval), and free-running histogram capture. 25 MHz signoff clock.
  • GitHub repository
  • Open in 3D viewer
  • Clock: 25000000 Hz

How it works

A standalone characterization platform for a single external resistive-switching device — RRAM / memristor / phase-change cell — implemented entirely in gf180mcuD digital. The host programs one set of parameters, asserts start, and the on-chip FSM runs the chosen experiment to completion, writing results into readable registers so the host never has to micro-manage pulses.

Four modes

mode Name What it does
00 DC sweep DAC ramps VSTART → VSTOP by VSTEP with a PW-cycle settle at each step; every sample updates histogram, min, max, last.
01 Endurance N cycles of {SET pulse → read-verify vs THR_LO, RESET pulse → read-verify vs THR_HI}. On the first miss, FAIL_IDX and PASS_FAIL latch and the FSM stops early.
10 Retention Apply one SET pulse, then read every INTV clocks for N reads at VREAD, updating histogram / min / max / last each time.
11 Hist-only Free-running ADC capture: sample ui_in every PW clocks for N samples without touching the DAC.

All four modes write into a shared 16-bin histogram (bins indexed by adc[7:4], 8-bit saturating counters) and a min / max / last tracker.

Block diagram

       +------+          +---------------+          +-----------+
 ui_in |  ADC |--------> | histogram +   |          |           |
  (in) |      |          | min/max/last  | <--------+ FSM       |<--- SPI regs
       +------+          +---------------+  do_sample|  (4 mode |
                                                     |   dispatch)
       +------+                                      |           |
uo_out |  DAC |<-------------------------------------+           |
 (out) |      |                                      +-----------+
       +------+
                   (uio: cs_n, mosi, miso, sck, busy, done, pass_fail, trig)

Register map

Addr Name Description
0x00 R_CTRL {irq_en, —, clear_hist, mode[1:0], reset_sticky, start, global_en}
0x01 R_VSTART DC-sweep start DAC code (default 0x00)
0x02 R_VSTOP DC-sweep stop DAC code (default 0xFF)
0x03 R_VSTEP DC-sweep step (default 0x01)
0x04 R_VSET SET-pulse amplitude (default 0xC0)
0x05 R_VRESET RESET-pulse amplitude (default 0x40)
0x06 R_VREAD READ amplitude (default 0x80)
0x07 R_THR_LO verify threshold after SET (ADC must be ≥ THR_LO) (default 0xA0)
0x08 R_THR_HI verify threshold after RESET (ADC must be ≤ THR_HI) (default 0x60)
0x09 R_PW pulse / settle width in clocks (default 0x04)
0x0A R_N_LO low byte of N (endurance cycles / retention reads / hist samples)
0x0B R_N_HI high byte of N (max 0xFFFF = 65 535)
0x0C R_INTV_LO retention interval low byte
0x0D R_INTV_HI retention interval high byte
0x10..0x1F R_HIST0..15 16-bin 8-bit saturating histogram
0x20 R_STATUS {busy, done_sticky, pass_fail, irq_sticky, —, mode[1:0], global_en}
0x21/22 R_FAIL_LO/HI cycle index where endurance first failed
0x23 R_LAST_ADC most-recent sampled ADC value
0x24 R_MIN_ADC minimum ADC observed since start
0x25 R_MAX_ADC maximum ADC observed since start
0x26 R_DAC_DBG current DAC drive value (read-only)

W1C on R_STATUS: write 1 << 6 to clear done_sticky; write 1 << 4 to clear irq_sticky. pass_fail is cleared by writing CTRL.reset_sticky=1.

Pinout

  • ui_in[7:0] — ADC readback from the external cell
  • uo_out[7:0] — DAC drive to the external cell
  • uio[0]spi_cs_n (in)
  • uio[1]spi_mosi (in)
  • uio[2]spi_miso (out)
  • uio[3]spi_sck (in)
  • uio[4]busy
  • uio[5]done_sticky
  • uio[6]pass_fail (endurance)
  • uio[7]trigger_out — high during SET/RESET pulse phases in DC / endurance / retention modes, useful as a scope trigger.

How to test

# Endurance: 100 cycles at default SET/RESET/READ/thresholds, PW=4
spi_write(R_PW, 4)
spi_write(R_N_LO, 100); spi_write(R_N_HI, 0)
spi_write(R_CTRL, 0x0B)           # global_en=1, start=1, mode=01
wait(status.done == 1)
if status.pass_fail:
    fail_cycle = R_FAIL_HI << 8 | R_FAIL_LO
else:
    fail_cycle = None

External hardware

An external RRAM/memristor test cell with a byte-granularity DAC drive and a byte-granularity ADC readback. The on-chip platform does not assume any particular voltage / current scaling — the 8-bit codes on uo_out map linearly to whatever analog rail the carrier board supplies, and ui_in is whatever the carrier board samples from the cell.

IO

#InputOutputBidirectional
0adc_in[0] (external device readback, LSB)dac_out[0] (DAC drive to external device, LSB)spi_cs_n (in)
1adc_in[1]dac_out[1]spi_mosi (in)
2adc_in[2]dac_out[2]spi_miso (out)
3adc_in[3]dac_out[3]spi_sck (in)
4adc_in[4]dac_out[4]busy (out)
5adc_in[5]dac_out[5]done_sticky (out)
6adc_in[6]dac_out[6]pass_fail (out, endurance)
7adc_in[7] (MSB)dac_out[7] (MSB)trigger_out (out, high during SET/RESET/sample phases)

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_utoss_riscv (UTOSS RISC-V core) tt_um_memory_game_top (Number Memory Game) tt_um_danielpenas42 (Ball Display) tt_um_machinelearning (7-Segment Neural Predictor) tt_um_microlane_demo (microlane demo project) tt_um_pixel_processor (Tiny Pixel Processor) tt_um_jpigdon_gps_accelerator_top (GPS_Accelerator) tt_um_rgb_mixer (rgb_mixer) tt_um_bgao43 (Tiny TPU Systolic Array) tt_um_main (Pong in Verilog) tt_um_joannec34_teenytpu (teenytpu) tt_um_apa102_ws2812_squidgeefish (APA102 to WS2812 Translator) tt_um_uacj_bouncing_DVD_screensaver (Custom DVD Screensaver for VGA) tt_um_logoUACJ_MOGA (VGA_screensaver_UACJ) tt_um_grace_spi_led_driver (SPI-Controlled 8-Channel LED Driver) tt_um_rebeccargb_universal_decoder (Universal Binary to Segment Decoder) tt_um_rebeccargb_hardware_utf8 (Hardware UTF Encoder/Decoder) tt_um_happyhop_deadcast2 (happyhop) tt_um_dino7 (Dino-7: 7-Segment Runner Game) tt_um_arty3_mac_engine (Simple MAC Engine w/ Postproc) tt_um_uacj (Custom DVD Screensaver for VGA) tt_um_algofoogle_dottee (DOTTEE VGA demo (TTGF26a)) tt_um_mattvenn_signal_generator (Simple Signal Generator) tt_um_urish_simon (Simon Says memory game) tt_um_tpu (Tensor Processing Unit For GF) tt_um_gojimmypi_ttgf_UART_FSM_TRNG_Lab (Hardware Entropy Explorer: UART/SPI TRNG and PUF) tt_um_wokwi_465483277165299713 (First Tinytapeout) tt_um_prem_pipeline_test (Programmable_Pipeline-RISC-V) tt_um_wokwi_467219410242853889 (Tiny Tapeout testtest 111233) tt_um_wokwi_465549494272929793 (Pacos first design) tt_um_wokwi_465731371445677057 (Arturo's first Wokwi design) tt_um_wokwi_465732744934845441 (Tiny Tapeout Template_1234) tt_um_wokwi_465736492859711489 (Tiny Tapeout Workshop JuanF) tt_um_wokwi_465731430225727489 (Rafa’s first Wokwi design) tt_um_wokwi_465731458365332481 (7 segment Display Fli-Flop Try-out) tt_um_wokwi_465732744245929985 (DiseñoCursoTiny) tt_um_wokwi_465731490568160257 (Matt’s first Wokwi design) tt_um_wokwi_465736691688630273 (test1) tt_um_wokwi_465731458628527105 (Mi copia del Tiny Tapeout) tt_um_wokwi_465731520738845697 (El primer diseño) tt_um_wokwi_465731521356457985 (Tiny Tapeout Template Copy) tt_um_gen1_digital_companion_tile (Gen1 Digital Companion Tile) tt_um_wokwi_465732827753495553 (Tiny Tapeout Template Ayman) tt_um_wokwi_465731394728267777 (Julian_Proyecto) tt_um_wokwi_465731458535202817 (Tiny Tapeout Template Copy) tt_um_wokwi_465732847401723905 (Basic Circuit) tt_um_wokwi_465731452481768449 (El primer diseño de Matt para Wokwi) tt_um_wokwi_465731502018614273 (Tiny Tapeout Template flip flop) tt_um_wokwi_465732616714924033 (Tiny Tapeout RJAP) tt_um_wokwi_465731575275296769 (ocxpkeWokwiDesign) tt_um_wokwi_465732880722332673 (Pedro Template) tt_um_wokwi_465731858252480513 (Paula's first Wokwi design) tt_um_wokwi_465731455677830145 (Tiny Tapeout JMCG) tt_um_wokwi_465737601403996161 (Tiny Number Simon) tt_um_ttmul (Balanced Ternary Multiplier) tt_um_wokwi_465731466664816641 (Tiny Tapeout Workshop Malaga 2jun2026) tt_um_8bit_risc_cpu (8-bit RISC CPU) tt_um_wokwi_451184391728659457 (Simple Sprinkler) tt_um_fhw_appel_spiPWMio (spiPWMio) tt_um_divadnauj_GB_serv_soc_wb (serv_soc_wb) tt_um_8bitcustomcomputer (SAP 8 Bit Computer) tt_um_bioimpedance (Very Low Resource Digital Implementation of Bioimpedance Analysis) tt_um_mgj_bist8 (BIST-8: Built-In Self-Test for 8-bit CLA Adder) tt_um_roberto_tiny_radar_tile (BioPulse Tile) tt_um_systolic_mac_2x2 (2x2 Systolic Array Matrix Multiplier) tt_um_peg_top (2x2 CNN Accelerator PE Grid with UART) tt_um_AlvaroRub_ringcounter (Counter16Outputs) tt_um_wokwi_465731440267947009 (Antonio's first Wokwi design) tt_um_wokwi_465732706576877569 (Guille's first Wokwi design.) tt_um_wokwi_465731481873367041 (MIPS-Lite 8-bit Processor) tt_um_wokwi_465736612213902337 (Juan`s first Worki design) tt_um_wokwi_465731439156454401 (Rhyloo’s first Wokwi design) tt_um_wokwi_465732536551273473 (Tiny Tapeout Marcos Fernandez) tt_um_wokwi_465737290543084545 (Tiny Tapeout Template) tt_um_wokwi_465630130495825921 (ram 1 bit Copy) tt_um_wokwi_465731403724006401 (sdft wokwi 1) tt_um_top (RHD2164-MCU-SPI Bridge) tt_um_line_follower_arvaloez (Line Follower Robot controller) tt_um_xoroshiro64plus_v2 (xoroshiro64) tt_um_ohuettenhofer_tiny_qsim (Tiny Quantum Circuit Simulator) tt_um_santhosh_ring_osc_gf (Ring Oscillator PVT Sensor & TRNG (GF180)) tt_um_santhosh_stoch_stdp_pair_gf (Stochastic neuron + STDP controller (merged, GF180)) tt_um_santhosh_rsd_char_gf (RRAM Characterization Platform (DC sweep + endurance + retention + histogram, GF180)) tt_um_santhosh_xbar_ctrl_gf (Memristive Crossbar Peripheral Controller (GF180)) tt_um_joseph_bf (BF) tt_um_hydrocomms (FSK Modem) tt_um_systolic_array (2x2 MAC Systolic array with DFT) tt_um_kluterirv_rv32e_core (Minimal RV32E SoC with UART Loader) tt_um_algofoogle_ttgf26a_vco (VCO driven by DAC) tt_um_fer_logo_music_vga (UNIZG-FER VGA project) tt_um_maqsudbek_dyadic_pwm (Dyadic PWM) tt_um_waferspace_vga_screensaver (Wafer.space Logo VGA Screensaver) tt_um_htfab_vga_tester (Video mode tester)