entropy_generator_complex

Combine NRINGS entropy generators through a GF(2^8) BIW extractor into one 32-bit stream.

Each lane has a noise source, decorrelator, per-lane health test, and auto-tune FSM. Per-lane jitter_ro_*, sample_clk_*, and decorrelator_* inputs configure each generator; health_test_* inputs are shared.

The block hosts the shared window counter and window_wrap_pulse_o, which resets all per-lane health-test windows together. module_enable_i keeps the window counter running even when individual health tests are disabled so the main_sm boot gate can finish its boot window.

count_err_o ORs every per-lane health-test counter disagreement with the shared window counter's own fault.

Parameters

Table 1. Parameters
NameTypeDefaultDescription
NRINGSint unsigned12Ring-oscillator lane count; the extractor wiring and the per-lane status ports assume 12.
CLKDIV_WIDTHint unsigned24Downsample divider counter width.

Ports

Table 2. Ports
NameDirectionTypeDescription
clk_iinputlogicSystem clock.
rst_niinputlogicActive-low asynchronous reset.
sample_clk_iinputlogicExternal sample clock for lanes that do not select the shared ring oscillator.
entropy_stream_ooutputlogic [31:0]GF(2^8) extractor output: byte k is lane k times lane k+4 plus lane k+8, byte 0 in bits 31:24.
entropy_stream_uncompressed_ooutputlogic [NRINGS-1:0][7:0]Latest decorrelator byte of every lane, before the extractor.
entropy_stream_valid_ooutputlogicHigh in any cycle where at least one lane emits a new byte.
noise_bit_monitor_ooutputlogic [NRINGS-1:0]Per-lane synchronized noise bit, for debug observation.
sample_clk_monitor_ooutputlogic [NRINGS-1:0]Per-lane selected and divided sample clock, for debug observation.
generator_0_test_status_ooutputlogic [7:0]Lane 0 health-test status byte.
generator_1_test_status_ooutputlogic [7:0]Lane 1 health-test status byte.
generator_2_test_status_ooutputlogic [7:0]Lane 2 health-test status byte.
generator_3_test_status_ooutputlogic [7:0]Lane 3 health-test status byte.
generator_4_test_status_ooutputlogic [7:0]Lane 4 health-test status byte.
generator_5_test_status_ooutputlogic [7:0]Lane 5 health-test status byte.
generator_6_test_status_ooutputlogic [7:0]Lane 6 health-test status byte.
generator_7_test_status_ooutputlogic [7:0]Lane 7 health-test status byte.
generator_8_test_status_ooutputlogic [7:0]Lane 8 health-test status byte.
generator_9_test_status_ooutputlogic [7:0]Lane 9 health-test status byte.
generator_10_test_status_ooutputlogic [7:0]Lane 10 health-test status byte.
generator_11_test_status_ooutputlogic [7:0]Lane 11 health-test status byte.
count_err_ooutputlogicRedundant-counter fault in any lane's health tests or in the shared window counter.
jitter_ro_enable_iinputlogic [NRINGS-1:0]Per-lane enable for the noise ring oscillator and its decorrelator.
jitter_ro_detune_iinputlogic [NRINGS-1:0]Per-lane manual detune used without auto-tune: high selects the full noise-ring feedback path, low the shorter tap.
jitter_ro_auto_tune_enable_iinputlogic [NRINGS-1:0]Per-lane selection of the tune FSM, rather than jitter_ro_detune_i, as the detune source.
sample_clk_select_iinputlogic [NRINGS-1:0]Per-lane sample clock source: high for the shared internal ring oscillator, low for sample_clk_i.
sample_clk_ro_detune_iinputlogic [NRINGS-1:0]Detune requests for the shared sample-clock ring oscillator; any set bit selects its full-length feedback path.
sample_clk_enable_iinputlogic [NRINGS-1:0]Enable requests for the shared sample-clock ring oscillator; any set bit starts it.
sample_clk_divide_iinputlogic [NRINGS-1:0][4:0]Per-lane sample clock divide exponent, 0-5 for divide by 1 to 32.
decorrelator_bypass_iinputlogic [NRINGS-1:0]Per-lane removal of the decorrelator XOR feedback.
decorrelator_sample_clk_div_iinputlogic [CLKDIV_WIDTH-1:0]Decorrelator downsample period minus one, shared by every lane.
decorrelator_entropy_byte_mask_iinputlogic [7:0]AND mask on every lane's decorrelator byte.
module_enable_iinputlogicKeeps the shared window counter running while every health test is disabled.
health_test_enable_iinputlogic [2:0]Per-test enables for every lane: bit 0 repetition, bit 1 APT, bit 2 Markov.
health_test_repetition_limit_iinputlogic [7:0]Repetition-count failure threshold for every lane.
health_test_proportion_limit_1bit_iinputlogic [15:0]APT high threshold on the per-bit ones count per window.
health_test_proportion_limit_lo_iinputlogic [15:0]APT low threshold on the per-bit ones count per window.
health_test_markov_prob_01_threshold_iinputlogic [15:0]Markov high threshold on the per-bit 01/10 pair count per window.
health_test_markov_prob_10_threshold_iinputlogic [15:0]Markov low threshold on the per-bit 01/10 pair count per window.
health_test_window_size_iinputlogic [15:0]Health-test window length, counted in cycles with at least one new lane byte.
window_wrap_pulse_ooutputlogicStrobe when the shared window counter reaches health_test_window_size_i; ends every window.