[spi_device] Instantiate Upload module
Now, spi_device has spid_upload submodule in the design. The upload
module checks incoming SPI transaction and upload to the CmdFifo,
AddrFifo, and PayloadBuffer based on the given command information.
Signed-off-by: Eunchan Kim <eunchan@opentitan.org>
diff --git a/hw/ip/prim/lint/prim_fifo.waiver b/hw/ip/prim/lint/prim_fifo.waiver
index 6c5dc98..bf1bb22 100644
--- a/hw/ip/prim/lint/prim_fifo.waiver
+++ b/hw/ip/prim/lint/prim_fifo.waiver
@@ -24,3 +24,8 @@
waive -rules EXPLICIT_BITLEN -location {prim_fifo_*sync.sv} -regexp {Bit length not specified for constant '1'} \
-comment "index is protected by control logic"
+
+## prim_fifo_async_sram_adapter
+waive -rules ARITH_CONTEXT -location {prim_fifo_async_sram_adapter.sv} \
+ -regexp {(r|w)_wptr_v.*_rptr_v} \
+ -comment "The pointer value width is determined. Remove the casting for readability"
diff --git a/hw/ip/prim/rtl/prim_fifo_async_sram_adapter.sv b/hw/ip/prim/rtl/prim_fifo_async_sram_adapter.sv
index 4ba6262..4771ffd 100644
--- a/hw/ip/prim/rtl/prim_fifo_async_sram_adapter.sv
+++ b/hw/ip/prim/rtl/prim_fifo_async_sram_adapter.sv
@@ -212,7 +212,8 @@
// End: SRAM Read pointer
// Full/ Empty
- localparam logic [PtrW-1:0] XorMask = PtrW'(1) << (PtrW-1);
+ // Lint complains PtrW'(1) << (PtrW-1). So changed as below
+ localparam logic [PtrW-1:0] XorMask = {1'b 1, {PtrW-1{1'b0}}};
assign w_full = (w_wptr_q == (w_rptr ^ XorMask));
assign r_full = (r_wptr == (r_rptr_q ^ XorMask));
assign r_empty = (r_wptr == r_rptr_q);
@@ -231,10 +232,10 @@
assign w_sram_addr_o = SramBaseAddr + SramAw'(w_wptr_v);
assign w_sram_wdata_o = SramDw'(wdata_i);
- assign w_sram_wmask_o = SramDw'(2**Width-1);
+ assign w_sram_wmask_o = SramDw'({Width{1'b1}});
- logic w_unused_sram;
- assign w_unused_sram = ^{w_sram_rvalid_i, w_sram_rdata_i, w_sram_rerror_i};
+ logic unused_w_sram;
+ assign unused_w_sram = ^{w_sram_rvalid_i, w_sram_rdata_i, w_sram_rerror_i};
// SRAM Read Request
// Request Scenario (!r_empty):
@@ -280,6 +281,11 @@
logic unused_rsram;
assign unused_rsram = ^{r_sram_rerror_i};
+ if (Width < SramDw) begin : g_unused_rdata
+ logic unused_rdata;
+ assign unused_rdata = ^r_sram_rdata_i[SramDw-1:Width];
+ end : g_unused_rdata
+
// read clock domain rdata storage
logic store;
diff --git a/hw/ip/spi_device/data/spi_device.hjson b/hw/ip/spi_device/data/spi_device.hjson
index 5cedd93..a35f388 100644
--- a/hw/ip/spi_device/data/spi_device.hjson
+++ b/hw/ip/spi_device/data/spi_device.hjson
@@ -461,6 +461,63 @@
} // f: threshold
]
} // R: READ_THRESHOLD
+ { name: "UPLOAD_STATUS"
+ desc: '''Upload module status register.
+ '''
+ swaccess: "ro"
+ hwaccess: "hwo"
+ fields: [
+ { bits: "4:0"
+ name: "cmdfifo_depth"
+ desc: "Command FIFO Entry"
+ } // f: cmdfifo_depth
+ { bits: "7"
+ name: "cmdfifo_notempty"
+ desc: "Upload Command FIFO Not Empty"
+ } // f: cmdfifo_notempty
+ { bits: "12:8"
+ name: "addrfifo_depth"
+ desc: "Address FIFO Entry"
+ } // f: addrfifo_depth
+ { bits: "15"
+ name: "addrfifo_notempty"
+ desc: "Upload Address FIFO Not Empty"
+ } // f: addrfifo_notempty
+ { bits: "24:16"
+ name: "payload_depth"
+ desc: '''Payload buffer depth
+ '''
+ } // f: payload_depth
+ ]
+ } // R: UPLOAD_STATUS
+ { name: "UPLOAD_CMDFIFO"
+ desc: '''Command Fifo Read Port.
+ '''
+ swaccess: "ro"
+ hwaccess: "hrw"
+ hwre: "true"
+ hwext: "true"
+ fields: [
+ { bits: "7:0"
+ name: "data"
+ desc: "read data"
+ }
+ ]
+ } // R: UPLOAD_CMDFIFO
+ { name: "UPLOAD_ADDRFIFO"
+ desc: '''Address Fifo Read Port.
+ '''
+ swaccess: "ro"
+ hwaccess: "hrw"
+ hwre: "true"
+ hwext: "true"
+ fields: [
+ { bits: "31:0"
+ name: "data"
+ desc: "read data"
+ }
+ ]
+ } // R: UPLOAD_ADDRFIFO
{ multireg: {
cname: "SPI_DEVICE"
name: "CMD_FILTER"
@@ -592,7 +649,8 @@
defines the command address field size.
The logic assumes the following SPI input stream as payload,
- which max size is 256B. If the command exceeds the maximum payload size 256B, the logic wraps the payload and overwrites.
+ which max size is 256B. If the command exceeds the maximum
+ payload size 256B, the logic wraps the payload and overwrites.
'''
} // f: upload
{ bits: "25"
diff --git a/hw/ip/spi_device/lint/spi_device.waiver b/hw/ip/spi_device/lint/spi_device.waiver
index 12d9abd..a006dd0 100644
--- a/hw/ip/spi_device/lint/spi_device.waiver
+++ b/hw/ip/spi_device/lint/spi_device.waiver
@@ -64,6 +64,12 @@
waive -rules TWO_STATE_TYPE -location {spi_device.sv} -regexp {'fwm_fifo_e' is of} \
-comment "Intended declaration"
+waive -rules TWO_STATE_TYPE -location {spi_device.sv} \
+ -regexp {'sys_sram_e' is of two state type} \
+ -comment "Enum int unsigned is used as a index. OK to be two state"
+waive -rules TWO_STATE_TYPE -location {spid_upload.sv} \
+ -regexp {'sramintf_e' is of two state type} \
+ -comment "Enum int unsigned is used as a index. OK to be two state"
waive -rules ONE_BIT_MEM_WIDTH -location {spi_device.sv spi_fwmode.sv} -regexp {Memory 'fwm_sram_.*' has word} \
-comment "Intended implementation to make it consistent with other signals"
@@ -180,3 +186,17 @@
waive -rules {TERMINAL_STATE} -location {spid_readbuffer.sv} \
-regexp {'StActive' is detected.} \
-comment "StActive is final state waiting CSb de-assertion"
+waive -rules {TERMINAL_STATE} -location {spid_upload.sv} \
+ -regexp {'StPayload' is detected.} \
+ -comment "StPayload is the final state waiting CSb"
+
+## PKG
+
+waive -rules {INPUT_NOT_READ} -location {spi_device_pkg.sv} \
+ -regexp {'ci\..*' is not read} \
+ -comment "Only portion of the cmd info struct is used"
+
+## PARAM_ENUM
+waive -rules {PARAM_ENUM_VAL} -location {spi_device.sv} \
+ -regexp {Parameter 'N' is .* 'SysSramEnd'} \
+ -comment "The enum is used as a constant in the design."
diff --git a/hw/ip/spi_device/rtl/spi_device.sv b/hw/ip/spi_device/rtl/spi_device.sv
index 25bd61e..4e7d679 100644
--- a/hw/ip/spi_device/rtl/spi_device.sv
+++ b/hw/ip/spi_device/rtl/spi_device.sv
@@ -86,6 +86,7 @@
logic mem_a_write;
logic [SramAw-1:0] mem_a_addr;
logic [SramDw-1:0] mem_a_wdata;
+ logic [SramDw-1:0] mem_a_wmask;
logic mem_a_rvalid;
logic [SramDw-1:0] mem_a_rdata;
logic [1:0] mem_a_rerror;
@@ -110,6 +111,38 @@
logic [3:0] internal_sd, internal_sd_en;
logic [3:0] passthrough_sd, passthrough_sd_en;
+ // Upload related interfaces (SRAM, FIFOs)
+ // Initially, SysSramEnd was the end of the enum variable. But lint tool
+ // raises errors the value being used in the parameter. So changed to
+ // localparam
+ typedef enum int unsigned {
+ SysSramFw = 0,
+ SysSramCmdFifo = 1,
+ SysSramAddrFifo = 2,
+ SysSramEnd = 3
+ } sys_sram_e;
+
+ sram_l2m_t sys_sram_l2m [SysSramEnd]; // FW, CMDFIFO, ADDRFIFO
+ sram_m2l_t sys_sram_m2l [SysSramEnd];
+
+ logic cmdfifo_rvalid, cmdfifo_rready;
+ logic [7:0] cmdfifo_rdata;
+ logic cmdfifo_notempty;
+
+ logic addrfifo_rvalid, addrfifo_rready;
+ logic [31:0] addrfifo_rdata;
+ logic addrfifo_notempty;
+
+ localparam int unsigned CmdFifoPtrW = $clog2(SramCmdFifoDepth+1);
+ localparam int unsigned AddrFifoPtrW = $clog2(SramAddrFifoDepth+1);
+
+ localparam int unsigned PayloadByte = SramPayloadDepth * (SramDw/$bits(spi_byte_t));
+ localparam int unsigned PayloadDepthW = $clog2(PayloadByte+1);
+
+ logic [CmdFifoPtrW-1:0] cmdfifo_depth;
+ logic [AddrFifoPtrW-1:0] addrfifo_depth;
+ logic [PayloadDepthW-1:0] payload_depth;
+
/////////////////////
// Control signals //
/////////////////////
@@ -701,7 +734,17 @@
p2s_data = sub_p2s_data[IoModeJedec];
sub_p2s_sent[IoModeJedec] = p2s_sent;
end
- // DpUpload:
+
+ DpUpload: begin
+ io_mode = sub_iomode[IoModeUpload];
+
+ p2s_valid = sub_p2s_valid[IoModeUpload];
+ p2s_data = sub_p2s_data[IoModeUpload];
+ sub_p2s_sent[IoModeUpload] = p2s_sent;
+
+ mem_b_l2m = sub_sram_l2m[IoModeUpload];
+ sub_sram_m2l[IoModeUpload] = mem_b_m2l;
+ end
// DpUnknown:
default: begin
io_mode = sub_iomode[IoModeCmdParse];
@@ -968,8 +1011,6 @@
// Temporary:
logic unused_busy;
assign unused_busy = status_busy_broadcast;
- // TODO: replace to the output of upload module
- assign status_busy_set = 1'b 0;
// Tie unused
logic unused_sub_sram_status;
@@ -1009,6 +1050,103 @@
};
assign sub_sram_l2m[IoModeJedec] = '0;
+ // Begin: Upload ===================================================
+ spid_upload #(
+ .CmdFifoBaseAddr (SramCmdFifoIdx),
+ .CmdFifoDepth (SramCmdFifoDepth),
+ .AddrFifoBaseAddr (SramAddrFifoIdx),
+ .AddrFifoDepth (SramAddrFifoDepth),
+ .PayloadBaseAddr (SramPayloadIdx),
+ .PayloadDepth (SramPayloadDepth),
+
+ .SpiByte ($bits(spi_byte_t))
+ ) u_upload (
+ .clk_i (clk_spi_in_buf),
+ .rst_ni (rst_spi_n),
+
+ .sys_clk_i (clk_i),
+ .sys_rst_ni (rst_ni),
+
+ .sys_csb_deasserted_pulse_i (csb_deasserted_busclk),
+
+ .sel_dp_i (cmd_dp_sel),
+
+ .sck_sram_o (sub_sram_l2m[IoModeUpload]),
+ .sck_sram_i (sub_sram_m2l[IoModeUpload]),
+
+ .sys_cmdfifo_sram_o (sys_sram_l2m[SysSramCmdFifo]),
+ .sys_cmdfifo_sram_i (sys_sram_m2l[SysSramCmdFifo]),
+
+ .sys_addrfifo_sram_o (sys_sram_l2m[SysSramAddrFifo]),
+ .sys_addrfifo_sram_i (sys_sram_m2l[SysSramAddrFifo]),
+
+ // SYS clock FIFO interface
+ .sys_cmdfifo_rvalid_o (cmdfifo_rvalid),
+ .sys_cmdfifo_rready_i (cmdfifo_rready),
+ .sys_cmdfifo_rdata_o (cmdfifo_rdata),
+
+ .sys_addrfifo_rvalid_o (addrfifo_rvalid),
+ .sys_addrfifo_rready_i (addrfifo_rready),
+ .sys_addrfifo_rdata_o (addrfifo_rdata),
+
+ // Interface: SPI to Parallel
+ .s2p_valid_i (s2p_data_valid),
+ .s2p_byte_i (s2p_data),
+ .s2p_bitcnt_i (s2p_bitcnt),
+
+ // Interface: Parallel to SPI
+ .p2s_valid_o (sub_p2s_valid[IoModeUpload]),
+ .p2s_data_o (sub_p2s_data [IoModeUpload]),
+ .p2s_sent_i (sub_p2s_sent [IoModeUpload]),
+
+ .spi_mode_i (spi_mode),
+
+ .cfg_addr_4b_en_i (cfg_addr_4b_en),
+
+ .cmd_info_i (cmd_info_broadcast),
+ .cmd_info_idx_i (cmd_info_idx_broadcast),
+
+ .io_mode_o (sub_iomode[IoModeUpload]),
+
+ .set_busy_o (status_busy_set),
+
+ .sys_cmdfifo_notempty_o (cmdfifo_notempty),
+ .sys_cmdfifo_full_o (), // not used
+ .sys_addrfifo_notempty_o (addrfifo_notempty),
+ .sys_addrfifo_full_o (), // not used
+
+ .sys_cmdfifo_depth_o (cmdfifo_depth),
+ .sys_addrfifo_depth_o (addrfifo_depth),
+ .sys_payload_depth_o (payload_depth)
+ );
+ // FIFO connect
+ assign cmdfifo_rready = reg2hw.upload_cmdfifo.re;
+ assign hw2reg.upload_cmdfifo.d = cmdfifo_rdata;
+ logic unused_cmdfifo_q;
+ assign unused_cmdfifo_q = ^{reg2hw.upload_cmdfifo.q, cmdfifo_rvalid};
+
+ assign addrfifo_rready = reg2hw.upload_addrfifo.re;
+ assign hw2reg.upload_addrfifo.d = addrfifo_rdata;
+ logic unused_addrfifo_q;
+ assign unused_addrfifo_q = ^{reg2hw.upload_addrfifo.q, addrfifo_rvalid};
+
+ // Connect UPLOAD_STATUS
+ assign hw2reg.upload_status.cmdfifo_depth.de = 1'b1;
+ assign hw2reg.upload_status.cmdfifo_depth.d = cmdfifo_depth;
+
+ assign hw2reg.upload_status.cmdfifo_notempty.de = 1'b1;
+ assign hw2reg.upload_status.cmdfifo_notempty.d = cmdfifo_notempty;
+
+ assign hw2reg.upload_status.addrfifo_depth.de = 1'b 1;
+ assign hw2reg.upload_status.addrfifo_depth.d = addrfifo_depth;
+
+ assign hw2reg.upload_status.addrfifo_notempty.de = 1'b 1;
+ assign hw2reg.upload_status.addrfifo_notempty.d = addrfifo_notempty;
+
+ assign hw2reg.upload_status.payload_depth.de = 1'b 1;
+ assign hw2reg.upload_status.payload_depth.d = payload_depth;
+
+ // End: Upload ---------------------------------------------------
/////////////////////
// SPI Passthrough //
/////////////////////
@@ -1051,6 +1189,8 @@
// Common modules //
////////////////////
+ logic [SramDw-1:0] sys_sram_l2m_fw_wmask;
+
tlul_adapter_sram #(
.SramAw (SramAw),
.SramDw (SramDw),
@@ -1063,17 +1203,77 @@
.tl_i (tl_sram_h2d),
.tl_o (tl_sram_d2h),
.en_ifetch_i (tlul_pkg::InstrDis),
- .req_o (mem_a_req),
+ .req_o (sys_sram_l2m[SysSramFw].req),
.req_type_o (),
- .gnt_i (mem_a_req), //Always grant when request
- .we_o (mem_a_write),
- .addr_o (mem_a_addr),
- .wdata_o (mem_a_wdata),
- .wmask_o (), // Not used
+ .gnt_i (1'b1), // TODO: Connect arbiter grant here
+ .we_o (sys_sram_l2m[SysSramFw].we),
+ .addr_o (sys_sram_l2m[SysSramFw].addr),
+ .wdata_o (sys_sram_l2m[SysSramFw].wdata),
+ .wmask_o (sys_sram_l2m_fw_wmask), // Not used
.intg_error_o(),
- .rdata_i (mem_a_rdata),
- .rvalid_i (mem_a_rvalid),
- .rerror_i (mem_a_rerror)
+ .rdata_i (sys_sram_m2l[SysSramFw].rdata),
+ .rvalid_i (sys_sram_m2l[SysSramFw].rvalid),
+ .rerror_i (sys_sram_m2l[SysSramFw].rerror)
+ );
+ assign sys_sram_l2m[SysSramFw].wstrb = sram_mask2strb(sys_sram_l2m_fw_wmask);
+
+ // Arbiter among Upload CmdFifo/AddrFifo & FW access
+ logic [SysSramEnd-1:0] sys_sram_req ;
+ logic [SysSramEnd-1:0] sys_sram_gnt ;
+ logic [SramAw-1:0] sys_sram_addr [SysSramEnd];
+ logic [SysSramEnd-1:0] sys_sram_write ;
+ logic [SramDw-1:0] sys_sram_wdata [SysSramEnd];
+ logic [SramDw-1:0] sys_sram_wmask [SysSramEnd];
+ logic [SysSramEnd-1:0] sys_sram_rvalid ;
+ logic [SramDw-1:0] sys_sram_rdata [SysSramEnd];
+ logic [1:0] sys_sram_rerror [SysSramEnd];
+
+ for (genvar i = 0 ; i < SysSramEnd ; i++) begin : g_sram_connect
+ assign sys_sram_req [i] = sys_sram_l2m[i].req;
+ assign sys_sram_addr [i] = sys_sram_l2m[i].addr;
+ assign sys_sram_write [i] = sys_sram_l2m[i].we;
+ assign sys_sram_wdata [i] = sys_sram_l2m[i].wdata;
+ assign sys_sram_wmask [i] = sram_strb2mask(sys_sram_l2m[i].wstrb);
+
+ assign sys_sram_m2l[i].rvalid = sys_sram_rvalid[i];
+ assign sys_sram_m2l[i].rdata = sys_sram_rdata[i];
+ assign sys_sram_m2l[i].rerror = sys_sram_rerror[i];
+
+ `ASSERT(ReqAlwaysAccepted_A, sys_sram_req[i] |-> sys_sram_gnt[i])
+ end : g_sram_connect
+
+ logic unused_sys_sram_gnt;
+ assign unused_sys_sram_gnt = ^sys_sram_gnt;
+
+ prim_sram_arbiter #(
+ .N (SysSramEnd),
+ .SramDw (SramDw),
+ .SramAw (SramAw),
+
+ .EnMask (1'b 1)
+ ) u_sys_sram_arbiter (
+ .clk_i,
+ .rst_ni,
+
+ .req_i (sys_sram_req),
+ .req_addr_i (sys_sram_addr),
+ .req_write_i (sys_sram_write),
+ .req_wdata_i (sys_sram_wdata),
+ .req_wmask_i (sys_sram_wmask),
+ .gnt_o (sys_sram_gnt),
+
+ .rsp_rvalid_o (sys_sram_rvalid),
+ .rsp_rdata_o (sys_sram_rdata),
+ .rsp_error_o (sys_sram_rerror),
+
+ .sram_req_o (mem_a_req),
+ .sram_addr_o (mem_a_addr),
+ .sram_write_o (mem_a_write),
+ .sram_wdata_o (mem_a_wdata),
+ .sram_wmask_o (mem_a_wmask),
+ .sram_rvalid_i (mem_a_rvalid),
+ .sram_rdata_i (mem_a_rdata),
+ .sram_rerror_i (mem_a_rerror)
);
// SRAM Wrapper
@@ -1107,7 +1307,7 @@
.a_write_i (mem_a_write),
.a_addr_i (mem_a_addr),
.a_wdata_i (mem_a_wdata),
- .a_wmask_i ({SramDw{1'b1}}),
+ .a_wmask_i (mem_a_wmask),
.a_rvalid_o (mem_a_rvalid),
.a_rdata_o (mem_a_rdata),
.a_rerror_o (mem_a_rerror),
diff --git a/hw/ip/spi_device/rtl/spi_device_pkg.sv b/hw/ip/spi_device/rtl/spi_device_pkg.sv
index 64d8690..53da87d 100644
--- a/hw/ip/spi_device/rtl/spi_device_pkg.sv
+++ b/hw/ip/spi_device/rtl/spi_device_pkg.sv
@@ -230,7 +230,8 @@
IoModeReadCmd = 2,
IoModeStatus = 3,
IoModeJedec = 4,
- IoModeEnd = 5 // Indicate of Length
+ IoModeUpload = 5,
+ IoModeEnd = 6 // Indicate of Length
} sub_io_mode_e;
// SPI Line Mode (Mode0 <-> Mode3)
diff --git a/hw/ip/spi_device/rtl/spi_device_reg_pkg.sv b/hw/ip/spi_device/rtl/spi_device_reg_pkg.sv
index 8615070..e90ce9c 100644
--- a/hw/ip/spi_device/rtl/spi_device_reg_pkg.sv
+++ b/hw/ip/spi_device/rtl/spi_device_reg_pkg.sv
@@ -195,6 +195,16 @@
} spi_device_reg2hw_read_threshold_reg_t;
typedef struct packed {
+ logic [7:0] q;
+ logic re;
+ } spi_device_reg2hw_upload_cmdfifo_reg_t;
+
+ typedef struct packed {
+ logic [31:0] q;
+ logic re;
+ } spi_device_reg2hw_upload_addrfifo_reg_t;
+
+ typedef struct packed {
logic q;
} spi_device_reg2hw_cmd_filter_mreg_t;
@@ -326,22 +336,55 @@
} status;
} spi_device_hw2reg_flash_status_reg_t;
+ typedef struct packed {
+ struct packed {
+ logic [4:0] d;
+ logic de;
+ } cmdfifo_depth;
+ struct packed {
+ logic d;
+ logic de;
+ } cmdfifo_notempty;
+ struct packed {
+ logic [4:0] d;
+ logic de;
+ } addrfifo_depth;
+ struct packed {
+ logic d;
+ logic de;
+ } addrfifo_notempty;
+ struct packed {
+ logic [8:0] d;
+ logic de;
+ } payload_depth;
+ } spi_device_hw2reg_upload_status_reg_t;
+
+ typedef struct packed {
+ logic [7:0] d;
+ } spi_device_hw2reg_upload_cmdfifo_reg_t;
+
+ typedef struct packed {
+ logic [31:0] d;
+ } spi_device_hw2reg_upload_addrfifo_reg_t;
+
// Register -> HW type
typedef struct packed {
- spi_device_reg2hw_intr_state_reg_t intr_state; // [1104:1099]
- spi_device_reg2hw_intr_enable_reg_t intr_enable; // [1098:1093]
- spi_device_reg2hw_intr_test_reg_t intr_test; // [1092:1081]
- spi_device_reg2hw_alert_test_reg_t alert_test; // [1080:1079]
- spi_device_reg2hw_control_reg_t control; // [1078:1073]
- spi_device_reg2hw_cfg_reg_t cfg; // [1072:1060]
- spi_device_reg2hw_fifo_level_reg_t fifo_level; // [1059:1028]
- spi_device_reg2hw_rxf_ptr_reg_t rxf_ptr; // [1027:1012]
- spi_device_reg2hw_txf_ptr_reg_t txf_ptr; // [1011:996]
- spi_device_reg2hw_rxf_addr_reg_t rxf_addr; // [995:964]
- spi_device_reg2hw_txf_addr_reg_t txf_addr; // [963:932]
- spi_device_reg2hw_flash_status_reg_t flash_status; // [931:906]
- spi_device_reg2hw_jedec_id_reg_t jedec_id; // [905:882]
- spi_device_reg2hw_read_threshold_reg_t read_threshold; // [881:872]
+ spi_device_reg2hw_intr_state_reg_t intr_state; // [1146:1141]
+ spi_device_reg2hw_intr_enable_reg_t intr_enable; // [1140:1135]
+ spi_device_reg2hw_intr_test_reg_t intr_test; // [1134:1123]
+ spi_device_reg2hw_alert_test_reg_t alert_test; // [1122:1121]
+ spi_device_reg2hw_control_reg_t control; // [1120:1115]
+ spi_device_reg2hw_cfg_reg_t cfg; // [1114:1102]
+ spi_device_reg2hw_fifo_level_reg_t fifo_level; // [1101:1070]
+ spi_device_reg2hw_rxf_ptr_reg_t rxf_ptr; // [1069:1054]
+ spi_device_reg2hw_txf_ptr_reg_t txf_ptr; // [1053:1038]
+ spi_device_reg2hw_rxf_addr_reg_t rxf_addr; // [1037:1006]
+ spi_device_reg2hw_txf_addr_reg_t txf_addr; // [1005:974]
+ spi_device_reg2hw_flash_status_reg_t flash_status; // [973:948]
+ spi_device_reg2hw_jedec_id_reg_t jedec_id; // [947:924]
+ spi_device_reg2hw_read_threshold_reg_t read_threshold; // [923:914]
+ spi_device_reg2hw_upload_cmdfifo_reg_t upload_cmdfifo; // [913:905]
+ spi_device_reg2hw_upload_addrfifo_reg_t upload_addrfifo; // [904:872]
spi_device_reg2hw_cmd_filter_mreg_t [255:0] cmd_filter; // [871:616]
spi_device_reg2hw_addr_swap_mask_reg_t addr_swap_mask; // [615:584]
spi_device_reg2hw_addr_swap_data_reg_t addr_swap_data; // [583:552]
@@ -350,13 +393,16 @@
// HW -> register type
typedef struct packed {
- spi_device_hw2reg_intr_state_reg_t intr_state; // [123:112]
- spi_device_hw2reg_async_fifo_level_reg_t async_fifo_level; // [111:96]
- spi_device_hw2reg_status_reg_t status; // [95:90]
- spi_device_hw2reg_rxf_ptr_reg_t rxf_ptr; // [89:73]
- spi_device_hw2reg_txf_ptr_reg_t txf_ptr; // [72:56]
- spi_device_hw2reg_last_read_addr_reg_t last_read_addr; // [55:24]
- spi_device_hw2reg_flash_status_reg_t flash_status; // [23:0]
+ spi_device_hw2reg_intr_state_reg_t intr_state; // [189:178]
+ spi_device_hw2reg_async_fifo_level_reg_t async_fifo_level; // [177:162]
+ spi_device_hw2reg_status_reg_t status; // [161:156]
+ spi_device_hw2reg_rxf_ptr_reg_t rxf_ptr; // [155:139]
+ spi_device_hw2reg_txf_ptr_reg_t txf_ptr; // [138:122]
+ spi_device_hw2reg_last_read_addr_reg_t last_read_addr; // [121:90]
+ spi_device_hw2reg_flash_status_reg_t flash_status; // [89:66]
+ spi_device_hw2reg_upload_status_reg_t upload_status; // [65:40]
+ spi_device_hw2reg_upload_cmdfifo_reg_t upload_cmdfifo; // [39:32]
+ spi_device_hw2reg_upload_addrfifo_reg_t upload_addrfifo; // [31:0]
} spi_device_hw2reg_t;
// Register offsets
@@ -377,40 +423,43 @@
parameter logic [BlockAw-1:0] SPI_DEVICE_FLASH_STATUS_OFFSET = 13'h 38;
parameter logic [BlockAw-1:0] SPI_DEVICE_JEDEC_ID_OFFSET = 13'h 3c;
parameter logic [BlockAw-1:0] SPI_DEVICE_READ_THRESHOLD_OFFSET = 13'h 40;
- parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_FILTER_0_OFFSET = 13'h 44;
- parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_FILTER_1_OFFSET = 13'h 48;
- parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_FILTER_2_OFFSET = 13'h 4c;
- parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_FILTER_3_OFFSET = 13'h 50;
- parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_FILTER_4_OFFSET = 13'h 54;
- parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_FILTER_5_OFFSET = 13'h 58;
- parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_FILTER_6_OFFSET = 13'h 5c;
- parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_FILTER_7_OFFSET = 13'h 60;
- parameter logic [BlockAw-1:0] SPI_DEVICE_ADDR_SWAP_MASK_OFFSET = 13'h 64;
- parameter logic [BlockAw-1:0] SPI_DEVICE_ADDR_SWAP_DATA_OFFSET = 13'h 68;
- parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_0_OFFSET = 13'h 6c;
- parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_1_OFFSET = 13'h 70;
- parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_2_OFFSET = 13'h 74;
- parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_3_OFFSET = 13'h 78;
- parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_4_OFFSET = 13'h 7c;
- parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_5_OFFSET = 13'h 80;
- parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_6_OFFSET = 13'h 84;
- parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_7_OFFSET = 13'h 88;
- parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_8_OFFSET = 13'h 8c;
- parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_9_OFFSET = 13'h 90;
- parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_10_OFFSET = 13'h 94;
- parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_11_OFFSET = 13'h 98;
- parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_12_OFFSET = 13'h 9c;
- parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_13_OFFSET = 13'h a0;
- parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_14_OFFSET = 13'h a4;
- parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_15_OFFSET = 13'h a8;
- parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_16_OFFSET = 13'h ac;
- parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_17_OFFSET = 13'h b0;
- parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_18_OFFSET = 13'h b4;
- parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_19_OFFSET = 13'h b8;
- parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_20_OFFSET = 13'h bc;
- parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_21_OFFSET = 13'h c0;
- parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_22_OFFSET = 13'h c4;
- parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_23_OFFSET = 13'h c8;
+ parameter logic [BlockAw-1:0] SPI_DEVICE_UPLOAD_STATUS_OFFSET = 13'h 44;
+ parameter logic [BlockAw-1:0] SPI_DEVICE_UPLOAD_CMDFIFO_OFFSET = 13'h 48;
+ parameter logic [BlockAw-1:0] SPI_DEVICE_UPLOAD_ADDRFIFO_OFFSET = 13'h 4c;
+ parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_FILTER_0_OFFSET = 13'h 50;
+ parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_FILTER_1_OFFSET = 13'h 54;
+ parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_FILTER_2_OFFSET = 13'h 58;
+ parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_FILTER_3_OFFSET = 13'h 5c;
+ parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_FILTER_4_OFFSET = 13'h 60;
+ parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_FILTER_5_OFFSET = 13'h 64;
+ parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_FILTER_6_OFFSET = 13'h 68;
+ parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_FILTER_7_OFFSET = 13'h 6c;
+ parameter logic [BlockAw-1:0] SPI_DEVICE_ADDR_SWAP_MASK_OFFSET = 13'h 70;
+ parameter logic [BlockAw-1:0] SPI_DEVICE_ADDR_SWAP_DATA_OFFSET = 13'h 74;
+ parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_0_OFFSET = 13'h 78;
+ parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_1_OFFSET = 13'h 7c;
+ parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_2_OFFSET = 13'h 80;
+ parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_3_OFFSET = 13'h 84;
+ parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_4_OFFSET = 13'h 88;
+ parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_5_OFFSET = 13'h 8c;
+ parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_6_OFFSET = 13'h 90;
+ parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_7_OFFSET = 13'h 94;
+ parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_8_OFFSET = 13'h 98;
+ parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_9_OFFSET = 13'h 9c;
+ parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_10_OFFSET = 13'h a0;
+ parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_11_OFFSET = 13'h a4;
+ parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_12_OFFSET = 13'h a8;
+ parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_13_OFFSET = 13'h ac;
+ parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_14_OFFSET = 13'h b0;
+ parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_15_OFFSET = 13'h b4;
+ parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_16_OFFSET = 13'h b8;
+ parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_17_OFFSET = 13'h bc;
+ parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_18_OFFSET = 13'h c0;
+ parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_19_OFFSET = 13'h c4;
+ parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_20_OFFSET = 13'h c8;
+ parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_21_OFFSET = 13'h cc;
+ parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_22_OFFSET = 13'h d0;
+ parameter logic [BlockAw-1:0] SPI_DEVICE_CMD_INFO_23_OFFSET = 13'h d4;
// Reset values for hwext registers and their fields
parameter logic [5:0] SPI_DEVICE_INTR_TEST_RESVAL = 6'h 0;
@@ -430,6 +479,8 @@
parameter logic [0:0] SPI_DEVICE_STATUS_CSB_RESVAL = 1'h 1;
parameter logic [31:0] SPI_DEVICE_LAST_READ_ADDR_RESVAL = 32'h 0;
parameter logic [23:0] SPI_DEVICE_FLASH_STATUS_RESVAL = 24'h 0;
+ parameter logic [7:0] SPI_DEVICE_UPLOAD_CMDFIFO_RESVAL = 8'h 0;
+ parameter logic [31:0] SPI_DEVICE_UPLOAD_ADDRFIFO_RESVAL = 32'h 0;
// Window parameters
parameter logic [BlockAw-1:0] SPI_DEVICE_BUFFER_OFFSET = 13'h 1000;
@@ -454,6 +505,9 @@
SPI_DEVICE_FLASH_STATUS,
SPI_DEVICE_JEDEC_ID,
SPI_DEVICE_READ_THRESHOLD,
+ SPI_DEVICE_UPLOAD_STATUS,
+ SPI_DEVICE_UPLOAD_CMDFIFO,
+ SPI_DEVICE_UPLOAD_ADDRFIFO,
SPI_DEVICE_CMD_FILTER_0,
SPI_DEVICE_CMD_FILTER_1,
SPI_DEVICE_CMD_FILTER_2,
@@ -491,7 +545,7 @@
} spi_device_id_e;
// Register width information to check illegal writes
- parameter logic [3:0] SPI_DEVICE_PERMIT [51] = '{
+ parameter logic [3:0] SPI_DEVICE_PERMIT [54] = '{
4'b 0001, // index[ 0] SPI_DEVICE_INTR_STATE
4'b 0001, // index[ 1] SPI_DEVICE_INTR_ENABLE
4'b 0001, // index[ 2] SPI_DEVICE_INTR_TEST
@@ -509,40 +563,43 @@
4'b 0111, // index[14] SPI_DEVICE_FLASH_STATUS
4'b 0111, // index[15] SPI_DEVICE_JEDEC_ID
4'b 0011, // index[16] SPI_DEVICE_READ_THRESHOLD
- 4'b 1111, // index[17] SPI_DEVICE_CMD_FILTER_0
- 4'b 1111, // index[18] SPI_DEVICE_CMD_FILTER_1
- 4'b 1111, // index[19] SPI_DEVICE_CMD_FILTER_2
- 4'b 1111, // index[20] SPI_DEVICE_CMD_FILTER_3
- 4'b 1111, // index[21] SPI_DEVICE_CMD_FILTER_4
- 4'b 1111, // index[22] SPI_DEVICE_CMD_FILTER_5
- 4'b 1111, // index[23] SPI_DEVICE_CMD_FILTER_6
- 4'b 1111, // index[24] SPI_DEVICE_CMD_FILTER_7
- 4'b 1111, // index[25] SPI_DEVICE_ADDR_SWAP_MASK
- 4'b 1111, // index[26] SPI_DEVICE_ADDR_SWAP_DATA
- 4'b 1111, // index[27] SPI_DEVICE_CMD_INFO_0
- 4'b 1111, // index[28] SPI_DEVICE_CMD_INFO_1
- 4'b 1111, // index[29] SPI_DEVICE_CMD_INFO_2
- 4'b 1111, // index[30] SPI_DEVICE_CMD_INFO_3
- 4'b 1111, // index[31] SPI_DEVICE_CMD_INFO_4
- 4'b 1111, // index[32] SPI_DEVICE_CMD_INFO_5
- 4'b 1111, // index[33] SPI_DEVICE_CMD_INFO_6
- 4'b 1111, // index[34] SPI_DEVICE_CMD_INFO_7
- 4'b 1111, // index[35] SPI_DEVICE_CMD_INFO_8
- 4'b 1111, // index[36] SPI_DEVICE_CMD_INFO_9
- 4'b 1111, // index[37] SPI_DEVICE_CMD_INFO_10
- 4'b 1111, // index[38] SPI_DEVICE_CMD_INFO_11
- 4'b 1111, // index[39] SPI_DEVICE_CMD_INFO_12
- 4'b 1111, // index[40] SPI_DEVICE_CMD_INFO_13
- 4'b 1111, // index[41] SPI_DEVICE_CMD_INFO_14
- 4'b 1111, // index[42] SPI_DEVICE_CMD_INFO_15
- 4'b 1111, // index[43] SPI_DEVICE_CMD_INFO_16
- 4'b 1111, // index[44] SPI_DEVICE_CMD_INFO_17
- 4'b 1111, // index[45] SPI_DEVICE_CMD_INFO_18
- 4'b 1111, // index[46] SPI_DEVICE_CMD_INFO_19
- 4'b 1111, // index[47] SPI_DEVICE_CMD_INFO_20
- 4'b 1111, // index[48] SPI_DEVICE_CMD_INFO_21
- 4'b 1111, // index[49] SPI_DEVICE_CMD_INFO_22
- 4'b 1111 // index[50] SPI_DEVICE_CMD_INFO_23
+ 4'b 1111, // index[17] SPI_DEVICE_UPLOAD_STATUS
+ 4'b 0001, // index[18] SPI_DEVICE_UPLOAD_CMDFIFO
+ 4'b 1111, // index[19] SPI_DEVICE_UPLOAD_ADDRFIFO
+ 4'b 1111, // index[20] SPI_DEVICE_CMD_FILTER_0
+ 4'b 1111, // index[21] SPI_DEVICE_CMD_FILTER_1
+ 4'b 1111, // index[22] SPI_DEVICE_CMD_FILTER_2
+ 4'b 1111, // index[23] SPI_DEVICE_CMD_FILTER_3
+ 4'b 1111, // index[24] SPI_DEVICE_CMD_FILTER_4
+ 4'b 1111, // index[25] SPI_DEVICE_CMD_FILTER_5
+ 4'b 1111, // index[26] SPI_DEVICE_CMD_FILTER_6
+ 4'b 1111, // index[27] SPI_DEVICE_CMD_FILTER_7
+ 4'b 1111, // index[28] SPI_DEVICE_ADDR_SWAP_MASK
+ 4'b 1111, // index[29] SPI_DEVICE_ADDR_SWAP_DATA
+ 4'b 1111, // index[30] SPI_DEVICE_CMD_INFO_0
+ 4'b 1111, // index[31] SPI_DEVICE_CMD_INFO_1
+ 4'b 1111, // index[32] SPI_DEVICE_CMD_INFO_2
+ 4'b 1111, // index[33] SPI_DEVICE_CMD_INFO_3
+ 4'b 1111, // index[34] SPI_DEVICE_CMD_INFO_4
+ 4'b 1111, // index[35] SPI_DEVICE_CMD_INFO_5
+ 4'b 1111, // index[36] SPI_DEVICE_CMD_INFO_6
+ 4'b 1111, // index[37] SPI_DEVICE_CMD_INFO_7
+ 4'b 1111, // index[38] SPI_DEVICE_CMD_INFO_8
+ 4'b 1111, // index[39] SPI_DEVICE_CMD_INFO_9
+ 4'b 1111, // index[40] SPI_DEVICE_CMD_INFO_10
+ 4'b 1111, // index[41] SPI_DEVICE_CMD_INFO_11
+ 4'b 1111, // index[42] SPI_DEVICE_CMD_INFO_12
+ 4'b 1111, // index[43] SPI_DEVICE_CMD_INFO_13
+ 4'b 1111, // index[44] SPI_DEVICE_CMD_INFO_14
+ 4'b 1111, // index[45] SPI_DEVICE_CMD_INFO_15
+ 4'b 1111, // index[46] SPI_DEVICE_CMD_INFO_16
+ 4'b 1111, // index[47] SPI_DEVICE_CMD_INFO_17
+ 4'b 1111, // index[48] SPI_DEVICE_CMD_INFO_18
+ 4'b 1111, // index[49] SPI_DEVICE_CMD_INFO_19
+ 4'b 1111, // index[50] SPI_DEVICE_CMD_INFO_20
+ 4'b 1111, // index[51] SPI_DEVICE_CMD_INFO_21
+ 4'b 1111, // index[52] SPI_DEVICE_CMD_INFO_22
+ 4'b 1111 // index[53] SPI_DEVICE_CMD_INFO_23
};
endpackage
diff --git a/hw/ip/spi_device/rtl/spi_device_reg_top.sv b/hw/ip/spi_device/rtl/spi_device_reg_top.sv
index fd349e0..53cceb7 100644
--- a/hw/ip/spi_device/rtl/spi_device_reg_top.sv
+++ b/hw/ip/spi_device/rtl/spi_device_reg_top.sv
@@ -264,6 +264,15 @@
logic read_threshold_we;
logic [9:0] read_threshold_qs;
logic [9:0] read_threshold_wd;
+ logic [4:0] upload_status_cmdfifo_depth_qs;
+ logic upload_status_cmdfifo_notempty_qs;
+ logic [4:0] upload_status_addrfifo_depth_qs;
+ logic upload_status_addrfifo_notempty_qs;
+ logic [8:0] upload_status_payload_depth_qs;
+ logic upload_cmdfifo_re;
+ logic [7:0] upload_cmdfifo_qs;
+ logic upload_addrfifo_re;
+ logic [31:0] upload_addrfifo_qs;
logic cmd_filter_0_we;
logic cmd_filter_0_filter_0_qs;
logic cmd_filter_0_filter_0_wd;
@@ -2581,6 +2590,170 @@
);
+ // R[upload_status]: V(False)
+
+ // F[cmdfifo_depth]: 4:0
+ prim_subreg #(
+ .DW (5),
+ .SwAccess(prim_subreg_pkg::SwAccessRO),
+ .RESVAL (5'h0)
+ ) u_upload_status_cmdfifo_depth (
+ .clk_i (clk_i),
+ .rst_ni (rst_ni),
+
+ // from register interface
+ .we (1'b0),
+ .wd ('0),
+
+ // from internal hardware
+ .de (hw2reg.upload_status.cmdfifo_depth.de),
+ .d (hw2reg.upload_status.cmdfifo_depth.d),
+
+ // to internal hardware
+ .qe (),
+ .q (),
+
+ // to register interface (read)
+ .qs (upload_status_cmdfifo_depth_qs)
+ );
+
+
+ // F[cmdfifo_notempty]: 7:7
+ prim_subreg #(
+ .DW (1),
+ .SwAccess(prim_subreg_pkg::SwAccessRO),
+ .RESVAL (1'h0)
+ ) u_upload_status_cmdfifo_notempty (
+ .clk_i (clk_i),
+ .rst_ni (rst_ni),
+
+ // from register interface
+ .we (1'b0),
+ .wd ('0),
+
+ // from internal hardware
+ .de (hw2reg.upload_status.cmdfifo_notempty.de),
+ .d (hw2reg.upload_status.cmdfifo_notempty.d),
+
+ // to internal hardware
+ .qe (),
+ .q (),
+
+ // to register interface (read)
+ .qs (upload_status_cmdfifo_notempty_qs)
+ );
+
+
+ // F[addrfifo_depth]: 12:8
+ prim_subreg #(
+ .DW (5),
+ .SwAccess(prim_subreg_pkg::SwAccessRO),
+ .RESVAL (5'h0)
+ ) u_upload_status_addrfifo_depth (
+ .clk_i (clk_i),
+ .rst_ni (rst_ni),
+
+ // from register interface
+ .we (1'b0),
+ .wd ('0),
+
+ // from internal hardware
+ .de (hw2reg.upload_status.addrfifo_depth.de),
+ .d (hw2reg.upload_status.addrfifo_depth.d),
+
+ // to internal hardware
+ .qe (),
+ .q (),
+
+ // to register interface (read)
+ .qs (upload_status_addrfifo_depth_qs)
+ );
+
+
+ // F[addrfifo_notempty]: 15:15
+ prim_subreg #(
+ .DW (1),
+ .SwAccess(prim_subreg_pkg::SwAccessRO),
+ .RESVAL (1'h0)
+ ) u_upload_status_addrfifo_notempty (
+ .clk_i (clk_i),
+ .rst_ni (rst_ni),
+
+ // from register interface
+ .we (1'b0),
+ .wd ('0),
+
+ // from internal hardware
+ .de (hw2reg.upload_status.addrfifo_notempty.de),
+ .d (hw2reg.upload_status.addrfifo_notempty.d),
+
+ // to internal hardware
+ .qe (),
+ .q (),
+
+ // to register interface (read)
+ .qs (upload_status_addrfifo_notempty_qs)
+ );
+
+
+ // F[payload_depth]: 24:16
+ prim_subreg #(
+ .DW (9),
+ .SwAccess(prim_subreg_pkg::SwAccessRO),
+ .RESVAL (9'h0)
+ ) u_upload_status_payload_depth (
+ .clk_i (clk_i),
+ .rst_ni (rst_ni),
+
+ // from register interface
+ .we (1'b0),
+ .wd ('0),
+
+ // from internal hardware
+ .de (hw2reg.upload_status.payload_depth.de),
+ .d (hw2reg.upload_status.payload_depth.d),
+
+ // to internal hardware
+ .qe (),
+ .q (),
+
+ // to register interface (read)
+ .qs (upload_status_payload_depth_qs)
+ );
+
+
+ // R[upload_cmdfifo]: V(True)
+
+ prim_subreg_ext #(
+ .DW (8)
+ ) u_upload_cmdfifo (
+ .re (upload_cmdfifo_re),
+ .we (1'b0),
+ .wd ('0),
+ .d (hw2reg.upload_cmdfifo.d),
+ .qre (reg2hw.upload_cmdfifo.re),
+ .qe (),
+ .q (reg2hw.upload_cmdfifo.q),
+ .qs (upload_cmdfifo_qs)
+ );
+
+
+ // R[upload_addrfifo]: V(True)
+
+ prim_subreg_ext #(
+ .DW (32)
+ ) u_upload_addrfifo (
+ .re (upload_addrfifo_re),
+ .we (1'b0),
+ .wd ('0),
+ .d (hw2reg.upload_addrfifo.d),
+ .qre (reg2hw.upload_addrfifo.re),
+ .qe (),
+ .q (reg2hw.upload_addrfifo.q),
+ .qs (upload_addrfifo_qs)
+ );
+
+
// Subregister 0 of Multireg cmd_filter
// R[cmd_filter_0]: V(False)
@@ -16257,7 +16430,7 @@
- logic [50:0] addr_hit;
+ logic [53:0] addr_hit;
always_comb begin
addr_hit = '0;
addr_hit[ 0] = (reg_addr == SPI_DEVICE_INTR_STATE_OFFSET);
@@ -16277,40 +16450,43 @@
addr_hit[14] = (reg_addr == SPI_DEVICE_FLASH_STATUS_OFFSET);
addr_hit[15] = (reg_addr == SPI_DEVICE_JEDEC_ID_OFFSET);
addr_hit[16] = (reg_addr == SPI_DEVICE_READ_THRESHOLD_OFFSET);
- addr_hit[17] = (reg_addr == SPI_DEVICE_CMD_FILTER_0_OFFSET);
- addr_hit[18] = (reg_addr == SPI_DEVICE_CMD_FILTER_1_OFFSET);
- addr_hit[19] = (reg_addr == SPI_DEVICE_CMD_FILTER_2_OFFSET);
- addr_hit[20] = (reg_addr == SPI_DEVICE_CMD_FILTER_3_OFFSET);
- addr_hit[21] = (reg_addr == SPI_DEVICE_CMD_FILTER_4_OFFSET);
- addr_hit[22] = (reg_addr == SPI_DEVICE_CMD_FILTER_5_OFFSET);
- addr_hit[23] = (reg_addr == SPI_DEVICE_CMD_FILTER_6_OFFSET);
- addr_hit[24] = (reg_addr == SPI_DEVICE_CMD_FILTER_7_OFFSET);
- addr_hit[25] = (reg_addr == SPI_DEVICE_ADDR_SWAP_MASK_OFFSET);
- addr_hit[26] = (reg_addr == SPI_DEVICE_ADDR_SWAP_DATA_OFFSET);
- addr_hit[27] = (reg_addr == SPI_DEVICE_CMD_INFO_0_OFFSET);
- addr_hit[28] = (reg_addr == SPI_DEVICE_CMD_INFO_1_OFFSET);
- addr_hit[29] = (reg_addr == SPI_DEVICE_CMD_INFO_2_OFFSET);
- addr_hit[30] = (reg_addr == SPI_DEVICE_CMD_INFO_3_OFFSET);
- addr_hit[31] = (reg_addr == SPI_DEVICE_CMD_INFO_4_OFFSET);
- addr_hit[32] = (reg_addr == SPI_DEVICE_CMD_INFO_5_OFFSET);
- addr_hit[33] = (reg_addr == SPI_DEVICE_CMD_INFO_6_OFFSET);
- addr_hit[34] = (reg_addr == SPI_DEVICE_CMD_INFO_7_OFFSET);
- addr_hit[35] = (reg_addr == SPI_DEVICE_CMD_INFO_8_OFFSET);
- addr_hit[36] = (reg_addr == SPI_DEVICE_CMD_INFO_9_OFFSET);
- addr_hit[37] = (reg_addr == SPI_DEVICE_CMD_INFO_10_OFFSET);
- addr_hit[38] = (reg_addr == SPI_DEVICE_CMD_INFO_11_OFFSET);
- addr_hit[39] = (reg_addr == SPI_DEVICE_CMD_INFO_12_OFFSET);
- addr_hit[40] = (reg_addr == SPI_DEVICE_CMD_INFO_13_OFFSET);
- addr_hit[41] = (reg_addr == SPI_DEVICE_CMD_INFO_14_OFFSET);
- addr_hit[42] = (reg_addr == SPI_DEVICE_CMD_INFO_15_OFFSET);
- addr_hit[43] = (reg_addr == SPI_DEVICE_CMD_INFO_16_OFFSET);
- addr_hit[44] = (reg_addr == SPI_DEVICE_CMD_INFO_17_OFFSET);
- addr_hit[45] = (reg_addr == SPI_DEVICE_CMD_INFO_18_OFFSET);
- addr_hit[46] = (reg_addr == SPI_DEVICE_CMD_INFO_19_OFFSET);
- addr_hit[47] = (reg_addr == SPI_DEVICE_CMD_INFO_20_OFFSET);
- addr_hit[48] = (reg_addr == SPI_DEVICE_CMD_INFO_21_OFFSET);
- addr_hit[49] = (reg_addr == SPI_DEVICE_CMD_INFO_22_OFFSET);
- addr_hit[50] = (reg_addr == SPI_DEVICE_CMD_INFO_23_OFFSET);
+ addr_hit[17] = (reg_addr == SPI_DEVICE_UPLOAD_STATUS_OFFSET);
+ addr_hit[18] = (reg_addr == SPI_DEVICE_UPLOAD_CMDFIFO_OFFSET);
+ addr_hit[19] = (reg_addr == SPI_DEVICE_UPLOAD_ADDRFIFO_OFFSET);
+ addr_hit[20] = (reg_addr == SPI_DEVICE_CMD_FILTER_0_OFFSET);
+ addr_hit[21] = (reg_addr == SPI_DEVICE_CMD_FILTER_1_OFFSET);
+ addr_hit[22] = (reg_addr == SPI_DEVICE_CMD_FILTER_2_OFFSET);
+ addr_hit[23] = (reg_addr == SPI_DEVICE_CMD_FILTER_3_OFFSET);
+ addr_hit[24] = (reg_addr == SPI_DEVICE_CMD_FILTER_4_OFFSET);
+ addr_hit[25] = (reg_addr == SPI_DEVICE_CMD_FILTER_5_OFFSET);
+ addr_hit[26] = (reg_addr == SPI_DEVICE_CMD_FILTER_6_OFFSET);
+ addr_hit[27] = (reg_addr == SPI_DEVICE_CMD_FILTER_7_OFFSET);
+ addr_hit[28] = (reg_addr == SPI_DEVICE_ADDR_SWAP_MASK_OFFSET);
+ addr_hit[29] = (reg_addr == SPI_DEVICE_ADDR_SWAP_DATA_OFFSET);
+ addr_hit[30] = (reg_addr == SPI_DEVICE_CMD_INFO_0_OFFSET);
+ addr_hit[31] = (reg_addr == SPI_DEVICE_CMD_INFO_1_OFFSET);
+ addr_hit[32] = (reg_addr == SPI_DEVICE_CMD_INFO_2_OFFSET);
+ addr_hit[33] = (reg_addr == SPI_DEVICE_CMD_INFO_3_OFFSET);
+ addr_hit[34] = (reg_addr == SPI_DEVICE_CMD_INFO_4_OFFSET);
+ addr_hit[35] = (reg_addr == SPI_DEVICE_CMD_INFO_5_OFFSET);
+ addr_hit[36] = (reg_addr == SPI_DEVICE_CMD_INFO_6_OFFSET);
+ addr_hit[37] = (reg_addr == SPI_DEVICE_CMD_INFO_7_OFFSET);
+ addr_hit[38] = (reg_addr == SPI_DEVICE_CMD_INFO_8_OFFSET);
+ addr_hit[39] = (reg_addr == SPI_DEVICE_CMD_INFO_9_OFFSET);
+ addr_hit[40] = (reg_addr == SPI_DEVICE_CMD_INFO_10_OFFSET);
+ addr_hit[41] = (reg_addr == SPI_DEVICE_CMD_INFO_11_OFFSET);
+ addr_hit[42] = (reg_addr == SPI_DEVICE_CMD_INFO_12_OFFSET);
+ addr_hit[43] = (reg_addr == SPI_DEVICE_CMD_INFO_13_OFFSET);
+ addr_hit[44] = (reg_addr == SPI_DEVICE_CMD_INFO_14_OFFSET);
+ addr_hit[45] = (reg_addr == SPI_DEVICE_CMD_INFO_15_OFFSET);
+ addr_hit[46] = (reg_addr == SPI_DEVICE_CMD_INFO_16_OFFSET);
+ addr_hit[47] = (reg_addr == SPI_DEVICE_CMD_INFO_17_OFFSET);
+ addr_hit[48] = (reg_addr == SPI_DEVICE_CMD_INFO_18_OFFSET);
+ addr_hit[49] = (reg_addr == SPI_DEVICE_CMD_INFO_19_OFFSET);
+ addr_hit[50] = (reg_addr == SPI_DEVICE_CMD_INFO_20_OFFSET);
+ addr_hit[51] = (reg_addr == SPI_DEVICE_CMD_INFO_21_OFFSET);
+ addr_hit[52] = (reg_addr == SPI_DEVICE_CMD_INFO_22_OFFSET);
+ addr_hit[53] = (reg_addr == SPI_DEVICE_CMD_INFO_23_OFFSET);
end
assign addrmiss = (reg_re || reg_we) ? ~|addr_hit : 1'b0 ;
@@ -16368,7 +16544,10 @@
(addr_hit[47] & (|(SPI_DEVICE_PERMIT[47] & ~reg_be))) |
(addr_hit[48] & (|(SPI_DEVICE_PERMIT[48] & ~reg_be))) |
(addr_hit[49] & (|(SPI_DEVICE_PERMIT[49] & ~reg_be))) |
- (addr_hit[50] & (|(SPI_DEVICE_PERMIT[50] & ~reg_be)))));
+ (addr_hit[50] & (|(SPI_DEVICE_PERMIT[50] & ~reg_be))) |
+ (addr_hit[51] & (|(SPI_DEVICE_PERMIT[51] & ~reg_be))) |
+ (addr_hit[52] & (|(SPI_DEVICE_PERMIT[52] & ~reg_be))) |
+ (addr_hit[53] & (|(SPI_DEVICE_PERMIT[53] & ~reg_be)))));
end
assign intr_state_we = addr_hit[0] & reg_we & !reg_error;
@@ -16474,7 +16653,9 @@
assign read_threshold_we = addr_hit[16] & reg_we & !reg_error;
assign read_threshold_wd = reg_wdata[9:0];
- assign cmd_filter_0_we = addr_hit[17] & reg_we & !reg_error;
+ assign upload_cmdfifo_re = addr_hit[18] & reg_re & !reg_error;
+ assign upload_addrfifo_re = addr_hit[19] & reg_re & !reg_error;
+ assign cmd_filter_0_we = addr_hit[20] & reg_we & !reg_error;
assign cmd_filter_0_filter_0_wd = reg_wdata[0];
@@ -16539,7 +16720,7 @@
assign cmd_filter_0_filter_30_wd = reg_wdata[30];
assign cmd_filter_0_filter_31_wd = reg_wdata[31];
- assign cmd_filter_1_we = addr_hit[18] & reg_we & !reg_error;
+ assign cmd_filter_1_we = addr_hit[21] & reg_we & !reg_error;
assign cmd_filter_1_filter_32_wd = reg_wdata[0];
@@ -16604,7 +16785,7 @@
assign cmd_filter_1_filter_62_wd = reg_wdata[30];
assign cmd_filter_1_filter_63_wd = reg_wdata[31];
- assign cmd_filter_2_we = addr_hit[19] & reg_we & !reg_error;
+ assign cmd_filter_2_we = addr_hit[22] & reg_we & !reg_error;
assign cmd_filter_2_filter_64_wd = reg_wdata[0];
@@ -16669,7 +16850,7 @@
assign cmd_filter_2_filter_94_wd = reg_wdata[30];
assign cmd_filter_2_filter_95_wd = reg_wdata[31];
- assign cmd_filter_3_we = addr_hit[20] & reg_we & !reg_error;
+ assign cmd_filter_3_we = addr_hit[23] & reg_we & !reg_error;
assign cmd_filter_3_filter_96_wd = reg_wdata[0];
@@ -16734,7 +16915,7 @@
assign cmd_filter_3_filter_126_wd = reg_wdata[30];
assign cmd_filter_3_filter_127_wd = reg_wdata[31];
- assign cmd_filter_4_we = addr_hit[21] & reg_we & !reg_error;
+ assign cmd_filter_4_we = addr_hit[24] & reg_we & !reg_error;
assign cmd_filter_4_filter_128_wd = reg_wdata[0];
@@ -16799,7 +16980,7 @@
assign cmd_filter_4_filter_158_wd = reg_wdata[30];
assign cmd_filter_4_filter_159_wd = reg_wdata[31];
- assign cmd_filter_5_we = addr_hit[22] & reg_we & !reg_error;
+ assign cmd_filter_5_we = addr_hit[25] & reg_we & !reg_error;
assign cmd_filter_5_filter_160_wd = reg_wdata[0];
@@ -16864,7 +17045,7 @@
assign cmd_filter_5_filter_190_wd = reg_wdata[30];
assign cmd_filter_5_filter_191_wd = reg_wdata[31];
- assign cmd_filter_6_we = addr_hit[23] & reg_we & !reg_error;
+ assign cmd_filter_6_we = addr_hit[26] & reg_we & !reg_error;
assign cmd_filter_6_filter_192_wd = reg_wdata[0];
@@ -16929,7 +17110,7 @@
assign cmd_filter_6_filter_222_wd = reg_wdata[30];
assign cmd_filter_6_filter_223_wd = reg_wdata[31];
- assign cmd_filter_7_we = addr_hit[24] & reg_we & !reg_error;
+ assign cmd_filter_7_we = addr_hit[27] & reg_we & !reg_error;
assign cmd_filter_7_filter_224_wd = reg_wdata[0];
@@ -16994,13 +17175,13 @@
assign cmd_filter_7_filter_254_wd = reg_wdata[30];
assign cmd_filter_7_filter_255_wd = reg_wdata[31];
- assign addr_swap_mask_we = addr_hit[25] & reg_we & !reg_error;
+ assign addr_swap_mask_we = addr_hit[28] & reg_we & !reg_error;
assign addr_swap_mask_wd = reg_wdata[31:0];
- assign addr_swap_data_we = addr_hit[26] & reg_we & !reg_error;
+ assign addr_swap_data_we = addr_hit[29] & reg_we & !reg_error;
assign addr_swap_data_wd = reg_wdata[31:0];
- assign cmd_info_0_we = addr_hit[27] & reg_we & !reg_error;
+ assign cmd_info_0_we = addr_hit[30] & reg_we & !reg_error;
assign cmd_info_0_opcode_0_wd = reg_wdata[7:0];
@@ -17023,7 +17204,7 @@
assign cmd_info_0_upload_0_wd = reg_wdata[24];
assign cmd_info_0_busy_0_wd = reg_wdata[25];
- assign cmd_info_1_we = addr_hit[28] & reg_we & !reg_error;
+ assign cmd_info_1_we = addr_hit[31] & reg_we & !reg_error;
assign cmd_info_1_opcode_1_wd = reg_wdata[7:0];
@@ -17046,7 +17227,7 @@
assign cmd_info_1_upload_1_wd = reg_wdata[24];
assign cmd_info_1_busy_1_wd = reg_wdata[25];
- assign cmd_info_2_we = addr_hit[29] & reg_we & !reg_error;
+ assign cmd_info_2_we = addr_hit[32] & reg_we & !reg_error;
assign cmd_info_2_opcode_2_wd = reg_wdata[7:0];
@@ -17069,7 +17250,7 @@
assign cmd_info_2_upload_2_wd = reg_wdata[24];
assign cmd_info_2_busy_2_wd = reg_wdata[25];
- assign cmd_info_3_we = addr_hit[30] & reg_we & !reg_error;
+ assign cmd_info_3_we = addr_hit[33] & reg_we & !reg_error;
assign cmd_info_3_opcode_3_wd = reg_wdata[7:0];
@@ -17092,7 +17273,7 @@
assign cmd_info_3_upload_3_wd = reg_wdata[24];
assign cmd_info_3_busy_3_wd = reg_wdata[25];
- assign cmd_info_4_we = addr_hit[31] & reg_we & !reg_error;
+ assign cmd_info_4_we = addr_hit[34] & reg_we & !reg_error;
assign cmd_info_4_opcode_4_wd = reg_wdata[7:0];
@@ -17115,7 +17296,7 @@
assign cmd_info_4_upload_4_wd = reg_wdata[24];
assign cmd_info_4_busy_4_wd = reg_wdata[25];
- assign cmd_info_5_we = addr_hit[32] & reg_we & !reg_error;
+ assign cmd_info_5_we = addr_hit[35] & reg_we & !reg_error;
assign cmd_info_5_opcode_5_wd = reg_wdata[7:0];
@@ -17138,7 +17319,7 @@
assign cmd_info_5_upload_5_wd = reg_wdata[24];
assign cmd_info_5_busy_5_wd = reg_wdata[25];
- assign cmd_info_6_we = addr_hit[33] & reg_we & !reg_error;
+ assign cmd_info_6_we = addr_hit[36] & reg_we & !reg_error;
assign cmd_info_6_opcode_6_wd = reg_wdata[7:0];
@@ -17161,7 +17342,7 @@
assign cmd_info_6_upload_6_wd = reg_wdata[24];
assign cmd_info_6_busy_6_wd = reg_wdata[25];
- assign cmd_info_7_we = addr_hit[34] & reg_we & !reg_error;
+ assign cmd_info_7_we = addr_hit[37] & reg_we & !reg_error;
assign cmd_info_7_opcode_7_wd = reg_wdata[7:0];
@@ -17184,7 +17365,7 @@
assign cmd_info_7_upload_7_wd = reg_wdata[24];
assign cmd_info_7_busy_7_wd = reg_wdata[25];
- assign cmd_info_8_we = addr_hit[35] & reg_we & !reg_error;
+ assign cmd_info_8_we = addr_hit[38] & reg_we & !reg_error;
assign cmd_info_8_opcode_8_wd = reg_wdata[7:0];
@@ -17207,7 +17388,7 @@
assign cmd_info_8_upload_8_wd = reg_wdata[24];
assign cmd_info_8_busy_8_wd = reg_wdata[25];
- assign cmd_info_9_we = addr_hit[36] & reg_we & !reg_error;
+ assign cmd_info_9_we = addr_hit[39] & reg_we & !reg_error;
assign cmd_info_9_opcode_9_wd = reg_wdata[7:0];
@@ -17230,7 +17411,7 @@
assign cmd_info_9_upload_9_wd = reg_wdata[24];
assign cmd_info_9_busy_9_wd = reg_wdata[25];
- assign cmd_info_10_we = addr_hit[37] & reg_we & !reg_error;
+ assign cmd_info_10_we = addr_hit[40] & reg_we & !reg_error;
assign cmd_info_10_opcode_10_wd = reg_wdata[7:0];
@@ -17253,7 +17434,7 @@
assign cmd_info_10_upload_10_wd = reg_wdata[24];
assign cmd_info_10_busy_10_wd = reg_wdata[25];
- assign cmd_info_11_we = addr_hit[38] & reg_we & !reg_error;
+ assign cmd_info_11_we = addr_hit[41] & reg_we & !reg_error;
assign cmd_info_11_opcode_11_wd = reg_wdata[7:0];
@@ -17276,7 +17457,7 @@
assign cmd_info_11_upload_11_wd = reg_wdata[24];
assign cmd_info_11_busy_11_wd = reg_wdata[25];
- assign cmd_info_12_we = addr_hit[39] & reg_we & !reg_error;
+ assign cmd_info_12_we = addr_hit[42] & reg_we & !reg_error;
assign cmd_info_12_opcode_12_wd = reg_wdata[7:0];
@@ -17299,7 +17480,7 @@
assign cmd_info_12_upload_12_wd = reg_wdata[24];
assign cmd_info_12_busy_12_wd = reg_wdata[25];
- assign cmd_info_13_we = addr_hit[40] & reg_we & !reg_error;
+ assign cmd_info_13_we = addr_hit[43] & reg_we & !reg_error;
assign cmd_info_13_opcode_13_wd = reg_wdata[7:0];
@@ -17322,7 +17503,7 @@
assign cmd_info_13_upload_13_wd = reg_wdata[24];
assign cmd_info_13_busy_13_wd = reg_wdata[25];
- assign cmd_info_14_we = addr_hit[41] & reg_we & !reg_error;
+ assign cmd_info_14_we = addr_hit[44] & reg_we & !reg_error;
assign cmd_info_14_opcode_14_wd = reg_wdata[7:0];
@@ -17345,7 +17526,7 @@
assign cmd_info_14_upload_14_wd = reg_wdata[24];
assign cmd_info_14_busy_14_wd = reg_wdata[25];
- assign cmd_info_15_we = addr_hit[42] & reg_we & !reg_error;
+ assign cmd_info_15_we = addr_hit[45] & reg_we & !reg_error;
assign cmd_info_15_opcode_15_wd = reg_wdata[7:0];
@@ -17368,7 +17549,7 @@
assign cmd_info_15_upload_15_wd = reg_wdata[24];
assign cmd_info_15_busy_15_wd = reg_wdata[25];
- assign cmd_info_16_we = addr_hit[43] & reg_we & !reg_error;
+ assign cmd_info_16_we = addr_hit[46] & reg_we & !reg_error;
assign cmd_info_16_opcode_16_wd = reg_wdata[7:0];
@@ -17391,7 +17572,7 @@
assign cmd_info_16_upload_16_wd = reg_wdata[24];
assign cmd_info_16_busy_16_wd = reg_wdata[25];
- assign cmd_info_17_we = addr_hit[44] & reg_we & !reg_error;
+ assign cmd_info_17_we = addr_hit[47] & reg_we & !reg_error;
assign cmd_info_17_opcode_17_wd = reg_wdata[7:0];
@@ -17414,7 +17595,7 @@
assign cmd_info_17_upload_17_wd = reg_wdata[24];
assign cmd_info_17_busy_17_wd = reg_wdata[25];
- assign cmd_info_18_we = addr_hit[45] & reg_we & !reg_error;
+ assign cmd_info_18_we = addr_hit[48] & reg_we & !reg_error;
assign cmd_info_18_opcode_18_wd = reg_wdata[7:0];
@@ -17437,7 +17618,7 @@
assign cmd_info_18_upload_18_wd = reg_wdata[24];
assign cmd_info_18_busy_18_wd = reg_wdata[25];
- assign cmd_info_19_we = addr_hit[46] & reg_we & !reg_error;
+ assign cmd_info_19_we = addr_hit[49] & reg_we & !reg_error;
assign cmd_info_19_opcode_19_wd = reg_wdata[7:0];
@@ -17460,7 +17641,7 @@
assign cmd_info_19_upload_19_wd = reg_wdata[24];
assign cmd_info_19_busy_19_wd = reg_wdata[25];
- assign cmd_info_20_we = addr_hit[47] & reg_we & !reg_error;
+ assign cmd_info_20_we = addr_hit[50] & reg_we & !reg_error;
assign cmd_info_20_opcode_20_wd = reg_wdata[7:0];
@@ -17483,7 +17664,7 @@
assign cmd_info_20_upload_20_wd = reg_wdata[24];
assign cmd_info_20_busy_20_wd = reg_wdata[25];
- assign cmd_info_21_we = addr_hit[48] & reg_we & !reg_error;
+ assign cmd_info_21_we = addr_hit[51] & reg_we & !reg_error;
assign cmd_info_21_opcode_21_wd = reg_wdata[7:0];
@@ -17506,7 +17687,7 @@
assign cmd_info_21_upload_21_wd = reg_wdata[24];
assign cmd_info_21_busy_21_wd = reg_wdata[25];
- assign cmd_info_22_we = addr_hit[49] & reg_we & !reg_error;
+ assign cmd_info_22_we = addr_hit[52] & reg_we & !reg_error;
assign cmd_info_22_opcode_22_wd = reg_wdata[7:0];
@@ -17529,7 +17710,7 @@
assign cmd_info_22_upload_22_wd = reg_wdata[24];
assign cmd_info_22_busy_22_wd = reg_wdata[25];
- assign cmd_info_23_we = addr_hit[50] & reg_we & !reg_error;
+ assign cmd_info_23_we = addr_hit[53] & reg_we & !reg_error;
assign cmd_info_23_opcode_23_wd = reg_wdata[7:0];
@@ -17663,6 +17844,22 @@
end
addr_hit[17]: begin
+ reg_rdata_next[4:0] = upload_status_cmdfifo_depth_qs;
+ reg_rdata_next[7] = upload_status_cmdfifo_notempty_qs;
+ reg_rdata_next[12:8] = upload_status_addrfifo_depth_qs;
+ reg_rdata_next[15] = upload_status_addrfifo_notempty_qs;
+ reg_rdata_next[24:16] = upload_status_payload_depth_qs;
+ end
+
+ addr_hit[18]: begin
+ reg_rdata_next[7:0] = upload_cmdfifo_qs;
+ end
+
+ addr_hit[19]: begin
+ reg_rdata_next[31:0] = upload_addrfifo_qs;
+ end
+
+ addr_hit[20]: begin
reg_rdata_next[0] = cmd_filter_0_filter_0_qs;
reg_rdata_next[1] = cmd_filter_0_filter_1_qs;
reg_rdata_next[2] = cmd_filter_0_filter_2_qs;
@@ -17697,7 +17894,7 @@
reg_rdata_next[31] = cmd_filter_0_filter_31_qs;
end
- addr_hit[18]: begin
+ addr_hit[21]: begin
reg_rdata_next[0] = cmd_filter_1_filter_32_qs;
reg_rdata_next[1] = cmd_filter_1_filter_33_qs;
reg_rdata_next[2] = cmd_filter_1_filter_34_qs;
@@ -17732,7 +17929,7 @@
reg_rdata_next[31] = cmd_filter_1_filter_63_qs;
end
- addr_hit[19]: begin
+ addr_hit[22]: begin
reg_rdata_next[0] = cmd_filter_2_filter_64_qs;
reg_rdata_next[1] = cmd_filter_2_filter_65_qs;
reg_rdata_next[2] = cmd_filter_2_filter_66_qs;
@@ -17767,7 +17964,7 @@
reg_rdata_next[31] = cmd_filter_2_filter_95_qs;
end
- addr_hit[20]: begin
+ addr_hit[23]: begin
reg_rdata_next[0] = cmd_filter_3_filter_96_qs;
reg_rdata_next[1] = cmd_filter_3_filter_97_qs;
reg_rdata_next[2] = cmd_filter_3_filter_98_qs;
@@ -17802,7 +17999,7 @@
reg_rdata_next[31] = cmd_filter_3_filter_127_qs;
end
- addr_hit[21]: begin
+ addr_hit[24]: begin
reg_rdata_next[0] = cmd_filter_4_filter_128_qs;
reg_rdata_next[1] = cmd_filter_4_filter_129_qs;
reg_rdata_next[2] = cmd_filter_4_filter_130_qs;
@@ -17837,7 +18034,7 @@
reg_rdata_next[31] = cmd_filter_4_filter_159_qs;
end
- addr_hit[22]: begin
+ addr_hit[25]: begin
reg_rdata_next[0] = cmd_filter_5_filter_160_qs;
reg_rdata_next[1] = cmd_filter_5_filter_161_qs;
reg_rdata_next[2] = cmd_filter_5_filter_162_qs;
@@ -17872,7 +18069,7 @@
reg_rdata_next[31] = cmd_filter_5_filter_191_qs;
end
- addr_hit[23]: begin
+ addr_hit[26]: begin
reg_rdata_next[0] = cmd_filter_6_filter_192_qs;
reg_rdata_next[1] = cmd_filter_6_filter_193_qs;
reg_rdata_next[2] = cmd_filter_6_filter_194_qs;
@@ -17907,7 +18104,7 @@
reg_rdata_next[31] = cmd_filter_6_filter_223_qs;
end
- addr_hit[24]: begin
+ addr_hit[27]: begin
reg_rdata_next[0] = cmd_filter_7_filter_224_qs;
reg_rdata_next[1] = cmd_filter_7_filter_225_qs;
reg_rdata_next[2] = cmd_filter_7_filter_226_qs;
@@ -17942,15 +18139,15 @@
reg_rdata_next[31] = cmd_filter_7_filter_255_qs;
end
- addr_hit[25]: begin
+ addr_hit[28]: begin
reg_rdata_next[31:0] = addr_swap_mask_qs;
end
- addr_hit[26]: begin
+ addr_hit[29]: begin
reg_rdata_next[31:0] = addr_swap_data_qs;
end
- addr_hit[27]: begin
+ addr_hit[30]: begin
reg_rdata_next[7:0] = cmd_info_0_opcode_0_qs;
reg_rdata_next[8] = cmd_info_0_addr_en_0_qs;
reg_rdata_next[9] = cmd_info_0_addr_swap_en_0_qs;
@@ -17964,7 +18161,7 @@
reg_rdata_next[25] = cmd_info_0_busy_0_qs;
end
- addr_hit[28]: begin
+ addr_hit[31]: begin
reg_rdata_next[7:0] = cmd_info_1_opcode_1_qs;
reg_rdata_next[8] = cmd_info_1_addr_en_1_qs;
reg_rdata_next[9] = cmd_info_1_addr_swap_en_1_qs;
@@ -17978,7 +18175,7 @@
reg_rdata_next[25] = cmd_info_1_busy_1_qs;
end
- addr_hit[29]: begin
+ addr_hit[32]: begin
reg_rdata_next[7:0] = cmd_info_2_opcode_2_qs;
reg_rdata_next[8] = cmd_info_2_addr_en_2_qs;
reg_rdata_next[9] = cmd_info_2_addr_swap_en_2_qs;
@@ -17992,7 +18189,7 @@
reg_rdata_next[25] = cmd_info_2_busy_2_qs;
end
- addr_hit[30]: begin
+ addr_hit[33]: begin
reg_rdata_next[7:0] = cmd_info_3_opcode_3_qs;
reg_rdata_next[8] = cmd_info_3_addr_en_3_qs;
reg_rdata_next[9] = cmd_info_3_addr_swap_en_3_qs;
@@ -18006,7 +18203,7 @@
reg_rdata_next[25] = cmd_info_3_busy_3_qs;
end
- addr_hit[31]: begin
+ addr_hit[34]: begin
reg_rdata_next[7:0] = cmd_info_4_opcode_4_qs;
reg_rdata_next[8] = cmd_info_4_addr_en_4_qs;
reg_rdata_next[9] = cmd_info_4_addr_swap_en_4_qs;
@@ -18020,7 +18217,7 @@
reg_rdata_next[25] = cmd_info_4_busy_4_qs;
end
- addr_hit[32]: begin
+ addr_hit[35]: begin
reg_rdata_next[7:0] = cmd_info_5_opcode_5_qs;
reg_rdata_next[8] = cmd_info_5_addr_en_5_qs;
reg_rdata_next[9] = cmd_info_5_addr_swap_en_5_qs;
@@ -18034,7 +18231,7 @@
reg_rdata_next[25] = cmd_info_5_busy_5_qs;
end
- addr_hit[33]: begin
+ addr_hit[36]: begin
reg_rdata_next[7:0] = cmd_info_6_opcode_6_qs;
reg_rdata_next[8] = cmd_info_6_addr_en_6_qs;
reg_rdata_next[9] = cmd_info_6_addr_swap_en_6_qs;
@@ -18048,7 +18245,7 @@
reg_rdata_next[25] = cmd_info_6_busy_6_qs;
end
- addr_hit[34]: begin
+ addr_hit[37]: begin
reg_rdata_next[7:0] = cmd_info_7_opcode_7_qs;
reg_rdata_next[8] = cmd_info_7_addr_en_7_qs;
reg_rdata_next[9] = cmd_info_7_addr_swap_en_7_qs;
@@ -18062,7 +18259,7 @@
reg_rdata_next[25] = cmd_info_7_busy_7_qs;
end
- addr_hit[35]: begin
+ addr_hit[38]: begin
reg_rdata_next[7:0] = cmd_info_8_opcode_8_qs;
reg_rdata_next[8] = cmd_info_8_addr_en_8_qs;
reg_rdata_next[9] = cmd_info_8_addr_swap_en_8_qs;
@@ -18076,7 +18273,7 @@
reg_rdata_next[25] = cmd_info_8_busy_8_qs;
end
- addr_hit[36]: begin
+ addr_hit[39]: begin
reg_rdata_next[7:0] = cmd_info_9_opcode_9_qs;
reg_rdata_next[8] = cmd_info_9_addr_en_9_qs;
reg_rdata_next[9] = cmd_info_9_addr_swap_en_9_qs;
@@ -18090,7 +18287,7 @@
reg_rdata_next[25] = cmd_info_9_busy_9_qs;
end
- addr_hit[37]: begin
+ addr_hit[40]: begin
reg_rdata_next[7:0] = cmd_info_10_opcode_10_qs;
reg_rdata_next[8] = cmd_info_10_addr_en_10_qs;
reg_rdata_next[9] = cmd_info_10_addr_swap_en_10_qs;
@@ -18104,7 +18301,7 @@
reg_rdata_next[25] = cmd_info_10_busy_10_qs;
end
- addr_hit[38]: begin
+ addr_hit[41]: begin
reg_rdata_next[7:0] = cmd_info_11_opcode_11_qs;
reg_rdata_next[8] = cmd_info_11_addr_en_11_qs;
reg_rdata_next[9] = cmd_info_11_addr_swap_en_11_qs;
@@ -18118,7 +18315,7 @@
reg_rdata_next[25] = cmd_info_11_busy_11_qs;
end
- addr_hit[39]: begin
+ addr_hit[42]: begin
reg_rdata_next[7:0] = cmd_info_12_opcode_12_qs;
reg_rdata_next[8] = cmd_info_12_addr_en_12_qs;
reg_rdata_next[9] = cmd_info_12_addr_swap_en_12_qs;
@@ -18132,7 +18329,7 @@
reg_rdata_next[25] = cmd_info_12_busy_12_qs;
end
- addr_hit[40]: begin
+ addr_hit[43]: begin
reg_rdata_next[7:0] = cmd_info_13_opcode_13_qs;
reg_rdata_next[8] = cmd_info_13_addr_en_13_qs;
reg_rdata_next[9] = cmd_info_13_addr_swap_en_13_qs;
@@ -18146,7 +18343,7 @@
reg_rdata_next[25] = cmd_info_13_busy_13_qs;
end
- addr_hit[41]: begin
+ addr_hit[44]: begin
reg_rdata_next[7:0] = cmd_info_14_opcode_14_qs;
reg_rdata_next[8] = cmd_info_14_addr_en_14_qs;
reg_rdata_next[9] = cmd_info_14_addr_swap_en_14_qs;
@@ -18160,7 +18357,7 @@
reg_rdata_next[25] = cmd_info_14_busy_14_qs;
end
- addr_hit[42]: begin
+ addr_hit[45]: begin
reg_rdata_next[7:0] = cmd_info_15_opcode_15_qs;
reg_rdata_next[8] = cmd_info_15_addr_en_15_qs;
reg_rdata_next[9] = cmd_info_15_addr_swap_en_15_qs;
@@ -18174,7 +18371,7 @@
reg_rdata_next[25] = cmd_info_15_busy_15_qs;
end
- addr_hit[43]: begin
+ addr_hit[46]: begin
reg_rdata_next[7:0] = cmd_info_16_opcode_16_qs;
reg_rdata_next[8] = cmd_info_16_addr_en_16_qs;
reg_rdata_next[9] = cmd_info_16_addr_swap_en_16_qs;
@@ -18188,7 +18385,7 @@
reg_rdata_next[25] = cmd_info_16_busy_16_qs;
end
- addr_hit[44]: begin
+ addr_hit[47]: begin
reg_rdata_next[7:0] = cmd_info_17_opcode_17_qs;
reg_rdata_next[8] = cmd_info_17_addr_en_17_qs;
reg_rdata_next[9] = cmd_info_17_addr_swap_en_17_qs;
@@ -18202,7 +18399,7 @@
reg_rdata_next[25] = cmd_info_17_busy_17_qs;
end
- addr_hit[45]: begin
+ addr_hit[48]: begin
reg_rdata_next[7:0] = cmd_info_18_opcode_18_qs;
reg_rdata_next[8] = cmd_info_18_addr_en_18_qs;
reg_rdata_next[9] = cmd_info_18_addr_swap_en_18_qs;
@@ -18216,7 +18413,7 @@
reg_rdata_next[25] = cmd_info_18_busy_18_qs;
end
- addr_hit[46]: begin
+ addr_hit[49]: begin
reg_rdata_next[7:0] = cmd_info_19_opcode_19_qs;
reg_rdata_next[8] = cmd_info_19_addr_en_19_qs;
reg_rdata_next[9] = cmd_info_19_addr_swap_en_19_qs;
@@ -18230,7 +18427,7 @@
reg_rdata_next[25] = cmd_info_19_busy_19_qs;
end
- addr_hit[47]: begin
+ addr_hit[50]: begin
reg_rdata_next[7:0] = cmd_info_20_opcode_20_qs;
reg_rdata_next[8] = cmd_info_20_addr_en_20_qs;
reg_rdata_next[9] = cmd_info_20_addr_swap_en_20_qs;
@@ -18244,7 +18441,7 @@
reg_rdata_next[25] = cmd_info_20_busy_20_qs;
end
- addr_hit[48]: begin
+ addr_hit[51]: begin
reg_rdata_next[7:0] = cmd_info_21_opcode_21_qs;
reg_rdata_next[8] = cmd_info_21_addr_en_21_qs;
reg_rdata_next[9] = cmd_info_21_addr_swap_en_21_qs;
@@ -18258,7 +18455,7 @@
reg_rdata_next[25] = cmd_info_21_busy_21_qs;
end
- addr_hit[49]: begin
+ addr_hit[52]: begin
reg_rdata_next[7:0] = cmd_info_22_opcode_22_qs;
reg_rdata_next[8] = cmd_info_22_addr_en_22_qs;
reg_rdata_next[9] = cmd_info_22_addr_swap_en_22_qs;
@@ -18272,7 +18469,7 @@
reg_rdata_next[25] = cmd_info_22_busy_22_qs;
end
- addr_hit[50]: begin
+ addr_hit[53]: begin
reg_rdata_next[7:0] = cmd_info_23_opcode_23_qs;
reg_rdata_next[8] = cmd_info_23_addr_en_23_qs;
reg_rdata_next[9] = cmd_info_23_addr_swap_en_23_qs;
diff --git a/hw/ip/spi_device/rtl/spid_upload.sv b/hw/ip/spi_device/rtl/spid_upload.sv
index eeb68d6..3f72012 100644
--- a/hw/ip/spi_device/rtl/spid_upload.sv
+++ b/hw/ip/spi_device/rtl/spid_upload.sv
@@ -45,9 +45,8 @@
localparam int unsigned CmdPtrW = $clog2(CmdFifoDepth+1),
localparam int unsigned AddrPtrW = $clog2(AddrFifoDepth+1),
- localparam int unsigned PayloadByte = PayloadDepth * (SramDw/SpiByte),
- localparam int unsigned PayloadW = $clog2(PayloadByte),
- localparam int unsigned PayloadPtrW = $clog2(PayloadByte+1)
+ localparam int unsigned PayloadByte = PayloadDepth * (SramDw/SpiByte),
+ localparam int unsigned PayloadPtrW = $clog2(PayloadByte+1)
) (
input clk_i,
input rst_ni,
@@ -107,6 +106,8 @@
output logic sys_addrfifo_notempty_o,
output logic sys_addrfifo_full_o,
+ output logic [CmdPtrW-1:0] sys_cmdfifo_depth_o,
+ output logic [AddrPtrW-1:0] sys_addrfifo_depth_o,
output logic [PayloadPtrW-1:0] sys_payload_depth_o
);
@@ -382,7 +383,7 @@
.rvalid_o (sys_cmdfifo_rvalid_o),
.rready_i (sys_cmdfifo_rready_i),
.rdata_o (sys_cmdfifo_rdata_o),
- .rdepth_o (), // not used
+ .rdepth_o (sys_cmdfifo_depth_o),
.r_full_o (sys_cmdfifo_full_o),
.r_notempty_o (sys_cmdfifo_notempty_o),
@@ -443,7 +444,7 @@
.rvalid_o (sys_addrfifo_rvalid_o),
.rready_i (sys_addrfifo_rready_i),
.rdata_o (sys_addrfifo_rdata_o),
- .rdepth_o (),
+ .rdepth_o (sys_addrfifo_depth_o),
.r_full_o (sys_addrfifo_full_o),
.r_notempty_o (sys_addrfifo_notempty_o),