547 Tiny RIng Oscillator PUF

547 : Tiny RIng Oscillator PUF

Design render

How it works

This project implements a Programmable Length Ring Oscillator designed as a Physical Unclonable Function (PUF) for hardware security applications. The core architecture consists of an inverter chain whose effective delay path can be dynamically configured using digital selection signals.

By manipulating the multiplexer controls, the user can select different feedback loops and vary the number of active inverting stages. Due to sub-nanosecond propagation delays and microscopic process variations unique to each die during the GlobalFoundries 180nm (gf180mcu) manufacturing process, the circuit oscillates at a unique, device-specific frequency for each challenge combination. This chaotic asynchronism acts as a silicon fingerprint.

An integrated control path monitors the state of the circuit, sample capture events, and triggers a telemetry transmission when the output is ready.

Top-Level Port Mapping (Tiny Tapeout Template Integration)

The hardware signals have been packed and mapped into the standard Tiny Tapeout 8-bit buses as follows:

Dedicated Inputs (ui_in)
Bit Signal Name Type Description
[1:0] sel_mux_0 Input Multiplexer 0 selection lines (Challenge bits 0-1)
[3:2] sel_mux_1 Input Multiplexer 1 selection lines (Challenge bits 2-3)
[6:4] n_inv Input Number of active inverter stages selection (Challenge bits 4-6)
[7] enable Input Ring Oscillator hardware enable (1 = Run, 0 = Standby/Gated)
Bidirectional Controls (uio_in / uio_out)

Note: Configured as inputs for control handshake.

Bit Signal Name Type Description
[0] tx_ready Input Handshake signal indicating receiver is ready for data
[1] op_mode Input Operation Mode configuration bit
[7:2] Unused Input Reserved (Driven to 0)
Dedicated Outputs (uo_out)

The output ports stream out the digitized frequency signatures or telemetry data generated by the PUF core.

How to test

To prevent excessive power consumption and thermal saturation, the Ring Oscillator features a gated input. Follow these sequential steps to test the project behavior:

  1. System Reset: Drive rst_n LOW for at least 10 clock cycles while keeping ui_in and uio_in at 0. Then release the reset by driving rst_n HIGH.
  2. Challenge Selection: Provide the desired delay path configuration by assigning values to sel_mux_0, sel_mux_1, and n_inv using the lower 7 bits of ui_in.
  3. Core Activation: Drive ui_in[7] (enable) HIGH. The Ring Oscillator will immediately start oscillating at its native physical frequency.
  4. Data Acquisition: Set uio_in[0] (tx_ready) HIGH to enable the internal transmission logic. Observe the output data streams or frequency signatures on the dedicated output pins (uo_out).
  5. Safe Standby: Once data collection is completed, immediately drive ui_in[7] (enable) back to 0 to gate the oscillator loop and release system resources.

External hardware

No external hardware is strictly required for basic evaluation, as the digital control buses can be fully driven using Tiny Tapeout's standard digital input switches.

However, for high-precision validation:

  • An Oscilloscope or Logic Analyzer can be connected to the dedicated output pins (uo_out) to measure raw digital jitter or frequency deviations.
  • A Microcontroller or FPGA board (via PMOD) can be attached to automate challenge injection loops (ui_in) and analyze the uniqueness and reliability metrics of the PUF responses.

IO

#InputOutputBidirectional
0sel_mux_0[0]debug_ro[0]tx_ready
1sel_mux_0[1]debug_ro[1]op_mode
2sel_mux_1[0]debug_ro[2]
3sel_mux_1[1]debug_ro[3]
4n_inv[0]valid_out[0]
5n_inv[1]valid_out[1]
6n_inv[2]cnt_data_out[0]debug_done_out[0]
7puf_enablecnt_data_out[1]debug_done_out[1]

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