AXI协议详解3:AXI4-Stream 协议梳理+代码分析
axi-stream有用到fifo
// 状态机的状态定义
// 控制状态机监督输入流数据写入FIFO,并从FIFO输出流数据
parameter [1:0] IDLE = 2’b00, // 初始化状态
INIT_COUNTER = 2’b01, // 初始化计数状态,当计数到C_M_START_COUNT 时
// 转换状态到SEND_STREAM
SEND_STREAM = 2’b10; // 通过 M_AXIS_TDATA 输出数据流
// 状态寄存器
reg [1:0] mst_exec_state;
// 控制状态机
always @(posedge M_AXIS_ACLK)
begin
if (!M_AXIS_ARESETN)
// 复位
begin
mst_exec_state <= IDLE;
count <= 0;
end
else
case (mst_exec_state)
IDLE:
mst_exec_state <= INIT_COUNTER;
INIT_COUNTER:
if ( count == C_M_START_COUNT - 1 )
begin
mst_exec_state <= SEND_STREAM;
end
else
begin
//计数够时间后跳转到下一个状态 INIT_COUNTER
count <= count + 1;
mst_exec_state <= INIT_COUNTER;
end
SEND_STREAM:
//发送完成后回到 IDLE 状态
if (tx_done)
begin
mst_exec_state <= IDLE;
end
else
begin
mst_exec_state <= SEND_STREAM;
end
endcase
end