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
| Name | Type | Default | Description |
|---|---|---|---|
NRINGS | int unsigned | 12 | Ring-oscillator lane count; the extractor wiring and the per-lane status ports assume 12. |
CLKDIV_WIDTH | int unsigned | 24 | Downsample divider counter width. |
Ports
| Name | Direction | Type | Description |
|---|---|---|---|
clk_i | input | logic | System clock. |
rst_ni | input | logic | Active-low asynchronous reset. |
sample_clk_i | input | logic | External sample clock for lanes that do not select the shared ring oscillator. |
entropy_stream_o | output | logic [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_o | output | logic [NRINGS-1:0][7:0] | Latest decorrelator byte of every lane, before the extractor. |
entropy_stream_valid_o | output | logic | High in any cycle where at least one lane emits a new byte. |
noise_bit_monitor_o | output | logic [NRINGS-1:0] | Per-lane synchronized noise bit, for debug observation. |
sample_clk_monitor_o | output | logic [NRINGS-1:0] | Per-lane selected and divided sample clock, for debug observation. |
generator_0_test_status_o | output | logic [7:0] | Lane 0 health-test status byte. |
generator_1_test_status_o | output | logic [7:0] | Lane 1 health-test status byte. |
generator_2_test_status_o | output | logic [7:0] | Lane 2 health-test status byte. |
generator_3_test_status_o | output | logic [7:0] | Lane 3 health-test status byte. |
generator_4_test_status_o | output | logic [7:0] | Lane 4 health-test status byte. |
generator_5_test_status_o | output | logic [7:0] | Lane 5 health-test status byte. |
generator_6_test_status_o | output | logic [7:0] | Lane 6 health-test status byte. |
generator_7_test_status_o | output | logic [7:0] | Lane 7 health-test status byte. |
generator_8_test_status_o | output | logic [7:0] | Lane 8 health-test status byte. |
generator_9_test_status_o | output | logic [7:0] | Lane 9 health-test status byte. |
generator_10_test_status_o | output | logic [7:0] | Lane 10 health-test status byte. |
generator_11_test_status_o | output | logic [7:0] | Lane 11 health-test status byte. |
count_err_o | output | logic | Redundant-counter fault in any lane's health tests or in the shared window counter. |
jitter_ro_enable_i | input | logic [NRINGS-1:0] | Per-lane enable for the noise ring oscillator and its decorrelator. |
jitter_ro_detune_i | input | logic [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_i | input | logic [NRINGS-1:0] | Per-lane selection of the tune FSM, rather than jitter_ro_detune_i, as the detune source. |
sample_clk_select_i | input | logic [NRINGS-1:0] | Per-lane sample clock source: high for the shared internal ring oscillator, low for sample_clk_i. |
sample_clk_ro_detune_i | input | logic [NRINGS-1:0] | Detune requests for the shared sample-clock ring oscillator; any set bit selects its full-length feedback path. |
sample_clk_enable_i | input | logic [NRINGS-1:0] | Enable requests for the shared sample-clock ring oscillator; any set bit starts it. |
sample_clk_divide_i | input | logic [NRINGS-1:0][4:0] | Per-lane sample clock divide exponent, 0-5 for divide by 1 to 32. |
decorrelator_bypass_i | input | logic [NRINGS-1:0] | Per-lane removal of the decorrelator XOR feedback. |
decorrelator_sample_clk_div_i | input | logic [CLKDIV_WIDTH-1:0] | Decorrelator downsample period minus one, shared by every lane. |
decorrelator_entropy_byte_mask_i | input | logic [7:0] | AND mask on every lane's decorrelator byte. |
module_enable_i | input | logic | Keeps the shared window counter running while every health test is disabled. |
health_test_enable_i | input | logic [2:0] | Per-test enables for every lane: bit 0 repetition, bit 1 APT, bit 2 Markov. |
health_test_repetition_limit_i | input | logic [7:0] | Repetition-count failure threshold for every lane. |
health_test_proportion_limit_1bit_i | input | logic [15:0] | APT high threshold on the per-bit ones count per window. |
health_test_proportion_limit_lo_i | input | logic [15:0] | APT low threshold on the per-bit ones count per window. |
health_test_markov_prob_01_threshold_i | input | logic [15:0] | Markov high threshold on the per-bit 01/10 pair count per window. |
health_test_markov_prob_10_threshold_i | input | logic [15:0] | Markov low threshold on the per-bit 01/10 pair count per window. |
health_test_window_size_i | input | logic [15:0] | Health-test window length, counted in cycles with at least one new lane byte. |
window_wrap_pulse_o | output | logic | Strobe when the shared window counter reaches health_test_window_size_i; ends every window. |