AXI-Stream代码测试(alexforencich)
来源:AriesOpenFPGA 发布时间:2022-07-06 分享至微信

导言


之前给大家介绍过alex的开源项目,现在开始陆续出教程,本期主要介绍最常见的AXIS,关于AXI-Stream的概念性教程,请参阅“AXI4/AXI5-Stream协议介绍”一文,开源文章介绍请参阅“FPGA/IC优质开源项目(三)AXI“一文。


AXIS异步FIFO


本期主要介绍AXI-Stream项目中的异步FIFO,其他项目基本大同小异,读者可以直接使用。涉及的文件如下,主要实现了AXIS接口的异步FIFO,可以实现输入输出位宽调整,以及可以实现Frame模式。


axis_adapter.v                     : Parametrizable bus width adapter
axis_async_fifo.v                  : Parametrizable asynchronous FIFO
axis_async_fifo_adapter.v          : FIFO/width adapter wrapper


testbech代码参数配置如下:

parameterDEPTH =4096;// FIFO深度
parameterS_DATA_WIDTH =32;// S接口位宽
parameterS_KEEP_ENABLE = (S_DATA_WIDTH>8);// KEEP信号使能
parameterS_KEEP_WIDTH = (S_DATA_WIDTH/8);
parameterM_DATA_WIDTH =8;// M接口位宽
parameterM_KEEP_ENABLE = (M_DATA_WIDTH>8);// KEEP接口使能
parameterM_KEEP_WIDTH = (M_DATA_WIDTH/8);
parameterPIPELINE_OUTPUT =2;// 输出信号寄存器数
parameterFRAME_FIFO =0;// 是否开启Frame模式
parameterUSER_BAD_FRAME_VALUE =1'b1;
parameterUSER_BAD_FRAME_MASK =1'b1;
parameterDROP_BAD_FRAME =0;
parameterDROP_WHEN_FULL =0;


时钟配置:

always#20s_clk = ~s_clk;// 25M
always#5m_clk = ~m_clk;// 100M


简单的数据传输:

integeri;
parameterlen =64;// 传输数据长度为64

initialbegin
wait(s_rst ==0);
#40;
for(i =0; i < len; i=i+1)begin
wait(s_axis_tready ==1);
s_axis_tvalid <=1;
s_axis_tdata <= s_axis_tdata +1;
#40;
end
s_axis_tlast <=1;// 传输结束拉高s_axis_tlast
#40;
s_axis_tlast <=0;
s_axis_tvalid <=0;
end


使用modeslsim仿真:


25M时钟域输入,100M时钟域采样,输入32bit位宽,输出8bit位宽,仿真和预期一致。


FIFO的FRAME模式


我们把异步FIFO修改为FRAME模式,即一直到一帧数据传输完成(last拉高),FIFO输出接口才开始输出数据,配置如下:

parameterFRAME_FIFO =1;// 是否开启Frame模式
parameterUSER_BAD_FRAME_VALUE =1'b1;
parameterUSER_BAD_FRAME_MASK =1'b1;
parameterDROP_BAD_FRAME =1;
parameterDROP_WHEN_FULL =1;


使用modeslsim仿真:


上图可见,直到last拉起,FIFO才开始传输。


总结


亦安只是简单的测试这个项目,之前对于AXIS概念性的东西都已经讲过了,这里也不多赘述,后续的以太网,AXI等项目也会陆续出,我们下期见。


[ 新闻来源:AriesOpenFPGA,更多精彩资讯请下载icspec App。如对本稿件有异议,请联系微信客服specltkj]
存入云盘 收藏
举报
全部评论

暂无评论哦,快来评论一下吧!