[edn/rtl] halt function The enable bit will act like a reset to this module. Signed-off-by: Mark Branstad <mark.branstad@wdc.com>
diff --git a/hw/ip/edn/rtl/edn_ack_sm.sv b/hw/ip/edn/rtl/edn_ack_sm.sv index 8e5fc9e..a302d18 100644 --- a/hw/ip/edn/rtl/edn_ack_sm.sv +++ b/hw/ip/edn/rtl/edn_ack_sm.sv
@@ -9,6 +9,7 @@ input logic clk_i, input logic rst_ni, + input logic enable_i, input logic req_i, output logic ack_o, input logic fifo_not_empty_i, @@ -69,16 +70,22 @@ ack_sm_err_o = 1'b0; unique case (state_q) Idle: begin - if (req_i) begin - if (fifo_not_empty_i) begin - fifo_pop_o = 1'b1; + if (enable_i) begin + if (req_i) begin + if (fifo_not_empty_i) begin + fifo_pop_o = 1'b1; + end + state_d = DataWait; end - state_d = DataWait; end end DataWait: begin - if (fifo_not_empty_i) begin - state_d = AckPls; + if (!enable_i) begin + state_d = Idle; + end else begin + if (fifo_not_empty_i) begin + state_d = AckPls; + end end end AckPls: begin
diff --git a/hw/ip/edn/rtl/edn_core.sv b/hw/ip/edn/rtl/edn_core.sv index 645002a..87429ae 100644 --- a/hw/ip/edn/rtl/edn_core.sv +++ b/hw/ip/edn/rtl/edn_core.sv
@@ -313,19 +313,25 @@ assign generate_cmd_bus = reg2hw.generate_cmd.q; assign cs_cmd_req_d = + (!edn_enable) ? '0 : boot_wr_cmd_reg ? BootInsCmd : sw_cmd_req_load ? sw_cmd_req_bus : cs_cmd_req_q; - assign cs_cmd_req_vld_d = (sw_cmd_req_load || boot_wr_cmd_reg); // cmd reg write + assign cs_cmd_req_vld_d = + (!edn_enable) ? '0 : + (sw_cmd_req_load || boot_wr_cmd_reg); // cmd reg write assign cs_cmd_req_out_d = + (!edn_enable) ? '0 : (!seq_auto_req_mode) ? cs_cmd_req_q : send_rescmd ? sfifo_rescmd_rdata : send_gencmd ? sfifo_gencmd_rdata : cs_cmd_req_out_q; - assign cs_cmd_req_vld_out_d = seq_auto_req_mode ? (send_rescmd || send_gencmd) : + assign cs_cmd_req_vld_out_d = + (!edn_enable) ? '0 : + seq_auto_req_mode ? (send_rescmd || send_gencmd) : cs_cmd_req_vld_q; // drive outputs @@ -360,7 +366,10 @@ ); // feedback cmd back into rescmd fifo - assign send_rescmd_d = send_rescmd; + assign send_rescmd_d = + (!edn_enable) ? '0 : + send_rescmd; + assign sfifo_rescmd_push = seq_auto_req_mode ? send_rescmd_q : reseed_cmd_load; @@ -369,7 +378,9 @@ assign sfifo_rescmd_pop = send_rescmd; - assign sfifo_rescmd_clr = (cmd_fifo_rst || auto_req_mode_end); + assign sfifo_rescmd_clr = + (!edn_enable) ? '0 : + (cmd_fifo_rst || auto_req_mode_end); assign sfifo_rescmd_err = {(sfifo_rescmd_push && sfifo_rescmd_full), @@ -396,20 +407,27 @@ ); // feedback cmd back into gencmd fifo - assign send_gencmd_d = send_gencmd; + assign send_gencmd_d = + (!edn_enable) ? '0 : + send_gencmd; + assign sfifo_gencmd_push = + (!edn_enable) ? '0 : boot_wr_cmd_genfifo ? 1'b1 : seq_auto_req_mode ? send_gencmd_q : generate_cmd_load; assign sfifo_gencmd_wdata = + (!edn_enable) ? '0 : boot_wr_cmd_genfifo ? BootGenCmd : seq_auto_req_mode ? cs_cmd_req_out_q : generate_cmd_bus; assign sfifo_gencmd_pop = send_gencmd; - assign sfifo_gencmd_clr = (cmd_fifo_rst || auto_req_mode_end); + assign sfifo_gencmd_clr = + (!edn_enable) ? '0 : + (cmd_fifo_rst || auto_req_mode_end); assign sfifo_gencmd_err = {(sfifo_gencmd_push && sfifo_gencmd_full), @@ -448,6 +466,7 @@ assign cmd_fifo_cnt_d = + (!edn_enable) ? '0 : (cmd_fifo_rst || !seq_auto_req_mode) ? '0 : capt_gencmd_fifo_cnt ? (sfifo_gencmd_depth) : capt_rescmd_fifo_cnt ? (sfifo_rescmd_depth) : @@ -465,7 +484,10 @@ boot_request ? 1'b1 : boot_req_q[0]; - assign boot_req_d[3:1] = boot_req_q[2:0]; + assign boot_req_d[3:1] = + (!edn_enable) ? '0 : + boot_req_q[2:0]; + assign boot_wr_cmd_reg = !boot_req_q[1] && boot_req_q[0]; assign boot_wr_cmd_genfifo =!boot_req_q[2] && boot_req_q[1]; assign boot_auto_req = !boot_req_q[3] && boot_req_q[2]; @@ -534,7 +556,8 @@ assign packer_cs_rready = packer_arb_valid; assign packer_arb_ready = packer_cs_rvalid; - assign csrng_fips_d = !edn_enable ? 1'b0 : + assign csrng_fips_d = + !edn_enable ? 1'b0 : (packer_cs_push && packer_cs_wready) ? csrng_cmd_i.genbits_fips : csrng_fips_q; @@ -577,6 +600,7 @@ edn_ack_sm u_edn_ack_sm_ep ( .clk_i (clk_i), .rst_ni (rst_ni), + .enable_i (edn_enable), .req_i (edn_i[i].edn_req), .ack_o (packer_ep_ack[i]), .fifo_not_empty_i (packer_ep_rvalid[i]),