blob: 4234e5bc6dbb6e959c6aa1dca7e4b9a25d8676e8 [file] [log] [blame]
Mark Branstad7e61a942020-01-22 16:36:06 +00001// Copyright lowRISC contributors.
2// Licensed under the Apache License, Version 2.0, see LICENSE for details.
3// SPDX-License-Identifier: Apache-2.0
4//
5// Description: entropy_src top level wrapper file
6
Mark Branstad1a107502020-12-03 09:27:44 -08007`include "prim_assert.sv"
8
Mark Branstadbdebfd42020-04-11 22:26:39 +00009
Mark Branstad789ea022021-02-12 14:35:42 -080010module entropy_src
11 import entropy_src_pkg::*;
12 import entropy_src_reg_pkg::*;
13#(
14 parameter logic [NumAlerts-1:0] AlertAsyncOn = {NumAlerts{1'b1}},
Mark Branstad2de46f62020-11-06 13:46:18 -080015 parameter int EsFifoDepth = 2
Mark Branstad7e61a942020-01-22 16:36:06 +000016) (
Mark Branstad2de46f62020-11-06 13:46:18 -080017 input logic clk_i,
18 input logic rst_ni,
Mark Branstad7e61a942020-01-22 16:36:06 +000019
20 // Bus Interface
21 input tlul_pkg::tl_h2d_t tl_i,
22 output tlul_pkg::tl_d2h_t tl_o,
23
Mark Branstadbdebfd42020-04-11 22:26:39 +000024 // Efuse Interface
Mark Branstad2de46f62020-11-06 13:46:18 -080025 input logic efuse_es_sw_reg_en_i,
Mark Branstadbdebfd42020-04-11 22:26:39 +000026
27 // Entropy Interface
28 input entropy_src_hw_if_req_t entropy_src_hw_if_i,
29 output entropy_src_hw_if_rsp_t entropy_src_hw_if_o,
30
31 // RNG Interface
32 output entropy_src_rng_req_t entropy_src_rng_o,
33 input entropy_src_rng_rsp_t entropy_src_rng_i,
34
Mark Branstadde6e4792020-10-28 10:32:25 -070035 // External Health Test Interface
36 output entropy_src_xht_req_t entropy_src_xht_o,
37 input entropy_src_xht_rsp_t entropy_src_xht_i,
38
Mark Branstadcfd6d412020-09-30 14:41:54 -070039 // Alerts
Mark Branstad789ea022021-02-12 14:35:42 -080040 input prim_alert_pkg::alert_rx_t [NumAlerts-1:0] alert_rx_i,
41 output prim_alert_pkg::alert_tx_t [NumAlerts-1:0] alert_tx_o,
Mark Branstadcfd6d412020-09-30 14:41:54 -070042
Mark Branstad7e61a942020-01-22 16:36:06 +000043 // Interrupts
Mark Branstadde6e4792020-10-28 10:32:25 -070044 output logic intr_es_entropy_valid_o,
45 output logic intr_es_health_test_failed_o,
Mark Branstad789ea022021-02-12 14:35:42 -080046 output logic intr_es_fatal_err_o
Mark Branstad7e61a942020-01-22 16:36:06 +000047);
48
49 import entropy_src_reg_pkg::*;
50
51 entropy_src_reg2hw_t reg2hw;
52 entropy_src_hw2reg_t hw2reg;
53
Mark Branstad789ea022021-02-12 14:35:42 -080054 logic [NumAlerts-1:0] alert_test;
55 logic [NumAlerts-1:0] alert;
Mark Branstadcfd6d412020-09-30 14:41:54 -070056
Weicai Yang9f6311f2020-06-09 16:04:35 -070057 entropy_src_reg_top u_reg (
Mark Branstad7e61a942020-01-22 16:36:06 +000058 .clk_i,
59 .rst_ni,
60 .tl_i,
61 .tl_o,
62 .reg2hw,
63 .hw2reg,
Timothy Chen8ec347f2021-03-02 11:52:17 -080064 .intg_err_o(),
Mark Branstad7e61a942020-01-22 16:36:06 +000065 .devmode_i(1'b1)
66 );
67
Mark Branstadbdebfd42020-04-11 22:26:39 +000068 entropy_src_core #(
69 .EsFifoDepth(EsFifoDepth)
70 ) u_entropy_src_core (
Mark Branstad7e61a942020-01-22 16:36:06 +000071 .clk_i,
72 .rst_ni,
73 .reg2hw,
74 .hw2reg,
75
Mark Branstadbdebfd42020-04-11 22:26:39 +000076 .efuse_es_sw_reg_en_i,
77
78 .entropy_src_hw_if_o,
79 .entropy_src_hw_if_i,
80
Mark Branstadde6e4792020-10-28 10:32:25 -070081 .entropy_src_xht_o,
82 .entropy_src_xht_i,
83
Mark Branstadbdebfd42020-04-11 22:26:39 +000084 .entropy_src_rng_o,
85 .entropy_src_rng_i,
86
Mark Branstad789ea022021-02-12 14:35:42 -080087 .recov_alert_o(alert[0]),
88 .fatal_alert_o(alert[1]),
89
90 .recov_alert_test_o(alert_test[0]),
91 .fatal_alert_test_o(alert_test[1]),
Mark Branstadcfd6d412020-09-30 14:41:54 -070092
Mark Branstadde6e4792020-10-28 10:32:25 -070093 .intr_es_entropy_valid_o,
94 .intr_es_health_test_failed_o,
Mark Branstad789ea022021-02-12 14:35:42 -080095 .intr_es_fatal_err_o
Mark Branstad7e61a942020-01-22 16:36:06 +000096 );
97
Mark Branstad789ea022021-02-12 14:35:42 -080098
99 for (genvar i = 0; i < NumAlerts; i++) begin : gen_alert_tx
100 prim_alert_sender #(
101 .AsyncOn(AlertAsyncOn[i]),
102 .IsFatal(i)
103 ) u_prim_alert_sender (
104 .clk_i,
105 .rst_ni,
106 .alert_test_i ( alert_test[i] ),
107 .alert_req_i ( alert[i] ),
108 .alert_ack_o ( ),
109 .alert_state_o ( ),
110 .alert_rx_i ( alert_rx_i[i] ),
111 .alert_tx_o ( alert_tx_o[i] )
112 );
113 end
Mark Branstadcfd6d412020-09-30 14:41:54 -0700114
115 // Outputs should have a known value after reset
Mark Branstad1a107502020-12-03 09:27:44 -0800116 `ASSERT_KNOWN(TlDValidKnownO_A, tl_o.d_valid)
117 `ASSERT_KNOWN(TlAReadyKnownO_A, tl_o.a_ready)
Mark Branstadde6e4792020-10-28 10:32:25 -0700118
119 // Entropy Interface
120 `ASSERT_KNOWN(EsHwIfEsAckKnownO_A, entropy_src_hw_if_o.es_ack)
121 `ASSERT_KNOWN(EsHwIfEsBitsKnownO_A, entropy_src_hw_if_o.es_bits)
122 `ASSERT_KNOWN(EsHwIfEsFipsKnownO_A, entropy_src_hw_if_o.es_fips)
123
124 // RNG Interface
125 `ASSERT_KNOWN(EsRngEnableKnownO_A, entropy_src_rng_o.rng_enable)
126
127 // External Health Test Interface
128 `ASSERT_KNOWN(EsXhtEntropyBitKnownO_A, entropy_src_xht_o.entropy_bit)
129 `ASSERT_KNOWN(EsXhtEntropyBitValidKnownO_A, entropy_src_xht_o.entropy_bit_valid)
130 `ASSERT_KNOWN(EsXhtClearKnownO_A, entropy_src_xht_o.clear)
131 `ASSERT_KNOWN(EsXhtActiveKnownO_A, entropy_src_xht_o.active)
132 `ASSERT_KNOWN(EsXhtThreshHiKnownO_A, entropy_src_xht_o.thresh_hi)
133 `ASSERT_KNOWN(EsXhtThreshLoKnownO_A, entropy_src_xht_o.thresh_lo)
134 `ASSERT_KNOWN(EsXhtWindowKnownO_A, entropy_src_xht_o.window)
135
136 // Alerts
137 `ASSERT_KNOWN(AlertTxKnownO_A, alert_tx_o)
138
139 // Interrupts
140 `ASSERT_KNOWN(IntrEsEntropyValidKnownO_A, intr_es_entropy_valid_o)
141 `ASSERT_KNOWN(IntrEsHealthTestFailedKnownO_A, intr_es_health_test_failed_o)
Mark Branstad789ea022021-02-12 14:35:42 -0800142 `ASSERT_KNOWN(IntrEsFifoErrKnownO_A, intr_es_fatal_err_o)
Mark Branstadcfd6d412020-09-30 14:41:54 -0700143
Mark Branstad7e61a942020-01-22 16:36:06 +0000144endmodule