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实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/332100.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

老外卖27刀每月的教程已经更新

用了两天半的时间,边学习,边整理了一份老外的视频教程,涉及Facebook,YouTube,tiktok等大的流量平台,有案例,有分析,有如何做。 这个教程是老外讲的,没有什么玄乎的塑造价…

RabbitMQ-默认读、写方式介绍

1、RabbitMQ简介 rabbitmq是一个开源的消息中间件,主要有以下用途,分别是: 应用解耦:通过使用RabbitMQ,不同的应用程序之间可以通过消息进行通信,从而降低应用程序之间的直接依赖性,提高系统的…

微软刚发布的Copilot+PC为什么让Intel和AMD尴尬?2024 AI PC元年——产业布局及前景展望

美国东部时间5月20日在微软位于华盛顿的新园区举行的发布会上,宣布将旗下AI助手Copilot全面融入Windows系统,能够在不调用云数据中心的情况下处理更多人工智能任务。 “将世界作为一个提示词就从Windows系统开始”。微软的新PC将是“CopilotPC”&#xf…

spiderfoot一键扫描IP信息(KALI工具系列九)

目录 1、KALI LINUX简介 2、spiderfoot工具简介 3、在KALI中使用spiderfoot 3.1 目标主机IP(win) 3.2 KALI的IP 4、命令示例 4.1 web访问 4.2 扫描并进行DNS解析 4.3 全面扫描 5、总结 1、KALI LINUX简介 Kali Linux 是一个功能强大、多才多…

Google发布的CAT3D,在1分钟内,能够从任意数量的真实或生成的图像创建3D场景。

给定任意数量的输入图像,使用以这些图像为条件的多视图扩散模型来生成场景的新视图。生成的视图被输入到强大的 3D 重建管道,生成可以交互渲染的 3D 表示。总处理时间(包括视图生成和 3D 重建)仅需一分钟。 相关链接 论文&#x…

mysql图形化界面及将mysql注册成后台程序

安装图形化界面版本 右键新建数据库 字符集使用utf8防止以后数据库中存在中文字符导致乱码 将mysql注册成后台程序 cmd进入命令行界面 切换路径到cd /mysql/bin 将mysql注册成后台程序 mysqld.exe --install mysql1 (失败,说明没有权限) 以管理员身份打开成功…

未授权访问:Hadoop 未授权访问漏洞

目录 1、漏洞原理 2、环境搭建 3、未授权访问 4、通过REST API命令执行 防御手段 今天继续学习各种未授权访问的知识和相关的实操实验,一共有好多篇,内容主要是参考先知社区的一位大佬的关于未授权访问的好文章,还有其他大佬总结好的文章…

Qt 在windows下显示中文

Qt在windows平台上显示中文,简直是一门玄学,经过测试,有如下发现: 1, 环境:Qt 5.15.2 vs2019 64位 win11系统 默认用Qt 创建的文件使用utf-8编码格式,此环境下 中文没有问题 ui->textE…

手写tomcat(Ⅲ)——tomcat动态资源的获取

仿写tomcat的Servlet接口体系 之前写过一篇博客,Tomcat的Servlet-GenericServlet-HttpServlet体系的具体结构,以及Servlet的生命周期 Servlet讲解 想要模仿tomcat获取动态资源,就需要我们自己仿写一个Servlet接口体系 主要包括&#xff1a…

软考-下午题-试题二、三

主要是最后一问的不同解答 1、父图子图平衡 1、员工关系是否存在传递依赖?用100字以内的文字说明理由。2019 2、在职员关系模式中,假设每个职员有多名家属成员,那么职员关系模式存在什么问题? 应如何解决?2020 职员关系…

Science 基于尖峰时序编码的模拟神经触觉系统,可实现动态对象分类

快速处理和有效利用手与物体交互过程中产生的动态触觉信号(例如触摸和抓握)对于触觉探索和灵巧的物体操作至关重要。将电子皮肤(e-skins)推进到模仿自然触觉的水平,是恢复截肢者和瘫痪患者丧失的功能的可行解决方案&am…

奥维互动地图奥维彩色图源

彩色图源(不足,更精细放大) 等位线3D模式 中科星 谷歌2024(不足没以前高清)

题解:CF1016E Rest In The Shades

题意 平面上有一个点光源 s s s 并以每秒 1 1 1 单位长度的速度从点 ( a , s y ) (a,sy) (a,sy) 移动到点 ( b , s y ) (b,sy) (b,sy)&#xff0c;其中 s y < 0 sy<0 sy<0&#xff1b;在 x x x 轴正方向上有 n n n 不相交、不接触的挡板&#xff0c;第 i i i …

Visual Studio 的调试(一)

最近事儿很多昂&#xff0c;更新速度相较以往慢了许多&#xff0c;备考六月份的四级&#xff0c;还有学校的期末等等&#xff0c;事儿真的太多啦&#xff0c;所以后面的更新速度也会放慢一点&#xff0c;实在是抽不开身啊诸位&#xff0c;相当抱歉&#xff0c;还望诸君见谅 言…

【LLM多模态】多模态LLM在图表处理的应用

note 在真实场景下&#xff0c;我们进行测试&#xff0c;多模态大模型在处理显著文本时表现尚可&#xff0c;但在处理细粒度文本时往往效果并不太好&#xff0c;why? ​具体原因如下&#xff1a; 首先&#xff0c;视觉编码器的分辨率对于多模态大模型的性能影响较大&#x…

树莓派4B 有电但无法启动

试过多个SD卡&#xff0c;反复烧系统镜像都无法启动。接HDMI显示器没有信号输出&#xff0c;上电后PWR红灯长亮&#xff0c;ACT绿灯闪一下就不亮了&#xff0c;GPIO几个电源脚有电&#xff0c;芯片会发热&#xff0c;测量多个TP点电压好像都正常。 ……

Java面试题--JVM大厂篇(1-10)

引言&#xff1a; 在这个信息时代&#xff0c;对于准备进入大厂工作的朋友们来说&#xff0c;对于JVM&#xff08;Java虚拟机&#xff09;的掌握是面试中的一项重要内容。下面是一些精选的JVM面试题&#xff0c;希望对大家能有所帮助。 正文&#xff1a; 1. JVM有哪几种垃圾收…

用Python一键生成PNG图片的PowerPoint幻灯片

在当今的商业环境中,PowerPoint演示是展示和传递信息的常用方式。然而,手动将大量图像插入到幻灯片中往往是一项乏味且耗时的工作。但是,通过Python编程,我们可以轻松自动化这个过程,节省时间和精力。 C:\pythoncode\new\folderTOppt.py 在本文中,我将介绍如何使用Python、wx…

C/C++ vector详解

要想了解STL&#xff0c;就必须会看&#xff1a; cplusplus.comhttps://legacy.cplusplus.com/ 官方内容全都是英文的&#xff0c;可以参考&#xff1a; C/C初始识https://blog.csdn.net/2301_77087344/article/details/138596294?spm1001.2014.3001.5501 vector&#xff…

redisson的使用及LUA脚本实现分布式秒杀

1.redisson实现分布式锁(推荐) redisson官网&#xff1a;Redisson: Easy Redis Java client and Real-Time Data Platform Redisson是一个基于Redis的Java客户端&#xff0c;它不仅提供了对Redis基本操作的支持&#xff0c;而且是一个功能丰富的分布式协调服务客户端。Rediss…