[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]),