|  | // Copyright lowRISC contributors. | 
|  | // Licensed under the Apache License, Version 2.0, see LICENSE for details. | 
|  | // SPDX-License-Identifier: Apache-2.0 | 
|  | // | 
|  |  | 
|  | package csrng_pkg; | 
|  |  | 
|  | //------------------------- | 
|  | // Application Interfaces | 
|  | //------------------------- | 
|  |  | 
|  | parameter int unsigned GENBITS_BUS_WIDTH = 128; | 
|  | parameter int unsigned CSRNG_CMD_WIDTH = 32; | 
|  | parameter int unsigned FIPS_GENBITS_BUS_WIDTH = entropy_src_pkg::FIPS_BUS_WIDTH + | 
|  | GENBITS_BUS_WIDTH; | 
|  | parameter int unsigned MainSmStateWidth = 8; | 
|  |  | 
|  | // instantiation interface | 
|  | typedef struct packed { | 
|  | logic                       csrng_req_valid; | 
|  | logic [CSRNG_CMD_WIDTH-1:0] csrng_req_bus; | 
|  | logic                       genbits_ready; | 
|  | } csrng_req_t; | 
|  |  | 
|  | typedef struct packed { | 
|  | logic                         csrng_req_ready; | 
|  | logic                         csrng_rsp_ack; | 
|  | logic                         csrng_rsp_sts; | 
|  | logic                         genbits_valid; | 
|  | logic                         genbits_fips; | 
|  | logic [GENBITS_BUS_WIDTH-1:0] genbits_bus; | 
|  | } csrng_rsp_t; | 
|  |  | 
|  | parameter csrng_req_t CSRNG_REQ_DEFAULT = '{default: '0}; | 
|  | parameter csrng_rsp_t CSRNG_RSP_DEFAULT = '{default: '0}; | 
|  |  | 
|  | typedef enum logic [2:0] { | 
|  | INV  = 3'h0, | 
|  | INS  = 3'h1, | 
|  | RES  = 3'h2, | 
|  | GEN  = 3'h3, | 
|  | UPD  = 3'h4, | 
|  | UNI  = 3'h5, | 
|  | GENB = 3'h6, | 
|  | GENU = 3'h7 | 
|  | } acmd_e; | 
|  |  | 
|  |  | 
|  | // Encoding generated with: | 
|  | // $ ./util/design/sparse-fsm-encode.py -d 3 -m 15 -n 8 \ | 
|  | //      -s 1300573258 --language=sv | 
|  | // | 
|  | // Hamming distance histogram: | 
|  | // | 
|  | //  0: -- | 
|  | //  1: -- | 
|  | //  2: -- | 
|  | //  3: |||||||||||||||||| (32.38%) | 
|  | //  4: |||||||||||||||||||| (35.24%) | 
|  | //  5: |||||||| (15.24%) | 
|  | //  6: |||||| (11.43%) | 
|  | //  7: ||| (5.71%) | 
|  | //  8: -- | 
|  | // | 
|  | // Minimum Hamming distance: 3 | 
|  | // Maximum Hamming distance: 7 | 
|  | // Minimum Hamming weight: 1 | 
|  | // Maximum Hamming weight: 7 | 
|  | // | 
|  | typedef    enum logic [MainSmStateWidth-1:0] { | 
|  | MainSmIdle          = 8'b01001110, // idle | 
|  | MainSmParseCmd      = 8'b10111011, // parse the cmd | 
|  | MainSmInstantPrep   = 8'b11000001, // instantiate prep | 
|  | MainSmInstantReq    = 8'b01010100, // instantiate request (takes adata or entropy) | 
|  | MainSmReseedPrep    = 8'b11011101, // reseed prep | 
|  | MainSmReseedReq     = 8'b01011011, // reseed request (takes adata and entropy and Key,V,RC) | 
|  | MainSmGeneratePrep  = 8'b11101111, // generate request (takes adata? and Key,V,RC) | 
|  | MainSmGenerateReq   = 8'b00100100, // generate request (takes adata? and Key,V,RC) | 
|  | MainSmUpdatePrep    = 8'b00110001, // update prep | 
|  | MainSmUpdateReq     = 8'b10010000, // update request (takes adata and Key,V,RC) | 
|  | MainSmUninstantPrep = 8'b11110110, // uninstantiate prep | 
|  | MainSmUninstantReq  = 8'b01100011, // uninstantiate request | 
|  | MainSmClrAData      = 8'b00000010, // clear out the additional data packer fifo | 
|  | MainSmCmdCompWait   = 8'b10111100, // wait for command to complete | 
|  | MainSmError         = 8'b01111000  // error state, results in fatal alert | 
|  | } main_sm_state_e; | 
|  |  | 
|  | parameter int CsKeymgrDivWidth = 384; | 
|  | typedef logic [CsKeymgrDivWidth-1:0] cs_keymgr_div_t; | 
|  |  | 
|  | endpackage : csrng_pkg |