aboutsummaryrefslogtreecommitdiffstats
path: root/fpga/usrp3
diff options
context:
space:
mode:
authorWade Fife <wade.fife@ettus.com>2020-08-24 21:33:19 -0500
committerWade Fife <wade.fife@ettus.com>2020-08-28 15:02:41 -0500
commit7c849afec4dad605ff6f32f7319933f99a4cd1ce (patch)
tree53c3da014e6ae447aad5b5b76281caae7b5571ab /fpga/usrp3
parent00f683c91486647f1711eb4c0b0a917078d29652 (diff)
downloaduhd-7c849afec4dad605ff6f32f7319933f99a4cd1ce.tar.gz
uhd-7c849afec4dad605ff6f32f7319933f99a4cd1ce.tar.bz2
uhd-7c849afec4dad605ff6f32f7319933f99a4cd1ce.zip
fpga: rfnoc: Update CHDR stream INIT command
This changes the behavior of the stream command with the INIT OpCode such that sending the command with 0 for the values causes no flow control stream status packets to be sent in response to incoming data.
Diffstat (limited to 'fpga/usrp3')
-rw-r--r--fpga/usrp3/lib/rfnoc/core/chdr_stream_input.v13
1 files changed, 10 insertions, 3 deletions
diff --git a/fpga/usrp3/lib/rfnoc/core/chdr_stream_input.v b/fpga/usrp3/lib/rfnoc/core/chdr_stream_input.v
index 2a8a9c628..0f5ec8964 100644
--- a/fpga/usrp3/lib/rfnoc/core/chdr_stream_input.v
+++ b/fpga/usrp3/lib/rfnoc/core/chdr_stream_input.v
@@ -123,7 +123,7 @@ module chdr_stream_input #(
wire fc_refresh; // Refresh accumulated values
wire fc_override; // Override total xfer counts
reg fc_override_del = 1'b0;
- reg [3:0] fc_due_shreg = 4'h0; // Is a response due? (shift register)
+ reg [3:0] fc_due_shreg = 4'hF; // Is a response due? (shift register)
// Endpoint IDs of this endpoint and the stream source
reg [15:0] this_epid = 16'd0, return_epid = 16'd0;
@@ -174,7 +174,11 @@ module chdr_stream_input #(
// status messages are asynchronous wrt the input.
always @(posedge clk) begin
if (rst || !fc_enabled) begin
- fc_due_shreg <= 4'h0;
+ // Reset to all ones so we don't send an extra stream status packet
+ // immediately after flow control is re-enabled. This also ensures we
+ // don't send an extra status packet when we get the first init command
+ // which has zero for num_bytes and num_pkts.
+ fc_due_shreg <= 4'hF;
end else begin
fc_due_shreg <= {
fc_due_shreg[2:0],
@@ -408,6 +412,7 @@ module chdr_stream_input #(
wire [51:0] resp_o_tdata;
wire resp_o_tvalid;
+ wire resp_o_tready;
reg [51:0] resp_i_tdata;
reg resp_i_tvalid = 1'b0;
@@ -443,6 +448,8 @@ module chdr_stream_input #(
assign fc_refresh = (resp_state == ST_STRS_DONE);
+ assign resp_o_tready = (resp_state == ST_STRS_DONE || !fc_enabled);
+
// A FIFO that holds up to 32 posted responses and status information
// NOTE: This is a lossy FIFO. If the downstream response port is clogged
// then we will drop responses. That should never happen in a normal operating
@@ -450,7 +457,7 @@ module chdr_stream_input #(
axi_fifo #(.WIDTH(48 + 4), .SIZE(5)) resp_fifo_i (
.clk(clk), .reset(rst), .clear(1'b0),
.i_tdata(resp_i_tdata), .i_tvalid(resp_i_tvalid), .i_tready(/* Lossy FIFO */),
- .o_tdata(resp_o_tdata), .o_tvalid(resp_o_tvalid), .o_tready(resp_state == ST_STRS_DONE || !fc_enabled),
+ .o_tdata(resp_o_tdata), .o_tvalid(resp_o_tvalid), .o_tready(resp_o_tready),
.space(), .occupied()
);