- 博客(76)
- 收藏
- 关注
原创 计算机算法中的数字表示法——定点数
前面一篇文章讲了计算机中的数字表示法:原码、补码和反码,这一篇文章开始进行定点数的讲解。定点数,从字面意思上理解就是小数点位置固定,如下图所示:数字既包括整数,又包括小数,而小数的精度范围要比整数大得多,所以如果我们想在计算机中,既能表示整数,也能表示小数,关键就在于这个小数点如何表示?
2024-05-30 21:24:29
3256
原创 FPGA基础:触发器和锁存器
异步控制信号是指该信号在任何时刻只要有效,就会对电路起作用,而不必等时钟边沿信号。(4)触发器有记忆功能,由它构成的电路在某时刻的输出不仅取决于该时刻的输入,还与电路原来状态有关。使用异步复位(Using an asynchronous reset):always@(posedge(clk) or (posedge(rst))(2)在输入信号作用下,触发器的两个稳定状态可相互转换(称为状态的翻转)。只列出了上升沿触发的时钟clk,而没有将输入d列写进去,是因为输入d要想起作用,必须要有时钟边沿信号的触发。
2024-05-29 17:53:06
1043
原创 计算机算法中的数字表示法——原码、反码、补码
昨天有粉丝让我讲解下定点数和浮点数,本来这部分是打算在FPGA入门系列的最后面来讲的。作者想开的系列真的很多,比如开发FPGA需要学会相关软件Matlab、Vivado、ModelSim等等的使用,每个软件做一个系列;FPGA入门教程做一个系列;基础数字信号处理做一个系列;通信相关的系列;IP核使用详解系列;FPGA数字积木系列(自己设计的一些参数化IP)。但是这些无疑都会花大量的时间去构思和整理资料,会出的比较慢,请读者耐心等待。
2024-05-29 17:48:04
1471
原创 OFDM 802.11a的FPGA实现:发射部分的最终实现
本系统在Xilinx的zynq 7000系列FPGA芯片上实现了一个基于IEEE 802.11a协议的OFDM基带处理发射机的功能。本系统包含了整个发射机的所有功能,包括序列训练符号、Siganl符号和Data符号等的实现过程。实现了data域的数据处理过程:由MAC层传来字节数据->并串转换->扰码->卷积编码->删余->一级交织->二级交织->调制映射->插入导频->IFFT->DAC。发射机整体构架。
2024-05-28 19:18:55
1644
2
原创 基于FPGA的函数信号发生器设计
设计采用波形查找表和相位累加器的方法实现DDS,查找表的数据位宽为8位,采样点数为4096。波形产生范围是100Hz-20MHz,最小频率间隔为1Hz,用8个数码管显示频率,可产生正弦波、方波、三角波,波形用两个led显示,select信号控制,全灭为正弦波,一亮一灭为方波,全亮为锯齿波。为了使频率和相位便于调节,用3个拨码开关控制步进,用8个led显示状态。
2024-05-25 16:50:27
5273
2
原创 OFDM 802.11a的FPGA实现(二十二)DAC模块(含代码)
上一节完成了MUC模块,实现了对MAC层进行数据交互,以及控制物理层各个模块的工作。现在还剩下最后一个DAC模块,作用是将时域的输出按照前导码、signal帧、data域的顺序进行排列,将数据速率从125M的突发形式,转换为20M的连续形式,然后送往硬件DAC输出模拟信号。PPDU帧结构PPDU帧结构。
2024-05-24 17:51:15
1148
原创 OFDM 802.11a的FPGA实现(二十一)发射主控模块MCU(含代码)
对于发射部分的OFDM 802.11a的FPGA实现,已经接近闻声了,现在是万事俱备只欠东风,所有功能模块已经设计完成,目前还需要一个主控模块,其作用是:(1)与MAC通信进行数据交互;(2)控制一包发射数据按照PPDU帧结构的顺序进行发送。下面这两张图一直放出来,不觉得厌烦,这是协议的核心。PPDU帧结构PPDU帧结构。
2024-05-23 19:17:54
1499
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
2051
原创 OFDM 802.11a的FPGA实现(十九)signal域帧生成(含代码)
在之前的博客当中,已经实现了802.11a当中data域和signal域一系列处理,以及前导码的产生。前导码之后是signal域,是根据格式产生的一帧数据,今天来设计产生signal域帧的模块。PPDU帧结构PPDU帧结构。
2024-05-21 20:04:06
1610
原创 FPGA搭积木之按键消抖(改进版)
昨天分享的关于FPGA对机械按键消抖的设计,有读者指出了其中的不足,并给出了他的思路。今天就读者的设计思路,来再做一个按键消抖模块。这个程序大概是大学的时候写的,当时才开始学,没考虑那么多。现在开始写博客,才陆续把以前写过的东西翻出来、分享。大家对文章有问题,欢迎来和我讨论。
2024-05-20 16:18:55
979
原创 FPGA搭积木之按键消抖
由于机械按键的物理特性,按键被按下的过程中,存在一段时间的抖动,同 时在释放按键的过程中也存在抖动,这就导致在识别的时候可能检测为多次的按键按下,而通常检测到一次按键输入信号的状态为低电平,就可以确认按键被按下了,所以我们在使用按键时往往需要消抖,以确保按键被按下一次只检测到一次低电平。
2024-05-18 17:09:08
697
原创 OFDM 802.11a的FPGA实现(十八)signal域数据处理
在之前的博客当中,已经实现了802.11a当中数据域的一系列处理,最终得到了数据域的时域波形。相较于数据域,signal域的处理很类似并且更简单。
2024-05-17 23:45:30
1307
原创 OFDM 802.11a的FPGA实现(十七)PLCP的前导部分:长短训练序列组合加窗(含代码)
PLCP的前导部分由一组重复10次的短训练序列和一组加了一个长型保护间隔与重复2次的有效OFDM符号组成的长训练序列组成。前面两篇文章分别实现了短训练序列和长训练序列,这节将它们组合起来,成为前导码,共计12个OFDM符号。PPDU帧结构PPDU帧结构。
2024-05-16 17:35:59
998
原创 verilog中移位操作时,有符号数和无符号数的区别
前面OFDM 802.11a的FPGA实现中的文章在涉及到加窗操作的时候,使用到了移位操作,但是没有考虑到有符号数的问题,今天发现了这一问题,特详细对verilog中移位操作时,有符号数和无符号数的区别进行讲解,并且设计补码、反码、原码的知识。在verilog中有时会用signed修饰符来修饰定义的数据,运算的时候也会用signed()任务来强制转换数据,那么signed的修饰是为什么呢,是为了区分有符号数和无符号数的加法和乘法吗?
2024-05-15 18:50:28
3018
原创 OFDM 802.11a的FPGA实现(十六)长训练序列:LTS(含Matlab和verilog代码)
在之前已经完成了data域数据的处理,在构建整个802.11a OFDM数据帧的时候,还剩下前导码和signal域的数据帧,这两部分的内容。PLCP的前导部分由一组重复10次的短训练序列和一组加了一个长型保护间隔与重复2次的有效OFDM符号组成的长训练序列组成。上一节实现了短训练序列,这一节实现长训练序列。
2024-05-15 18:48:00
1470
原创 OFDM802.11a的FPGA实现(十五)短训练序列:STS(含Matlab和verilog代码)
在之前已经完成了data域数据的处理,在构建整个802.11a OFDM数据帧的时候,还剩下前导码和signal域的数据帧,这两部分的内容。PLCP的前导部分由一组重复10次的短训练序列和一组加了一个长型保护间隔与重复2次的有效OFDM符号组成的长训练序列组成。今天先来实现短训练序列。PPDU帧结构标PPDU帧结构题。
2024-05-14 19:15:36
1806
1
原创 OFDM802.11a的FPGA实现(十四)data域的设计优化,挤掉axi协议传输中的气泡
前面12篇文章详细讲述了,OFDM 802.11a发射部分data域的FPGA实现和验证,今天对data域的设计做一个总结。在总结过程中,发现了设计中存在bug,经过检查和调试成功的解决了bug,现在对整个过程进行详细描述。
2024-05-13 16:55:27
1222
1
原创 OFDM802.11a的FPGA实现(十三)加窗(含verilog和matlab代码)
添加循环前缀后,对数据还要进行加窗(Windowing)操作。加窗操作可以使OFDM 符号在带宽之外的功率谱密度下降得更快。
2024-05-12 13:12:42
1585
原创 OFDM802.11a的FPGA实现(十二)使用FFT IP核添加循环前缀
为了能够消除传输过程当中的符号间干扰,在IFFT处理完毕之后还要加上循环前缀。
2024-05-11 15:37:11
1722
1
原创 OFDM802.11a的FPGA实现(十一)IFFT(含verilog和matlab代码)
在前面的博客当中,已经实现了星座图的映射和导频插入,得到了在频域上的点,接下来要做的就是将频域的信号,转换到时域,因为最终在信道中传输的信号都是实际存在的信号。
2024-05-10 15:12:23
1799
原创 OFDM802.11a的FPGA实现(十)导频插入(含verilog和matlab代码)
前面一篇文章完成了星座图的映射,今天继续设计后面的模块。在接收机当中,虽然利用接收到的短/长训练序列,能够进行信道均衡,频偏校正,但符号还会存在一定的剩余频率偏差,并且偏差会随着时间的积累而累积,会造成所有子载波产生一定的剩余相位偏转。因此,还需要不断的对参考相位进行跟踪。要实现这一功能,需要在 52 个非零子载波中插入 4 个导频符号。
2024-05-08 17:13:35
2683
1
原创 OFDM802.11a的FPGA实现(九)星座图映射(含verilog和matlab代码)
在上一篇博客当中,已经完成了数据域的交织,数据域的数据经过交织之后,下一步就是需要对交织之后的bit进行星座图的映射了。
2024-05-07 14:21:38
2177
原创 用FPGA+DAC输出“心”形波
之前在做信号处理的时候整了一下活,用FPGA+DAC(数模转换器),输出了一个爱心形状的波形,今天整理资料的时候偶然发现了他,现在把他分享出来。
2024-05-01 22:54:55
3404
1
原创 OFDM802.11a的FPGA实现(八)二级交织(含verilog和matlab代码)
上一节实现了一级交织:分组交织器,这节接着进行第二级交织的实现。需要注意的是只有data域需要第二级交织,而signal域不需要。二级交织比较简单,作者直接调用了前面的模块来实现,这也体现了FPGA设计的模块化复用思想。当然重新写也是可以的,但是有现成的可以调用干嘛不用呢是不是?第二次交织是在第一次交织的基础上进行的,交织基本过程是每24个比特为一单元,前12个顺序保持不变,后12个每相邻两位交换位置,这样就保证了相邻的编码比特被分别映射到星座图中的重要和次要位置,因此LSB长时间的低可靠性将被避免。
2024-04-30 17:15:26
1177
1
原创 OFDM802.11a的FPGA实现(七)一级交织:分组交织器(含verilog和matlab代码)
在前面的文章中讲解了卷积编码和删余,实现了1/2、2/3、3/4编码速率的输出。数据域在编码之后,下一个部分就是交织。今天对交织进行具体实现。
2024-04-29 19:38:26
2670
原创 FPGA搭积木之边沿检测电路
今天分享一个FPGA设计中很常用的边沿检测电路,并参数化封装成自己的IP核。该电路的作用是输入一个信号,在其上升沿或者下降沿时(可选)输出一个时钟周期脉冲。
2024-04-28 19:49:45
706
原创 FPGA搭积木之复数乘法器以及ModelSim自动化仿真的技巧
在数字信号处理种复数乘法去使用的非常多,今天分享一个自己设计的复数乘法器,并将设计参数化,放入自己的代码库,供有需要时直接使用。相比于官方提供的封闭的IP核,自己设计的IP核虽然性能比不过,但是更灵活,方便进行个性化修改。FPGA其实就像搭积木一样,只要自己的代码库够丰富,设计只会越来越轻松!今天学习了在testbench中自动化对比仿真的技巧,对比错误将信息打印出来,方便回到波形中去查看,对比通过输出pass。
2024-04-27 17:34:16
1865
1
原创 FPGA搭积木之计数器
在使用FPGA设计硬件时经常会用到计数器,虽然很简单,但是每次都要反复去写计数器,显得很麻烦而且效率低。今天就分享一个之前自己设计的计数器,可以调整位宽,以及选择是向上或向下计数。
2024-04-26 19:42:59
728
1
原创 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
2293
1
原创 OFDM802.11a的FPGA实现(五)卷积编码器的FPGA实现与验证(含verilog代码和matlab代码)
前面一节完成了扰码器的FPGA设计与Matlab验证,这节继续对卷积编码器进行实现和验证。
2024-04-23 16:45:45
2441
原创 FPGA时钟分频:偶数分频、奇数分频、小数分频(含verilog源码)
FPGA分频器是一种常用于数字信号处理、通信系统、雷达系统等领域的电路,其作用是将信号时钟分成多个频频率。分频电路是数字电路中常见的逻辑电路类型。在时序逻辑电路中,时钟是必不可少的,但对于时钟要求不高的基本设计,自行设计的分频电路,也就是时钟分频器,有时候比采用外部PLL更为简单、有效、快速。本文将详细介绍FPGA分频器的设计方法,并附上Verilog代码示例,以供参考。
2024-04-20 14:54:57
6721
原创 OFDM802.11a的FPGA实现(三)发射机的基带整体架构详细讲解
在前面的文章对OFDM技术和802.11a进行了简单的介绍,并对发射机的基带设计提供了一些自己的思路。上一篇文章,基于valid-ready双向握手机制设计了整个系统常用到的串并转换模块,并且将其参数化,使用非常方便。这章再详细讲述下发射机基带系统的整体构架,需要把协议的逻辑理清楚才方便后面仿真和实现。自己刚开始看也是一头雾水,后面花时间整理了一些图片,发现理解起来容易了不少。下面结合图片加上少量的文字说明,进行讲解。
2024-04-19 22:03:46
1778
1
原创 OFDM802.11a的FPGA实现(四)扰码
上一节详细讲述下发射机基带系统的整体构架,从这一节开始,挨个实现发射机基带的这些模块。该系统分为训练序列生成器、MCU、OFDM符号频域调制、IFFT和循环前缀、加窗。序列主要为后续接收端的时域同步和信道估计及均衡提供算法支撑,训练序列包括长、短训练序列两部分,短训练序列主要用来进行信号检测帧同步,长训练序列用来进行信道估计从而对接收信号进行补偿。PLL模块主要负责各种频率的时钟信号生成,MCU主要负责产生发射机所需要的各种控制信号,保证各个子模块按照一定的时序进行工作,并且能彼此协调和同步。
2024-04-19 22:01:51
1961
1
原创 OFDM802.11a的FPGA实现(二)基于valid-ready双向握手机制的串并和并串转换
上一篇文章主要讲了基于XILINX FPGA的OFDM通信系统基带设计的总体思路,以及介绍了valid-ready双向握手机制。这节开始仿真和设计该系统,并整理设计思路和附上代码。接下来对其他模块进行设计讲解和仿真验证。
2024-04-18 10:47:17
2212
1
原创 OFDM802.11a的FPGA实现(一)valid_ready双向握手机制.docx
上一篇文章对802.11a协议进行了概述,接下来对该协议的OFDM发射机基带分模块进行MATLAB仿真和FPGA的实现。这节先讲valid_ready双向握手的机制,为后面设计流水级的模块奠定基础,先不放代码,下节写串并/并串转换的时候一起把这部分代码展现。
2024-04-18 10:06:51
1470
1
原创 OFDM802.11a概述
最近一段时间,对802.11a协议进行了学习,目前完成了该协议的OFDM发射机基带的MATLAB仿真和FPGA的实现。为了后面方便查阅,以及向大家分享,决定把学习过程和思路记录下来。
2024-04-17 22:47:08
2468
2
基于Xilinx FPGA的OFDM通信系统基带设计
2024-04-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