OFDM802.11a的FPGA实现(十四)data域的设计优化,挤掉axi协议传输中的气泡

news2025/4/5 19:14:50

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

目录

1.前言

2.data域的时序要求

3.Debug


1.前言

  前面12篇文章详细讲述了,OFDM 802.11a发射部分data域的FPGA实现和验证,今天对data域的设计做一个总结。在总结过程中,发现了设计中存在bug,经过检查和调试成功的解决了bug,现在对整个过程进行详细描述。

2.data域的时序要求

  前面设计的时候说到过,根据信道间隔(channel spacing)的不同,可以计算出如下一些参数:

时序参数

时序参数

时序参数

时序参数

  可以看到当信道间隔为20MHz时,一个OFDM的符号的有效数据周期是3.2us,一个OFDM的符号周期是4us。假设采样率是20M,那么该采样率下的采样周期是50ns,因此一个OFDM符号的有效周期需要64个采样点。所以我们只要保证IFFT的输出数据速率大于20MHz即可,后续在DAC输出的时候,再将数据速率降到20M,由于我们设计的时候数据流一直采用的是vaild-ready握手机制,DAC没有输出完当前数据会对前面的一系列处理形成反压,进而可以保证OFDM符号间不会存在间隙。   

考虑到IFFT的输出需要满足20MHz的数据速率,使用最快的传输方案,64-QAM调制+3/4编码效率。编码前的数据速率应该为2063/4=90MHz;编码后的数据速率为20*6=120MHz。为了仿真方便,系统时钟选取125MHz。  

总而言之,就是data域的数据必须是以20MHz的速率送给DAC,可以大于20M,但是不能低于20M。也就是,上一个IFFT输出(经过加循环前缀和加窗之后)的80个数据,和下一个之间的时间间隔不能大于8us。

3.Debug

  对于之前的设计,按照如下连接方式进行测试:

data域模块连接图

data域模块连接图

  采用64-QAM调制+3/4编码效率。之前的设计仿真结果如下:

之前有bug的设计仿真结果

之前有bug的设计仿真结果

从上图可以看到,每个IFFT输出之间,间隔为,是不能够保证OFDM符号间不会存在间隙的,除非将系统时钟提高,但是这样会带来更大的挑战。所以还是着手于去排查问题,检查中间传输是否存在气泡,影响效率。

并串转换存在传输气泡

并串转换存在传输气泡

如上图所示,并串转换模块在进行最后一个数据输出后,隔了一个时钟才开始像上游请求接收数据。按理说,应该在传输完最后一个数据,dout_rdy立即拉高,向上游请求接收数据,这里延迟了一个时钟导致产生了一个传输气泡。由于64-QAM调制+3/4编码效率,测试数据一个OFDM符号为216个数,第一次并串转换和后面卷积编码和删余之间使用的模2的并串转换,均会产生大量传输气泡,大大增加了系统延时。点此跳转到之前设计的并串转换模块

更正设计,挤掉传输气泡,代码如下(其中counter为自己设计的计数器IP核点此跳转到计数器篇):

assign wr_en  = dout_rdy & din_vld ;//与上游握手成功,开始接收数据
assign rd_en  = din_rdy & dout_vld ;//与下游握手成功,启动读计数器,开始输出

counter #(.CNT_NUM(WIDTH),
  .ADD(LSB_FIRST))
u_counter(
 .clk  (clk    ), 
 .rst_n  (rst_n    ),
 .En_cnt  (rd_en    ),      
 .cnt  (cnt    ), 
 .cnt_last (cnt_last   )
);

assign  dout = din_r[cnt];
 always @(posedge clk or negedge rst_n)
 if(!rst_n)begin
  din_r <= 'd0;
  dout_vld <= 1'b0;
 end
 else if(wr_en)begin
  din_r <= din;
  dout_vld <= 1'b1;//写进数据时,输出有效
 end
 else if(rd_en & cnt_last)
  dout_vld <= 1'b0;//输出完成,输出无效;只有在输入数据无效的时候才会进入次判断,保证无气泡传输
  
