|  | // Copyright lowRISC contributors. | 
|  | // Licensed under the Apache License, Version 2.0, see LICENSE for details. | 
|  | // SPDX-License-Identifier: Apache-2.0 | 
|  | { name:               "csrng", | 
|  | human_name:         "Cryptographically Secure Random Number Generator", | 
|  | one_line_desc:      "Takes entropy bits to produce cryptographically secure random numbers for consumption by hardware blocks and by software", | 
|  | one_paragraph_desc: ''' | 
|  | Cryptographically Secure Random Number Generator (CSRNG) consumes random seeds from Entropy Source and generates random numbers for separate application interface contexts, such as multiple entropy distribution networks and software. | 
|  | When used in fully deterministic mode, the random numbers are generated just based on seeds provided by the application input. | 
|  | CSRNG targets compliance with [BSI's AIS31 recommendations for Common Criteria (CC)][bsi-ais31] as well as NIST's [SP 800-90A][nist-sp-800-90a] and [SP 800-90C][nist-sp-800-90c]. | 
|  | Internally, it uses the CTR_DRBG construction with a security strength of 256 bits as specified by [SP 800-90A][nist-sp-800-90a]. | 
|  |  | 
|  | [bsi-ais31]: https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Zertifizierung/Interpretationen/AIS_31_Functionality_classes_for_random_number_generators_e.pdf | 
|  | [nist-sp-800-90a]: https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-90Ar1.pdf | 
|  | [nist-sp-800-90c]: https://csrc.nist.gov/CSRC/media/Publications/sp/800-90c/draft/documents/sp800_90c_second_draft.pdf | 
|  | ''' | 
|  | design_spec:        "../doc", | 
|  | dv_doc:             "../doc/dv", | 
|  | hw_checklist:       "../doc/checklist", | 
|  | sw_checklist:       "/sw/device/lib/dif/dif_csrng", | 
|  | version:            "1.0", | 
|  | life_stage:         "L1", | 
|  | design_stage:       "D2S", | 
|  | verification_stage: "V2S", | 
|  | dif_stage:          "S2", | 
|  | clocking: [{clock: "clk_i", reset: "rst_ni"}], | 
|  | bus_interfaces: [ | 
|  | { protocol: "tlul", direction: "device" } | 
|  | ], | 
|  | param_list: [ | 
|  | // Random netlist constants | 
|  | { name:      "RndCnstCsKeymgrDivNonProduction", | 
|  | desc:      "Compile-time random bits for csrng state group diversification value", | 
|  | type:      "csrng_pkg::cs_keymgr_div_t", | 
|  | randcount: "384", | 
|  | randtype:  "data", | 
|  | } | 
|  | { name:      "RndCnstCsKeymgrDivProduction", | 
|  | desc:      "Compile-time random bits for csrng state group diversification value", | 
|  | type:      "csrng_pkg::cs_keymgr_div_t", | 
|  | randcount: "384", | 
|  | randtype:  "data", | 
|  | } | 
|  | // Regular parameters | 
|  | { name: "SBoxImpl", | 
|  | type: "aes_pkg::sbox_impl_e", | 
|  | default: "aes_pkg::SBoxImplCanright", | 
|  | desc: "Selection of the S-Box implementation. See aes_pkg.sv.", | 
|  | local: "false", | 
|  | expose: "true" | 
|  | }, | 
|  | ], | 
|  | interrupt_list: [ | 
|  | { name: "cs_cmd_req_done" | 
|  | desc: "Asserted when a command request is completed."} | 
|  | { name: "cs_entropy_req" | 
|  | desc: "Asserted when a request for entropy has been made."} | 
|  | { name: "cs_hw_inst_exc" | 
|  | desc: "Asserted when a hardware-attached CSRNG instance encounters a command exception"} | 
|  | { name: "cs_fatal_err" | 
|  | desc: "Asserted when a FIFO error or a fatal alert occurs. Check the !!ERR_CODE register to get more information."} | 
|  | ], | 
|  | alert_list: [ | 
|  | { name: "recov_alert", | 
|  | desc: "This alert is triggered when a recoverable alert occurs.  Check the !!RECOV_ALERT_STS register to get more information." | 
|  | } | 
|  | { name: "fatal_alert", | 
|  | desc: ''' | 
|  | This alert triggers (i) if an illegal state machine state is reached, or | 
|  | (ii) if an AES fatal alert condition occurs, or (iii) if a fatal integrity | 
|  | failure is detected on the TL-UL bus. | 
|  | ''' | 
|  | } | 
|  | ], | 
|  | inter_signal_list: [ | 
|  | { struct:  "csrng" | 
|  | type:    "req_rsp" | 
|  | name:    "csrng_cmd" | 
|  | act:     "rsp" | 
|  | package: "csrng_pkg" | 
|  | width:   "2", | 
|  | } | 
|  | { struct:  "entropy_src_hw_if" | 
|  | type:    "req_rsp", | 
|  | name:    "entropy_src_hw_if" | 
|  | act:     "req" | 
|  | package: "entropy_src_pkg" | 
|  | } | 
|  | { struct:  "cs_aes_halt" | 
|  | type:    "req_rsp", | 
|  | name:    "cs_aes_halt" | 
|  | act:     "rsp" | 
|  | package: "entropy_src_pkg" | 
|  | } | 
|  | { struct:  "mubi8" | 
|  | type:    "uni" | 
|  | name:    "otp_en_csrng_sw_app_read" | 
|  | act:     "rcv" | 
|  | package: "prim_mubi_pkg" | 
|  | } | 
|  | { struct:  "lc_tx" | 
|  | type:    "uni" | 
|  | name:    "lc_hw_debug_en" | 
|  | act:     "rcv" | 
|  | default: "lc_ctrl_pkg::Off" | 
|  | package: "lc_ctrl_pkg" | 
|  | } | 
|  | ], | 
|  | countermeasures: [ | 
|  | { name: "CONFIG.REGWEN" | 
|  | desc: "Registers are protected from writes." | 
|  | } | 
|  | { name: "CONFIG.MUBI" | 
|  | desc: "Registers have multi-bit encoded fields." | 
|  | } | 
|  | { name: "INTERSIG.MUBI" | 
|  | desc: "OTP signal used to enable software access to registers." | 
|  | } | 
|  | { name: "MAIN_SM.FSM.SPARSE" | 
|  | desc: "The CSRNG main state machine uses a sparse state encoding." | 
|  | } | 
|  | { name: "UPDATE.FSM.SPARSE" | 
|  | desc: "The CSRNG update state machine uses a sparse state encoding." | 
|  | } | 
|  | { name: "BLK_ENC.FSM.SPARSE" | 
|  | desc: "The CSRNG block encrypt state machine uses a sparse state encoding." | 
|  | } | 
|  | { name: "OUTBLK.FSM.SPARSE" | 
|  | desc: "The CSRNG block output state machine uses a sparse state encoding." | 
|  | } | 
|  | { name: "GEN_CMD.CTR.REDUN" | 
|  | desc: "The generate command uses a counter that is protected by a second counter that counts in the opposite direction." | 
|  | } | 
|  | { name: "DRBG_UPD.CTR.REDUN" | 
|  | desc: "The ctr_drbg update algorthm uses a counter that is protected by a second counter that counts in the opposite direction." | 
|  | } | 
|  | { name: "DRBG_GEN.CTR.REDUN" | 
|  | desc: "The ctr_drbg generate algorthm uses a counter that is protected by a second counter that counts in the opposite direction." | 
|  | } | 
|  | { name: "CTRL.MUBI" | 
|  | desc: "Multi-bit field used for selection control." | 
|  | } | 
|  | { name: "MAIN_SM.CTR.LOCAL_ESC" | 
|  | desc: "A mismatch detected inside any CSRNG counter moves the  main state machine into a terminal error state." | 
|  | } | 
|  | { name: "CONSTANTS.LC_GATED" | 
|  | desc: "Seed diversification based on the lifecycle state." | 
|  | } | 
|  | { name: "SW_GENBITS.BUS.CONSISTENCY" | 
|  | desc: "Comparison on successive bus values for genbits returned on the software channel." | 
|  | } | 
|  | { name: "TILE_LINK.BUS.INTEGRITY" | 
|  | desc: "Tilelink end-to-end bus integrity scheme." | 
|  | } | 
|  | { name: "AES_CIPHER.FSM.SPARSE", | 
|  | desc: ''' | 
|  | The AES cipher core FSM uses a sparse state encoding. | 
|  | See the AES module documentation for AES-specific countermeasures. | 
|  | ''' | 
|  | } | 
|  | { name: "AES_CIPHER.FSM.REDUN", | 
|  | desc: ''' | 
|  | The AES cipher core FSM uses multiple, independent logic rails. | 
|  | See the AES module documentation for AES-specific countermeasures. | 
|  | ''' | 
|  | } | 
|  | { name: "AES_CIPHER.CTRL.SPARSE", | 
|  | desc: ''' | 
|  | Critical control signals for the AES cipher core such as handshake and MUX control signals use sparse encodings. | 
|  | See the AES module documentation for AES-specific countermeasures. | 
|  | ''' | 
|  | } | 
|  | { name: "AES_CIPHER.FSM.LOCAL_ESC", | 
|  | desc: ''' | 
|  | The AES cipher core FSM moves to a terminal error state upon local escalation. | 
|  | Can be triggered by AES_CIPHER.FSM.SPARSE, AES_CIPHER.FSM.REDUN, AES_CIPHER.CTR.REDUN and AES_CIPHER.CTRL.SPARSE. | 
|  | See the AES module documentation for AES-specific countermeasures. | 
|  | ''' | 
|  | } | 
|  | { name: "AES_CIPHER.CTR.REDUN", | 
|  | desc: ''' | 
|  | The AES round counter inside the AES cipher core FSM is protected with multiple, independent logic rails. | 
|  | See the AES module documentation for AES-specific countermeasures. | 
|  | ''' | 
|  | } | 
|  | { name: "AES_CIPHER.DATA_REG.LOCAL_ESC", | 
|  | desc: ''' | 
|  | Upon local escalation, the AES cipher core doesn't output intermediate state. | 
|  | See the AES module documentation for AES-specific countermeasures. | 
|  | ''' | 
|  | } | 
|  | ], | 
|  | regwidth: "32", | 
|  | registers: [ | 
|  | { name: "REGWEN", | 
|  | desc: "Register write enable for all control registers", | 
|  | swaccess: "rw0c", | 
|  | hwaccess: "none", | 
|  | fields: [ | 
|  | { | 
|  | bits: "0", | 
|  | desc: ''' When true, all writeable registers can be modified. | 
|  | When false, they become read-only. | 
|  | ''' | 
|  | resval: 1 | 
|  | } | 
|  | ] | 
|  | }, | 
|  | { name: "CTRL", | 
|  | desc: "Control register", | 
|  | swaccess: "rw", | 
|  | hwaccess: "hro", | 
|  | regwen: "REGWEN", | 
|  | tags: [// Keep HW from affecting other registers. | 
|  | "excl:CsrAllTests:CsrExclWrite"] | 
|  | fields: [ | 
|  | { | 
|  | bits: "3:0", | 
|  | name: "ENABLE", | 
|  | mubi: true | 
|  | desc: ''' | 
|  | Setting this field to kMultiBitBool4True will enable the CSRNG module. The modules | 
|  | of the entropy complex may only be enabled and disabled in a specific order, see | 
|  | Programmers Guide for details. | 
|  | ''' | 
|  | resval: false | 
|  | }, | 
|  | { | 
|  | bits: "7:4", | 
|  | name: "SW_APP_ENABLE", | 
|  | mubi: true | 
|  | desc: ''' | 
|  | Setting this field to kMultiBitBool4True will enable reading from the !!GENBITS register. | 
|  | This application interface for software (register based) will be enabled | 
|  | only if the otp_en_csrng_sw_app_read input vector is set to the enable encoding. | 
|  | ''' | 
|  | resval: false | 
|  | }, | 
|  | { | 
|  | bits: "11:8", | 
|  | name: "READ_INT_STATE", | 
|  | mubi: true | 
|  | desc: ''' | 
|  | Setting this field to kMultiBitBool4True will enable reading from the !!INT_STATE_VAL register. | 
|  | Reading the internal state of the enable instances will be enabled | 
|  | only if the otp_en_csrng_sw_app_read input vector is set to the enable encoding. | 
|  | ''' | 
|  | resval: false | 
|  | }, | 
|  | ] | 
|  | }, | 
|  | { | 
|  | name: "CMD_REQ", | 
|  | desc: "Command request register", | 
|  | swaccess: "wo", | 
|  | hwaccess: "hro", | 
|  | hwqe: "true", | 
|  | fields: [ | 
|  | { bits: "31:0", | 
|  | name: "CMD_REQ", | 
|  | desc: ''' | 
|  | Writing this request with defined CSRNG commands will initiate all | 
|  | possible CSRNG actions. The application interface must wait for the | 
|  | "ack" to return before issuing new commands. | 
|  | ''' | 
|  | } | 
|  | ] | 
|  | }, | 
|  | { | 
|  | name: "SW_CMD_STS", | 
|  | desc: "Application interface command status register", | 
|  | swaccess: "ro", | 
|  | hwaccess: "hwo", | 
|  | tags: [// Internal HW can modify status register | 
|  | "excl:CsrNonInitTests:CsrExclCheck"] | 
|  | fields: [ | 
|  | { bits: "0", | 
|  | name: "CMD_RDY", | 
|  | desc: '''This bit indicates when the command interface is ready to accept commands. | 
|  | ''' | 
|  | resval: "1" | 
|  | } | 
|  | { bits: "1", | 
|  | name: "CMD_STS", | 
|  | desc: ''' | 
|  | This one bit field is the status code returned with the application command ack. | 
|  | It is updated each time a command ack is asserted on the internal application | 
|  | interface for software use. | 
|  | 0b0: Request completed successfully | 
|  | 0b1: Request completed with an error | 
|  | ''' | 
|  | resval: "0" | 
|  | } | 
|  | ] | 
|  | }, | 
|  | { | 
|  | name: "GENBITS_VLD", | 
|  | desc: "Generate bits returned valid register", | 
|  | swaccess: "ro", | 
|  | hwaccess: "hwo", | 
|  | hwext: "true", | 
|  | fields: [ | 
|  | { bits: "0", | 
|  | name: "GENBITS_VLD", | 
|  | desc: "This bit is set when genbits are available on this application interface." | 
|  | } | 
|  | { bits: "1", | 
|  | name: "GENBITS_FIPS", | 
|  | desc: "This bit is set when genbits are FIPS/CC compliant." | 
|  | } | 
|  | ] | 
|  | }, | 
|  | { | 
|  | name: "GENBITS", | 
|  | desc: "Generate bits returned register", | 
|  | swaccess: "ro", | 
|  | hwaccess: "hrw", | 
|  | hwext: "true", | 
|  | hwre: "true", | 
|  | fields: [ | 
|  | { bits: "31:0", | 
|  | name: "GENBITS", | 
|  | desc: ''' | 
|  | Reading this register will get the generated bits that were requested with | 
|  | the generate request. This register must be four times for each request | 
|  | number made. For example, a application command generate request with | 
|  | a `creq` value of 4 requires this register to be read 16 times to get all | 
|  | of the data out of the FIFO path. | 
|  | ''' | 
|  | } | 
|  | ] | 
|  | }, | 
|  | { name: "INT_STATE_NUM", | 
|  | desc: "Internal state number register", | 
|  | swaccess: "rw", | 
|  | hwaccess: "hro", | 
|  | hwqe: "true", | 
|  | fields: [ | 
|  | { | 
|  | bits: "3:0", | 
|  | name: "INT_STATE_NUM", | 
|  | desc: ''' | 
|  | Setting this field will set the number for which internal state can be | 
|  | selected for a read access. Up to 16 internal state values can be chosen | 
|  | from this register. The actual number of valid internal state fields | 
|  | is set by parameter NHwApps plus 1 software app. For those selections that point | 
|  | to reserved locations (greater than NHwApps plus 1), the returned value | 
|  | will be zero. Writing this register will also reset the internal read | 
|  | pointer for the !!INT_STATE_VAL register. | 
|  | Note: This register should be read back after being written to ensure | 
|  | that the !!INT_STATE_VAL read back is accurate. | 
|  | ''' | 
|  | }, | 
|  | ] | 
|  | }, | 
|  | { | 
|  | name: "INT_STATE_VAL", | 
|  | desc: "Internal state read access register", | 
|  | swaccess: "ro", | 
|  | hwaccess: "hrw", | 
|  | hwext: "true", | 
|  | hwre: "true", | 
|  | fields: [ | 
|  | { bits: "31:0", | 
|  | name: "INT_STATE_VAL", | 
|  | desc: ''' | 
|  | Reading this register will dump out the contents of the selected internal state field. | 
|  | Since the internal state field is 448 bits wide, it will require 14 reads from this | 
|  | register to gather the entire field. Once 14 reads have been done, the internal read | 
|  | pointer (selects 32 bits of the 448 bit field) will reset to zero. The !!INT_STATE_NUM | 
|  | can be re-written at this time (internal read pointer is also reset), and then | 
|  | another internal state field can be read. | 
|  | ''' | 
|  | } | 
|  | ] | 
|  | }, | 
|  | { | 
|  | name: "HW_EXC_STS", | 
|  | desc: "Hardware instance exception status register", | 
|  | swaccess: "rw0c", | 
|  | hwaccess: "hwo", | 
|  | fields: [ | 
|  | { bits: "15:0", | 
|  | name: "HW_EXC_STS", | 
|  | desc: ''' | 
|  | Reading this register indicates whether one of the CSRNG HW instances has | 
|  | encountered an exception.  Each bit corresponds to a particular hardware | 
|  | instance, with bit 0 corresponding to instance HW0, bit 1 corresponding | 
|  | to instance HW1, and so forth. (To monitor the status of requests made | 
|  | to the SW instance, check the !!SW_CMD_STS register). Writing a zero to this register | 
|  | resets the status bits. | 
|  | ''' | 
|  | } | 
|  | ] | 
|  | }, | 
|  | { | 
|  | name: "RECOV_ALERT_STS", | 
|  | desc: "Recoverable alert status register", | 
|  | swaccess: "rw0c", | 
|  | hwaccess: "hwo", | 
|  | fields: [ | 
|  | { bits: "0", | 
|  | name: "ENABLE_FIELD_ALERT", | 
|  | desc: ''' | 
|  | This bit is set when the ENABLE field in the !!CTRL register is set to | 
|  | a value other than kMultiBitBool4True or kMultiBitBool4False. | 
|  | Writing a zero resets this status bit. | 
|  | ''' | 
|  | } | 
|  | { bits: "1", | 
|  | name: "SW_APP_ENABLE_FIELD_ALERT", | 
|  | desc: ''' | 
|  | This bit is set when the SW_APP_ENABLE field in the !!CTRL register is set to | 
|  | a value other than kMultiBitBool4True or kMultiBitBool4False. | 
|  | Writing a zero resets this status bit. | 
|  | ''' | 
|  | } | 
|  | { bits: "2", | 
|  | name: "READ_INT_STATE_FIELD_ALERT", | 
|  | desc: ''' | 
|  | This bit is set when the READ_INT_STATE field in the !!CTRL register is set to | 
|  | a value other than kMultiBitBool4True or kMultiBitBool4False. | 
|  | Writing a zero resets this status bit. | 
|  | ''' | 
|  | } | 
|  | { bits: "3", | 
|  | name: "ACMD_FLAG0_FIELD_ALERT", | 
|  | desc: ''' | 
|  | This bit is set when the FLAG0 field in the Application Command is set to | 
|  | a value other than kMultiBitBool4True or kMultiBitBool4False. | 
|  | Writing a zero resets this status bit. | 
|  | ''' | 
|  | } | 
|  | { bits: "12", | 
|  | name: "CS_BUS_CMP_ALERT", | 
|  | desc: ''' | 
|  | This bit is set when the software application port genbits bus value is equal | 
|  | to the prior valid value on the bus, indicating a possible attack. | 
|  | Writing a zero resets this status bit. | 
|  | ''' | 
|  | } | 
|  | { bits: "13", | 
|  | name: "CS_MAIN_SM_ALERT", | 
|  | desc: ''' | 
|  | This bit is set when an unsupported/illegal CSRNG command is being processed. | 
|  | The main FSM will hang unless the module enable field is set to the disabled state. | 
|  | ''' | 
|  | } | 
|  | ] | 
|  | }, | 
|  | { | 
|  | name: "ERR_CODE", | 
|  | desc: "Hardware detection of error conditions status register", | 
|  | swaccess: "ro", | 
|  | hwaccess: "hwo", | 
|  | fields: [ | 
|  | { bits: "0", | 
|  | name: "SFIFO_CMD_ERR", | 
|  | desc: ''' | 
|  | This bit will be set to one when an error has been detected for the | 
|  | command stage command FIFO. The type of error is reflected in the type status | 
|  | bits (bits 28 through 30 of this register). | 
|  | This bit will stay set until the next reset. | 
|  | ''' | 
|  | } | 
|  | { bits: "1", | 
|  | name: "SFIFO_GENBITS_ERR", | 
|  | desc: ''' | 
|  | This bit will be set to one when an error has been detected for the | 
|  | command stage genbits FIFO. The type of error is reflected in the type status | 
|  | bits (bits 28 through 30 of this register). | 
|  | This bit will stay set until the next reset. | 
|  | ''' | 
|  | } | 
|  | { bits: "2", | 
|  | name: "SFIFO_CMDREQ_ERR", | 
|  | desc: ''' | 
|  | This bit will be set to one when an error has been detected for the | 
|  | cmdreq FIFO. The type of error is reflected in the type status | 
|  | bits (bits 28 through 30 of this register). | 
|  | This bit will stay set until the next reset. | 
|  | ''' | 
|  | } | 
|  | { bits: "3", | 
|  | name: "SFIFO_RCSTAGE_ERR", | 
|  | desc: ''' | 
|  | This bit will be set to one when an error has been detected for the | 
|  | rcstage FIFO. The type of error is reflected in the type status | 
|  | bits (bits 28 through 30 of this register). | 
|  | This bit will stay set until the next reset. | 
|  | ''' | 
|  | } | 
|  | { bits: "4", | 
|  | name: "SFIFO_KEYVRC_ERR", | 
|  | desc: ''' | 
|  | This bit will be set to one when an error has been detected for the | 
|  | keyvrc FIFO. The type of error is reflected in the type status | 
|  | bits (bits 28 through 30 of this register). | 
|  | This bit will stay set until the next reset. | 
|  | ''' | 
|  | } | 
|  | { bits: "5", | 
|  | name: "SFIFO_UPDREQ_ERR", | 
|  | desc: ''' | 
|  | This bit will be set to one when an error has been detected for the | 
|  | updreq FIFO. The type of error is reflected in the type status | 
|  | bits (bits 28 through 30 of this register). | 
|  | This bit will stay set until the next reset. | 
|  | ''' | 
|  | } | 
|  | { bits: "6", | 
|  | name: "SFIFO_BENCREQ_ERR", | 
|  | desc: ''' | 
|  | This bit will be set to one when an error has been detected for the | 
|  | bencreq FIFO. The type of error is reflected in the type status | 
|  | bits (bits 28 through 30 of this register). | 
|  | This bit will stay set until the next reset. | 
|  | ''' | 
|  | } | 
|  | { bits: "7", | 
|  | name: "SFIFO_BENCACK_ERR", | 
|  | desc: ''' | 
|  | This bit will be set to one when an error has been detected for the | 
|  | bencack FIFO. The type of error is reflected in the type status | 
|  | bits (bits 28 through 30 of this register). | 
|  | This bit will stay set until the next reset. | 
|  | ''' | 
|  | } | 
|  | { bits: "8", | 
|  | name: "SFIFO_PDATA_ERR", | 
|  | desc: ''' | 
|  | This bit will be set to one when an error has been detected for the | 
|  | pdata FIFO. The type of error is reflected in the type status | 
|  | bits (bits 28 through 30 of this register). | 
|  | This bit will stay set until the next reset. | 
|  | ''' | 
|  | } | 
|  | { bits: "9", | 
|  | name: "SFIFO_FINAL_ERR", | 
|  | desc: ''' | 
|  | This bit will be set to one when an error has been detected for the | 
|  | final FIFO. The type of error is reflected in the type status | 
|  | bits (bits 28 through 30 of this register). | 
|  | This bit will stay set until the next reset. | 
|  | ''' | 
|  | } | 
|  | { bits: "10", | 
|  | name: "SFIFO_GBENCACK_ERR", | 
|  | desc: ''' | 
|  | This bit will be set to one when an error has been detected for the | 
|  | gbencack FIFO. The type of error is reflected in the type status | 
|  | bits (bits 28 through 30 of this register). | 
|  | This bit will stay set until the next reset. | 
|  | ''' | 
|  | } | 
|  | { bits: "11", | 
|  | name: "SFIFO_GRCSTAGE_ERR", | 
|  | desc: ''' | 
|  | This bit will be set to one when an error has been detected for the | 
|  | grcstage FIFO. The type of error is reflected in the type status | 
|  | bits (bits 28 through 30 of this register). | 
|  | This bit will stay set until the next reset. | 
|  | ''' | 
|  | } | 
|  | { bits: "12", | 
|  | name: "SFIFO_GGENREQ_ERR", | 
|  | desc: ''' | 
|  | This bit will be set to one when an error has been detected for the | 
|  | ggenreq FIFO. The type of error is reflected in the type status | 
|  | bits (bits 28 through 30 of this register). | 
|  | This bit will stay set until the next reset. | 
|  | ''' | 
|  | } | 
|  | { bits: "13", | 
|  | name: "SFIFO_GADSTAGE_ERR", | 
|  | desc: ''' | 
|  | This bit will be set to one when an error has been detected for the | 
|  | gadstage FIFO. The type of error is reflected in the type status | 
|  | bits (bits 28 through 30 of this register). | 
|  | This bit will stay set until the next reset. | 
|  | ''' | 
|  | } | 
|  | { bits: "14", | 
|  | name: "SFIFO_GGENBITS_ERR", | 
|  | desc: ''' | 
|  | This bit will be set to one when an error has been detected for the | 
|  | ggenbits FIFO. The type of error is reflected in the type status | 
|  | bits (bits 28 through 30 of this register). | 
|  | This bit will stay set until the next reset. | 
|  | ''' | 
|  | } | 
|  | { bits: "15", | 
|  | name: "SFIFO_BLKENC_ERR", | 
|  | desc: ''' | 
|  | This bit will be set to one when an error has been detected for the | 
|  | blkenc FIFO. The type of error is reflected in the type status | 
|  | bits (bits 28 through 30 of this register). | 
|  | This bit will stay set until the next reset. | 
|  | ''' | 
|  | } | 
|  | { bits: "20", | 
|  | name: "CMD_STAGE_SM_ERR", | 
|  | desc: ''' | 
|  | This bit will be set to one when an illegal state has been detected for the | 
|  | command stage state machine. This error will signal a fatal alert, and also | 
|  | an interrupt if enabled. | 
|  | This bit will stay set until the next reset. | 
|  | ''' | 
|  | } | 
|  | { bits: "21", | 
|  | name: "MAIN_SM_ERR", | 
|  | desc: ''' | 
|  | This bit will be set to one when an illegal state has been detected for the | 
|  | main state machine. This error will signal a fatal alert, and also | 
|  | an interrupt if enabled. | 
|  | This bit will stay set until the next reset. | 
|  | ''' | 
|  | } | 
|  | { bits: "22", | 
|  | name: "DRBG_GEN_SM_ERR", | 
|  | desc: ''' | 
|  | This bit will be set to one when an illegal state has been detected for the | 
|  | ctr_drbg gen state machine. This error will signal a fatal alert, and also | 
|  | an interrupt if enabled. | 
|  | This bit will stay set until the next reset. | 
|  | ''' | 
|  | } | 
|  | { bits: "23", | 
|  | name: "DRBG_UPDBE_SM_ERR", | 
|  | desc: ''' | 
|  | This bit will be set to one when an illegal state has been detected for the | 
|  | ctr_drbg update block encode state machine. This error will signal a fatal alert, and also | 
|  | an interrupt if enabled. | 
|  | This bit will stay set until the next reset. | 
|  | ''' | 
|  | } | 
|  | { bits: "24", | 
|  | name: "DRBG_UPDOB_SM_ERR", | 
|  | desc: ''' | 
|  | This bit will be set to one when an illegal state has been detected for the | 
|  | ctr_drbg update out block state machine. This error will signal a fatal alert, and also | 
|  | an interrupt if enabled. | 
|  | This bit will stay set until the next reset. | 
|  | ''' | 
|  | } | 
|  | { bits: "25", | 
|  | name: "AES_CIPHER_SM_ERR", | 
|  | desc: ''' | 
|  | This bit will be set to one when an AES fatal error has been detected. | 
|  | This error will signal a fatal alert, and also | 
|  | an interrupt if enabled. | 
|  | This bit will stay set until the next reset. | 
|  | ''' | 
|  | } | 
|  | { bits: "26", | 
|  | name: "CMD_GEN_CNT_ERR", | 
|  | desc: ''' | 
|  | This bit will be set to one when a mismatch in any of the hardened counters | 
|  | has been detected. | 
|  | This error will signal a fatal alert, and also | 
|  | an interrupt if enabled. | 
|  | This bit will stay set until the next reset. | 
|  | ''' | 
|  | } | 
|  | { bits: "28", | 
|  | name: "FIFO_WRITE_ERR", | 
|  | desc: ''' | 
|  | This bit will be set to one when any of the source bits (bits 0 through 15 of this | 
|  | this register) are asserted as a result of an error pulse generated from | 
|  | any full FIFO that has been recieved a write pulse. | 
|  | This bit will stay set until the next reset. | 
|  | ''' | 
|  | } | 
|  | { bits: "29", | 
|  | name: "FIFO_READ_ERR", | 
|  | desc: ''' | 
|  | This bit will be set to one when any of the source bits (bits 0 through 15 of this | 
|  | this register) are asserted as a result of an error pulse generated from | 
|  | any empty FIFO that has recieved a read pulse. | 
|  | This bit will stay set until the next reset. | 
|  | ''' | 
|  | } | 
|  | { bits: "30", | 
|  | name: "FIFO_STATE_ERR", | 
|  | desc: ''' | 
|  | This bit will be set to one when any of the source bits (bits 0 through 15 of this | 
|  | this register) are asserted as a result of an error pulse generated from | 
|  | any FIFO where both the empty and full status bits are set. | 
|  | This bit will stay set until the next reset. | 
|  | ''' | 
|  | } | 
|  | ] | 
|  | }, | 
|  | { name: "ERR_CODE_TEST", | 
|  | desc: "Test error conditions register", | 
|  | swaccess: "rw", | 
|  | hwaccess: "hro", | 
|  | hwqe: "true", | 
|  | regwen: "REGWEN", | 
|  | tags: [// Keep HW from affecting other registers. | 
|  | "excl:CsrAllTests:CsrExclWrite"] | 
|  | fields: [ | 
|  | { | 
|  | bits: "4:0", | 
|  | name: "ERR_CODE_TEST", | 
|  | desc: ''' | 
|  | Setting this field will set the bit number for which an error | 
|  | will be forced in the hardware. This bit number is that same one | 
|  | found in the !!ERR_CODE register. The action of writing this | 
|  | register will force an error pulse. The sole purpose of this | 
|  | register is to test that any error properly propagates to either | 
|  | an interrupt or an alert. | 
|  | ''' | 
|  | }, | 
|  | ] | 
|  | }, | 
|  | { name: "MAIN_SM_STATE", | 
|  | desc: "Main state machine state debug register", | 
|  | swaccess: "ro", | 
|  | hwaccess: "hwo", | 
|  | fields: [ | 
|  | { bits: "7:0", | 
|  | name: "MAIN_SM_STATE", | 
|  | desc: '''This is the state of the CSRNG main state machine. | 
|  | See the RTL file `csrng_main_sm` for the meaning of the values. | 
|  | ''' | 
|  | resval: 0x4e | 
|  | } | 
|  | ] | 
|  | }, | 
|  | ] | 
|  | } |