blob: 4040067508f93f3a2ba59d4cd989822a820387d9 [file] [log] [blame]
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
//
// AES top-level wrapper
`include "prim_assert.sv"
module aes #(
parameter bit AES192Enable = 1, // Can be 0 (disable), or 1 (enable).
parameter SBoxImpl = "lut" // Can be "lut" (LUT-based SBox), or "canright".
) (
input clk_i,
input rst_ni,
// Entropy source interface
// TODO: This still needs to be connected.
// See https://github.com/lowRISC/opentitan/issues/1005
//output logic entropy_req_o,
//input logic entropy_ack_i,
//input logic [63:0] entropy_i,
// Bus interface
input tlul_pkg::tl_h2d_t tl_i,
output tlul_pkg::tl_d2h_t tl_o
);
import aes_reg_pkg::*;
aes_reg2hw_t reg2hw;
aes_hw2reg_t hw2reg;
logic prng_data_req;
logic prng_data_ack;
logic [63:0] prng_data;
logic prng_reseed_req;
logic prng_reseed_ack;
aes_reg_top aes_reg_top (
.clk_i,
.rst_ni,
.tl_i,
.tl_o,
.reg2hw,
.hw2reg,
.devmode_i(1'b1)
);
aes_core #(
.AES192Enable ( AES192Enable ),
.SBoxImpl ( SBoxImpl )
) aes_core (
.clk_i,
.rst_ni,
.prng_data_req_o ( prng_data_req ),
.prng_data_ack_i ( prng_data_ack ),
.prng_data_i ( prng_data ),
.prng_reseed_req_o ( prng_reseed_req ),
.prng_reseed_ack_i ( prng_reseed_ack ),
.reg2hw,
.hw2reg
);
aes_prng aes_prng (
.clk_i,
.rst_ni,
.data_req_i ( prng_data_req ),
.data_ack_o ( prng_data_ack ),
.data_o ( prng_data ),
.reseed_req_i ( prng_reseed_req ),
.reseed_ack_o ( prng_reseed_ack ),
// TODO: This still needs to be connected to the entropy source.
// See https://github.com/lowRISC/opentitan/issues/1005
.entropy_req_o( ),
.entropy_ack_i( 1'b1 ),
.entropy_i ( 64'hFEDCBA9876543210 )
);
// All outputs should have a known value after reset
`ASSERT_KNOWN(TlODValidKnown, tl_o.d_valid)
`ASSERT_KNOWN(TlOAReadyKnown, tl_o.a_ready)
endmodule