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

原文链接(相关文章合集):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)begindin_r <= 'd0;dout_vld <= 1'b0;endelse if(wr_en)begindin_r <= din;dout_vld <= 1'b1;//写进数据时,输出有效endelse 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.hqwc.cn/news/697914.html

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

相关文章

【vue2项目经验总结:a标签干扰路由】

当我们点击页面中的a标签实现跳转时&#xff0c;会发现网页上方的路由也切换成了a标签的id值&#xff1a; 刷新后页面也会变成空白&#xff1a; 解决方法&#xff1a; 添加Click方法&#xff0c;传入的参数与id值保持一致 scrollIntoView() 方法&#xff0c;将该元素滚动到…

快解析Tplink端口映射如何设置

Tplink作为国内知名路由器品牌&#xff0c;有着广泛的用户群体。使用快解析端口映射是实现内网服务器被外网访问必须要做的设置&#xff0c;很多对网络不懂得小白不知道该到哪里去做&#xff0c;下面我就讲解一下tplink路由器如何做端口映射。 1&#xff1a;访问路由器 &#…

Peter算法小课堂—序列切割

讲序列切割之前&#xff0c;先来个铺垫 高手集训 题目描述&#xff1a; 课程表里有连续的n天可以供你选择&#xff0c;每天都有专题课程。其中第i天的专题趣味程度为h[i]。假设你选择了其中连续的若干天&#xff0c;从第l天到第r天。那么&#xff0c; 训练效果 h[l]*1 h[…

【实践】使用vscode来debug go程序的尝鲜

配置 首先&#xff0c;当然得配置好vscode 的go环境&#xff0c; 装个go插件就基本满足了 配置 launch.json, 可以配置多个环境的程序启动参数&#xff08;很友好&#xff09; {"version": "0.2.0","configurations": [{"name": &…

嵌入式CAN通信协议详解分析

CAN协议简介 CAN是控制器局域网络(Controller Area Network)的简称,它是由研发和生产汽车电子产品著称的德国BOSCH公司开发的,并最终成为国际标准(ISO11519),是国际上应用最广泛的现场总线之一。 CAN总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线…

JavaSE——集合框架一(2/7)-Collection集合的遍历方式-迭代器、增强for循环、Lambda、案例

目录 Collection的遍历方式 迭代器 增强for循环&#xff08;foreach&#xff09; Lambda表达式遍历集合 案例 需求与分析 代码部分 运行结果 Collection的遍历方式 迭代器 选代器是用来遍历集合的专用方式&#xff08;数组没有选代器&#xff09;&#xff0c;在Java中…

初始Django

初始Django 一、Django的历史 ​ Django 是从真实世界的应用中成长起来的&#xff0c;它是由堪萨斯&#xff08;Kansas&#xff09;州 Lawrence 城中的一个网络开发小组编写的。它诞生于 2003 年秋天&#xff0c;那时 Lawrence Journal-World 报纸的程序员 Adrian Holovaty 和…

秒杀系统之设计方向

1 秒杀存在的问题 对于一个日常平稳的业务系统&#xff0c;如果直接开通秒杀功能的话&#xff0c;往往会出现很多问题—— 2 设计方向的思考 秒杀本质是要求一个瞬时高发下的承压系统&#xff0c;这也是其区别于其他业务的核心场景。对日常系统秒杀产生的问题逐一进行拆解分…

DTC 2024回顾丨zData X 多元数据库一体机:开创多元数据库时代部署新范式

导语 在2024“数据技术嘉年华”上&#xff0c;云和恩墨数据库一体机产品总经理刘宇在“数据库极致特性”专题论坛发表了题为《打造多元数据库部署新范式&#xff0c;引领一体化资源池创新之路》的演讲。他深入分析了国产数据库面临的挑战&#xff0c;并详细介绍了云和恩墨如何利…

Django5.0入门基本使用

文章目录 一、安装1、安装django环境2、创建项目3、启动服务器4、创建第一个应用&#xff08;1&#xff09;创建应用&#xff08;2&#xff09;编写视图&#xff08;3&#xff09;映射url&#xff08;4&#xff09;测试 二、核心概念1、django.urls 函数&#xff08;1&#xff…

【Spring】Springmvc学习Ⅲ

# Spring&#xff4d;vc学习Ⅲ 文章目录 一、图书管理系统1. 功能1.1 登录前端接口前端代码后端接口后端代码 1.2 图书列表展示步骤:图书类代码mock数据代码控制层调用代码服务层代码&#xff08;存储除数据库中需要存储的数据&#xff09; 2. 分层控制2.1 三层架构2.2 代码重…

commvault学习(7):恢复oracle

在实际生产环境中&#xff0c;oracle的恢复方式大部分是异机恢复。 环境&#xff1a; 备份机&#xff1a;windows server2008&#xff0c;ip&#xff1a;192.168.20.56 恢复目标机&#xff1a;windows server2008&#xff0c;ip&#xff1a;192.168.20.55 CS、MA&#xff1…