blob: dc2701777aa239d7926faacdc48cd1523bbf3692 [file] [log] [blame]
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
`include "prim_assert.sv"
package rom_ctrl_pkg;
parameter int AlertFatal = 0;
typedef struct packed {
prim_mubi_pkg::mubi4_t done;
prim_mubi_pkg::mubi4_t good;
} pwrmgr_data_t;
parameter pwrmgr_data_t PWRMGR_DATA_DEFAULT = '{
done: prim_mubi_pkg::MuBi4True,
good: prim_mubi_pkg::MuBi4True
};
typedef struct packed {
logic [255:0] data;
logic valid;
} keymgr_data_t;
//
// Encoding generated with:
// $ ./util/design/sparse-fsm-encode.py -d 3 -m 7 -n 6 -s 2 --language=sv
//
// Hamming distance histogram:
//
// 0: --
// 1: --
// 2: --
// 3: |||||||||||||||||||| (57.14%)
// 4: ||||||||||||||| (42.86%)
// 5: --
// 6: --
//
// Minimum Hamming distance: 3
// Maximum Hamming distance: 4
// Minimum Hamming weight: 1
// Maximum Hamming weight: 4
//
// However, we glom on an extra 4 bits to hold a mubi4_t that encodes "state == Done". The idea is
// that we can use them for the rom_select_bus_o signal without needing an intermediate 1-bit
// signal which would need burying.
typedef enum logic [9:0] {
ReadingLow = {6'b001100, prim_mubi_pkg::MuBi4False},
ReadingHigh = {6'b001011, prim_mubi_pkg::MuBi4False},
RomAhead = {6'b111001, prim_mubi_pkg::MuBi4False},
KmacAhead = {6'b100111, prim_mubi_pkg::MuBi4False},
Checking = {6'b010101, prim_mubi_pkg::MuBi4False},
Done = {6'b100000, prim_mubi_pkg::MuBi4True},
Invalid = {6'b010010, prim_mubi_pkg::MuBi4False}
} fsm_state_e;
endpackage