OFDM 802.11a的FPGA实现(二十)使用AXI-Stream FIFO进行跨时钟(含代码)

目录

1.前言

2.AXI-Stream FIFO时序

3.AXI-Stream FIFO配置信息

4.时钟控制模块MMCM

5.ModelSim仿真

6.总结


1.前言

至此,通过前面的文章讲解,对于OFDM 802.11a的发射基带的一个完整的PPDU帧的所有处理已经全部完成,其结构如下图所示:

PPDU帧结构

PPDU帧结构

PPDU帧结构

PPDU帧结构

接下来还需要完成两个最为核心的模块,一是主控模块,负责与MAC进行数据交互、控制数据流按照上图所示的帧结构进行输出;二是在处理数据时,我们采用的是125M的时钟,而DAC的时钟是20M的,我们需要对数据流进行降频处理,使125M的突发式数据流变为20M的连续数据流。

2.AXI-Stream FIFO时序

我们在数据处理时,一直使用的都是AXI-Stream协议,所以使用AXI-Stream FIFO进行跨时钟域都不需要再进行额外的操作,直接连上就能用。但是为了让大家对AXI-Stream协议有更深的理解,以及掌握AXI-Stream FIFO的使用方法,接下来还是详细讲讲AXI-Stream FIFO这个IP核。其输入输出形式如下:

AXI-Stream FIFO

AXI-Stream FIFO

在AXI协议中,数据通过写通道实现master到slave的传输,读通道实现slave到master的传输。因此,在FIFO IP核中,接收数据的端口S_AXIS用来将数据写入IP核,而发送数据的端口M_AXIS用来将数据读出IP核。

举个生活中的例子来让大家便于理解FIFO:在数据的传输中当读速率慢于写速率时,FIFO便可被用作系统中的缓冲元件或队列,类似于水流经过一个缓冲区,上游水流速度快,下游水流速度慢,部分水就可以被缓存在中间的缓冲区。

流水类比FIFO

流水类比FIFO

AXI接口协议使用双向validready握手机制。数据源使用valid信号来显示何时在信道上可获得有效数据或控制数据。数据目的地使用ready信号来显示何时可以接受数据。
下图显示了AXI4-Stream FIFO的写入和读取操作的示例时序图:

AXI-Stream FIFO时序图

AXI-Stream FIFO时序图

在上图中,数据源生成valid信号以指示数据何时可用。目的地生成ready信号以指示其可以接受数据,并且仅当有效信号和就绪信号均为高时才发生传输。

AXI FIFO是普通FIFO的应用,它们之间的许多行为是相同的。ready信号是根据 FIFO 中的空间可用性生成的,并保持在高电平以允许写入FIFO。仅当FIFO中没有空间可供执行额外写入时,ready信号才会拉低。 valid信号是根据FIFO中数据的可用性生成的,并保持为高电平以允许从FIFO执行读取。仅当没有数据可供从FIFO读取时,valid信号才会拉低。数据信号被映射到本机接口 FIFO 的 din 和 doout 总线。AXI FIFO 的宽度是通过连接 AXI 接口的所有数据信号来确定的。 数据信号包括除有效和就绪握手信号之外的所有 AXI 信号。

AXI FIFO Derivation

AXI FIFO Derivation

3.AXI-Stream FIFO配置信息

如下图所示,是IP核的配置界面:

FIFO配置界面

FIFO配置界面

关于IP核中各个信号的详解,可翻阅官方手册,以下对该实验中所需信号进行解释:

Basic:
Interface Type : FIFO的模式,选择AXI-Stream;

Independent clocks:独立时钟设置,该实验需要使用异步时钟;

其余保持默认即可。

AXI-Stream Ports:

TDATA NUM BYTES:选择两个字节,因为IFFT输出是16bit;

TUSER WIDTH:设置为8;

TLAST:勾选;

其余保持默认即可。

Config:

FIFO depth:FIFO深度,可选范围16-32768,必须为2的整数次幂,根据需要设定为512,因为125/20 * 80=500;

其余保持默认即可。

配置好,接口如下所示:

AXI-Stream FIFO

AXI-Stream FIFO

4.时钟控制模块MMCM

设计采用的开发板为ZYNQ7020,芯片是xc7z020clg400-1,板载时钟为50M,需要通过锁相环得到125M和20M的时钟。Clocking Wizard IP核的配置界面如下:

Clocking Options

Clocking Options

Clocking Options:选择MMCM,输入时钟填写50M。

clk_out为125M,clk_out2为20M

clk_out为125M,clk_out2为20M

低电平复位

低电平复位

Output Clocks:填写clk_out为125M,clk_out2为20M。并选择低电平复位。

5.ModelSim仿真

和之前的模块一起,按照如下连接,进行仿真,这里省略了并串转换。

仿真模块连接图

仿真模块连接图

测试数据选择5个OFDM符号,使用16-QAM调制,编码效率为3/4,一共720个bit。仿真结果如下:

仿真全局截图

仿真全局截图

仿真局部截图

仿真局部截图

5个OFDM符号输出的时间刚好为20us,说明是连续输出的,即满足了协议中符号之间不留间隙。

6.总结

使用AXI-Stream协议处理数据流,下游模块数据没处理好会对上游进行反压,上游数据没处理完,不会往下游传输,可以很方便且高效的对数据进行流水线处理。个人认为相比于书籍《基于XILINX FPGA的OFDM通信系统基带设计》中方法要可靠得多。

书中的实现方法

书中的实现方法

网上大多数博客都是根据书中的这种,不断变换时钟进行跨时钟域处理来做这个项目,个人认为不是很可靠,所以从头开始采用了AXI-Stream协议处理数据流的方式来写。如果有什么不正确的地方,或者不理解的欢迎和我讨论。

原文链接(相关文章合集)OFDM 802.11a的xilinx FPGA实现

  • 36
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值