Entity: otbn
- File: otbn.sv
Diagram
Description
Copyright lowRISC contributors. Licensed under the Apache License, Version 2.0, see LICENSE for details. SPDX-License-Identifier: Apache-2.0 *
Generics
Generic name | Type | Value | Description |
---|---|---|---|
Stub | bit | 1'b0 | |
RegFile | regfile_e | RegFileFF | |
NumAlerts | logic [NumAlerts-1:0] | undefined | |
RndCnstUrndLfsrSeed | urnd_lfsr_seed_t | RndCnstUrndLfsrSeedDefault | Default seed and permutation for URND LFSR |
RndCnstUrndChunkLfsrPerm | urnd_chunk_lfsr_perm_t | RndCnstUrndChunkLfsrPermDefault | |
RndCnstOtbnKey | otp_ctrl_pkg::otbn_key_t | RndCnstOtbnKeyDefault | Default seed and nonce for scrambling |
RndCnstOtbnNonce | otp_ctrl_pkg::otbn_nonce_t | RndCnstOtbnNonceDefault |
Ports
Port name | Direction | Type | Description |
---|---|---|---|
clk_i | input | ||
rst_ni | input | ||
tl_i | input | ||
tl_o | output | ||
idle_o | output | Inter-module signals | |
idle_otp_o | output | ||
intr_done_o | output | Interrupts | |
alert_rx_i | input | [NumAlerts-1:0] | Alerts |
alert_tx_o | output | [NumAlerts-1:0] | |
lc_escalate_en_i | input | Lifecycle interface | |
ram_cfg_i | input | Memory configuration | |
clk_edn_i | input | EDN clock and interface | |
rst_edn_ni | input | ||
edn_rnd_o | output | ||
edn_rnd_i | input | ||
edn_urnd_o | output | ||
edn_urnd_i | input | ||
clk_otp_i | input | Key request to OTP (running on clk_fixed) | |
rst_otp_ni | input | ||
otbn_otp_key_o | output | ||
otbn_otp_key_i | input |
Signals
Name | Type | Description |
---|---|---|
rst_n | logic | |
start_d | logic | |
start_q | logic | |
busy_execute_d | logic | |
busy_execute_q | logic | |
done | logic | |
illegal_bus_access_d | logic | |
illegal_bus_access_q | logic | |
err_bits | err_bits_t | |
start_addr | logic [ImemAddrWidth-1:0] | |
reg2hw | otbn_reg2hw_t | |
hw2reg | otbn_hw2reg_t | |
tl_win_h2d | tlul_pkg::tl_h2d_t | |
tl_win_d2h | tlul_pkg::tl_d2h_t | |
lc_escalate_en | lc_ctrl_pkg::lc_tx_t | Lifecycle ================================================================== |
lifecycle_escalation | logic | Reduce the life cycle escalation signal to a single bit to be used within this cycle. |
imem_access_core | logic | Access select to IMEM: core (1), or bus (0) |
imem_req | logic | |
imem_write | logic | |
imem_index | logic [ImemIndexWidth-1:0] | |
imem_wdata | logic [38:0] | |
imem_wmask | logic [38:0] | |
imem_rdata | logic [38:0] | |
imem_rvalid | logic | |
imem_rerror_vec | logic [1:0] | |
imem_rerror | logic | |
imem_illegal_bus_access | logic | |
imem_req_core | logic | |
imem_write_core | logic | |
imem_index_core | logic [ImemIndexWidth-1:0] | |
imem_wdata_core | logic [31:0] | |
imem_rdata_core | logic [31:0] | |
imem_rvalid_core | logic | |
imem_rerror_core | logic | |
imem_req_bus | logic | |
imem_dummy_response_q | logic | |
imem_dummy_response_d | logic | |
imem_write_bus | logic | |
imem_index_bus | logic [ImemIndexWidth-1:0] | |
imem_wdata_bus | logic [38:0] | |
imem_wmask_bus | logic [38:0] | |
imem_rdata_bus | logic [38:0] | |
imem_rvalid_bus | logic | |
imem_rerror_bus | logic [1:0] | |
imem_bus_integrity_error | logic | |
imem_addr_core | logic [ImemAddrWidth-1:0] | |
unused_imem_addr_core_wordbits | logic [1:0] | |
otbn_imem_scramble_key | otp_ctrl_pkg::otbn_key_t | |
otbn_imem_scramble_nonce | otbn_imem_nonce_t | |
otbn_imem_scramble_valid | logic | |
unused_otbn_imem_scramble_key_seed_valid | logic | |
otbn_dmem_scramble_key | otp_ctrl_pkg::otbn_key_t | |
otbn_dmem_scramble_nonce | otbn_dmem_nonce_t | |
otbn_dmem_scramble_valid | logic | |
unused_otbn_dmem_scramble_key_seed_valid | logic | |
imem_gnt_bus | logic | IMEM access from main TL-UL bus |
dmem_access_core | logic | Access select to DMEM: core (1), or bus (0) |
dmem_req | logic | |
dmem_write | logic | |
dmem_index | logic [DmemIndexWidth-1:0] | |
dmem_wdata | logic [ExtWLEN-1:0] | |
dmem_wmask | logic [ExtWLEN-1:0] | |
dmem_rdata | logic [ExtWLEN-1:0] | |
dmem_rvalid | logic | |
dmem_rerror_vec | logic [BaseWordsPerWLEN*2-1:0] | |
dmem_rerror | logic | |
dmem_illegal_bus_access | logic | |
dmem_req_core | logic | |
dmem_write_core | logic | |
dmem_index_core | logic [DmemIndexWidth-1:0] | |
dmem_wdata_core | logic [ExtWLEN-1:0] | |
dmem_wmask_core | logic [ExtWLEN-1:0] | |
dmem_rmask_core_q | logic [BaseWordsPerWLEN-1:0] | |
dmem_rmask_core_d | logic [BaseWordsPerWLEN-1:0] | |
dmem_rdata_core | logic [ExtWLEN-1:0] | |
dmem_rvalid_core | logic | |
dmem_rerror_core | logic | |
dmem_req_bus | logic | |
dmem_dummy_response_q | logic | |
dmem_dummy_response_d | logic | |
dmem_write_bus | logic | |
dmem_index_bus | logic [DmemIndexWidth-1:0] | |
dmem_wdata_bus | logic [ExtWLEN-1:0] | |
dmem_wmask_bus | logic [ExtWLEN-1:0] | |
dmem_rdata_bus | logic [ExtWLEN-1:0] | |
dmem_rvalid_bus | logic | |
dmem_rerror_bus | logic [1:0] | |
dmem_bus_integrity_error | logic | |
dmem_addr_core | logic [DmemAddrWidth-1:0] | |
unused_dmem_addr_core_wordbits | logic | |
dmem_gnt_bus | logic | DMEM access from main TL-UL bus |
unused_dmem_top_rdata | logic | The top bits of DMEM rdata aren't currently used (they will eventually be used for integrity checks within the core) |
reg_bus_integrity_error | logic | Registers ================================================================= |
bus_integrity_error | logic | |
[ImemAddrWidth-1:0] | ||
unused_start_addr_bits | logic [top_pkg::TL_DW-ImemAddrWidth-1:0] | |
[top_pkg::TL_DW-1:ImemAddrWidth] | ||
insn_cnt | logic [31:0] | INSN_CNT register |
alert_test | logic [NumAlerts-1:0] | Alerts ==================================================================== |
alerts | logic [NumAlerts-1:0] | |
edn_rnd_req | logic | EDN Connections ============================================================ |
edn_rnd_ack | logic | EDN Connections ============================================================ |
edn_rnd_data | logic [EdnDataWidth-1:0] | |
edn_urnd_req | logic | |
edn_urnd_ack | logic | |
edn_urnd_data | logic [EdnDataWidth-1:0] | |
otbn_use_model | bit | Build both model and RTL implementation into the design, and switch at runtime through a plusarg. Set the plusarg +OTBN_USE_MODEL=1 to use the model (ISS) instead of the RTL implementation. |
done_model | logic | Mux between model and RTL implementation at runtime. |
done_rtl | logic | Mux between model and RTL implementation at runtime. |
start_model | logic | |
start_rtl | logic | |
err_bits_model | err_bits_t | |
err_bits_rtl | err_bits_t | |
insn_cnt_model | logic [31:0] | |
insn_cnt_rtl | logic [31:0] | |
edn_rnd_data_valid | logic | |
edn_urnd_data_valid | logic | |
edn_rnd_data_model | logic [255:0] |
Constants
Name | Type | Value | Description |
---|---|---|---|
ImemSizeByte | int | undefined | The OTBN_*_SIZE parameters are auto-generated by regtool and come from the bus window sizes; they are given in bytes and must be powers of two. |
DmemSizeByte | int | undefined | |
ImemAddrWidth | int | vbits(ImemSizeByte) | |
DmemAddrWidth | int | vbits(DmemSizeByte) | |
ImemSizeWords | int | ImemSizeByte / 4 | Instruction Memory (IMEM) ================================================= |
ImemIndexWidth | int | vbits(ImemSizeWords) | |
DmemSizeWords | int | DmemSizeByte | Data Memory (DMEM) ======================================================== |
DmemIndexWidth | int | vbits(DmemSizeWords) | |
ModelOnlyEdnVal | logic [WLEN-1:0] | undefined | Model (Instruction Set Simulator) In model only runs, leave valid signals high and supply constant RND data for EDN which will allow the model to continue without RND/URND related stalls. TODO: Implement proper EDN requests in model only runs |
Types
Name | Type | Description |
---|---|---|
tl_win_e | enum logic { TlWinImem = 1'b0, TlWinDmem = 1'b1 } |
Bus device windows, as specified in otbn.hjson |
Processes
- unnamed: ( @(posedge clk_i or negedge rst_ni) )
Type: always_ff
- unnamed: ( @(posedge clk_i or negedge rst_ni) )
Type: always_ff
- unnamed: ( @(posedge clk_i or negedge rst_ni) )
Type: always_ff
- unnamed: ( @(posedge clk_i or negedge rst_ni) )
Type: always_ff
Description
Flop illegal_bus_access_q
so we know an illegal bus access has happened and to break a timing path from the TL interface into the OTBN core.
- unnamed: ( )
Type: always_comb
Description
STATUS register
- unnamed: ( @(posedge clk_i or negedge rst_n) )
Type: always_ff
Description
OTBN Core =================================================================
Instantiations
- u_lc_escalate_en_sync: prim_lc_sync
- u_intr_hw_done: prim_intr_hw
Description
Interrupts ================================================================
- u_otbn_scramble_ctrl: otbn_scramble_ctrl
- u_imem: prim_ram_1p_scr
- u_imem_intg_check: prim_secded_39_32_dec
Description
Separate check for imem read data integrity outside of u_imem
as prim_ram_1p_adv
doesn't
have functionality for only integrity checking, just fully integrated ECC.
- u_tlul_adapter_sram_imem: tlul_adapter_sram
- u_dmem: prim_ram_1p_scr
- u_tlul_adapter_sram_dmem: tlul_adapter_sram
- u_reg: otbn_reg_top
- u_prim_edn_rnd_req: prim_edn_req
Description
These synchronize the data coming from EDN and stack the 32 bit EDN words to achieve an
internal entropy width of 256 bit.
- u_prim_edn_urnd_req: prim_edn_req
- u_otbn_core_model: otbn_core_model
- u_otbn_core: otbn_core
Description
RTL implementation
- u_otbn_core: otbn_core