/* //初始化时,或输出数据完成,可以接收数据(之前含有气泡的设计)
always @(posedge clk or negedge rst_n)
 if(!rst_n)
  dout_rdy <= 1'b1;
 else if(cnt_last & rd_en)
  dout_rdy <= 1'b1;
 else if(wr_en)
  dout_rdy <= 1'b0; */ 
assign dout_rdy = cnt_last & rd_en | ~dout_vld;//更正后挤掉气泡

如下图所示,可以看到更正之后,数据连续传输,没有气泡。

挤掉并串转换传输气泡

挤掉并串转换传输气泡

对IFFT输出间隔进行测量:

Debug后IFFT输出间隔

Debug后IFFT输出间隔

如上图所示,输出间隔为,符合802.11a协议的要求。64-QAM调制+3/4编码效率,符合要求,那么802.11a中其他调制方式也肯定符合要求。

下面是10个OFDM符号,采用64-QAM调制+3/4编码效率,加窗后,FPGA输出和Matlab仿真对比。

实部

实部

虚部

虚部

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

升级! 测试萌新Python学习之连通数据库Pymsql增删改及封装(四)

pymysql 数据库概述python对数据库的增删改查pymysql核心操作事务事务操作pymysql工具类封装每日复习ChatGPT的回答 数据库概述 分类 关系型数据库: 安全 如, mysql oracle SQLite…database tables 行列 非关系型数据库: 高效 如, redis mongoDB…数据存储结构多样 键值对…

基于springboot+vue+Mysql的音乐翻唱与分享平台

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

252 基于MATLAB的自适应差分阈值法检测心电信号的QRS波

基于MATLAB的自适应差分阈值法检测心电信号的QRS波&#xff0c;QRS波群反映左、右心室除极电位和时间的变化&#xff0c;第一个向下的波为Q波&#xff0c;向上的波为R波&#xff0c;接着向下的波是S波。通过GUI进行数据处理&#xff0c;展示心率和QRS。程序已调通&#xff0c;可…

geotrust dv通配符证书800

Geotrust是成立时间较久的正规CA认证机构&#xff0c;在过去的几十年间颁发了无数的SSL证书&#xff0c;这些SSL证书被各个开发者使用&#xff0c;受到大多数浏览器的信任。而Geotrust旗下的DV通配符证书因其广泛的应用范围受到了用户的青睐。今天就随SSL盾小编了解Geotrust旗下…

物联网设计竞赛_3_Jetson Nano连接摄像头

ls /dev/video* 查看是否有摄像头 camorama 开启摄像头 关闭摄像头用&#xff1a; ctr c结束进程 若有camorama被启动用ps aux 或者 ps aux l grep camorama 找到对应进程用 kill -9 <PID>杀死进程再启动 必要的时候也能重启系统再试试&#xff1a; shutdown -r …

Java中PriorityQueue的用途和性能深度剖析

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

出租车计价器设计与实现(论文 + 源码)

关于java出租车计价器设计与实现.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89304164 出租车计价器设计与实现 摘 要 在我国&#xff0c;出租车行业是八十年代初兴起的一项新兴行业&#xff0c;随着出租车的产生&#xff0c;计价器也就应运而生。但当时在全…

springboot 整合阿里云短信服务

官方sdk示例地址 依赖引入 <!-- https://mvnrepository.com/artifact/com.aliyun/dysmsapi20170525 --><dependency><groupId>com.aliyun</groupId><artifactId>dysmsapi20170525</artifactId><version>2.0.23</version><…

我的 OpenLiteSpeed 从开始到放弃之经历

昨晚下定决心放弃 OpenLiteSpeed 了&#xff0c;从开始到放弃历时七天。总结下来放弃 OpenLiteSpeed 主要是实在不适合明月当前的需要&#xff0c;用起来不是锦上添花而是个累赘了都&#xff0c;今天明月就给大家总结分享一下这次 OpenLiteSpeed 从开始到放弃的经历。 一、Ngin…

福建医疗器械展/2024厦门国际医疗器械展览会重磅来袭

