blob: 49248f13626324a6872a267d1bbe7b2c8be29923 [file] [log] [blame]
Mark Branstadb6acfab2020-11-06 07:06:39 -08001// 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: edn top level wrapper file
6
Mark Branstad4e4faa02020-12-03 10:52:47 -08007`include "prim_assert.sv"
Mark Branstadb6acfab2020-11-06 07:06:39 -08008
Mark Branstad1e7fa2e2021-02-18 08:41:37 -08009module edn
10 import edn_pkg::*;
11 import edn_reg_pkg::*;
12#(
Greg Chadwickcc0dd2a2021-03-10 15:55:58 +000013 parameter int NumEndPoints = 7,
Mark Branstad1e7fa2e2021-02-18 08:41:37 -080014 parameter logic [NumAlerts-1:0] AlertAsyncOn = {NumAlerts{1'b1}},
Mark Branstadb6acfab2020-11-06 07:06:39 -080015 parameter int BootInsCmd = 32'h0000_0001,
Mark Branstad67d29152021-03-05 11:06:38 -080016 parameter int BootGenCmd = 32'h00ff_f003
Mark Branstadb6acfab2020-11-06 07:06:39 -080017) (
18 input logic clk_i,
19 input logic rst_ni,
20
Mark Branstad1e7fa2e2021-02-18 08:41:37 -080021 // Tilelink Bus registers
Mark Branstadb6acfab2020-11-06 07:06:39 -080022 input tlul_pkg::tl_h2d_t tl_i,
23 output tlul_pkg::tl_d2h_t tl_o,
24
Mark Branstad1e7fa2e2021-02-18 08:41:37 -080025 // EDN interfaces
Mark Branstadb6acfab2020-11-06 07:06:39 -080026 input edn_req_t [NumEndPoints-1:0] edn_i,
27 output edn_rsp_t [NumEndPoints-1:0] edn_o,
28
Mark Branstad1e7fa2e2021-02-18 08:41:37 -080029 // CSRNG Application Interface
Mark Branstadb6acfab2020-11-06 07:06:39 -080030 output csrng_pkg::csrng_req_t csrng_cmd_o,
31 input csrng_pkg::csrng_rsp_t csrng_cmd_i,
32
Mark Branstad1e7fa2e2021-02-18 08:41:37 -080033 // Alerts
34 input prim_alert_pkg::alert_rx_t [NumAlerts-1:0] alert_rx_i,
35 output prim_alert_pkg::alert_tx_t [NumAlerts-1:0] alert_tx_o,
36
Mark Branstadb6acfab2020-11-06 07:06:39 -080037 // Interrupts
38 output logic intr_edn_cmd_req_done_o,
Mark Branstad1e7fa2e2021-02-18 08:41:37 -080039 output logic intr_edn_fatal_err_o
Mark Branstadb6acfab2020-11-06 07:06:39 -080040);
41
42 import edn_reg_pkg::*;
43
44 edn_reg2hw_t reg2hw;
45 edn_hw2reg_t hw2reg;
46
Mark Branstad1e7fa2e2021-02-18 08:41:37 -080047 logic alert;
48 logic alert_test;
Michael Schaffner3169df82021-06-07 15:37:15 -070049 logic intg_err_alert;
Mark Branstad1e7fa2e2021-02-18 08:41:37 -080050
Mark Branstadb6acfab2020-11-06 07:06:39 -080051 edn_reg_top u_reg (
52 .clk_i,
53 .rst_ni,
54 .tl_i,
55 .tl_o,
56 .reg2hw,
57 .hw2reg,
Michael Schaffner3169df82021-06-07 15:37:15 -070058 .intg_err_o(intg_err_alert),
Mark Branstadb6acfab2020-11-06 07:06:39 -080059 .devmode_i(1'b1)
60 );
61
62 edn_core #(
Mark Branstad64e08192020-11-17 15:14:45 -080063 .NumEndPoints(NumEndPoints),
Mark Branstadb6acfab2020-11-06 07:06:39 -080064 .BootInsCmd(BootInsCmd),
65 .BootGenCmd(BootGenCmd)
66 ) u_edn_core (
67 .clk_i,
68 .rst_ni,
69 .reg2hw,
70 .hw2reg,
71
72 .edn_i,
73 .edn_o,
74
75 .csrng_cmd_o,
76 .csrng_cmd_i,
77
Mark Branstad1e7fa2e2021-02-18 08:41:37 -080078 // Alerts
79 .alert_test_o(alert_test),
80 .fatal_alert_o(alert),
81
Mark Branstadb6acfab2020-11-06 07:06:39 -080082 .intr_edn_cmd_req_done_o,
Mark Branstad1e7fa2e2021-02-18 08:41:37 -080083 .intr_edn_fatal_err_o
Mark Branstadb6acfab2020-11-06 07:06:39 -080084 );
85
Mark Branstad4e4faa02020-12-03 10:52:47 -080086
Mark Branstad1e7fa2e2021-02-18 08:41:37 -080087 prim_alert_sender #(
88 .AsyncOn(AlertAsyncOn[0]),
89 .IsFatal(1)
90 ) u_prim_alert_sender (
91 .clk_i,
92 .rst_ni,
Michael Schaffner3169df82021-06-07 15:37:15 -070093 .alert_test_i ( alert_test ),
94 .alert_req_i ( alert || intg_err_alert ),
95 .alert_ack_o ( ),
96 .alert_state_o ( ),
97 .alert_rx_i ( alert_rx_i[0] ),
98 .alert_tx_o ( alert_tx_o[0] )
Mark Branstad1e7fa2e2021-02-18 08:41:37 -080099 );
100
Mark Branstad4e4faa02020-12-03 10:52:47 -0800101 // Assertions
102
103 `ASSERT_KNOWN(TlDValidKnownO_A, tl_o.d_valid)
104 `ASSERT_KNOWN(TlAReadyKnownO_A, tl_o.a_ready)
105
106 // Endpoint Asserts
107 for (genvar i = 0; i < NumEndPoints; i = i+1) begin : gen_edn_if_asserts
108 `ASSERT_KNOWN(EdnEndPointOut_A, edn_o[i])
109 end : gen_edn_if_asserts
110
111 // CSRNG Asserts
112 `ASSERT_KNOWN(CsrngAppIfOut_A, csrng_cmd_o)
113
Mark Branstad1e7fa2e2021-02-18 08:41:37 -0800114 // Alerts
115 `ASSERT_KNOWN(AlertTxKnownO_A, alert_tx_o)
116
Mark Branstad4e4faa02020-12-03 10:52:47 -0800117 // Interrupt Asserts
118 `ASSERT_KNOWN(IntrEdnCmdReqDoneKnownO_A, intr_edn_cmd_req_done_o)
Mark Branstad1e7fa2e2021-02-18 08:41:37 -0800119 `ASSERT_KNOWN(IntrEdnFifoErrKnownO_A, intr_edn_fatal_err_o)
Mark Branstad4e4faa02020-12-03 10:52:47 -0800120
Mark Branstadb6acfab2020-11-06 07:06:39 -0800121endmodule