debugging during the test
This commit is contained in:
@@ -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),
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user