debugging during the test

This commit is contained in:
otroubi
2026-08-25 15:01:01 +03:00
parent 9c66f1b530
commit 820f3400ea
4 changed files with 109 additions and 11 deletions
+1 -1
View File
@@ -107,7 +107,7 @@ module accumulator_top
.m_axis_tdata (m_axis_accum.req.t.data),
.m_axis_tvalid (m_axis_accum.req.t.valid),
.m_axis_tready (m_axis_accum.resp.ready),
.m_axis_tready (accum_done),
.m_axis_tlast (m_axis_accum.req.t.last),
.acc_din (out_data),
+4 -2
View File
@@ -238,9 +238,11 @@ module out_axis_fifo #(
RD_SEND: begin
// udp is ready and fifo is ready = sent
send_req <= 1'b0;
m_axis_tvalid <= rd_valid;
rd_en <= m_axis_tvalid && m_axis_tready;
if (m_axis_tready && rd_valid) begin
rd_en <= 1'b1;
m_axis_tvalid <= 1'b1;
//rd_en <= 1'b1;
//m_axis_tvalid <= 1'b1;
sent_cnt <= sent_cnt + 1;
// final packet of the batch
if (sent_cnt == PACKET_RD_WORDS-1) begin
+88 -2
View File
@@ -1,4 +1,4 @@
module shaper_axis_status #(
/* module shaper_axis_status #(
parameter int unsigned DATA_WIDTH = 128
)(
input logic clk,
@@ -21,7 +21,7 @@ typedef enum logic [0:0] {
wr_state state;
logic [31:0] data_reg;
logic [DATA_WIDTH-1:0] data_reg;
always @(posedge clk) begin
if (!rst_n) begin
@@ -56,4 +56,90 @@ always @(posedge clk) begin
end
endmodule
*/
module shaper_axis_status #(
parameter int unsigned DATA_WIDTH = 128
)(
input logic clk,
input logic rst_n,
input logic [DATA_WIDTH-1:0] data_in,
input logic take,
input logic valid,
output logic ready,
output logic busy,
output logic handshake,
output logic [DATA_WIDTH-1:0] data_out
);
typedef enum logic [0:0] {
IDLE,
WAIT_TAKE
} wr_state;
wr_state state;
logic [DATA_WIDTH-1:0] data_reg;
// Запоминаем take, если он пришёл раньше valid
logic take_pending;
// Готовы принять status только в IDLE
assign ready = (state == IDLE);
always @(posedge clk) begin
if (!rst_n) begin
state <= IDLE;
busy <= 1'b0;
handshake <= 1'b0;
data_out <= '0;
data_reg <= '0;
take_pending <= 1'b0;
end else begin
// handshake — импульс
handshake <= 1'b0;
case (state)
IDLE: begin
busy <= 1'b0;
// Запоминаем ранний take
if (take)
take_pending <= 1'b1;
// Пришёл status
if (valid && ready) begin
data_reg <= data_in;
handshake <= 1'b1;
// take был раньше ИЛИ пришёл одновременно
if (take_pending || take) begin
data_out <= data_in;
busy <= 1'b1;
take_pending <= 1'b0;
state <= IDLE;
end else begin
state <= WAIT_TAKE;
end
end
end
WAIT_TAKE: begin
busy <= 1'b1;
// take пришёл после valid
if (take) begin
data_out <= data_reg;
state <= IDLE;
end
end
endcase
end
end
endmodule