ZYNQ学习--AXI4-Stream data FIFO && FIFO的ADDA实验

一、FIFO存储器

是一个先入先出的双口缓冲器,即第一个进入其内的数据第一个被移出,其中一个是存储器的输入口,另一个口是存储器的输出口。
参考文档:
AXI4-STREAM DATA FIFO的学习
Vivado官方文档《 pg085-axi4stream-infrastructure》-- 43页 AXI4-Stream DATA FIFO
《AXI4-Stream协议总结》

设置界面

两个部分:基础设置和AXIS信号设置
在这里插入图片描述

PART 1 重要参数

FIFO depth:FIFO深度,决定了可以存多少个基本数据
Memory type:存储资源的使用类型–不同模式下可支持的功能不同,手册有具体介绍
Independent clocks:独立时钟设置,存取时钟是独立设置
Enable ECC:是否启动纠错设置

PART 2 AXI-Stream 格式设置

==TDATA 位宽 (bytes) ==
TDATA是基本的有效载荷,用来提供跨越接口的数据。数据为整数个字节。
使能 TSTRB
TSTRB是数据起始标志,表明起始位
使能 TKEEP
TKEEP标明了有效部分,未确认KEEP的那些相关字节是空字节,可以从数据流中去除
使能 TLAST
TLAST数据边界
TID 位宽(bits)
数据流的标识符,用来表明不同的数据流。

TDEST 位宽(bits)
TUSER 位宽(bits)

PART 3 读写标志设置界面 Flags

在这里插入图片描述
读写设置相同:
==使能 write data count ==
使能写数据计数
使能 almost full
数据存满的输出口
使能 programmable full

IP核仿真

实验设置的IP核
在这里插入图片描述

编写testbeach

没加各种其他信号的情况

module sim;

  wire [7:0]M_AXIS_tdata;
  reg M_AXIS_tready = 0;
  wire M_AXIS_tvalid;
  reg [7:0]S_AXIS_tdata = 0;
  wire S_AXIS_tready;
  reg S_AXIS_tvalid = 0;
  reg s_axis_aclk = 0;
  reg s_axis_aresetn = 1;

always #10 s_axis_aclk = ~s_axis_aclk;
initial begin
    #20 s_axis_aresetn = 0;
  //  #20 s_axis_aresetn = 1;
    #40 S_AXIS_tvalid = 1;
    #40 S_AXIS_tdata = 16;
    #40 S_AXIS_tvalid = 0;
    #60 M_AXIS_tready = 1;   
end

design_1_wrapper sss
   (M_AXIS_tdata,
    M_AXIS_tready,
    M_AXIS_tvalid,
    S_AXIS_tdata,
    S_AXIS_tready,
    S_AXIS_tvalid,
    s_axis_aclk,
    s_axis_aresetn);
endmodule

二、带FIFO的ADDA实验

Test1 带反向流控的跨时钟域传输信号的例子 DAC+FIFO

基于“DDS IP 数字波形合成DAC ” “ ADDA测试” 实验方案实现以下要求
(1)用MMCM 把 合成出100MHz的时钟,让DDS工作在100MHz时钟
(2)让DAC和DAC的接口电路工作在50MHz,此时DAC的采样率为50MHz
(3)在DDS和DAC接口电路之间,放置一个带独立时钟的AXI-Stream-Data FIFO,FIFO两端的时钟分别为DDS的工作时钟100MHz和DAC的工作时钟50MHz
(4)生成FIFO需要带data count信号(本实验仅用于观察,以后的实验中这些信号有用。)
(5)DDS的数据输出接口需要有TREADY信号
(6)DAC接口电路需要将FIFO输出端的AXI-S接口转换成DAC的接口格式,自行编写RTL代码完成该功能。另外由于DAC的工作频率小于DDS工作频率,所以DAC接口控制器给FIFO的RDY信号应该一直为高。
(7)以上结构的意义在于,把接口电路和信号处理电路分离在不同的时钟域,从而使得各部分保持独立
(8)本实验添加2个system ILA,分别观察FIFO两端接口的信号时序,注意观察 data count端口的变化。
(9)用VIO配置频率字,分别生成1MHz和3MHz的DDS正弦波形,用system ILA抓取DAC的输入数据,用Matlab分析频谱,验证频率正确。

First – 编写DAC接口电路

目的:DAC接口电路需要将FIFO输出端的AXI-S接口转换成DAC的接口格式,并且因为输出的数据比写入的数据慢,所以不需要等待写入,DAC接口电路提供的m_ready信号一直为高。

module DAC(
    clk,
    reset,
    data_ready,
    DAC_IN,
    DAC_OUT);
    parameter length=8;
    input clk;
    input reset;
    output data_ready;
    input [length-1:0] DAC_IN;
    output[length-1:0] DAC_OUT;
    
    reg data_ready;
    reg [length-1:0] DAC_OUT;
    always@(posedge clk) begin
        if(!reset) begin
            data_ready<=0;
            DAC_OUT<=0;
        end
        else begin
            DAC_OUT[7]<=~DAC_IN[7];
            DAC_OUT[6:0]<=DAC_IN[6:0];
            data_ready<=1;
        end 
    end
endmodule

Second – Block Design 设计

一、Simulation

1、将IP核连接好,DDS接100Mhz,DAC电路接50Mhz
在这里插入图片描述
2、Behavioral Simulation
(1)写入
在这里插入图片描述
(2)读出在这里插入图片描述
读出的数据是从count开始计数的第一个周期开始时存的数据
在这里插入图片描述

二、Download

1、添加system ILA 观察信号
在这里插入图片描述2、写入端的system ILA (1MHz)
在这里插入图片描述
3、读出端的system ILA
在这里插入图片描述
4、DAC输出模拟信号自环给ADC的模拟输入
(1)1MHz
在这里插入图片描述
matlab频谱图
在这里插入图片描述
(2)3MHz
在这里插入图片描述

  • 3
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伊丽莎白鹅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值