zircon: Improve sideband signal handling in length/checksum computation module

Signed-off-by: Alex Forencich <alex@alexforencich.com>
This commit is contained in:
Alex Forencich
2025-08-15 13:34:15 -07:00
parent d0efd5f24c
commit 3a07e3e28c

View File

@@ -39,12 +39,15 @@ localparam DATA_W = s_axis_pkt.DATA_W;
localparam KEEP_W = s_axis_pkt.KEEP_W; localparam KEEP_W = s_axis_pkt.KEEP_W;
localparam META_W = m_axis_meta.DATA_W; localparam META_W = m_axis_meta.DATA_W;
localparam ID_W = m_axis_meta.ID_W; localparam ID_W = s_axis_pkt.ID_W;
localparam ID_EN = s_axis_pkt.ID_EN && m_axis_meta.ID_EN; localparam ID_EN = s_axis_pkt.ID_EN && m_axis_pkt.ID_EN;
localparam DEST_W = m_axis_meta.DEST_W; localparam META_ID_EN = s_axis_pkt.ID_EN && m_axis_meta.ID_EN;
localparam DEST_EN = s_axis_pkt.DEST_EN && m_axis_meta.DEST_EN; localparam DEST_W = s_axis_pkt.DEST_W;
localparam USER_W = m_axis_meta.USER_W; localparam DEST_EN = s_axis_pkt.DEST_EN && m_axis_pkt.DEST_EN;
localparam USER_EN = s_axis_pkt.USER_EN && m_axis_meta.USER_EN; localparam META_DEST_EN = s_axis_pkt.DEST_EN && m_axis_meta.DEST_EN;
localparam USER_W = s_axis_pkt.USER_W;
localparam USER_EN = s_axis_pkt.USER_EN && m_axis_pkt.USER_EN;
localparam META_USER_EN = s_axis_pkt.USER_EN && m_axis_meta.USER_EN;
parameter LEVELS = $clog2(DATA_W/8); parameter LEVELS = $clog2(DATA_W/8);
parameter OFFSET_W = START_OFFSET/KEEP_W > 1 ? $clog2(START_OFFSET/KEEP_W) : 1; parameter OFFSET_W = START_OFFSET/KEEP_W > 1 ? $clog2(START_OFFSET/KEEP_W) : 1;
@@ -84,9 +87,21 @@ logic [USER_W-1:0] m_axis_meta_user_reg = '0;
assign m_axis_pkt.tdata = s_axis_pkt.tdata; assign m_axis_pkt.tdata = s_axis_pkt.tdata;
assign m_axis_pkt.tkeep = s_axis_pkt.tkeep; assign m_axis_pkt.tkeep = s_axis_pkt.tkeep;
assign m_axis_pkt.tstrb = s_axis_pkt.tstrb; assign m_axis_pkt.tstrb = s_axis_pkt.tstrb;
if (ID_EN) begin
assign m_axis_pkt.tid = s_axis_pkt.tid; assign m_axis_pkt.tid = s_axis_pkt.tid;
end else begin
assign m_axis_pkt.tid = '0;
end
if (DEST_EN) begin
assign m_axis_pkt.tdest = s_axis_pkt.tdest; assign m_axis_pkt.tdest = s_axis_pkt.tdest;
end else begin
assign m_axis_pkt.tdest = '0;
end
if (USER_EN) begin
assign m_axis_pkt.tuser = s_axis_pkt.tuser; assign m_axis_pkt.tuser = s_axis_pkt.tuser;
end else begin
assign m_axis_pkt.tuser = '0;
end
assign m_axis_pkt.tlast = s_axis_pkt.tlast; assign m_axis_pkt.tlast = s_axis_pkt.tlast;
assign m_axis_pkt.tvalid = s_axis_pkt.tvalid; assign m_axis_pkt.tvalid = s_axis_pkt.tvalid;
assign s_axis_pkt.tready = m_axis_pkt.tready; assign s_axis_pkt.tready = m_axis_pkt.tready;
@@ -94,9 +109,21 @@ assign s_axis_pkt.tready = m_axis_pkt.tready;
assign m_axis_meta.tdata = {m_axis_meta_csum_reg, m_axis_meta_len_reg}; assign m_axis_meta.tdata = {m_axis_meta_csum_reg, m_axis_meta_len_reg};
assign m_axis_meta.tkeep = '1; assign m_axis_meta.tkeep = '1;
assign m_axis_meta.tstrb = m_axis_meta.tkeep; assign m_axis_meta.tstrb = m_axis_meta.tkeep;
assign m_axis_meta.tid = ID_EN ? m_axis_meta_id_reg : '0; if (META_ID_EN) begin
assign m_axis_meta.tdest = DEST_EN ? m_axis_meta_dest_reg : '0; assign m_axis_meta.tid = m_axis_meta_id_reg;
assign m_axis_meta.tuser = USER_EN ? m_axis_meta_user_reg : '0; end else begin
assign m_axis_meta.tid = '0;
end
if (META_DEST_EN) begin
assign m_axis_meta.tdest = m_axis_meta_dest_reg;
end else begin
assign m_axis_meta.tdest = '0;
end
if (META_USER_EN) begin
assign m_axis_meta.tuser = m_axis_meta_user_reg;
end else begin
assign m_axis_meta.tuser = '0;
end
assign m_axis_meta.tlast = 1'b1; assign m_axis_meta.tlast = 1'b1;
assign m_axis_meta.tvalid = m_axis_meta_valid_reg; assign m_axis_meta.tvalid = m_axis_meta_valid_reg;
@@ -117,9 +144,9 @@ always_ff @(posedge clk) begin
end end
sum_valid_reg[0] <= 1'b1; sum_valid_reg[0] <= 1'b1;
sum_last_reg[0] <= s_axis_pkt.tlast; sum_last_reg[0] <= s_axis_pkt.tlast;
id_reg[0] <= ID_W'(s_axis_pkt.tid); id_reg[0] <= s_axis_pkt.tid;
dest_reg[0] <= DEST_W'(s_axis_pkt.tdest); dest_reg[0] <= s_axis_pkt.tdest;
user_reg[0] <= USER_W'(s_axis_pkt.tuser); user_reg[0] <= s_axis_pkt.tuser;
if (s_axis_pkt.tlast) begin if (s_axis_pkt.tlast) begin
offset_reg <= OFFSET_W'(START_OFFSET/KEEP_W); offset_reg <= OFFSET_W'(START_OFFSET/KEEP_W);