2024中国&#xff08;厦门&#xff09;国际医疗器械展览会 时 间&#xff1a;2024年11月1-3日 November 1-3, 2024 地 点&#xff1a;厦门国际会展中心 Xiamen International Conference & Exhibition Center ​ ◆组织机构 主办单位&#xff1a; 中国技术市场协会医…

【QT】QT环境搭建

本专栏内容为&#xff1a;QT学习专栏 通过本专栏的深入学习&#xff0c;你可以了解并掌握QT。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;QT &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&#x1f69a; &#x1f339;&#x1f…

LeetCode 700.二叉搜索树中的搜索

LeetCode 700.二叉搜索树中的搜索 1、题目 题目链接&#xff1a;700. 二叉搜索树中的搜索 给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和一个整数值 val。 你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在&#xff0c;则…

公式识别软件免费的有哪些?简单好用的有三款

公式识别软件免费的有哪些&#xff1f;在数字化时代&#xff0c;公式识别软件已经成为科研、教育等领域不可或缺的工具。这些软件能够准确地将图像中的公式转化为可编辑的文本格式&#xff0c;极大地提高了工作效率。为了帮助大家轻松应对公式识别的挑战&#xff0c;今天本文就…

【数据结构】详解队列

现在我们来掌握一下队列&#xff01;如果有对往期知识有不足地方&#xff0c;可翻阅之前文章哦&#xff01; 个人主页&#xff1a;小八哥向前冲~-CSDN博客 所属专栏&#xff1a;数据结构【c语言版】_小八哥向前冲~的博客-CSDN博客 栈和队列的实现其实都是对你顺序表和链表的检验…

PCIE协议-2-事务层规范-MEM/IO/CFG request rules

2.2.7 内存、I/O和配置请求规则 以下规则适用于所有内存、I/O和配置请求。每种类型的请求还有特定的额外规则。 所有内存、I/O和配置请求除了常见的头标字段外&#xff0c;还包括以下字段&#xff1a;requester ID[15:0]和Tag[9:0]&#xff0c;形成事务ID。Last DW BE[3:0] a…

【面试经典题】环形链表

个人主页&#xff1a;一代… 个人专栏&#xff1a;数据结构 在面试中我们经常会遇到有关链表的相关题目&#xff0c;面试官通常会对题目给出拓展 下面我就两个leetcode上的一个双指针的题目为例&#xff0c;并对其进行拓展 题目链接&#xff1a;环形链表 题目描述&#xf…

pytest(二)

1.pytest-html⽣成报告 Pytest-HTML 是⼀个插件&#xff0c;它可以⽣成漂亮且易于阅读的 HTML 测试报告。下⾯是使⽤ pytest-html ⽣成报告的步骤&#xff1a; 1. 安装 pytest-html 插件&#xff1a; pip install pytest-html 2. 运⾏测试并⽣成报告 pytest --htmlr…

Java全局异常处理,@ControllerAdvice异常拦截原理解析【简单易懂】

https://www.bilibili.com/video/BV1sS411c7Mo 文章目录 一、全局异常处理器的类型1-1、实现方式一1-2、实现方式二 二、全局异常拦截点2-1、入口2-2、全局异常拦截器是如何注入到 DispatcherServlet 的 三、ControllerAdvice 如何解析、执行3-1、解析3-2、执行 四、其它4-1、设…

初探 JUC 并发编程:独占锁 ReentrantLock 底层源码解析

本篇是关于 JUC 并发包中独占锁 ReentrantLock 底层源码的解析&#xff0c;在阅读之前需要对 AQS 抽象队列有基本的了解。 文章目录 1.1 类图结构1.2 获取锁1&#xff09;void lock() 方法2&#xff09;void lockInterruptibly() 方法3&#xff09;boolean tryLock() 方法4&am…

jenkins+gitlab+sonar自由风格项目配置

新建项目&基本配置 gitlab侧配置 sonar.projectKeytest_sonar sonar.projectNametest_sonar sonar.projectVersion1.0 sonar.sources. sonar.exclusionssrc/layout/** sonar.sourceEncodingUTF-8 sonar.nodejs.executable/app/nodejs/node-v16.20.2-linux-x64/bin/node配置…