[entropy_src/rtl] fixes to address issue #3511
Added ERR_CODE register and supporting logic.
General style cleanup.
Doc signal typo fixed.
Signed-off-by: Mark Branstad <mark.branstad@wdc.com>
diff --git a/hw/ip/entropy_src/rtl/entropy_src.sv b/hw/ip/entropy_src/rtl/entropy_src.sv
index 9b2546d..15c135e 100755
--- a/hw/ip/entropy_src/rtl/entropy_src.sv
+++ b/hw/ip/entropy_src/rtl/entropy_src.sv
@@ -7,17 +7,17 @@
module entropy_src import entropy_src_pkg::*; #(
parameter logic AlertAsyncOn = 1,
- parameter int unsigned EsFifoDepth = 2
+ parameter int EsFifoDepth = 2
) (
- input clk_i,
- input rst_ni,
+ input logic clk_i,
+ input logic rst_ni,
// Bus Interface
input tlul_pkg::tl_h2d_t tl_i,
output tlul_pkg::tl_d2h_t tl_o,
// Efuse Interface
- input efuse_es_sw_reg_en_i,
+ input logic efuse_es_sw_reg_en_i,
// Entropy Interface
input entropy_src_hw_if_req_t entropy_src_hw_if_i,
diff --git a/hw/ip/entropy_src/rtl/entropy_src_ack_sm.sv b/hw/ip/entropy_src/rtl/entropy_src_ack_sm.sv
index 66286f0..620b491 100755
--- a/hw/ip/entropy_src/rtl/entropy_src_ack_sm.sv
+++ b/hw/ip/entropy_src/rtl/entropy_src_ack_sm.sv
@@ -37,9 +37,9 @@
AckWait = 6'b111000 // wait until the fifo has an entry
} state_e;
- state_e state_d;
+ state_e state_d, state_q;
- logic [StateWidth-1:0] state_q;
+ logic [StateWidth-1:0] state_raw_q;
// This primitive is used to place a size-only constraint on the
// flops in order to prevent FSM state encoding optimizations.
@@ -51,11 +51,13 @@
.clk_i,
.rst_ni,
.d_i ( state_d ),
- .q_o ( state_q )
+ .q_o ( state_raw_q )
);
+ assign state_q = state_e'(state_raw_q);
+
always_comb begin
- state_d = state_e'(state_q);
+ state_d = state_q;
ack_o = 1'b0;
fifo_pop_o = 1'b0;
unique case (state_q)
diff --git a/hw/ip/entropy_src/rtl/entropy_src_adaptp_ht.sv b/hw/ip/entropy_src/rtl/entropy_src_adaptp_ht.sv
index 8dcb680..65a734a 100755
--- a/hw/ip/entropy_src/rtl/entropy_src_adaptp_ht.sv
+++ b/hw/ip/entropy_src/rtl/entropy_src_adaptp_ht.sv
@@ -6,11 +6,11 @@
//
module entropy_src_adaptp_ht #(
- parameter int unsigned RegWidth = 16,
- parameter int unsigned RngBusWidth = 4
+ parameter int RegWidth = 16,
+ parameter int RngBusWidth = 4
) (
- input clk_i,
- input rst_ni,
+ input logic clk_i,
+ input logic rst_ni,
// ins req interface
input logic [RngBusWidth-1:0] entropy_bit_i,
@@ -19,27 +19,22 @@
input logic active_i,
input logic [RegWidth-1:0] thresh_hi_i,
input logic [RegWidth-1:0] thresh_lo_i,
- input logic [RegWidth-1:0] window_i,
+ input logic window_wrap_pulse_i,
output logic [RegWidth-1:0] test_cnt_o,
- output logic test_done_pulse_o,
output logic test_fail_hi_pulse_o,
output logic test_fail_lo_pulse_o
);
// signals
logic [RegWidth-1:0] column_cnt;
- logic window_cntr_wrap;
// flops
- logic [RegWidth-1:0] window_cntr_q, window_cntr_d;
logic [RegWidth-1:0] test_cnt_q, test_cnt_d;
always_ff @(posedge clk_i or negedge rst_ni)
if (!rst_ni) begin
- window_cntr_q <= '0;
test_cnt_q <= '0;
end else begin
- window_cntr_q <= window_cntr_d;
test_cnt_q <= test_cnt_d;
end
@@ -54,32 +49,21 @@
// Number of ones per column
- assign column_cnt = RngBusWidth'(entropy_bit_i[3]) +
- RngBusWidth'(entropy_bit_i[2]) +
- RngBusWidth'(entropy_bit_i[1]) +
- RngBusWidth'(entropy_bit_i[0]);
-
- // Window wrap condition
- assign window_cntr_wrap = (window_cntr_q == window_i);
-
- // Window counter
- assign window_cntr_d =
- clear_i ? '0 :
- window_cntr_wrap ? '0 :
- entropy_bit_vld_i ? (window_cntr_q+1) :
- window_cntr_q;
+ assign column_cnt = RegWidth'(entropy_bit_i[3]) +
+ RegWidth'(entropy_bit_i[2]) +
+ RegWidth'(entropy_bit_i[1]) +
+ RegWidth'(entropy_bit_i[0]);
// Test event counter
assign test_cnt_d =
(!active_i || clear_i) ? '0 :
- window_cntr_wrap ? '0 :
+ window_wrap_pulse_i ? '0 :
entropy_bit_vld_i ? (test_cnt_q+column_cnt) :
test_cnt_q;
// the pulses will be only one clock in length
- assign test_fail_hi_pulse_o = active_i && window_cntr_wrap && (test_cnt_q > thresh_hi_i);
- assign test_fail_lo_pulse_o = active_i && window_cntr_wrap && (test_cnt_q < thresh_lo_i);
- assign test_done_pulse_o = window_cntr_wrap;
+ assign test_fail_hi_pulse_o = active_i && window_wrap_pulse_i && (test_cnt_q > thresh_hi_i);
+ assign test_fail_lo_pulse_o = active_i && window_wrap_pulse_i && (test_cnt_q < thresh_lo_i);
assign test_cnt_o = test_cnt_q;
diff --git a/hw/ip/entropy_src/rtl/entropy_src_bucket_ht.sv b/hw/ip/entropy_src/rtl/entropy_src_bucket_ht.sv
index ebe15f4..f986d4f 100755
--- a/hw/ip/entropy_src/rtl/entropy_src_bucket_ht.sv
+++ b/hw/ip/entropy_src/rtl/entropy_src_bucket_ht.sv
@@ -6,11 +6,11 @@
//
module entropy_src_bucket_ht #(
- parameter int unsigned RegWidth = 16,
- parameter int unsigned RngBusWidth = 4
+ parameter int RegWidth = 16,
+ parameter int RngBusWidth = 4
) (
- input clk_i,
- input rst_ni,
+ input logic clk_i,
+ input logic rst_ni,
// ins req interface
input logic [RngBusWidth-1:0] entropy_bit_i,
@@ -18,31 +18,26 @@
input logic clear_i,
input logic active_i,
input logic [RegWidth-1:0] thresh_i,
- input logic [RegWidth-1:0] window_i,
+ input logic window_wrap_pulse_i,
output logic [RegWidth-1:0] test_cnt_o,
- output logic test_done_pulse_o,
output logic test_fail_pulse_o
);
localparam int NUM_BINS = 2**RngBusWidth;
// signals
- logic window_cntr_wrap;
logic [NUM_BINS-1:0] bin_incr;
logic [NUM_BINS-1:0] bin_cnt_exceeds_thresh;
// flops
- logic [RegWidth-1:0] window_cntr_q, window_cntr_d;
logic [RegWidth-1:0] test_cnt_q, test_cnt_d;
logic [RegWidth-1:0] bin_cntr_q[NUM_BINS], bin_cntr_d[NUM_BINS];
always_ff @(posedge clk_i or negedge rst_ni)
if (!rst_ni) begin
- window_cntr_q <= '0;
test_cnt_q <= '0;
bin_cntr_q <= '{default:0};
end else begin
- window_cntr_q <= window_cntr_d;
test_cnt_q <= test_cnt_d;
bin_cntr_q <= bin_cntr_d;
end
@@ -63,33 +58,21 @@
// set the bin incrementer if the symbol matches that bin
assign bin_incr[i] = entropy_bit_vld_i && (entropy_bit_i == i);
// use the bin incrementer to increase the bin total count
- assign bin_cntr_d[i] = window_cntr_wrap ? '0 :
+ assign bin_cntr_d[i] = window_wrap_pulse_i ? '0 :
((active_i && bin_incr[i]) ? (bin_cntr_q[i]+1) : bin_cntr_q[i]);
// use the bin incrementer to increase the bin total count
assign bin_cnt_exceeds_thresh[i] = (bin_cntr_q[i] > thresh_i);
end : gen_symbol_match
-
- // Window wrap condition
- assign window_cntr_wrap = (window_cntr_q == window_i);
-
- // Window counter
- assign window_cntr_d =
- clear_i ? '0 :
- window_cntr_wrap ? '0 :
- entropy_bit_vld_i ? (window_cntr_q+1) :
- window_cntr_q;
-
// Test event counter
assign test_cnt_d =
(!active_i || clear_i) ? '0 :
- window_cntr_wrap ? '0 :
+ window_wrap_pulse_i ? '0 :
entropy_bit_vld_i && (|bin_cnt_exceeds_thresh) ? (test_cnt_q+1) :
test_cnt_q;
// the pulses will be only one clock in length
- assign test_fail_pulse_o = active_i && window_cntr_wrap && (test_cnt_q > '0);
- assign test_done_pulse_o = window_cntr_wrap;
+ assign test_fail_pulse_o = active_i && window_wrap_pulse_i && (test_cnt_q > '0);
assign test_cnt_o = test_cnt_q;
diff --git a/hw/ip/entropy_src/rtl/entropy_src_cntr_reg.sv b/hw/ip/entropy_src/rtl/entropy_src_cntr_reg.sv
index 4846829..98fe35d 100755
--- a/hw/ip/entropy_src/rtl/entropy_src_cntr_reg.sv
+++ b/hw/ip/entropy_src/rtl/entropy_src_cntr_reg.sv
@@ -6,7 +6,7 @@
//
module entropy_src_cntr_reg #(
- parameter int unsigned RegWidth = 16
+ parameter int RegWidth = 16
) (
input logic clk_i,
input logic rst_ni,
diff --git a/hw/ip/entropy_src/rtl/entropy_src_core.sv b/hw/ip/entropy_src/rtl/entropy_src_core.sv
index 87d2178..3ab22c3 100755
--- a/hw/ip/entropy_src/rtl/entropy_src_core.sv
+++ b/hw/ip/entropy_src/rtl/entropy_src_core.sv
@@ -6,16 +6,16 @@
//
module entropy_src_core import entropy_src_pkg::*; #(
- parameter int unsigned EsFifoDepth = 2
+ parameter int EsFifoDepth = 2
) (
- input clk_i,
- input rst_ni,
+ input logic clk_i,
+ input logic rst_ni,
input entropy_src_reg_pkg::entropy_src_reg2hw_t reg2hw,
output entropy_src_reg_pkg::entropy_src_hw2reg_t hw2reg,
// Efuse Interface
- input efuse_es_sw_reg_en_i,
+ input logic efuse_es_sw_reg_en_i,
// Entropy Interface
@@ -40,13 +40,13 @@
import entropy_src_reg_pkg::*;
- localparam int unsigned Clog2EsFifoDepth = $clog2(EsFifoDepth);
- localparam int unsigned PostHTWidth = 64;
- localparam int unsigned RngBusWidth = 4;
- localparam int unsigned HalfRegWidth = 16;
- localparam int unsigned FullRegWidth = 32;
- localparam int unsigned EigthRegWidth = 4;
- localparam int unsigned SeedLen = 384;
+ localparam int Clog2EsFifoDepth = $clog2(EsFifoDepth);
+ localparam int PostHTWidth = 64;
+ localparam int RngBusWidth = 4;
+ localparam int HalfRegWidth = 16;
+ localparam int FullRegWidth = 32;
+ localparam int EigthRegWidth = 4;
+ localparam int SeedLen = 384;
// signals
logic [RngBusWidth-1:0] lfsr_value;
@@ -72,8 +72,9 @@
logic sfifo_esrng_push;
logic sfifo_esrng_pop;
logic sfifo_esrng_clr;
+ logic sfifo_esrng_not_full;
logic sfifo_esrng_not_empty;
- logic sfifo_esrng_err;
+ logic [2:0] sfifo_esrng_err;
logic [Clog2EsFifoDepth:0] sfifo_esfinal_depth;
logic [(1+SeedLen)-1:0] sfifo_esfinal_wdata;
@@ -83,7 +84,7 @@
logic sfifo_esfinal_clr;
logic sfifo_esfinal_not_full;
logic sfifo_esfinal_not_empty;
- logic sfifo_esfinal_err;
+ logic [2:0] sfifo_esfinal_err;
logic [SeedLen-1:0] esfinal_data;
logic esfinal_fips_flag;
@@ -153,15 +154,24 @@
logic [EigthRegWidth-1:0] bucket_fail_count;
logic bucket_fail_pulse;
- logic [HalfRegWidth-1:0] markov_fips_threshold;
- logic [HalfRegWidth-1:0] markov_bypass_threshold;
- logic [HalfRegWidth-1:0] markov_threshold;
- logic [HalfRegWidth-1:0] markov_event_cnt;
- logic [HalfRegWidth-1:0] markov_event_hwm_fips;
- logic [HalfRegWidth-1:0] markov_event_hwm_bypass;
- logic [FullRegWidth-1:0] markov_total_fails;
- logic [EigthRegWidth-1:0] markov_fail_count;
- logic markov_fail_pulse;
+ logic [HalfRegWidth-1:0] markov_hi_fips_threshold;
+ logic [HalfRegWidth-1:0] markov_hi_bypass_threshold;
+ logic [HalfRegWidth-1:0] markov_hi_threshold;
+ logic [HalfRegWidth-1:0] markov_lo_fips_threshold;
+ logic [HalfRegWidth-1:0] markov_lo_bypass_threshold;
+ logic [HalfRegWidth-1:0] markov_lo_threshold;
+ logic [HalfRegWidth-1:0] markov_hi_event_cnt;
+ logic [HalfRegWidth-1:0] markov_lo_event_cnt;
+ logic [HalfRegWidth-1:0] markov_hi_event_hwm_fips;
+ logic [HalfRegWidth-1:0] markov_hi_event_hwm_bypass;
+ logic [HalfRegWidth-1:0] markov_lo_event_hwm_fips;
+ logic [HalfRegWidth-1:0] markov_lo_event_hwm_bypass;
+ logic [FullRegWidth-1:0] markov_hi_total_fails;
+ logic [FullRegWidth-1:0] markov_lo_total_fails;
+ logic [EigthRegWidth-1:0] markov_hi_fail_count;
+ logic [EigthRegWidth-1:0] markov_lo_fail_count;
+ logic markov_hi_fail_pulse;
+ logic markov_lo_fail_pulse;
logic [HalfRegWidth-1:0] extht_hi_fips_threshold;
logic [HalfRegWidth-1:0] extht_hi_bypass_threshold;
@@ -231,6 +241,7 @@
logic ht_esbus_vld_dly2_q, ht_esbus_vld_dly2_d;
logic boot_bypass_q, boot_bypass_d;
logic ht_failed_q, ht_failed_d;
+ logic [HalfRegWidth-1:0] window_cntr_q, window_cntr_d;
always_ff @(posedge clk_i or negedge rst_ni)
if (!rst_ni) begin
@@ -241,6 +252,7 @@
ht_esbus_dly_q <= '0;
ht_esbus_vld_dly_q <= '0;
ht_esbus_vld_dly2_q <= '0;
+ window_cntr_q <= '0;
end else begin
es_rate_cntr_q <= es_rate_cntr_d;
lfsr_incr_dly_q <= lfsr_incr_dly_d;
@@ -249,6 +261,7 @@
ht_esbus_dly_q <= ht_esbus_dly_d;
ht_esbus_vld_dly_q <= ht_esbus_vld_dly_d;
ht_esbus_vld_dly2_q <= ht_esbus_vld_dly2_d;
+ window_cntr_q <= window_cntr_d;
end
assign es_enable = (|reg2hw.conf.enable.q);
@@ -361,8 +374,36 @@
// set the interrupt event when enabled
assign event_es_entropy_valid = pfifo_swread_not_empty;
+
// set the interrupt sources
- assign event_es_fifo_err = sfifo_esrng_err || sfifo_esfinal_err;
+ assign event_es_fifo_err =
+ (|sfifo_esrng_err) ||
+ (sfifo_esfinal_err);
+
+ // set the err code source bits
+ assign hw2reg.err_code.sfifo_esrng_err.d = 1'b1;
+ assign hw2reg.err_code.sfifo_esrng_err.de = (|sfifo_esrng_err);
+
+ assign hw2reg.err_code.sfifo_esfinal_err.d = 1'b1;
+ assign hw2reg.err_code.sfifo_esfinal_err.de = (|sfifo_esfinal_err);
+
+
+ // set the err code type bits
+ assign hw2reg.err_code.fifo_write_err.d = 1'b1;
+ assign hw2reg.err_code.fifo_write_err.de =
+ sfifo_esrng_err[2] ||
+ sfifo_esfinal_err[2];
+
+ assign hw2reg.err_code.fifo_read_err.d = 1'b1;
+ assign hw2reg.err_code.fifo_read_err.de =
+ sfifo_esrng_err[1] ||
+ sfifo_esfinal_err[1];
+
+ assign hw2reg.err_code.fifo_state_err.d = 1'b1;
+ assign hw2reg.err_code.fifo_state_err.de =
+ sfifo_esrng_err[0] ||
+ sfifo_esfinal_err[0];
+
// set the debug status reg
assign hw2reg.debug_status.entropy_fifo_depth.d = sfifo_esfinal_depth;
@@ -382,7 +423,7 @@
.clr_i (sfifo_esrng_clr),
.wvalid_i (sfifo_esrng_push),
.wdata_i (sfifo_esrng_wdata),
- .wready_o (),
+ .wready_o (sfifo_esrng_not_full),
.rvalid_o (sfifo_esrng_not_empty),
.rdata_o (sfifo_esrng_rdata),
.rready_i (sfifo_esrng_pop),
@@ -401,7 +442,9 @@
// fifo err
assign sfifo_esrng_err =
- (sfifo_esrng_pop && !sfifo_esrng_not_empty );
+ {1'b0,
+ (sfifo_esrng_pop && !sfifo_esrng_not_empty),
+ (!sfifo_esrng_not_full && !sfifo_esrng_not_empty)};
// pack esrng bus into signal bit packer
@@ -462,17 +505,24 @@
assign repcnt_fips_threshold = reg2hw.repcnt_thresholds.fips_repcnt_thresh.q;
assign repcnt_bypass_threshold = reg2hw.repcnt_thresholds.bypass_repcnt_thresh.q;
+
assign adaptp_hi_fips_threshold = reg2hw.adaptp_hi_thresholds.fips_adaptp_hi_thresh.q;
assign adaptp_hi_bypass_threshold = reg2hw.adaptp_hi_thresholds.bypass_adaptp_hi_thresh.q;
assign adaptp_lo_fips_threshold = reg2hw.adaptp_lo_thresholds.fips_adaptp_lo_thresh.q;
assign adaptp_lo_bypass_threshold = reg2hw.adaptp_lo_thresholds.bypass_adaptp_lo_thresh.q;
+
assign bucket_fips_threshold = reg2hw.bucket_thresholds.fips_bucket_thresh.q;
assign bucket_bypass_threshold = reg2hw.bucket_thresholds.bypass_bucket_thresh.q;
- assign markov_fips_threshold = reg2hw.markov_thresholds.fips_markov_thresh.q;
- assign markov_bypass_threshold = reg2hw.markov_thresholds.bypass_markov_thresh.q;
+
+ assign markov_hi_fips_threshold = reg2hw.markov_hi_thresholds.fips_markov_hi_thresh.q;
+ assign markov_hi_bypass_threshold = reg2hw.markov_hi_thresholds.bypass_markov_hi_thresh.q;
+
+ assign markov_lo_fips_threshold = reg2hw.markov_lo_thresholds.fips_markov_lo_thresh.q;
+ assign markov_lo_bypass_threshold = reg2hw.markov_lo_thresholds.bypass_markov_lo_thresh.q;
+
assign extht_hi_fips_threshold = reg2hw.extht_hi_thresholds.fips_extht_hi_thresh.q;
assign extht_hi_bypass_threshold = reg2hw.extht_hi_thresholds.bypass_extht_hi_thresh.q;
@@ -488,7 +538,10 @@
assign adaptp_lo_threshold = es_bypass_mode ? adaptp_lo_bypass_threshold :
adaptp_lo_fips_threshold;
assign bucket_threshold = es_bypass_mode ? bucket_bypass_threshold : bucket_fips_threshold;
- assign markov_threshold = es_bypass_mode ? markov_bypass_threshold : markov_fips_threshold;
+ assign markov_hi_threshold = es_bypass_mode ? markov_hi_bypass_threshold :
+ markov_hi_fips_threshold;
+ assign markov_lo_threshold = es_bypass_mode ? markov_lo_bypass_threshold :
+ markov_lo_fips_threshold;
assign extht_hi_threshold = es_bypass_mode ? extht_hi_bypass_threshold :
extht_hi_fips_threshold;
assign extht_lo_threshold = es_bypass_mode ? extht_lo_bypass_threshold :
@@ -508,6 +561,20 @@
assign es_bypass_mode = boot_bypass_q || es_bypass_to_sw;
//--------------------------------------------
+ // common health test window counter
+ //--------------------------------------------
+
+ // Window counter
+ assign window_cntr_d =
+ health_test_clr ? '0 :
+ health_test_done_pulse ? '0 :
+ health_test_esbus_vld ? (window_cntr_q+1) :
+ window_cntr_q;
+
+ // Window wrap condition
+ assign health_test_done_pulse = (window_cntr_q == health_test_window);
+
+ //--------------------------------------------
// repetitive count test
//--------------------------------------------
@@ -522,9 +589,7 @@
.clear_i (health_test_clr),
.active_i (repcnt_active),
.thresh_i (repcnt_threshold),
- .window_i (health_test_window),
.test_cnt_o (repcnt_event_cnt),
- .test_done_pulse_o (health_test_done_pulse),
.test_fail_pulse_o (repcnt_fail_pulse)
);
@@ -585,9 +650,8 @@
.active_i (adaptp_active),
.thresh_hi_i (adaptp_hi_threshold),
.thresh_lo_i (adaptp_lo_threshold),
- .window_i (health_test_window),
+ .window_wrap_pulse_i (health_test_done_pulse),
.test_cnt_o (adaptp_event_cnt),
- .test_done_pulse_o (), // NC
.test_fail_hi_pulse_o(adaptp_hi_fail_pulse),
.test_fail_lo_pulse_o(adaptp_lo_fail_pulse)
);
@@ -693,10 +757,9 @@
.clear_i (health_test_clr),
.active_i (bucket_active),
.thresh_i (bucket_threshold),
- .window_i (health_test_window),
+ .window_wrap_pulse_i (health_test_done_pulse),
.test_cnt_o (bucket_event_cnt),
- .test_done_pulse_o (), // NC
- .test_fail_pulse_o (bucket_fail_pulse)
+ .test_fail_pulse_o (bucket_fail_pulse)
);
entropy_src_watermark_reg #(
@@ -755,53 +818,97 @@
.entropy_bit_vld_i (health_test_esbus_vld),
.clear_i (health_test_clr),
.active_i (markov_active),
- .thresh_i (markov_threshold),
- .window_i (health_test_window),
- .test_cnt_o (markov_event_cnt),
- .test_done_pulse_o (),// NC
- .test_fail_pulse_o (markov_fail_pulse)
+ .thresh_hi_i (markov_hi_threshold),
+ .thresh_lo_i (markov_lo_threshold),
+ .window_wrap_pulse_i (health_test_done_pulse),
+ .test_cnt_hi_o (markov_hi_event_cnt),
+ .test_cnt_lo_o (markov_lo_event_cnt),
+ .test_fail_hi_pulse_o (markov_hi_fail_pulse),
+ .test_fail_lo_pulse_o (markov_lo_fail_pulse)
);
entropy_src_watermark_reg #(
.RegWidth(HalfRegWidth),
.HighWatermark(1)
- ) u_entropy_src_watermark_reg_markov_fips (
+ ) u_entropy_src_watermark_reg_markov_hi_fips (
.clk_i (clk_i),
.rst_ni (rst_ni),
.clear_i (health_test_clr),
.active_i (markov_active),
- .event_i (markov_fail_pulse && !es_bypass_mode),
- .value_i (markov_event_cnt),
- .value_o (markov_event_hwm_fips)
+ .event_i (markov_hi_fail_pulse && !es_bypass_mode),
+ .value_i (markov_hi_event_cnt),
+ .value_o (markov_hi_event_hwm_fips)
);
entropy_src_watermark_reg #(
.RegWidth(HalfRegWidth),
.HighWatermark(1)
- ) u_entropy_src_watermark_reg_markov_bypass (
+ ) u_entropy_src_watermark_reg_markov_hi_bypass (
.clk_i (clk_i),
.rst_ni (rst_ni),
.clear_i (health_test_clr),
.active_i (markov_active),
- .event_i (markov_fail_pulse && es_bypass_mode),
- .value_i (markov_event_cnt),
- .value_o (markov_event_hwm_bypass)
+ .event_i (markov_hi_fail_pulse && es_bypass_mode),
+ .value_i (markov_hi_event_cnt),
+ .value_o (markov_hi_event_hwm_bypass)
);
entropy_src_cntr_reg #(
.RegWidth(FullRegWidth)
- ) u_entropy_src_cntr_reg_markov (
+ ) u_entropy_src_cntr_reg_markov_hi (
.clk_i (clk_i),
.rst_ni (rst_ni),
.clear_i (health_test_clr),
.active_i (markov_active),
- .event_i (markov_fail_pulse),
- .value_o (markov_total_fails)
+ .event_i (markov_hi_fail_pulse),
+ .value_o (markov_hi_total_fails)
);
- assign hw2reg.markov_hi_watermarks.fips_markov_hi_watermark.d = markov_event_hwm_fips;
- assign hw2reg.markov_hi_watermarks.bypass_markov_hi_watermark.d = markov_event_hwm_bypass;
- assign hw2reg.markov_total_fails.d = markov_total_fails;
+ assign hw2reg.markov_hi_watermarks.fips_markov_hi_watermark.d = markov_hi_event_hwm_fips;
+ assign hw2reg.markov_hi_watermarks.bypass_markov_hi_watermark.d = markov_hi_event_hwm_bypass;
+ assign hw2reg.markov_hi_total_fails.d = markov_hi_total_fails;
+
+
+ entropy_src_watermark_reg #(
+ .RegWidth(HalfRegWidth),
+ .HighWatermark(1)
+ ) u_entropy_src_watermark_reg_markov_lo_fips (
+ .clk_i (clk_i),
+ .rst_ni (rst_ni),
+ .clear_i (health_test_clr),
+ .active_i (markov_active),
+ .event_i (markov_lo_fail_pulse && !es_bypass_mode),
+ .value_i (markov_lo_event_cnt),
+ .value_o (markov_lo_event_hwm_fips)
+ );
+
+ entropy_src_watermark_reg #(
+ .RegWidth(HalfRegWidth),
+ .HighWatermark(1)
+ ) u_entropy_src_watermark_reg_markov_lo_bypass (
+ .clk_i (clk_i),
+ .rst_ni (rst_ni),
+ .clear_i (health_test_clr),
+ .active_i (markov_active),
+ .event_i (markov_lo_fail_pulse && es_bypass_mode),
+ .value_i (markov_lo_event_cnt),
+ .value_o (markov_lo_event_hwm_bypass)
+ );
+
+ entropy_src_cntr_reg #(
+ .RegWidth(FullRegWidth)
+ ) u_entropy_src_cntr_reg_markov_lo (
+ .clk_i (clk_i),
+ .rst_ni (rst_ni),
+ .clear_i (health_test_clr),
+ .active_i (markov_active),
+ .event_i (markov_lo_fail_pulse),
+ .value_o (markov_lo_total_fails)
+ );
+
+ assign hw2reg.markov_lo_watermarks.fips_markov_lo_watermark.d = markov_lo_event_hwm_fips;
+ assign hw2reg.markov_lo_watermarks.bypass_markov_lo_watermark.d = markov_lo_event_hwm_bypass;
+ assign hw2reg.markov_lo_total_fails.d = markov_lo_total_fails;
//--------------------------------------------
@@ -925,9 +1032,15 @@
.value_o (any_fail_count)
);
- assign any_active = repcnt_active || adaptp_active || bucket_active || markov_active;
- assign any_fail_pulse = repcnt_fail_pulse || adaptp_hi_fail_pulse || adaptp_lo_fail_pulse ||
- bucket_fail_pulse || markov_fail_pulse;
+ assign any_active = repcnt_active || adaptp_active ||
+ bucket_active || markov_active || extht_active;
+
+ assign any_fail_pulse =
+ repcnt_fail_pulse ||
+ adaptp_hi_fail_pulse || adaptp_lo_fail_pulse ||
+ bucket_fail_pulse ||
+ markov_hi_fail_pulse ||markov_lo_fail_pulse ||
+ extht_hi_fail_pulse || extht_lo_fail_pulse;
assign ht_failed_d = sfifo_esfinal_push ? 1'b0 :
@@ -1002,19 +1115,32 @@
assign hw2reg.alert_fail_counts.bucket_fail_count.d = bucket_fail_count;
- // markov fail counter
+ // markov fail counter hi and lo
entropy_src_cntr_reg #(
.RegWidth(EigthRegWidth)
- ) u_entropy_src_cntr_reg_markov_alert_fails (
+ ) u_entropy_src_cntr_reg_markov_alert_hi_fails (
.clk_i (clk_i),
.rst_ni (rst_ni),
.clear_i (alert_cntrs_clr),
.active_i (markov_active),
- .event_i (markov_fail_pulse),
- .value_o (markov_fail_count)
+ .event_i (markov_hi_fail_pulse),
+ .value_o (markov_hi_fail_count)
);
- assign hw2reg.alert_fail_counts.markov_fail_count.d = markov_fail_count;
+ assign hw2reg.alert_fail_counts.markov_hi_fail_count.d = markov_hi_fail_count;
+
+ entropy_src_cntr_reg #(
+ .RegWidth(EigthRegWidth)
+ ) u_entropy_src_cntr_reg_markov_alert_lo_fails (
+ .clk_i (clk_i),
+ .rst_ni (rst_ni),
+ .clear_i (alert_cntrs_clr),
+ .active_i (markov_active),
+ .event_i (markov_lo_fail_pulse),
+ .value_o (markov_lo_fail_count)
+ );
+
+ assign hw2reg.alert_fail_counts.markov_lo_fail_count.d = markov_lo_fail_count;
// extht fail counter hi and lo
entropy_src_cntr_reg #(
@@ -1190,8 +1316,9 @@
// fifo err
assign sfifo_esfinal_err =
- (sfifo_esfinal_push && !sfifo_esfinal_not_full) |
- (sfifo_esfinal_pop && !sfifo_esfinal_not_empty );
+ {(sfifo_esfinal_push && !sfifo_esfinal_not_full),
+ (sfifo_esfinal_pop && !sfifo_esfinal_not_empty),
+ (!sfifo_esfinal_not_full && !sfifo_esfinal_not_empty)};
// drive out hw interface
assign es_hw_if_req = entropy_src_hw_if_i.es_req;
diff --git a/hw/ip/entropy_src/rtl/entropy_src_main_sm.sv b/hw/ip/entropy_src/rtl/entropy_src_main_sm.sv
index 6435b1b..a944777 100755
--- a/hw/ip/entropy_src/rtl/entropy_src_main_sm.sv
+++ b/hw/ip/entropy_src/rtl/entropy_src_main_sm.sv
@@ -50,9 +50,9 @@
NormalMode = 8'b11001000 // in normal mode
} state_e;
- state_e state_d;
+ state_e state_d, state_q;
- logic [StateWidth-1:0] state_q;
+ logic [StateWidth-1:0] state_raw_q;
// This primitive is used to place a size-only constraint on the
// flops in order to prevent FSM state encoding optimizations.
@@ -63,11 +63,13 @@
.clk_i,
.rst_ni,
.d_i ( state_d ),
- .q_o ( state_q )
+ .q_o ( state_raw_q )
);
+ assign state_q = state_e'(state_raw_q);
+
always_comb begin
- state_d = state_e'(state_q);
+ state_d = state_q;
rst_bypass_mode_o = 1'b0;
rst_alert_cntr_o = 1'b0;
main_stage_pop_o = 1'b0;
diff --git a/hw/ip/entropy_src/rtl/entropy_src_markov_ht.sv b/hw/ip/entropy_src/rtl/entropy_src_markov_ht.sv
index 29fabd2..a2bafa3 100755
--- a/hw/ip/entropy_src/rtl/entropy_src_markov_ht.sv
+++ b/hw/ip/entropy_src/rtl/entropy_src_markov_ht.sv
@@ -6,46 +6,49 @@
//
module entropy_src_markov_ht #(
- parameter int unsigned RegWidth = 16,
- parameter int unsigned RngBusWidth = 4
+ parameter int RegWidth = 16,
+ parameter int RngBusWidth = 4
) (
- input clk_i,
- input rst_ni,
+ input logic clk_i,
+ input logic rst_ni,
// ins req interface
input logic [RngBusWidth-1:0] entropy_bit_i,
input logic entropy_bit_vld_i,
input logic clear_i,
input logic active_i,
- input logic [RegWidth-1:0] thresh_i,
- input logic [RegWidth-1:0] window_i,
- output logic [RegWidth-1:0] test_cnt_o,
- output logic test_done_pulse_o,
- output logic test_fail_pulse_o
+ input logic [RegWidth-1:0] thresh_hi_i,
+ input logic [RegWidth-1:0] thresh_lo_i,
+ input logic window_wrap_pulse_i,
+ output logic [RegWidth-1:0] test_cnt_hi_o,
+ output logic [RegWidth-1:0] test_cnt_lo_o,
+ output logic test_fail_hi_pulse_o,
+ output logic test_fail_lo_pulse_o
);
// signals
- logic window_cntr_wrap;
logic [RngBusWidth-1:0] samples_no_match_pulse;
- logic [RngBusWidth-1:0] pair_cnt_fail;
+ logic [RegWidth-1:0] pair_cntr_gt1;
+ logic [RegWidth-1:0] pair_cntr_gt2;
+ logic [RegWidth-1:0] pair_cntr_gt3;
+ logic [RegWidth-1:0] pair_cntr_lt1;
+ logic [RegWidth-1:0] pair_cntr_lt2;
+ logic [RegWidth-1:0] pair_cntr_lt3;
// flops
+ logic toggle_q, toggle_d;
logic [RngBusWidth-1:0] prev_sample_q, prev_sample_d;
logic [RegWidth-1:0] pair_cntr_q[RngBusWidth], pair_cntr_d[RngBusWidth];
- logic [RegWidth-1:0] window_cntr_q, window_cntr_d;
- logic [RegWidth-1:0] test_cnt_q, test_cnt_d;
always_ff @(posedge clk_i or negedge rst_ni)
if (!rst_ni) begin
+ toggle_q <= '0;
prev_sample_q <= '0;
pair_cntr_q <= '{default:0};
- window_cntr_q <= '0;
- test_cnt_q <= '0;
end else begin
+ toggle_q <= toggle_d;
prev_sample_q <= prev_sample_d;
pair_cntr_q <= pair_cntr_d;
- window_cntr_q <= window_cntr_d;
- test_cnt_q <= test_cnt_d;
end
@@ -60,47 +63,47 @@
// bit sampler
assign prev_sample_d[sh] = (!active_i || clear_i) ? '0 :
- window_cntr_wrap ? '0 :
+ window_wrap_pulse_i ? '0 :
entropy_bit_vld_i ? entropy_bit_i[sh] :
prev_sample_q[sh];
// pair check
- assign samples_no_match_pulse[sh] = entropy_bit_vld_i && window_cntr_q[0] &&
+ assign samples_no_match_pulse[sh] = entropy_bit_vld_i && toggle_q &&
(prev_sample_q[sh] == !entropy_bit_i[sh]);
// pair counter
assign pair_cntr_d[sh] =
(!active_i || clear_i) ? '0 :
- window_cntr_wrap ? '0 :
+ window_wrap_pulse_i ? '0 :
samples_no_match_pulse[sh] ? (pair_cntr_q[sh]+1) :
pair_cntr_q[sh];
- assign pair_cnt_fail[sh] = (pair_cntr_q[sh] >= thresh_i);
-
end : gen_cntrs
+ // create a toggle signal to sample pairs with
+ assign toggle_d =
+ (!active_i || clear_i) ? '0 :
+ window_wrap_pulse_i ? '0 :
+ entropy_bit_vld_i ? (!toggle_q) :
+ toggle_q;
- // Window wrap condition
- assign window_cntr_wrap = (window_cntr_q == window_i);
+ // determine the highest counter pair counter value
+ assign pair_cntr_gt1 = (pair_cntr_q[0] < pair_cntr_q[1]) ? pair_cntr_q[1] : pair_cntr_q[0];
+ assign pair_cntr_gt2 = (pair_cntr_gt1 < pair_cntr_q[2]) ? pair_cntr_q[2] : pair_cntr_gt1;
+ assign pair_cntr_gt3 = (pair_cntr_gt2 < pair_cntr_q[3]) ? pair_cntr_q[3] : pair_cntr_gt2;
- // Window counter
- assign window_cntr_d =
- clear_i ? '0 :
- window_cntr_wrap ? '0 :
- entropy_bit_vld_i ? (window_cntr_q+1) :
- window_cntr_q;
- // Test event counter
- assign test_cnt_d =
- (!active_i || clear_i) ? '0 :
- window_cntr_wrap ? '0 :
- entropy_bit_vld_i && (|pair_cnt_fail) ? (test_cnt_q+1) :
- test_cnt_q;
+ // determine the lowest counter pair counter value
+ assign pair_cntr_lt1 = (pair_cntr_q[0] > pair_cntr_q[1]) ? pair_cntr_q[1] : pair_cntr_q[0];
+ assign pair_cntr_lt2 = (pair_cntr_lt1 > pair_cntr_q[2]) ? pair_cntr_q[2] : pair_cntr_lt1;
+ assign pair_cntr_lt3 = (pair_cntr_lt2 > pair_cntr_q[3]) ? pair_cntr_q[3] : pair_cntr_lt2;
+
// the pulses will be only one clock in length
- assign test_fail_pulse_o = active_i && window_cntr_wrap && (test_cnt_q > '0);
- assign test_done_pulse_o = window_cntr_wrap;
- assign test_cnt_o = test_cnt_q;
+ assign test_fail_hi_pulse_o = active_i && window_wrap_pulse_i && (pair_cntr_gt3 > thresh_hi_i);
+ assign test_fail_lo_pulse_o = active_i && window_wrap_pulse_i && (pair_cntr_lt3 < thresh_lo_i);
+ assign test_cnt_hi_o = pair_cntr_gt3;
+ assign test_cnt_lo_o = pair_cntr_lt3;
endmodule
diff --git a/hw/ip/entropy_src/rtl/entropy_src_reg_pkg.sv b/hw/ip/entropy_src/rtl/entropy_src_reg_pkg.sv
index b3b494d..7701949 100644
--- a/hw/ip/entropy_src/rtl/entropy_src_reg_pkg.sv
+++ b/hw/ip/entropy_src/rtl/entropy_src_reg_pkg.sv
@@ -160,11 +160,20 @@
typedef struct packed {
struct packed {
logic [15:0] q;
- } fips_markov_thresh;
+ } fips_markov_hi_thresh;
struct packed {
logic [15:0] q;
- } bypass_markov_thresh;
- } entropy_src_reg2hw_markov_thresholds_reg_t;
+ } bypass_markov_hi_thresh;
+ } entropy_src_reg2hw_markov_hi_thresholds_reg_t;
+
+ typedef struct packed {
+ struct packed {
+ logic [15:0] q;
+ } fips_markov_lo_thresh;
+ struct packed {
+ logic [15:0] q;
+ } bypass_markov_lo_thresh;
+ } entropy_src_reg2hw_markov_lo_thresholds_reg_t;
typedef struct packed {
struct packed {
@@ -276,6 +285,15 @@
} entropy_src_hw2reg_markov_hi_watermarks_reg_t;
typedef struct packed {
+ struct packed {
+ logic [15:0] d;
+ } fips_markov_lo_watermark;
+ struct packed {
+ logic [15:0] d;
+ } bypass_markov_lo_watermark;
+ } entropy_src_hw2reg_markov_lo_watermarks_reg_t;
+
+ typedef struct packed {
logic [31:0] d;
} entropy_src_hw2reg_repcnt_total_fails_reg_t;
@@ -293,7 +311,11 @@
typedef struct packed {
logic [31:0] d;
- } entropy_src_hw2reg_markov_total_fails_reg_t;
+ } entropy_src_hw2reg_markov_hi_total_fails_reg_t;
+
+ typedef struct packed {
+ logic [31:0] d;
+ } entropy_src_hw2reg_markov_lo_total_fails_reg_t;
typedef struct packed {
logic [31:0] d;
@@ -321,7 +343,10 @@
} bucket_fail_count;
struct packed {
logic [3:0] d;
- } markov_fail_count;
+ } markov_hi_fail_count;
+ struct packed {
+ logic [3:0] d;
+ } markov_lo_fail_count;
} entropy_src_hw2reg_alert_fail_counts_reg_t;
typedef struct packed {
@@ -342,26 +367,50 @@
} diag;
} entropy_src_hw2reg_debug_status_reg_t;
+ typedef struct packed {
+ struct packed {
+ logic d;
+ logic de;
+ } sfifo_esrng_err;
+ struct packed {
+ logic d;
+ logic de;
+ } sfifo_esfinal_err;
+ struct packed {
+ logic d;
+ logic de;
+ } fifo_write_err;
+ struct packed {
+ logic d;
+ logic de;
+ } fifo_read_err;
+ struct packed {
+ logic d;
+ logic de;
+ } fifo_state_err;
+ } entropy_src_hw2reg_err_code_reg_t;
+
///////////////////////////////////////
// Register to internal design logic //
///////////////////////////////////////
typedef struct packed {
- entropy_src_reg2hw_intr_state_reg_t intr_state; // [341:339]
- entropy_src_reg2hw_intr_enable_reg_t intr_enable; // [338:336]
- entropy_src_reg2hw_intr_test_reg_t intr_test; // [335:330]
- entropy_src_reg2hw_alert_test_reg_t alert_test; // [329:328]
- entropy_src_reg2hw_regen_reg_t regen; // [327:327]
- entropy_src_reg2hw_conf_reg_t conf; // [326:315]
- entropy_src_reg2hw_rate_reg_t rate; // [314:299]
- entropy_src_reg2hw_entropy_control_reg_t entropy_control; // [298:297]
- entropy_src_reg2hw_entropy_data_reg_t entropy_data; // [296:264]
- entropy_src_reg2hw_health_test_windows_reg_t health_test_windows; // [263:232]
- entropy_src_reg2hw_repcnt_thresholds_reg_t repcnt_thresholds; // [231:200]
- entropy_src_reg2hw_adaptp_hi_thresholds_reg_t adaptp_hi_thresholds; // [199:168]
- entropy_src_reg2hw_adaptp_lo_thresholds_reg_t adaptp_lo_thresholds; // [167:136]
- entropy_src_reg2hw_bucket_thresholds_reg_t bucket_thresholds; // [135:104]
- entropy_src_reg2hw_markov_thresholds_reg_t markov_thresholds; // [103:72]
+ entropy_src_reg2hw_intr_state_reg_t intr_state; // [373:371]
+ entropy_src_reg2hw_intr_enable_reg_t intr_enable; // [370:368]
+ entropy_src_reg2hw_intr_test_reg_t intr_test; // [367:362]
+ entropy_src_reg2hw_alert_test_reg_t alert_test; // [361:360]
+ entropy_src_reg2hw_regen_reg_t regen; // [359:359]
+ entropy_src_reg2hw_conf_reg_t conf; // [358:347]
+ entropy_src_reg2hw_rate_reg_t rate; // [346:331]
+ entropy_src_reg2hw_entropy_control_reg_t entropy_control; // [330:329]
+ entropy_src_reg2hw_entropy_data_reg_t entropy_data; // [328:296]
+ entropy_src_reg2hw_health_test_windows_reg_t health_test_windows; // [295:264]
+ entropy_src_reg2hw_repcnt_thresholds_reg_t repcnt_thresholds; // [263:232]
+ entropy_src_reg2hw_adaptp_hi_thresholds_reg_t adaptp_hi_thresholds; // [231:200]
+ entropy_src_reg2hw_adaptp_lo_thresholds_reg_t adaptp_lo_thresholds; // [199:168]
+ entropy_src_reg2hw_bucket_thresholds_reg_t bucket_thresholds; // [167:136]
+ entropy_src_reg2hw_markov_hi_thresholds_reg_t markov_hi_thresholds; // [135:104]
+ entropy_src_reg2hw_markov_lo_thresholds_reg_t markov_lo_thresholds; // [103:72]
entropy_src_reg2hw_extht_hi_thresholds_reg_t extht_hi_thresholds; // [71:40]
entropy_src_reg2hw_extht_lo_thresholds_reg_t extht_lo_thresholds; // [39:8]
entropy_src_reg2hw_alert_threshold_reg_t alert_threshold; // [7:4]
@@ -372,25 +421,28 @@
// Internal design logic to register //
///////////////////////////////////////
typedef struct packed {
- entropy_src_hw2reg_intr_state_reg_t intr_state; // [520:518]
- entropy_src_hw2reg_entropy_data_reg_t entropy_data; // [517:485]
- entropy_src_hw2reg_repcnt_hi_watermarks_reg_t repcnt_hi_watermarks; // [484:485]
- entropy_src_hw2reg_adaptp_hi_watermarks_reg_t adaptp_hi_watermarks; // [484:485]
- entropy_src_hw2reg_adaptp_lo_watermarks_reg_t adaptp_lo_watermarks; // [484:485]
- entropy_src_hw2reg_extht_hi_watermarks_reg_t extht_hi_watermarks; // [484:485]
- entropy_src_hw2reg_extht_lo_watermarks_reg_t extht_lo_watermarks; // [484:485]
- entropy_src_hw2reg_bucket_hi_watermarks_reg_t bucket_hi_watermarks; // [484:485]
- entropy_src_hw2reg_markov_hi_watermarks_reg_t markov_hi_watermarks; // [484:485]
- entropy_src_hw2reg_repcnt_total_fails_reg_t repcnt_total_fails; // [484:485]
- entropy_src_hw2reg_adaptp_hi_total_fails_reg_t adaptp_hi_total_fails; // [484:485]
- entropy_src_hw2reg_adaptp_lo_total_fails_reg_t adaptp_lo_total_fails; // [484:485]
- entropy_src_hw2reg_bucket_total_fails_reg_t bucket_total_fails; // [484:485]
- entropy_src_hw2reg_markov_total_fails_reg_t markov_total_fails; // [484:485]
- entropy_src_hw2reg_extht_hi_total_fails_reg_t extht_hi_total_fails; // [484:485]
- entropy_src_hw2reg_extht_lo_total_fails_reg_t extht_lo_total_fails; // [484:485]
- entropy_src_hw2reg_alert_fail_counts_reg_t alert_fail_counts; // [484:485]
- entropy_src_hw2reg_extht_fail_counts_reg_t extht_fail_counts; // [484:485]
- entropy_src_hw2reg_debug_status_reg_t debug_status; // [484:485]
+ entropy_src_hw2reg_intr_state_reg_t intr_state; // [598:596]
+ entropy_src_hw2reg_entropy_data_reg_t entropy_data; // [595:563]
+ entropy_src_hw2reg_repcnt_hi_watermarks_reg_t repcnt_hi_watermarks; // [562:563]
+ entropy_src_hw2reg_adaptp_hi_watermarks_reg_t adaptp_hi_watermarks; // [562:563]
+ entropy_src_hw2reg_adaptp_lo_watermarks_reg_t adaptp_lo_watermarks; // [562:563]
+ entropy_src_hw2reg_extht_hi_watermarks_reg_t extht_hi_watermarks; // [562:563]
+ entropy_src_hw2reg_extht_lo_watermarks_reg_t extht_lo_watermarks; // [562:563]
+ entropy_src_hw2reg_bucket_hi_watermarks_reg_t bucket_hi_watermarks; // [562:563]
+ entropy_src_hw2reg_markov_hi_watermarks_reg_t markov_hi_watermarks; // [562:563]
+ entropy_src_hw2reg_markov_lo_watermarks_reg_t markov_lo_watermarks; // [562:563]
+ entropy_src_hw2reg_repcnt_total_fails_reg_t repcnt_total_fails; // [562:563]
+ entropy_src_hw2reg_adaptp_hi_total_fails_reg_t adaptp_hi_total_fails; // [562:563]
+ entropy_src_hw2reg_adaptp_lo_total_fails_reg_t adaptp_lo_total_fails; // [562:563]
+ entropy_src_hw2reg_bucket_total_fails_reg_t bucket_total_fails; // [562:563]
+ entropy_src_hw2reg_markov_hi_total_fails_reg_t markov_hi_total_fails; // [562:563]
+ entropy_src_hw2reg_markov_lo_total_fails_reg_t markov_lo_total_fails; // [562:563]
+ entropy_src_hw2reg_extht_hi_total_fails_reg_t extht_hi_total_fails; // [562:563]
+ entropy_src_hw2reg_extht_lo_total_fails_reg_t extht_lo_total_fails; // [562:563]
+ entropy_src_hw2reg_alert_fail_counts_reg_t alert_fail_counts; // [562:563]
+ entropy_src_hw2reg_extht_fail_counts_reg_t extht_fail_counts; // [562:563]
+ entropy_src_hw2reg_debug_status_reg_t debug_status; // [562:563]
+ entropy_src_hw2reg_err_code_reg_t err_code; // [562:563]
} entropy_src_hw2reg_t;
// Register Address
@@ -409,28 +461,32 @@
parameter logic [7:0] ENTROPY_SRC_ADAPTP_HI_THRESHOLDS_OFFSET = 8'h 30;
parameter logic [7:0] ENTROPY_SRC_ADAPTP_LO_THRESHOLDS_OFFSET = 8'h 34;
parameter logic [7:0] ENTROPY_SRC_BUCKET_THRESHOLDS_OFFSET = 8'h 38;
- parameter logic [7:0] ENTROPY_SRC_MARKOV_THRESHOLDS_OFFSET = 8'h 3c;
- parameter logic [7:0] ENTROPY_SRC_EXTHT_HI_THRESHOLDS_OFFSET = 8'h 40;
- parameter logic [7:0] ENTROPY_SRC_EXTHT_LO_THRESHOLDS_OFFSET = 8'h 44;
- parameter logic [7:0] ENTROPY_SRC_REPCNT_HI_WATERMARKS_OFFSET = 8'h 48;
- parameter logic [7:0] ENTROPY_SRC_ADAPTP_HI_WATERMARKS_OFFSET = 8'h 4c;
- parameter logic [7:0] ENTROPY_SRC_ADAPTP_LO_WATERMARKS_OFFSET = 8'h 50;
- parameter logic [7:0] ENTROPY_SRC_EXTHT_HI_WATERMARKS_OFFSET = 8'h 54;
- parameter logic [7:0] ENTROPY_SRC_EXTHT_LO_WATERMARKS_OFFSET = 8'h 58;
- parameter logic [7:0] ENTROPY_SRC_BUCKET_HI_WATERMARKS_OFFSET = 8'h 5c;
- parameter logic [7:0] ENTROPY_SRC_MARKOV_HI_WATERMARKS_OFFSET = 8'h 60;
- parameter logic [7:0] ENTROPY_SRC_REPCNT_TOTAL_FAILS_OFFSET = 8'h 64;
- parameter logic [7:0] ENTROPY_SRC_ADAPTP_HI_TOTAL_FAILS_OFFSET = 8'h 68;
- parameter logic [7:0] ENTROPY_SRC_ADAPTP_LO_TOTAL_FAILS_OFFSET = 8'h 6c;
- parameter logic [7:0] ENTROPY_SRC_BUCKET_TOTAL_FAILS_OFFSET = 8'h 70;
- parameter logic [7:0] ENTROPY_SRC_MARKOV_TOTAL_FAILS_OFFSET = 8'h 74;
- parameter logic [7:0] ENTROPY_SRC_EXTHT_HI_TOTAL_FAILS_OFFSET = 8'h 78;
- parameter logic [7:0] ENTROPY_SRC_EXTHT_LO_TOTAL_FAILS_OFFSET = 8'h 7c;
- parameter logic [7:0] ENTROPY_SRC_ALERT_THRESHOLD_OFFSET = 8'h 80;
- parameter logic [7:0] ENTROPY_SRC_ALERT_FAIL_COUNTS_OFFSET = 8'h 84;
- parameter logic [7:0] ENTROPY_SRC_EXTHT_FAIL_COUNTS_OFFSET = 8'h 88;
- parameter logic [7:0] ENTROPY_SRC_DEBUG_STATUS_OFFSET = 8'h 8c;
- parameter logic [7:0] ENTROPY_SRC_SEED_OFFSET = 8'h 90;
+ parameter logic [7:0] ENTROPY_SRC_MARKOV_HI_THRESHOLDS_OFFSET = 8'h 3c;
+ parameter logic [7:0] ENTROPY_SRC_MARKOV_LO_THRESHOLDS_OFFSET = 8'h 40;
+ parameter logic [7:0] ENTROPY_SRC_EXTHT_HI_THRESHOLDS_OFFSET = 8'h 44;
+ parameter logic [7:0] ENTROPY_SRC_EXTHT_LO_THRESHOLDS_OFFSET = 8'h 48;
+ parameter logic [7:0] ENTROPY_SRC_REPCNT_HI_WATERMARKS_OFFSET = 8'h 4c;
+ parameter logic [7:0] ENTROPY_SRC_ADAPTP_HI_WATERMARKS_OFFSET = 8'h 50;
+ parameter logic [7:0] ENTROPY_SRC_ADAPTP_LO_WATERMARKS_OFFSET = 8'h 54;
+ parameter logic [7:0] ENTROPY_SRC_EXTHT_HI_WATERMARKS_OFFSET = 8'h 58;
+ parameter logic [7:0] ENTROPY_SRC_EXTHT_LO_WATERMARKS_OFFSET = 8'h 5c;
+ parameter logic [7:0] ENTROPY_SRC_BUCKET_HI_WATERMARKS_OFFSET = 8'h 60;
+ parameter logic [7:0] ENTROPY_SRC_MARKOV_HI_WATERMARKS_OFFSET = 8'h 64;
+ parameter logic [7:0] ENTROPY_SRC_MARKOV_LO_WATERMARKS_OFFSET = 8'h 68;
+ parameter logic [7:0] ENTROPY_SRC_REPCNT_TOTAL_FAILS_OFFSET = 8'h 6c;
+ parameter logic [7:0] ENTROPY_SRC_ADAPTP_HI_TOTAL_FAILS_OFFSET = 8'h 70;
+ parameter logic [7:0] ENTROPY_SRC_ADAPTP_LO_TOTAL_FAILS_OFFSET = 8'h 74;
+ parameter logic [7:0] ENTROPY_SRC_BUCKET_TOTAL_FAILS_OFFSET = 8'h 78;
+ parameter logic [7:0] ENTROPY_SRC_MARKOV_HI_TOTAL_FAILS_OFFSET = 8'h 7c;
+ parameter logic [7:0] ENTROPY_SRC_MARKOV_LO_TOTAL_FAILS_OFFSET = 8'h 80;
+ parameter logic [7:0] ENTROPY_SRC_EXTHT_HI_TOTAL_FAILS_OFFSET = 8'h 84;
+ parameter logic [7:0] ENTROPY_SRC_EXTHT_LO_TOTAL_FAILS_OFFSET = 8'h 88;
+ parameter logic [7:0] ENTROPY_SRC_ALERT_THRESHOLD_OFFSET = 8'h 8c;
+ parameter logic [7:0] ENTROPY_SRC_ALERT_FAIL_COUNTS_OFFSET = 8'h 90;
+ parameter logic [7:0] ENTROPY_SRC_EXTHT_FAIL_COUNTS_OFFSET = 8'h 94;
+ parameter logic [7:0] ENTROPY_SRC_DEBUG_STATUS_OFFSET = 8'h 98;
+ parameter logic [7:0] ENTROPY_SRC_SEED_OFFSET = 8'h 9c;
+ parameter logic [7:0] ENTROPY_SRC_ERR_CODE_OFFSET = 8'h a0;
// Register Index
@@ -450,7 +506,8 @@
ENTROPY_SRC_ADAPTP_HI_THRESHOLDS,
ENTROPY_SRC_ADAPTP_LO_THRESHOLDS,
ENTROPY_SRC_BUCKET_THRESHOLDS,
- ENTROPY_SRC_MARKOV_THRESHOLDS,
+ ENTROPY_SRC_MARKOV_HI_THRESHOLDS,
+ ENTROPY_SRC_MARKOV_LO_THRESHOLDS,
ENTROPY_SRC_EXTHT_HI_THRESHOLDS,
ENTROPY_SRC_EXTHT_LO_THRESHOLDS,
ENTROPY_SRC_REPCNT_HI_WATERMARKS,
@@ -460,22 +517,25 @@
ENTROPY_SRC_EXTHT_LO_WATERMARKS,
ENTROPY_SRC_BUCKET_HI_WATERMARKS,
ENTROPY_SRC_MARKOV_HI_WATERMARKS,
+ ENTROPY_SRC_MARKOV_LO_WATERMARKS,
ENTROPY_SRC_REPCNT_TOTAL_FAILS,
ENTROPY_SRC_ADAPTP_HI_TOTAL_FAILS,
ENTROPY_SRC_ADAPTP_LO_TOTAL_FAILS,
ENTROPY_SRC_BUCKET_TOTAL_FAILS,
- ENTROPY_SRC_MARKOV_TOTAL_FAILS,
+ ENTROPY_SRC_MARKOV_HI_TOTAL_FAILS,
+ ENTROPY_SRC_MARKOV_LO_TOTAL_FAILS,
ENTROPY_SRC_EXTHT_HI_TOTAL_FAILS,
ENTROPY_SRC_EXTHT_LO_TOTAL_FAILS,
ENTROPY_SRC_ALERT_THRESHOLD,
ENTROPY_SRC_ALERT_FAIL_COUNTS,
ENTROPY_SRC_EXTHT_FAIL_COUNTS,
ENTROPY_SRC_DEBUG_STATUS,
- ENTROPY_SRC_SEED
+ ENTROPY_SRC_SEED,
+ ENTROPY_SRC_ERR_CODE
} entropy_src_id_e;
// Register width information to check illegal writes
- parameter logic [3:0] ENTROPY_SRC_PERMIT [37] = '{
+ parameter logic [3:0] ENTROPY_SRC_PERMIT [41] = '{
4'b 0001, // index[ 0] ENTROPY_SRC_INTR_STATE
4'b 0001, // index[ 1] ENTROPY_SRC_INTR_ENABLE
4'b 0001, // index[ 2] ENTROPY_SRC_INTR_TEST
@@ -491,28 +551,32 @@
4'b 1111, // index[12] ENTROPY_SRC_ADAPTP_HI_THRESHOLDS
4'b 1111, // index[13] ENTROPY_SRC_ADAPTP_LO_THRESHOLDS
4'b 1111, // index[14] ENTROPY_SRC_BUCKET_THRESHOLDS
- 4'b 1111, // index[15] ENTROPY_SRC_MARKOV_THRESHOLDS
- 4'b 1111, // index[16] ENTROPY_SRC_EXTHT_HI_THRESHOLDS
- 4'b 1111, // index[17] ENTROPY_SRC_EXTHT_LO_THRESHOLDS
- 4'b 1111, // index[18] ENTROPY_SRC_REPCNT_HI_WATERMARKS
- 4'b 1111, // index[19] ENTROPY_SRC_ADAPTP_HI_WATERMARKS
- 4'b 1111, // index[20] ENTROPY_SRC_ADAPTP_LO_WATERMARKS
- 4'b 1111, // index[21] ENTROPY_SRC_EXTHT_HI_WATERMARKS
- 4'b 1111, // index[22] ENTROPY_SRC_EXTHT_LO_WATERMARKS
- 4'b 1111, // index[23] ENTROPY_SRC_BUCKET_HI_WATERMARKS
- 4'b 1111, // index[24] ENTROPY_SRC_MARKOV_HI_WATERMARKS
- 4'b 1111, // index[25] ENTROPY_SRC_REPCNT_TOTAL_FAILS
- 4'b 1111, // index[26] ENTROPY_SRC_ADAPTP_HI_TOTAL_FAILS
- 4'b 1111, // index[27] ENTROPY_SRC_ADAPTP_LO_TOTAL_FAILS
- 4'b 1111, // index[28] ENTROPY_SRC_BUCKET_TOTAL_FAILS
- 4'b 1111, // index[29] ENTROPY_SRC_MARKOV_TOTAL_FAILS
- 4'b 1111, // index[30] ENTROPY_SRC_EXTHT_HI_TOTAL_FAILS
- 4'b 1111, // index[31] ENTROPY_SRC_EXTHT_LO_TOTAL_FAILS
- 4'b 0001, // index[32] ENTROPY_SRC_ALERT_THRESHOLD
- 4'b 0111, // index[33] ENTROPY_SRC_ALERT_FAIL_COUNTS
- 4'b 0001, // index[34] ENTROPY_SRC_EXTHT_FAIL_COUNTS
- 4'b 1111, // index[35] ENTROPY_SRC_DEBUG_STATUS
- 4'b 0001 // index[36] ENTROPY_SRC_SEED
+ 4'b 1111, // index[15] ENTROPY_SRC_MARKOV_HI_THRESHOLDS
+ 4'b 1111, // index[16] ENTROPY_SRC_MARKOV_LO_THRESHOLDS
+ 4'b 1111, // index[17] ENTROPY_SRC_EXTHT_HI_THRESHOLDS
+ 4'b 1111, // index[18] ENTROPY_SRC_EXTHT_LO_THRESHOLDS
+ 4'b 1111, // index[19] ENTROPY_SRC_REPCNT_HI_WATERMARKS
+ 4'b 1111, // index[20] ENTROPY_SRC_ADAPTP_HI_WATERMARKS
+ 4'b 1111, // index[21] ENTROPY_SRC_ADAPTP_LO_WATERMARKS
+ 4'b 1111, // index[22] ENTROPY_SRC_EXTHT_HI_WATERMARKS
+ 4'b 1111, // index[23] ENTROPY_SRC_EXTHT_LO_WATERMARKS
+ 4'b 1111, // index[24] ENTROPY_SRC_BUCKET_HI_WATERMARKS
+ 4'b 1111, // index[25] ENTROPY_SRC_MARKOV_HI_WATERMARKS
+ 4'b 1111, // index[26] ENTROPY_SRC_MARKOV_LO_WATERMARKS
+ 4'b 1111, // index[27] ENTROPY_SRC_REPCNT_TOTAL_FAILS
+ 4'b 1111, // index[28] ENTROPY_SRC_ADAPTP_HI_TOTAL_FAILS
+ 4'b 1111, // index[29] ENTROPY_SRC_ADAPTP_LO_TOTAL_FAILS
+ 4'b 1111, // index[30] ENTROPY_SRC_BUCKET_TOTAL_FAILS
+ 4'b 1111, // index[31] ENTROPY_SRC_MARKOV_HI_TOTAL_FAILS
+ 4'b 1111, // index[32] ENTROPY_SRC_MARKOV_LO_TOTAL_FAILS
+ 4'b 1111, // index[33] ENTROPY_SRC_EXTHT_HI_TOTAL_FAILS
+ 4'b 1111, // index[34] ENTROPY_SRC_EXTHT_LO_TOTAL_FAILS
+ 4'b 0001, // index[35] ENTROPY_SRC_ALERT_THRESHOLD
+ 4'b 1111, // index[36] ENTROPY_SRC_ALERT_FAIL_COUNTS
+ 4'b 0001, // index[37] ENTROPY_SRC_EXTHT_FAIL_COUNTS
+ 4'b 1111, // index[38] ENTROPY_SRC_DEBUG_STATUS
+ 4'b 0001, // index[39] ENTROPY_SRC_SEED
+ 4'b 1111 // index[40] ENTROPY_SRC_ERR_CODE
};
endpackage
diff --git a/hw/ip/entropy_src/rtl/entropy_src_reg_top.sv b/hw/ip/entropy_src/rtl/entropy_src_reg_top.sv
index a53144e..48ccbbd 100644
--- a/hw/ip/entropy_src/rtl/entropy_src_reg_top.sv
+++ b/hw/ip/entropy_src/rtl/entropy_src_reg_top.sv
@@ -174,12 +174,18 @@
logic [15:0] bucket_thresholds_bypass_bucket_thresh_qs;
logic [15:0] bucket_thresholds_bypass_bucket_thresh_wd;
logic bucket_thresholds_bypass_bucket_thresh_we;
- logic [15:0] markov_thresholds_fips_markov_thresh_qs;
- logic [15:0] markov_thresholds_fips_markov_thresh_wd;
- logic markov_thresholds_fips_markov_thresh_we;
- logic [15:0] markov_thresholds_bypass_markov_thresh_qs;
- logic [15:0] markov_thresholds_bypass_markov_thresh_wd;
- logic markov_thresholds_bypass_markov_thresh_we;
+ logic [15:0] markov_hi_thresholds_fips_markov_hi_thresh_qs;
+ logic [15:0] markov_hi_thresholds_fips_markov_hi_thresh_wd;
+ logic markov_hi_thresholds_fips_markov_hi_thresh_we;
+ logic [15:0] markov_hi_thresholds_bypass_markov_hi_thresh_qs;
+ logic [15:0] markov_hi_thresholds_bypass_markov_hi_thresh_wd;
+ logic markov_hi_thresholds_bypass_markov_hi_thresh_we;
+ logic [15:0] markov_lo_thresholds_fips_markov_lo_thresh_qs;
+ logic [15:0] markov_lo_thresholds_fips_markov_lo_thresh_wd;
+ logic markov_lo_thresholds_fips_markov_lo_thresh_we;
+ logic [15:0] markov_lo_thresholds_bypass_markov_lo_thresh_qs;
+ logic [15:0] markov_lo_thresholds_bypass_markov_lo_thresh_wd;
+ logic markov_lo_thresholds_bypass_markov_lo_thresh_we;
logic [15:0] extht_hi_thresholds_fips_extht_hi_thresh_qs;
logic [15:0] extht_hi_thresholds_fips_extht_hi_thresh_wd;
logic extht_hi_thresholds_fips_extht_hi_thresh_we;
@@ -220,6 +226,10 @@
logic markov_hi_watermarks_fips_markov_hi_watermark_re;
logic [15:0] markov_hi_watermarks_bypass_markov_hi_watermark_qs;
logic markov_hi_watermarks_bypass_markov_hi_watermark_re;
+ logic [15:0] markov_lo_watermarks_fips_markov_lo_watermark_qs;
+ logic markov_lo_watermarks_fips_markov_lo_watermark_re;
+ logic [15:0] markov_lo_watermarks_bypass_markov_lo_watermark_qs;
+ logic markov_lo_watermarks_bypass_markov_lo_watermark_re;
logic [31:0] repcnt_total_fails_qs;
logic repcnt_total_fails_re;
logic [31:0] adaptp_hi_total_fails_qs;
@@ -228,8 +238,10 @@
logic adaptp_lo_total_fails_re;
logic [31:0] bucket_total_fails_qs;
logic bucket_total_fails_re;
- logic [31:0] markov_total_fails_qs;
- logic markov_total_fails_re;
+ logic [31:0] markov_hi_total_fails_qs;
+ logic markov_hi_total_fails_re;
+ logic [31:0] markov_lo_total_fails_qs;
+ logic markov_lo_total_fails_re;
logic [31:0] extht_hi_total_fails_qs;
logic extht_hi_total_fails_re;
logic [31:0] extht_lo_total_fails_qs;
@@ -247,8 +259,10 @@
logic alert_fail_counts_adaptp_lo_fail_count_re;
logic [3:0] alert_fail_counts_bucket_fail_count_qs;
logic alert_fail_counts_bucket_fail_count_re;
- logic [3:0] alert_fail_counts_markov_fail_count_qs;
- logic alert_fail_counts_markov_fail_count_re;
+ logic [3:0] alert_fail_counts_markov_hi_fail_count_qs;
+ logic alert_fail_counts_markov_hi_fail_count_re;
+ logic [3:0] alert_fail_counts_markov_lo_fail_count_qs;
+ logic alert_fail_counts_markov_lo_fail_count_re;
logic [3:0] extht_fail_counts_extht_hi_fail_count_qs;
logic extht_fail_counts_extht_hi_fail_count_re;
logic [3:0] extht_fail_counts_extht_lo_fail_count_qs;
@@ -260,6 +274,21 @@
logic [3:0] seed_qs;
logic [3:0] seed_wd;
logic seed_we;
+ logic err_code_sfifo_esrng_err_qs;
+ logic err_code_sfifo_esrng_err_wd;
+ logic err_code_sfifo_esrng_err_we;
+ logic err_code_sfifo_esfinal_err_qs;
+ logic err_code_sfifo_esfinal_err_wd;
+ logic err_code_sfifo_esfinal_err_we;
+ logic err_code_fifo_write_err_qs;
+ logic err_code_fifo_write_err_wd;
+ logic err_code_fifo_write_err_we;
+ logic err_code_fifo_read_err_qs;
+ logic err_code_fifo_read_err_wd;
+ logic err_code_fifo_read_err_we;
+ logic err_code_fifo_state_err_qs;
+ logic err_code_fifo_state_err_wd;
+ logic err_code_fifo_state_err_we;
// Register instances
// R[intr_state]: V(False)
@@ -1158,20 +1187,20 @@
);
- // R[markov_thresholds]: V(False)
+ // R[markov_hi_thresholds]: V(False)
- // F[fips_markov_thresh]: 15:0
+ // F[fips_markov_hi_thresh]: 15:0
prim_subreg #(
.DW (16),
.SWACCESS("RW"),
.RESVAL (16'h100)
- ) u_markov_thresholds_fips_markov_thresh (
+ ) u_markov_hi_thresholds_fips_markov_hi_thresh (
.clk_i (clk_i ),
.rst_ni (rst_ni ),
// from register interface (qualified with register enable)
- .we (markov_thresholds_fips_markov_thresh_we & regen_qs),
- .wd (markov_thresholds_fips_markov_thresh_wd),
+ .we (markov_hi_thresholds_fips_markov_hi_thresh_we & regen_qs),
+ .wd (markov_hi_thresholds_fips_markov_hi_thresh_wd),
// from internal hardware
.de (1'b0),
@@ -1179,25 +1208,25 @@
// to internal hardware
.qe (),
- .q (reg2hw.markov_thresholds.fips_markov_thresh.q ),
+ .q (reg2hw.markov_hi_thresholds.fips_markov_hi_thresh.q ),
// to register interface (read)
- .qs (markov_thresholds_fips_markov_thresh_qs)
+ .qs (markov_hi_thresholds_fips_markov_hi_thresh_qs)
);
- // F[bypass_markov_thresh]: 31:16
+ // F[bypass_markov_hi_thresh]: 31:16
prim_subreg #(
.DW (16),
.SWACCESS("RW"),
.RESVAL (16'h60)
- ) u_markov_thresholds_bypass_markov_thresh (
+ ) u_markov_hi_thresholds_bypass_markov_hi_thresh (
.clk_i (clk_i ),
.rst_ni (rst_ni ),
// from register interface (qualified with register enable)
- .we (markov_thresholds_bypass_markov_thresh_we & regen_qs),
- .wd (markov_thresholds_bypass_markov_thresh_wd),
+ .we (markov_hi_thresholds_bypass_markov_hi_thresh_we & regen_qs),
+ .wd (markov_hi_thresholds_bypass_markov_hi_thresh_wd),
// from internal hardware
.de (1'b0),
@@ -1205,10 +1234,64 @@
// to internal hardware
.qe (),
- .q (reg2hw.markov_thresholds.bypass_markov_thresh.q ),
+ .q (reg2hw.markov_hi_thresholds.bypass_markov_hi_thresh.q ),
// to register interface (read)
- .qs (markov_thresholds_bypass_markov_thresh_qs)
+ .qs (markov_hi_thresholds_bypass_markov_hi_thresh_qs)
+ );
+
+
+ // R[markov_lo_thresholds]: V(False)
+
+ // F[fips_markov_lo_thresh]: 15:0
+ prim_subreg #(
+ .DW (16),
+ .SWACCESS("RW"),
+ .RESVAL (16'h10)
+ ) u_markov_lo_thresholds_fips_markov_lo_thresh (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (markov_lo_thresholds_fips_markov_lo_thresh_we & regen_qs),
+ .wd (markov_lo_thresholds_fips_markov_lo_thresh_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.markov_lo_thresholds.fips_markov_lo_thresh.q ),
+
+ // to register interface (read)
+ .qs (markov_lo_thresholds_fips_markov_lo_thresh_qs)
+ );
+
+
+ // F[bypass_markov_lo_thresh]: 31:16
+ prim_subreg #(
+ .DW (16),
+ .SWACCESS("RW"),
+ .RESVAL (16'h6)
+ ) u_markov_lo_thresholds_bypass_markov_lo_thresh (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (markov_lo_thresholds_bypass_markov_lo_thresh_we & regen_qs),
+ .wd (markov_lo_thresholds_bypass_markov_lo_thresh_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.markov_lo_thresholds.bypass_markov_lo_thresh.q ),
+
+ // to register interface (read)
+ .qs (markov_lo_thresholds_bypass_markov_lo_thresh_qs)
);
@@ -1544,6 +1627,38 @@
);
+ // R[markov_lo_watermarks]: V(True)
+
+ // F[fips_markov_lo_watermark]: 15:0
+ prim_subreg_ext #(
+ .DW (16)
+ ) u_markov_lo_watermarks_fips_markov_lo_watermark (
+ .re (markov_lo_watermarks_fips_markov_lo_watermark_re),
+ .we (1'b0),
+ .wd ('0),
+ .d (hw2reg.markov_lo_watermarks.fips_markov_lo_watermark.d),
+ .qre (),
+ .qe (),
+ .q (),
+ .qs (markov_lo_watermarks_fips_markov_lo_watermark_qs)
+ );
+
+
+ // F[bypass_markov_lo_watermark]: 31:16
+ prim_subreg_ext #(
+ .DW (16)
+ ) u_markov_lo_watermarks_bypass_markov_lo_watermark (
+ .re (markov_lo_watermarks_bypass_markov_lo_watermark_re),
+ .we (1'b0),
+ .wd ('0),
+ .d (hw2reg.markov_lo_watermarks.bypass_markov_lo_watermark.d),
+ .qre (),
+ .qe (),
+ .q (),
+ .qs (markov_lo_watermarks_bypass_markov_lo_watermark_qs)
+ );
+
+
// R[repcnt_total_fails]: V(True)
prim_subreg_ext #(
@@ -1608,19 +1723,35 @@
);
- // R[markov_total_fails]: V(True)
+ // R[markov_hi_total_fails]: V(True)
prim_subreg_ext #(
.DW (32)
- ) u_markov_total_fails (
- .re (markov_total_fails_re),
+ ) u_markov_hi_total_fails (
+ .re (markov_hi_total_fails_re),
.we (1'b0),
.wd ('0),
- .d (hw2reg.markov_total_fails.d),
+ .d (hw2reg.markov_hi_total_fails.d),
.qre (),
.qe (),
.q (),
- .qs (markov_total_fails_qs)
+ .qs (markov_hi_total_fails_qs)
+ );
+
+
+ // R[markov_lo_total_fails]: V(True)
+
+ prim_subreg_ext #(
+ .DW (32)
+ ) u_markov_lo_total_fails (
+ .re (markov_lo_total_fails_re),
+ .we (1'b0),
+ .wd ('0),
+ .d (hw2reg.markov_lo_total_fails.d),
+ .qre (),
+ .qe (),
+ .q (),
+ .qs (markov_lo_total_fails_qs)
);
@@ -1760,18 +1891,33 @@
);
- // F[markov_fail_count]: 23:20
+ // F[markov_hi_fail_count]: 23:20
prim_subreg_ext #(
.DW (4)
- ) u_alert_fail_counts_markov_fail_count (
- .re (alert_fail_counts_markov_fail_count_re),
+ ) u_alert_fail_counts_markov_hi_fail_count (
+ .re (alert_fail_counts_markov_hi_fail_count_re),
.we (1'b0),
.wd ('0),
- .d (hw2reg.alert_fail_counts.markov_fail_count.d),
+ .d (hw2reg.alert_fail_counts.markov_hi_fail_count.d),
.qre (),
.qe (),
.q (),
- .qs (alert_fail_counts_markov_fail_count_qs)
+ .qs (alert_fail_counts_markov_hi_fail_count_qs)
+ );
+
+
+ // F[markov_lo_fail_count]: 27:24
+ prim_subreg_ext #(
+ .DW (4)
+ ) u_alert_fail_counts_markov_lo_fail_count (
+ .re (alert_fail_counts_markov_lo_fail_count_re),
+ .we (1'b0),
+ .wd ('0),
+ .d (hw2reg.alert_fail_counts.markov_lo_fail_count.d),
+ .qre (),
+ .qe (),
+ .q (),
+ .qs (alert_fail_counts_markov_lo_fail_count_qs)
);
@@ -1866,9 +2012,141 @@
);
+ // R[err_code]: V(False)
+
+ // F[sfifo_esrng_err]: 0:0
+ prim_subreg #(
+ .DW (1),
+ .SWACCESS("RW"),
+ .RESVAL (1'h0)
+ ) u_err_code_sfifo_esrng_err (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface
+ .we (err_code_sfifo_esrng_err_we),
+ .wd (err_code_sfifo_esrng_err_wd),
+
+ // from internal hardware
+ .de (hw2reg.err_code.sfifo_esrng_err.de),
+ .d (hw2reg.err_code.sfifo_esrng_err.d ),
+
+ // to internal hardware
+ .qe (),
+ .q (),
+
+ // to register interface (read)
+ .qs (err_code_sfifo_esrng_err_qs)
+ );
- logic [36:0] addr_hit;
+ // F[sfifo_esfinal_err]: 1:1
+ prim_subreg #(
+ .DW (1),
+ .SWACCESS("RW"),
+ .RESVAL (1'h0)
+ ) u_err_code_sfifo_esfinal_err (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface
+ .we (err_code_sfifo_esfinal_err_we),
+ .wd (err_code_sfifo_esfinal_err_wd),
+
+ // from internal hardware
+ .de (hw2reg.err_code.sfifo_esfinal_err.de),
+ .d (hw2reg.err_code.sfifo_esfinal_err.d ),
+
+ // to internal hardware
+ .qe (),
+ .q (),
+
+ // to register interface (read)
+ .qs (err_code_sfifo_esfinal_err_qs)
+ );
+
+
+ // F[fifo_write_err]: 28:28
+ prim_subreg #(
+ .DW (1),
+ .SWACCESS("RW"),
+ .RESVAL (1'h0)
+ ) u_err_code_fifo_write_err (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface
+ .we (err_code_fifo_write_err_we),
+ .wd (err_code_fifo_write_err_wd),
+
+ // from internal hardware
+ .de (hw2reg.err_code.fifo_write_err.de),
+ .d (hw2reg.err_code.fifo_write_err.d ),
+
+ // to internal hardware
+ .qe (),
+ .q (),
+
+ // to register interface (read)
+ .qs (err_code_fifo_write_err_qs)
+ );
+
+
+ // F[fifo_read_err]: 29:29
+ prim_subreg #(
+ .DW (1),
+ .SWACCESS("RW"),
+ .RESVAL (1'h0)
+ ) u_err_code_fifo_read_err (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface
+ .we (err_code_fifo_read_err_we),
+ .wd (err_code_fifo_read_err_wd),
+
+ // from internal hardware
+ .de (hw2reg.err_code.fifo_read_err.de),
+ .d (hw2reg.err_code.fifo_read_err.d ),
+
+ // to internal hardware
+ .qe (),
+ .q (),
+
+ // to register interface (read)
+ .qs (err_code_fifo_read_err_qs)
+ );
+
+
+ // F[fifo_state_err]: 30:30
+ prim_subreg #(
+ .DW (1),
+ .SWACCESS("RW"),
+ .RESVAL (1'h0)
+ ) u_err_code_fifo_state_err (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface
+ .we (err_code_fifo_state_err_we),
+ .wd (err_code_fifo_state_err_wd),
+
+ // from internal hardware
+ .de (hw2reg.err_code.fifo_state_err.de),
+ .d (hw2reg.err_code.fifo_state_err.d ),
+
+ // to internal hardware
+ .qe (),
+ .q (),
+
+ // to register interface (read)
+ .qs (err_code_fifo_state_err_qs)
+ );
+
+
+
+
+ logic [40:0] addr_hit;
always_comb begin
addr_hit = '0;
addr_hit[ 0] = (reg_addr == ENTROPY_SRC_INTR_STATE_OFFSET);
@@ -1886,28 +2164,32 @@
addr_hit[12] = (reg_addr == ENTROPY_SRC_ADAPTP_HI_THRESHOLDS_OFFSET);
addr_hit[13] = (reg_addr == ENTROPY_SRC_ADAPTP_LO_THRESHOLDS_OFFSET);
addr_hit[14] = (reg_addr == ENTROPY_SRC_BUCKET_THRESHOLDS_OFFSET);
- addr_hit[15] = (reg_addr == ENTROPY_SRC_MARKOV_THRESHOLDS_OFFSET);
- addr_hit[16] = (reg_addr == ENTROPY_SRC_EXTHT_HI_THRESHOLDS_OFFSET);
- addr_hit[17] = (reg_addr == ENTROPY_SRC_EXTHT_LO_THRESHOLDS_OFFSET);
- addr_hit[18] = (reg_addr == ENTROPY_SRC_REPCNT_HI_WATERMARKS_OFFSET);
- addr_hit[19] = (reg_addr == ENTROPY_SRC_ADAPTP_HI_WATERMARKS_OFFSET);
- addr_hit[20] = (reg_addr == ENTROPY_SRC_ADAPTP_LO_WATERMARKS_OFFSET);
- addr_hit[21] = (reg_addr == ENTROPY_SRC_EXTHT_HI_WATERMARKS_OFFSET);
- addr_hit[22] = (reg_addr == ENTROPY_SRC_EXTHT_LO_WATERMARKS_OFFSET);
- addr_hit[23] = (reg_addr == ENTROPY_SRC_BUCKET_HI_WATERMARKS_OFFSET);
- addr_hit[24] = (reg_addr == ENTROPY_SRC_MARKOV_HI_WATERMARKS_OFFSET);
- addr_hit[25] = (reg_addr == ENTROPY_SRC_REPCNT_TOTAL_FAILS_OFFSET);
- addr_hit[26] = (reg_addr == ENTROPY_SRC_ADAPTP_HI_TOTAL_FAILS_OFFSET);
- addr_hit[27] = (reg_addr == ENTROPY_SRC_ADAPTP_LO_TOTAL_FAILS_OFFSET);
- addr_hit[28] = (reg_addr == ENTROPY_SRC_BUCKET_TOTAL_FAILS_OFFSET);
- addr_hit[29] = (reg_addr == ENTROPY_SRC_MARKOV_TOTAL_FAILS_OFFSET);
- addr_hit[30] = (reg_addr == ENTROPY_SRC_EXTHT_HI_TOTAL_FAILS_OFFSET);
- addr_hit[31] = (reg_addr == ENTROPY_SRC_EXTHT_LO_TOTAL_FAILS_OFFSET);
- addr_hit[32] = (reg_addr == ENTROPY_SRC_ALERT_THRESHOLD_OFFSET);
- addr_hit[33] = (reg_addr == ENTROPY_SRC_ALERT_FAIL_COUNTS_OFFSET);
- addr_hit[34] = (reg_addr == ENTROPY_SRC_EXTHT_FAIL_COUNTS_OFFSET);
- addr_hit[35] = (reg_addr == ENTROPY_SRC_DEBUG_STATUS_OFFSET);
- addr_hit[36] = (reg_addr == ENTROPY_SRC_SEED_OFFSET);
+ addr_hit[15] = (reg_addr == ENTROPY_SRC_MARKOV_HI_THRESHOLDS_OFFSET);
+ addr_hit[16] = (reg_addr == ENTROPY_SRC_MARKOV_LO_THRESHOLDS_OFFSET);
+ addr_hit[17] = (reg_addr == ENTROPY_SRC_EXTHT_HI_THRESHOLDS_OFFSET);
+ addr_hit[18] = (reg_addr == ENTROPY_SRC_EXTHT_LO_THRESHOLDS_OFFSET);
+ addr_hit[19] = (reg_addr == ENTROPY_SRC_REPCNT_HI_WATERMARKS_OFFSET);
+ addr_hit[20] = (reg_addr == ENTROPY_SRC_ADAPTP_HI_WATERMARKS_OFFSET);
+ addr_hit[21] = (reg_addr == ENTROPY_SRC_ADAPTP_LO_WATERMARKS_OFFSET);
+ addr_hit[22] = (reg_addr == ENTROPY_SRC_EXTHT_HI_WATERMARKS_OFFSET);
+ addr_hit[23] = (reg_addr == ENTROPY_SRC_EXTHT_LO_WATERMARKS_OFFSET);
+ addr_hit[24] = (reg_addr == ENTROPY_SRC_BUCKET_HI_WATERMARKS_OFFSET);
+ addr_hit[25] = (reg_addr == ENTROPY_SRC_MARKOV_HI_WATERMARKS_OFFSET);
+ addr_hit[26] = (reg_addr == ENTROPY_SRC_MARKOV_LO_WATERMARKS_OFFSET);
+ addr_hit[27] = (reg_addr == ENTROPY_SRC_REPCNT_TOTAL_FAILS_OFFSET);
+ addr_hit[28] = (reg_addr == ENTROPY_SRC_ADAPTP_HI_TOTAL_FAILS_OFFSET);
+ addr_hit[29] = (reg_addr == ENTROPY_SRC_ADAPTP_LO_TOTAL_FAILS_OFFSET);
+ addr_hit[30] = (reg_addr == ENTROPY_SRC_BUCKET_TOTAL_FAILS_OFFSET);
+ addr_hit[31] = (reg_addr == ENTROPY_SRC_MARKOV_HI_TOTAL_FAILS_OFFSET);
+ addr_hit[32] = (reg_addr == ENTROPY_SRC_MARKOV_LO_TOTAL_FAILS_OFFSET);
+ addr_hit[33] = (reg_addr == ENTROPY_SRC_EXTHT_HI_TOTAL_FAILS_OFFSET);
+ addr_hit[34] = (reg_addr == ENTROPY_SRC_EXTHT_LO_TOTAL_FAILS_OFFSET);
+ addr_hit[35] = (reg_addr == ENTROPY_SRC_ALERT_THRESHOLD_OFFSET);
+ addr_hit[36] = (reg_addr == ENTROPY_SRC_ALERT_FAIL_COUNTS_OFFSET);
+ addr_hit[37] = (reg_addr == ENTROPY_SRC_EXTHT_FAIL_COUNTS_OFFSET);
+ addr_hit[38] = (reg_addr == ENTROPY_SRC_DEBUG_STATUS_OFFSET);
+ addr_hit[39] = (reg_addr == ENTROPY_SRC_SEED_OFFSET);
+ addr_hit[40] = (reg_addr == ENTROPY_SRC_ERR_CODE_OFFSET);
end
assign addrmiss = (reg_re || reg_we) ? ~|addr_hit : 1'b0 ;
@@ -1952,6 +2234,10 @@
if (addr_hit[34] && reg_we && (ENTROPY_SRC_PERMIT[34] != (ENTROPY_SRC_PERMIT[34] & reg_be))) wr_err = 1'b1 ;
if (addr_hit[35] && reg_we && (ENTROPY_SRC_PERMIT[35] != (ENTROPY_SRC_PERMIT[35] & reg_be))) wr_err = 1'b1 ;
if (addr_hit[36] && reg_we && (ENTROPY_SRC_PERMIT[36] != (ENTROPY_SRC_PERMIT[36] & reg_be))) wr_err = 1'b1 ;
+ if (addr_hit[37] && reg_we && (ENTROPY_SRC_PERMIT[37] != (ENTROPY_SRC_PERMIT[37] & reg_be))) wr_err = 1'b1 ;
+ if (addr_hit[38] && reg_we && (ENTROPY_SRC_PERMIT[38] != (ENTROPY_SRC_PERMIT[38] & reg_be))) wr_err = 1'b1 ;
+ if (addr_hit[39] && reg_we && (ENTROPY_SRC_PERMIT[39] != (ENTROPY_SRC_PERMIT[39] & reg_be))) wr_err = 1'b1 ;
+ if (addr_hit[40] && reg_we && (ENTROPY_SRC_PERMIT[40] != (ENTROPY_SRC_PERMIT[40] & reg_be))) wr_err = 1'b1 ;
end
assign intr_state_es_entropy_valid_we = addr_hit[0] & reg_we & ~wr_err;
@@ -2061,92 +2347,121 @@
assign bucket_thresholds_bypass_bucket_thresh_we = addr_hit[14] & reg_we & ~wr_err;
assign bucket_thresholds_bypass_bucket_thresh_wd = reg_wdata[31:16];
- assign markov_thresholds_fips_markov_thresh_we = addr_hit[15] & reg_we & ~wr_err;
- assign markov_thresholds_fips_markov_thresh_wd = reg_wdata[15:0];
+ assign markov_hi_thresholds_fips_markov_hi_thresh_we = addr_hit[15] & reg_we & ~wr_err;
+ assign markov_hi_thresholds_fips_markov_hi_thresh_wd = reg_wdata[15:0];
- assign markov_thresholds_bypass_markov_thresh_we = addr_hit[15] & reg_we & ~wr_err;
- assign markov_thresholds_bypass_markov_thresh_wd = reg_wdata[31:16];
+ assign markov_hi_thresholds_bypass_markov_hi_thresh_we = addr_hit[15] & reg_we & ~wr_err;
+ assign markov_hi_thresholds_bypass_markov_hi_thresh_wd = reg_wdata[31:16];
- assign extht_hi_thresholds_fips_extht_hi_thresh_we = addr_hit[16] & reg_we & ~wr_err;
+ assign markov_lo_thresholds_fips_markov_lo_thresh_we = addr_hit[16] & reg_we & ~wr_err;
+ assign markov_lo_thresholds_fips_markov_lo_thresh_wd = reg_wdata[15:0];
+
+ assign markov_lo_thresholds_bypass_markov_lo_thresh_we = addr_hit[16] & reg_we & ~wr_err;
+ assign markov_lo_thresholds_bypass_markov_lo_thresh_wd = reg_wdata[31:16];
+
+ assign extht_hi_thresholds_fips_extht_hi_thresh_we = addr_hit[17] & reg_we & ~wr_err;
assign extht_hi_thresholds_fips_extht_hi_thresh_wd = reg_wdata[15:0];
- assign extht_hi_thresholds_bypass_extht_hi_thresh_we = addr_hit[16] & reg_we & ~wr_err;
+ assign extht_hi_thresholds_bypass_extht_hi_thresh_we = addr_hit[17] & reg_we & ~wr_err;
assign extht_hi_thresholds_bypass_extht_hi_thresh_wd = reg_wdata[31:16];
- assign extht_lo_thresholds_fips_extht_lo_thresh_we = addr_hit[17] & reg_we & ~wr_err;
+ assign extht_lo_thresholds_fips_extht_lo_thresh_we = addr_hit[18] & reg_we & ~wr_err;
assign extht_lo_thresholds_fips_extht_lo_thresh_wd = reg_wdata[15:0];
- assign extht_lo_thresholds_bypass_extht_lo_thresh_we = addr_hit[17] & reg_we & ~wr_err;
+ assign extht_lo_thresholds_bypass_extht_lo_thresh_we = addr_hit[18] & reg_we & ~wr_err;
assign extht_lo_thresholds_bypass_extht_lo_thresh_wd = reg_wdata[31:16];
- assign repcnt_hi_watermarks_fips_repcnt_hi_watermark_re = addr_hit[18] && reg_re;
+ assign repcnt_hi_watermarks_fips_repcnt_hi_watermark_re = addr_hit[19] && reg_re;
- assign repcnt_hi_watermarks_bypass_repcnt_hi_watermark_re = addr_hit[18] && reg_re;
+ assign repcnt_hi_watermarks_bypass_repcnt_hi_watermark_re = addr_hit[19] && reg_re;
- assign adaptp_hi_watermarks_fips_adaptp_hi_watermark_re = addr_hit[19] && reg_re;
+ assign adaptp_hi_watermarks_fips_adaptp_hi_watermark_re = addr_hit[20] && reg_re;
- assign adaptp_hi_watermarks_bypass_adaptp_hi_watermark_re = addr_hit[19] && reg_re;
+ assign adaptp_hi_watermarks_bypass_adaptp_hi_watermark_re = addr_hit[20] && reg_re;
- assign adaptp_lo_watermarks_fips_adaptp_lo_watermark_re = addr_hit[20] && reg_re;
+ assign adaptp_lo_watermarks_fips_adaptp_lo_watermark_re = addr_hit[21] && reg_re;
- assign adaptp_lo_watermarks_bypass_adaptp_lo_watermark_re = addr_hit[20] && reg_re;
+ assign adaptp_lo_watermarks_bypass_adaptp_lo_watermark_re = addr_hit[21] && reg_re;
- assign extht_hi_watermarks_fips_extht_hi_watermark_re = addr_hit[21] && reg_re;
+ assign extht_hi_watermarks_fips_extht_hi_watermark_re = addr_hit[22] && reg_re;
- assign extht_hi_watermarks_bypass_extht_hi_watermark_re = addr_hit[21] && reg_re;
+ assign extht_hi_watermarks_bypass_extht_hi_watermark_re = addr_hit[22] && reg_re;
- assign extht_lo_watermarks_fips_extht_lo_watermark_re = addr_hit[22] && reg_re;
+ assign extht_lo_watermarks_fips_extht_lo_watermark_re = addr_hit[23] && reg_re;
- assign extht_lo_watermarks_bypass_extht_lo_watermark_re = addr_hit[22] && reg_re;
+ assign extht_lo_watermarks_bypass_extht_lo_watermark_re = addr_hit[23] && reg_re;
- assign bucket_hi_watermarks_fips_bucket_hi_watermark_re = addr_hit[23] && reg_re;
+ assign bucket_hi_watermarks_fips_bucket_hi_watermark_re = addr_hit[24] && reg_re;
- assign bucket_hi_watermarks_bypass_bucket_hi_watermark_re = addr_hit[23] && reg_re;
+ assign bucket_hi_watermarks_bypass_bucket_hi_watermark_re = addr_hit[24] && reg_re;
- assign markov_hi_watermarks_fips_markov_hi_watermark_re = addr_hit[24] && reg_re;
+ assign markov_hi_watermarks_fips_markov_hi_watermark_re = addr_hit[25] && reg_re;
- assign markov_hi_watermarks_bypass_markov_hi_watermark_re = addr_hit[24] && reg_re;
+ assign markov_hi_watermarks_bypass_markov_hi_watermark_re = addr_hit[25] && reg_re;
- assign repcnt_total_fails_re = addr_hit[25] && reg_re;
+ assign markov_lo_watermarks_fips_markov_lo_watermark_re = addr_hit[26] && reg_re;
- assign adaptp_hi_total_fails_re = addr_hit[26] && reg_re;
+ assign markov_lo_watermarks_bypass_markov_lo_watermark_re = addr_hit[26] && reg_re;
- assign adaptp_lo_total_fails_re = addr_hit[27] && reg_re;
+ assign repcnt_total_fails_re = addr_hit[27] && reg_re;
- assign bucket_total_fails_re = addr_hit[28] && reg_re;
+ assign adaptp_hi_total_fails_re = addr_hit[28] && reg_re;
- assign markov_total_fails_re = addr_hit[29] && reg_re;
+ assign adaptp_lo_total_fails_re = addr_hit[29] && reg_re;
- assign extht_hi_total_fails_re = addr_hit[30] && reg_re;
+ assign bucket_total_fails_re = addr_hit[30] && reg_re;
- assign extht_lo_total_fails_re = addr_hit[31] && reg_re;
+ assign markov_hi_total_fails_re = addr_hit[31] && reg_re;
- assign alert_threshold_we = addr_hit[32] & reg_we & ~wr_err;
+ assign markov_lo_total_fails_re = addr_hit[32] && reg_re;
+
+ assign extht_hi_total_fails_re = addr_hit[33] && reg_re;
+
+ assign extht_lo_total_fails_re = addr_hit[34] && reg_re;
+
+ assign alert_threshold_we = addr_hit[35] & reg_we & ~wr_err;
assign alert_threshold_wd = reg_wdata[3:0];
- assign alert_fail_counts_any_fail_count_re = addr_hit[33] && reg_re;
+ assign alert_fail_counts_any_fail_count_re = addr_hit[36] && reg_re;
- assign alert_fail_counts_repcnt_fail_count_re = addr_hit[33] && reg_re;
+ assign alert_fail_counts_repcnt_fail_count_re = addr_hit[36] && reg_re;
- assign alert_fail_counts_adaptp_hi_fail_count_re = addr_hit[33] && reg_re;
+ assign alert_fail_counts_adaptp_hi_fail_count_re = addr_hit[36] && reg_re;
- assign alert_fail_counts_adaptp_lo_fail_count_re = addr_hit[33] && reg_re;
+ assign alert_fail_counts_adaptp_lo_fail_count_re = addr_hit[36] && reg_re;
- assign alert_fail_counts_bucket_fail_count_re = addr_hit[33] && reg_re;
+ assign alert_fail_counts_bucket_fail_count_re = addr_hit[36] && reg_re;
- assign alert_fail_counts_markov_fail_count_re = addr_hit[33] && reg_re;
+ assign alert_fail_counts_markov_hi_fail_count_re = addr_hit[36] && reg_re;
- assign extht_fail_counts_extht_hi_fail_count_re = addr_hit[34] && reg_re;
+ assign alert_fail_counts_markov_lo_fail_count_re = addr_hit[36] && reg_re;
- assign extht_fail_counts_extht_lo_fail_count_re = addr_hit[34] && reg_re;
+ assign extht_fail_counts_extht_hi_fail_count_re = addr_hit[37] && reg_re;
- assign debug_status_entropy_fifo_depth_re = addr_hit[35] && reg_re;
+ assign extht_fail_counts_extht_lo_fail_count_re = addr_hit[37] && reg_re;
- assign debug_status_diag_re = addr_hit[35] && reg_re;
+ assign debug_status_entropy_fifo_depth_re = addr_hit[38] && reg_re;
- assign seed_we = addr_hit[36] & reg_we & ~wr_err;
+ assign debug_status_diag_re = addr_hit[38] && reg_re;
+
+ assign seed_we = addr_hit[39] & reg_we & ~wr_err;
assign seed_wd = reg_wdata[3:0];
+ assign err_code_sfifo_esrng_err_we = addr_hit[40] & reg_we & ~wr_err;
+ assign err_code_sfifo_esrng_err_wd = reg_wdata[0];
+
+ assign err_code_sfifo_esfinal_err_we = addr_hit[40] & reg_we & ~wr_err;
+ assign err_code_sfifo_esfinal_err_wd = reg_wdata[1];
+
+ assign err_code_fifo_write_err_we = addr_hit[40] & reg_we & ~wr_err;
+ assign err_code_fifo_write_err_wd = reg_wdata[28];
+
+ assign err_code_fifo_read_err_we = addr_hit[40] & reg_we & ~wr_err;
+ assign err_code_fifo_read_err_wd = reg_wdata[29];
+
+ assign err_code_fifo_state_err_we = addr_hit[40] & reg_we & ~wr_err;
+ assign err_code_fifo_state_err_wd = reg_wdata[30];
+
// Read data return
always_comb begin
reg_rdata_next = '0;
@@ -2235,110 +2550,133 @@
end
addr_hit[15]: begin
- reg_rdata_next[15:0] = markov_thresholds_fips_markov_thresh_qs;
- reg_rdata_next[31:16] = markov_thresholds_bypass_markov_thresh_qs;
+ reg_rdata_next[15:0] = markov_hi_thresholds_fips_markov_hi_thresh_qs;
+ reg_rdata_next[31:16] = markov_hi_thresholds_bypass_markov_hi_thresh_qs;
end
addr_hit[16]: begin
+ reg_rdata_next[15:0] = markov_lo_thresholds_fips_markov_lo_thresh_qs;
+ reg_rdata_next[31:16] = markov_lo_thresholds_bypass_markov_lo_thresh_qs;
+ end
+
+ addr_hit[17]: begin
reg_rdata_next[15:0] = extht_hi_thresholds_fips_extht_hi_thresh_qs;
reg_rdata_next[31:16] = extht_hi_thresholds_bypass_extht_hi_thresh_qs;
end
- addr_hit[17]: begin
+ addr_hit[18]: begin
reg_rdata_next[15:0] = extht_lo_thresholds_fips_extht_lo_thresh_qs;
reg_rdata_next[31:16] = extht_lo_thresholds_bypass_extht_lo_thresh_qs;
end
- addr_hit[18]: begin
+ addr_hit[19]: begin
reg_rdata_next[15:0] = repcnt_hi_watermarks_fips_repcnt_hi_watermark_qs;
reg_rdata_next[31:16] = repcnt_hi_watermarks_bypass_repcnt_hi_watermark_qs;
end
- addr_hit[19]: begin
+ addr_hit[20]: begin
reg_rdata_next[15:0] = adaptp_hi_watermarks_fips_adaptp_hi_watermark_qs;
reg_rdata_next[31:16] = adaptp_hi_watermarks_bypass_adaptp_hi_watermark_qs;
end
- addr_hit[20]: begin
+ addr_hit[21]: begin
reg_rdata_next[15:0] = adaptp_lo_watermarks_fips_adaptp_lo_watermark_qs;
reg_rdata_next[31:16] = adaptp_lo_watermarks_bypass_adaptp_lo_watermark_qs;
end
- addr_hit[21]: begin
+ addr_hit[22]: begin
reg_rdata_next[15:0] = extht_hi_watermarks_fips_extht_hi_watermark_qs;
reg_rdata_next[31:16] = extht_hi_watermarks_bypass_extht_hi_watermark_qs;
end
- addr_hit[22]: begin
+ addr_hit[23]: begin
reg_rdata_next[15:0] = extht_lo_watermarks_fips_extht_lo_watermark_qs;
reg_rdata_next[31:16] = extht_lo_watermarks_bypass_extht_lo_watermark_qs;
end
- addr_hit[23]: begin
+ addr_hit[24]: begin
reg_rdata_next[15:0] = bucket_hi_watermarks_fips_bucket_hi_watermark_qs;
reg_rdata_next[31:16] = bucket_hi_watermarks_bypass_bucket_hi_watermark_qs;
end
- addr_hit[24]: begin
+ addr_hit[25]: begin
reg_rdata_next[15:0] = markov_hi_watermarks_fips_markov_hi_watermark_qs;
reg_rdata_next[31:16] = markov_hi_watermarks_bypass_markov_hi_watermark_qs;
end
- addr_hit[25]: begin
- reg_rdata_next[31:0] = repcnt_total_fails_qs;
- end
-
addr_hit[26]: begin
- reg_rdata_next[31:0] = adaptp_hi_total_fails_qs;
+ reg_rdata_next[15:0] = markov_lo_watermarks_fips_markov_lo_watermark_qs;
+ reg_rdata_next[31:16] = markov_lo_watermarks_bypass_markov_lo_watermark_qs;
end
addr_hit[27]: begin
- reg_rdata_next[31:0] = adaptp_lo_total_fails_qs;
+ reg_rdata_next[31:0] = repcnt_total_fails_qs;
end
addr_hit[28]: begin
- reg_rdata_next[31:0] = bucket_total_fails_qs;
+ reg_rdata_next[31:0] = adaptp_hi_total_fails_qs;
end
addr_hit[29]: begin
- reg_rdata_next[31:0] = markov_total_fails_qs;
+ reg_rdata_next[31:0] = adaptp_lo_total_fails_qs;
end
addr_hit[30]: begin
- reg_rdata_next[31:0] = extht_hi_total_fails_qs;
+ reg_rdata_next[31:0] = bucket_total_fails_qs;
end
addr_hit[31]: begin
- reg_rdata_next[31:0] = extht_lo_total_fails_qs;
+ reg_rdata_next[31:0] = markov_hi_total_fails_qs;
end
addr_hit[32]: begin
- reg_rdata_next[3:0] = alert_threshold_qs;
+ reg_rdata_next[31:0] = markov_lo_total_fails_qs;
end
addr_hit[33]: begin
+ reg_rdata_next[31:0] = extht_hi_total_fails_qs;
+ end
+
+ addr_hit[34]: begin
+ reg_rdata_next[31:0] = extht_lo_total_fails_qs;
+ end
+
+ addr_hit[35]: begin
+ reg_rdata_next[3:0] = alert_threshold_qs;
+ end
+
+ addr_hit[36]: begin
reg_rdata_next[3:0] = alert_fail_counts_any_fail_count_qs;
reg_rdata_next[7:4] = alert_fail_counts_repcnt_fail_count_qs;
reg_rdata_next[11:8] = alert_fail_counts_adaptp_hi_fail_count_qs;
reg_rdata_next[15:12] = alert_fail_counts_adaptp_lo_fail_count_qs;
reg_rdata_next[19:16] = alert_fail_counts_bucket_fail_count_qs;
- reg_rdata_next[23:20] = alert_fail_counts_markov_fail_count_qs;
+ reg_rdata_next[23:20] = alert_fail_counts_markov_hi_fail_count_qs;
+ reg_rdata_next[27:24] = alert_fail_counts_markov_lo_fail_count_qs;
end
- addr_hit[34]: begin
+ addr_hit[37]: begin
reg_rdata_next[3:0] = extht_fail_counts_extht_hi_fail_count_qs;
reg_rdata_next[7:4] = extht_fail_counts_extht_lo_fail_count_qs;
end
- addr_hit[35]: begin
+ addr_hit[38]: begin
reg_rdata_next[1:0] = debug_status_entropy_fifo_depth_qs;
reg_rdata_next[31] = debug_status_diag_qs;
end
- addr_hit[36]: begin
+ addr_hit[39]: begin
reg_rdata_next[3:0] = seed_qs;
end
+ addr_hit[40]: begin
+ reg_rdata_next[0] = err_code_sfifo_esrng_err_qs;
+ reg_rdata_next[1] = err_code_sfifo_esfinal_err_qs;
+ reg_rdata_next[28] = err_code_fifo_write_err_qs;
+ reg_rdata_next[29] = err_code_fifo_read_err_qs;
+ reg_rdata_next[30] = err_code_fifo_state_err_qs;
+ end
+
default: begin
reg_rdata_next = '1;
end
diff --git a/hw/ip/entropy_src/rtl/entropy_src_repcnt_ht.sv b/hw/ip/entropy_src/rtl/entropy_src_repcnt_ht.sv
index dc6cf66..40763a6 100755
--- a/hw/ip/entropy_src/rtl/entropy_src_repcnt_ht.sv
+++ b/hw/ip/entropy_src/rtl/entropy_src_repcnt_ht.sv
@@ -6,11 +6,11 @@
//
module entropy_src_repcnt_ht #(
- parameter int unsigned RegWidth = 16,
- parameter int unsigned RngBusWidth = 4
+ parameter int RegWidth = 16,
+ parameter int RngBusWidth = 4
) (
- input clk_i,
- input rst_ni,
+ input logic clk_i,
+ input logic rst_ni,
// ins req interface
input logic [RngBusWidth-1:0] entropy_bit_i,
@@ -18,14 +18,11 @@
input logic clear_i,
input logic active_i,
input logic [RegWidth-1:0] thresh_i,
- input logic [RegWidth-1:0] window_i,
output logic [RegWidth-1:0] test_cnt_o,
- output logic test_done_pulse_o,
output logic test_fail_pulse_o
);
// signals
- logic window_cntr_wrap;
logic [RngBusWidth-1:0] samples_match_pulse;
logic [RngBusWidth-1:0] samples_no_match_pulse;
logic [RngBusWidth-1:0] rep_cnt_fail;
@@ -33,19 +30,16 @@
// flops
logic [RngBusWidth-1:0] prev_sample_q, prev_sample_d;
logic [RegWidth-1:0] rep_cntr_q[RngBusWidth], rep_cntr_d[RngBusWidth];
- logic [RegWidth-1:0] window_cntr_q, window_cntr_d;
logic [RegWidth-1:0] test_cnt_q, test_cnt_d;
always_ff @(posedge clk_i or negedge rst_ni)
if (!rst_ni) begin
prev_sample_q <= '0;
rep_cntr_q <= '{default:0};
- window_cntr_q <= '0;
test_cnt_q <= '0;
end else begin
prev_sample_q <= prev_sample_d;
rep_cntr_q <= rep_cntr_d;
- window_cntr_q <= window_cntr_d;
test_cnt_q <= test_cnt_d;
end
@@ -61,7 +55,6 @@
// NIST A sample
assign prev_sample_d[sh] = (!active_i || clear_i) ? '0 :
- window_cntr_wrap ? '0 :
entropy_bit_vld_i ? entropy_bit_i[sh] :
prev_sample_q[sh];
@@ -73,7 +66,6 @@
// NIST B counter
assign rep_cntr_d[sh] =
(!active_i || clear_i) ? '0 :
- window_cntr_wrap ? '0 :
samples_match_pulse[sh] ? (rep_cntr_q[sh]+1) :
samples_no_match_pulse[sh] ? '0 :
rep_cntr_q[sh];
@@ -83,26 +75,14 @@
end : gen_cntrs
- // Window wrap condition
- assign window_cntr_wrap = (window_cntr_q == window_i);
-
- // Window counter
- assign window_cntr_d =
- clear_i ? '0 :
- window_cntr_wrap ? '0 :
- entropy_bit_vld_i ? (window_cntr_q+1) :
- window_cntr_q;
-
// Test event counter
assign test_cnt_d =
(!active_i || clear_i) ? '0 :
- window_cntr_wrap ? '0 :
entropy_bit_vld_i && (|rep_cnt_fail) ? (test_cnt_q+1) :
test_cnt_q;
// the pulses will be only one clock in length
- assign test_fail_pulse_o = active_i && window_cntr_wrap && (test_cnt_q > '0);
- assign test_done_pulse_o = window_cntr_wrap;
+ assign test_fail_pulse_o = active_i && (test_cnt_q > '0);
assign test_cnt_o = test_cnt_q;
diff --git a/hw/ip/entropy_src/rtl/entropy_src_watermark_reg.sv b/hw/ip/entropy_src/rtl/entropy_src_watermark_reg.sv
index aa8a12e..1de4934 100755
--- a/hw/ip/entropy_src/rtl/entropy_src_watermark_reg.sv
+++ b/hw/ip/entropy_src/rtl/entropy_src_watermark_reg.sv
@@ -6,7 +6,7 @@
//
module entropy_src_watermark_reg #(
- parameter int unsigned RegWidth = 16,
+ parameter int RegWidth = 16,
parameter bit HighWatermark = 1
) (
input logic clk_i,