OFDM802.11a的FPGA实现
文章平均质量分 91
最近一段时间,对802.11a协议进行了学习,目前完成了该协议的OFDM发射机基带的MATLAB仿真和FPGA的实现。为了后面方便查阅,以及向大家分享,决定把学习过程和思路记录下来。
FPGA从入门到跑路
微信公众号:FPGA从入门到跑路
展开
-
高效的VIVADO BlockDesign设计方法:将自己设计的模块信号以总线形式聚合
在FPGA的顶层设计中,常常会涉及到诸多模块进行相互连接。通常情况下,我们会使用verilog语言中的模块例化,来完成各个模块之间的连接,但是这样可读性太差,过一段时间再来看项目,或者交给其他人,要理清模块之间的连接情况,需要额外花费大量时间。原创 2024-06-03 23:34:34 · 698 阅读 · 0 评论 -
OFDM 802.11a的FPGA实现:发射部分的最终实现
本系统在Xilinx的zynq 7000系列FPGA芯片上实现了一个基于IEEE 802.11a协议的OFDM基带处理发射机的功能。本系统包含了整个发射机的所有功能,包括序列训练符号、Siganl符号和Data符号等的实现过程。实现了data域的数据处理过程:由MAC层传来字节数据->并串转换->扰码->卷积编码->删余->一级交织->二级交织->调制映射->插入导频->IFFT->DAC。发射机整体构架。原创 2024-05-28 19:18:55 · 747 阅读 · 0 评论 -
OFDM 802.11a的FPGA实现(二十二)DAC模块(含代码)
上一节完成了MUC模块,实现了对MAC层进行数据交互,以及控制物理层各个模块的工作。现在还剩下最后一个DAC模块,作用是将时域的输出按照前导码、signal帧、data域的顺序进行排列,将数据速率从125M的突发形式,转换为20M的连续形式,然后送往硬件DAC输出模拟信号。PPDU帧结构PPDU帧结构。原创 2024-05-24 17:51:15 · 715 阅读 · 0 评论 -
OFDM 802.11a的FPGA实现(二十一)发射主控模块MCU(含代码)
对于发射部分的OFDM 802.11a的FPGA实现,已经接近闻声了,现在是万事俱备只欠东风,所有功能模块已经设计完成,目前还需要一个主控模块,其作用是:(1)与MAC通信进行数据交互;(2)控制一包发射数据按照PPDU帧结构的顺序进行发送。下面这两张图一直放出来,不觉得厌烦,这是协议的核心。PPDU帧结构PPDU帧结构。原创 2024-05-23 19:17:54 · 1131 阅读 · 1 评论 -
OFDM 802.11a的FPGA实现(二十)使用AXI-Stream FIFO进行跨时钟(含代码)
至此,通过前面的文章讲解,对于OFDM 802.11a的发射基带的一个完整的PPDU帧的所有处理已经全部完成,其结构如下图所示:PPDU帧结构PPDU帧结构接下来还需要完成两个最为核心的模块,一是主控模块,负责与MAC进行数据交互、控制数据流按照上图所示的帧结构进行输出;二是在处理数据时,我们采用的是125M的时钟,而DAC的时钟是20M的,我们需要对数据流进行降频处理,使125M的突发式数据流变为20M的连续数据流。原创 2024-05-22 20:14:52 · 1125 阅读 · 0 评论 -
OFDM 802.11a的FPGA实现(十九)signal域帧生成(含代码)
在之前的博客当中,已经实现了802.11a当中data域和signal域一系列处理,以及前导码的产生。前导码之后是signal域,是根据格式产生的一帧数据,今天来设计产生signal域帧的模块。PPDU帧结构PPDU帧结构。原创 2024-05-21 20:04:06 · 1199 阅读 · 0 评论 -
OFDM 802.11a的FPGA实现(十八)signal域数据处理
在之前的博客当中,已经实现了802.11a当中数据域的一系列处理,最终得到了数据域的时域波形。相较于数据域,signal域的处理很类似并且更简单。原创 2024-05-17 23:45:30 · 967 阅读 · 0 评论 -
OFDM 802.11a的FPGA实现(十七)PLCP的前导部分:长短训练序列组合加窗(含代码)
PLCP的前导部分由一组重复10次的短训练序列和一组加了一个长型保护间隔与重复2次的有效OFDM符号组成的长训练序列组成。前面两篇文章分别实现了短训练序列和长训练序列,这节将它们组合起来,成为前导码,共计12个OFDM符号。PPDU帧结构PPDU帧结构。原创 2024-05-16 17:35:59 · 600 阅读 · 0 评论 -
verilog中移位操作时,有符号数和无符号数的区别
前面OFDM 802.11a的FPGA实现中的文章在涉及到加窗操作的时候,使用到了移位操作,但是没有考虑到有符号数的问题,今天发现了这一问题,特详细对verilog中移位操作时,有符号数和无符号数的区别进行讲解,并且设计补码、反码、原码的知识。在verilog中有时会用signed修饰符来修饰定义的数据,运算的时候也会用signed()任务来强制转换数据,那么signed的修饰是为什么呢,是为了区分有符号数和无符号数的加法和乘法吗?原创 2024-05-15 18:50:28 · 710 阅读 · 0 评论 -
OFDM 802.11a的FPGA实现(十六)长训练序列:LTS(含Matlab和verilog代码)
在之前已经完成了data域数据的处理,在构建整个802.11a OFDM数据帧的时候,还剩下前导码和signal域的数据帧,这两部分的内容。PLCP的前导部分由一组重复10次的短训练序列和一组加了一个长型保护间隔与重复2次的有效OFDM符号组成的长训练序列组成。上一节实现了短训练序列,这一节实现长训练序列。原创 2024-05-15 18:48:00 · 963 阅读 · 0 评论 -
OFDM802.11a的FPGA实现(十五)短训练序列:STS(含Matlab和verilog代码)
在之前已经完成了data域数据的处理,在构建整个802.11a OFDM数据帧的时候,还剩下前导码和signal域的数据帧,这两部分的内容。PLCP的前导部分由一组重复10次的短训练序列和一组加了一个长型保护间隔与重复2次的有效OFDM符号组成的长训练序列组成。今天先来实现短训练序列。PPDU帧结构标PPDU帧结构题。原创 2024-05-14 19:15:36 · 921 阅读 · 0 评论 -
OFDM802.11a的FPGA实现(十四)data域的设计优化,挤掉axi协议传输中的气泡
前面12篇文章详细讲述了,OFDM 802.11a发射部分data域的FPGA实现和验证,今天对data域的设计做一个总结。在总结过程中,发现了设计中存在bug,经过检查和调试成功的解决了bug,现在对整个过程进行详细描述。原创 2024-05-13 16:55:27 · 910 阅读 · 1 评论 -
OFDM802.11a的FPGA实现(十三)加窗(含verilog和matlab代码)
添加循环前缀后,对数据还要进行加窗(Windowing)操作。加窗操作可以使OFDM 符号在带宽之外的功率谱密度下降得更快。原创 2024-05-12 13:12:42 · 509 阅读 · 0 评论 -
OFDM802.11a的FPGA实现(十二)使用FFT IP核添加循环前缀
为了能够消除传输过程当中的符号间干扰,在IFFT处理完毕之后还要加上循环前缀。原创 2024-05-11 15:37:11 · 981 阅读 · 1 评论 -
OFDM802.11a的FPGA实现(十一)IFFT(含verilog和matlab代码)
在前面的博客当中,已经实现了星座图的映射和导频插入,得到了在频域上的点,接下来要做的就是将频域的信号,转换到时域,因为最终在信道中传输的信号都是实际存在的信号。原创 2024-05-10 15:12:23 · 955 阅读 · 0 评论 -
OFDM802.11a的FPGA实现(十)导频插入(含verilog和matlab代码)
前面一篇文章完成了星座图的映射,今天继续设计后面的模块。在接收机当中,虽然利用接收到的短/长训练序列,能够进行信道均衡,频偏校正,但符号还会存在一定的剩余频率偏差,并且偏差会随着时间的积累而累积,会造成所有子载波产生一定的剩余相位偏转。因此,还需要不断的对参考相位进行跟踪。要实现这一功能,需要在 52 个非零子载波中插入 4 个导频符号。原创 2024-05-08 17:13:35 · 1402 阅读 · 1 评论 -
OFDM802.11a的FPGA实现(九)星座图映射(含verilog和matlab代码)
在上一篇博客当中,已经完成了数据域的交织,数据域的数据经过交织之后,下一步就是需要对交织之后的bit进行星座图的映射了。原创 2024-05-07 14:21:38 · 1010 阅读 · 0 评论 -
OFDM802.11a的FPGA实现(八)二级交织(含verilog和matlab代码)
上一节实现了一级交织:分组交织器,这节接着进行第二级交织的实现。需要注意的是只有data域需要第二级交织,而signal域不需要。二级交织比较简单,作者直接调用了前面的模块来实现,这也体现了FPGA设计的模块化复用思想。当然重新写也是可以的,但是有现成的可以调用干嘛不用呢是不是?第二次交织是在第一次交织的基础上进行的,交织基本过程是每24个比特为一单元,前12个顺序保持不变,后12个每相邻两位交换位置,这样就保证了相邻的编码比特被分别映射到星座图中的重要和次要位置,因此LSB长时间的低可靠性将被避免。原创 2024-04-30 17:15:26 · 579 阅读 · 1 评论 -
OFDM802.11a的FPGA实现(七)一级交织:分组交织器(含verilog和matlab代码)
在前面的文章中讲解了卷积编码和删余,实现了1/2、2/3、3/4编码速率的输出。数据域在编码之后,下一个部分就是交织。今天对交织进行具体实现。原创 2024-04-29 19:38:26 · 1260 阅读 · 0 评论 -
OFDM802.11a的FPGA实现(六)删余模块的FPGA实现(含verilog代码和matla)
在前面执行了卷积编码之后,得到了一个1/2编码速率的卷积编码,在实际的使用当中,802.11a支持不同的编码速率,比如2/3编码,3/4编码,为了能够得到对应的编码速率,需要将卷积编码之后的结构进行删除其中的一些bit。不得不先吐槽下《基于XILINX FPGA的OFDM通信系统基带设计》这本书里面的设计思路,一旦输入数据和输出数据速率不一样他就跨时钟。记得作者大二才学FPGA的时候,接触一位大佬就说过,always里面最好都是一种时钟,除非是真的避免不了再考虑。原创 2024-04-25 15:22:39 · 1528 阅读 · 1 评论 -
OFDM802.11a的FPGA实现(五)卷积编码器的FPGA实现与验证(含verilog代码和matlab代码)
前面一节完成了扰码器的FPGA设计与Matlab验证,这节继续对卷积编码器进行实现和验证。原创 2024-04-23 16:45:45 · 1275 阅读 · 0 评论 -
OFDM802.11a的FPGA实现(四)扰码
上一节详细讲述下发射机基带系统的整体构架,从这一节开始,挨个实现发射机基带的这些模块。该系统分为训练序列生成器、MCU、OFDM符号频域调制、IFFT和循环前缀、加窗。序列主要为后续接收端的时域同步和信道估计及均衡提供算法支撑,训练序列包括长、短训练序列两部分,短训练序列主要用来进行信号检测帧同步,长训练序列用来进行信道估计从而对接收信号进行补偿。PLL模块主要负责各种频率的时钟信号生成,MCU主要负责产生发射机所需要的各种控制信号,保证各个子模块按照一定的时序进行工作,并且能彼此协调和同步。原创 2024-04-19 22:01:51 · 923 阅读 · 1 评论 -
OFDM802.11a的FPGA实现(三)发射机的基带整体架构详细讲解
在前面的文章对OFDM技术和802.11a进行了简单的介绍,并对发射机的基带设计提供了一些自己的思路。上一篇文章,基于valid-ready双向握手机制设计了整个系统常用到的串并转换模块,并且将其参数化,使用非常方便。这章再详细讲述下发射机基带系统的整体构架,需要把协议的逻辑理清楚才方便后面仿真和实现。自己刚开始看也是一头雾水,后面花时间整理了一些图片,发现理解起来容易了不少。下面结合图片加上少量的文字说明,进行讲解。原创 2024-04-19 22:03:46 · 1115 阅读 · 1 评论 -
OFDM802.11a的FPGA实现(二)基于valid-ready双向握手机制的串并和并串转换
上一篇文章主要讲了基于XILINX FPGA的OFDM通信系统基带设计的总体思路,以及介绍了valid-ready双向握手机制。这节开始仿真和设计该系统,并整理设计思路和附上代码。接下来对其他模块进行设计讲解和仿真验证。原创 2024-04-18 10:47:17 · 1497 阅读 · 0 评论 -
OFDM802.11a的FPGA实现(一)valid_ready双向握手机制.docx
上一篇文章对802.11a协议进行了概述,接下来对该协议的OFDM发射机基带分模块进行MATLAB仿真和FPGA的实现。这节先讲valid_ready双向握手的机制,为后面设计流水级的模块奠定基础,先不放代码,下节写串并/并串转换的时候一起把这部分代码展现。原创 2024-04-18 10:06:51 · 977 阅读 · 0 评论 -
OFDM802.11a概述
最近一段时间,对802.11a协议进行了学习,目前完成了该协议的OFDM发射机基带的MATLAB仿真和FPGA的实现。为了后面方便查阅,以及向大家分享,决定把学习过程和思路记录下来。原创 2024-04-17 22:47:08 · 1164 阅读 · 1 评论