- 博客(76)
- 收藏
- 关注
原创 FPGA入门系列:计数器
60进制计数器的显示需要两个数码管。其中一个数码管显示计数低位0-9,另一个数码管显示计数高位0-5。为了与两个数码管相连,可以设计两个4位寄存器变量:一个寄存器变量为0-9的变化;链接:https://mp.weixin.qq.com/s/YGLIwpxsCxuMrUC-zXGYoQ。计数器是一种典型的时序器件,常用于对时钟脉冲的个数进行计数,还用于定时、分频、产生同步脉冲等。在使用硬件描述语言设计计数器时,不需要专门设计触发器,而是直接对寄存器变量进行操作。按触发方式分:同步计数器和异步计数器。
2024-08-02 17:45:07
733
原创 FPGA入门系列:亚稳态 (metastablility)
由于异步输入信号不依固定的频率或相位关系相对于采样它的时钟到达,可以在任意时间改变,这样异步输入信号在一些点上破坏了触发器的建立/保持窗口,从而可能使触发器保持旧值、或者改变为新的值、或者可能变成亚稳态。当异步信号被触发器采样时,信号可能正在发生翻转,将以一定的概率采样到 在触发器建立或保持时间内的逻辑值;异步信号同步化(将异步信号同步到采样时钟域,即采用高达一个时钟周期的延时来消释第一个触发器的亚稳态)
2024-08-02 17:42:40
473
原创 FPGA入门系列:寄存器是如何构成的&移位寄存器
(4)触发器有记忆功能,由它构成的电路在某时刻的输出不仅取决于该时刻的输入,还与电路原来状态有关。而门电路无记忆功能,由它构成的电路在某时刻的输出完全取决于该时刻的输入,与电路原来状态无关。需要注意的是,在同一时钟上升沿,所有的数值都是同时移位的。可以把4个1位寄存器模块组合在一起,构成4位的寄存器,同理,可以用N个1位寄存器构造成1个N位寄存器。8位移位寄存器由8个D触发器串联构成,在时钟信号的作用下,前级的数据向后移动。移位寄存器是一种在时钟脉冲的作用下,将寄存器中的数据按位移动的逻辑。
2024-07-23 17:20:24
1900
原创 verilog行为建模(五):条件语句
in的值赋给o1,但其每位赋值的强度及延迟可能不同。如果o1是一个标量(scalar)信号,则其延迟和前面的条件缓冲器上的门延迟相同。对向量线网(net)的赋值上的延迟情况不同。0赋值使用下降延迟,Z赋值使用关断延迟,所有其他赋值使用上升延迟。这种行为描述方式可以非常灵活的描述时钟,可以控制时钟的开始时间及周期占空比。while:只要表达式为真(不为0),则重复执行一条语句(或语句块)。上面的例子显示出持续赋值的灵活性和简单性。:赋值语句或空语句;:赋值语句或空语句;
2024-07-22 11:18:07
2224
原创 verilog行为建模(四):过程赋值
非阻塞赋值不阻塞过程流,仿真器读入一条赋值语句并对它进行调度之后,就可以处理下一条赋值语句。阻塞过程赋值执行完成后再执行在顺序块内下一条语句。
2024-07-22 11:16:50
463
原创 Verilog中的高级结构:任务及函数(下)
函数返回值可以声明为其它register类型:integer, real, 或time。在任何表达式中都可调用函数。在关键词begin或fork后加上 : 对块进行命名。disable disable
2024-07-19 13:56:47
933
原创 Verilog中的高级结构:任务及函数(上)
结构化设计是将任务分解为较小的,更易管理的单元,并将可重用代码进行封装。这通过将设计分成模块,或任务和函数实现。
2024-07-19 13:48:11
683
原创 verilog行为建模(三):块语句
b和a的值被立即采样(时刻0),保存的值在时刻5被赋值给他们各自的目标。注意,另一个过程块可以在时刻0到时刻5之间影响a和b的值。b的值被立即采样(时刻0),这个值在时刻5赋给a。a的值在时刻5被采样,这个值在时刻10赋给b。注意,另一个过程块可能在时刻0到时刻5之间影响b的值,或在时刻5到时刻10之间影响a的值。注意fork-join块是典型的不可综合语句,并且在一些仿真器时效率较差。块语句用来将多个语句组织在一起,使得他们在语法上如同一个语句。并行语句在同一时间同步发生,但由仿真器在另外一个时间执行。
2024-07-05 17:54:45
448
原创 verilog行为建模(一):基本概念
时序控制@可以用在RTL级或行为级组合逻辑或时序逻辑描述中。可以用关键字posedge和negedge限定信号敏感边沿。敏感表中可以有多个信号,用关键字or连接。下面 的输出锁存的加法器的行为描述中,使用了用关键字or的边沿敏感时序以及用wait语句描述的电平敏感时序。在test bench中使用简单延时(#延时)施加激励,或在行为模型中模拟实际延时。wait用于行为级代码中电平敏感的时序控制。
2024-07-05 17:50:24
869
原创 Verilog进行结构描述(三):Verilog模块实例化
微信公众号获取更多FPGA相关源码:2.实例数组(Array of Instances)实例名字后有范围说明时会创建一个实例数组。在说明实例数组时,实例必须有一个名字 (包括基本单元实例)。其说明语法为:如果范围中MSB与LSB相同,则只产生一个实例。一个实例名字只能有一个范围。下面以模块comp为例说明这些情况微信公众号获取更多FPGA相关源码:
2024-06-27 11:17:52
873
原创 Verilog进行结构描述(二):Verilog基本单元(primitives)
基本单元是Verilog开发库的一部分。大多数ASIC和FPGA元件库是用这些基本单元开发的。基本单元库是自下而上的设计方法的一部分。基本单元引脚的数目由连接到门上的net的数量决定。因此当基本单元输入或输出的数量变化时用户不需要重定义一个新的逻辑功能。Verilog基本单元提供基本的逻辑功能,也就是说这些逻辑功能是预定义的,用户不需要再定义这些基本功能。条件基本单元有三个端口:输出、数据输入、使能输入。
2024-06-27 11:16:53
584
原创 OFDM 802.11a的FPGA实现:发射部分,bug更正,以及更新说明。
经过各位朋友的提醒,这部分内容有些许bug,目前已经更正,后续还会持续更新。获取更新内容,可以进上述链接,进文末的链接二进行下载,或者根据文末的指引,在后台回复,也可获取最新工程的下载链接。
2024-06-27 11:14:27
1144
原创 Verilog进行结构描述(structural modeling)(一):基本概念
微信公众号获取更多FPGA相关源码:# 1.结构描述(structural modeling)的内容:Verilog HDL不同于C语言这类程序语言,在写Verilog HDL代码时,一定要清楚是在描述硬件,而不是在编写程序。上图电路图可用如下硬件语言描述:上图的RS触发器,可用如下硬件语言描述:Verilog结构描述表示一个逻辑图结构描述用已有的元件构造。
2024-06-25 17:04:42
571
原创 Verilog HDL语法入门系列(三):Verilog的语言操作符规则(上)
逻辑反操作符将操作数的逻辑值取反。例如,若操作数为全0,则其逻辑值为0,逻辑反操作值为1。逻辑反操作符将操作数的逻辑值取反。例如,若操作数为全0,则其逻辑值为0,逻辑反操作值为1。integer和reg类型在算术运算中,integer是有符号数,而reg是无符号数。当两个操作数位数不同时,位数少的操作数零扩展到相同位数。下表以优先级顺序列出了Verilog操作符。按位操作符对矢量中相对应位运算。
2024-06-25 16:56:19
677
原创 Verilog的逻辑系统及数据类型(三):寄存器数组(Register Arrays)
STS一个周期的16个时域样值被存入片内ROM中,该ROM共有16个地址空间,每个地址对应16位的字长,其中高8位存储STS样值的虚部,低8位存储STS样值的实部(与IFFT输出保持一致)。STS_din_rdy作为ROM的读使能信号,代表后面的模块准备好接收数据。当STS_din_rdy为高时,计数器以模161形式开始计数161个时钟,生成的地址信号为计数器的低4位,即cnt[3:0]控制ROM将其中存储的16个STS样值重复读取10个周期,形成标准所规定的短训练序列。
2024-06-25 16:53:30
718
原创 Verilog的逻辑系统及数据类型(一):四值逻辑系统
信号可以分为端口信号和内部信号。出现在端口列表中的信号是端口信号,其它的信号为内部信号。对于端口信号,输入端口只能是net类型。输出端口可以是net类型,也可以是register类型。若输出端口在过程块中赋值则为register类型;若在过程块外赋值(包括实例化语句),则为net类型。内部信号类型与输出端口相同,可以是net或register类型。判断方法也与输出端口相同。若在过程块中赋值,则为register类型;若在过程块外赋值,则为net类型。
2024-06-25 16:48:36
1184
原创 Verilog HDL语法入门系列(二):Verilog的语言文字规则
Verilog中,字符串大多用于显示信息的命令中。Verilog没有字符串数据类型。Verilog中,常量(literals)可是整数也可以是实数。整数的大小可以定义也可以不定义。整数的大小可以定义也可以不定义。实数常量可以用十进制或科学表示法表示。格式符%0d表示没有前导0的十进制数。
2024-06-25 16:41:10
779
原创 Verilog HDL语法入门系列(一):硬件描述语言的历史、特点、用途
硬件描述语言HDL是具有特殊结构能够对硬件逻辑电路的功能进行描述的一种高级编程语言。描述电路的连接描述电路的功能在不同抽象级上描述电路描述电路的时序表达具有并行性HDL主要有两种:Verilog和VHDLVerilog起源于C语言,因此非常类似于C语言,容易掌握VHDL起源于ADA语言,格式严谨,不易学习。VHDL出现较晚,但标准化早。IEEE 1706-1985标准。
2024-06-25 16:39:59
1286
原创 分组检测常用算法
对上述几种分组检测算法进行一个简单的总结:能量检测算法虽然简单但是计算出的能量值容易受到发射、信道、噪声等外界因素影响,阈值不好确定,估计误差较大;双滑动窗口算法通过计算出两个窗口的能量而产生一个三角形响应.该算法不需要人T确定阈值(只需取三角形的最大值),其性能要好于能量检测算法;延时相关分组检测算法是利用发射信号中前导结构中短训练符号的周期性而产生的相关,同上面两种算法比较,这种相关性不易受外界因素如发射功率、信道、噪声等影响,具有更好的性能,而延时相关加长度保持算法具有更高的可靠性。
2024-06-17 13:26:10
1361
原创 IEEE802.11a中的同步
最近有其他很多事情要做,接收机这部分本身内容也更难,涉及很多理论知识,本来之前对于随机信号和假设检验就没怎么学习透彻。所以要理清这部分内容,更花时间,有时间会接着做,不过可能会出的比较慢。今天就先来对接收机部分的设计开一个头吧,内容参考《基于XILINX FPGA的OFDM通信系统基带设计》。首先,同步对于任何数字通信系统来说都是一个根本的任务。没有精确的同步很难对传输的数据进行可靠的恢复。因此,同步在数字基带的设计中起着至关重要的作用。
2024-06-17 13:24:34
963
原创 Openwifi开源项目的结构
Openwifi 是一个关于wifi 系统的开源项目,兼容全栈 IEEE802.11/Wi-Fi 设计,基于 SDR(软件定义无线电)。
2024-06-17 11:28:51
2167
1
原创 一文搞懂阻塞赋值和非阻塞赋值
阻塞赋值对应的电路结构往往与触发沿没有关系,只与输入的电平变化有关系;非阻塞赋值对应的电路结构往往与触发沿有关系,只有在触发沿时才有可能发生赋值的情况。时序电路建模时,用非阻塞赋值(
2024-06-14 17:29:28
693
原创 认识非线性调频(NLFM)信号和脉冲压缩
非线性调频信号(NLFM)脉冲压缩原理:即采用非线性调频信号的代替线性调频信号,目的是在脉压后获得更好的主副瓣比,更小的信号损失。由于其信号处理方法同LFM信号一样,所以其方法的核心是如何设计NLFM信号,主要的方法是相位逗留法:原理比较复杂,感兴趣的可以自己去搜资料看公式推导,我们主要讲怎么在Matlab里面实现。
2024-06-13 17:22:46
3904
2
原创 认识线性调频信号(LFM)和脉冲压缩
这意味着当雷达系统面对多个目标时,强目标信号的旁瓣可能会掩盖或淹没较弱的目标信号,进而影响到对弱目标的准确检测。但匹配滤波方法虽然带来了最佳的性能,却也带来了旁瓣水平过高的问题,这要求雷达信号处理系统必须寻求有效的旁瓣抑制方法。k为线性调频斜率,单位为Hz/s,即反映了频率的变化率。MATLAB仿真代码如下所示,仿真参数:B=200MHz,T=1us,fs=4*B,在时域中,一个理想的线性调频信号或脉冲持续时间为T秒,振幅为常量,中心频率为。由于频率的线性调制,相位为时间的二次函数,当中心频率为。
2024-06-13 17:21:35
3505
原创 一文搞懂雷达脉冲压缩和匹配滤波器
为了解决传统单频脉冲雷达面临的作用距离和空间分辨力之间的矛盾,脉冲压缩理论被提出。在接收端设计一个和发射信号能够“共轭匹配”的网络来实现脉冲压缩。接收到的回波信号通过匹配滤波器时,滤波器的增益在信号越强的频率点越大;在信号越弱的频率点,增益越小,通过这样的方式使信号在时域更加集中。脉冲压缩技术大致可分为线性调频(LFM)和相位编码。其中LFM信号易于通过硬件或各种技术产生,但是进行匹配滤波后主旁瓣比高达13.2dB,在检测多个目标时,强目标的回波旁瓣可能会把弱小信号覆盖,导致弱小信号的检测受到影响。
2024-06-12 00:07:06
6961
原创 FPGA通过移位相加实现有符号乘法器(参数化,封装成IP可直接调用)
上一篇博客实现了无符号移位相加乘法器,有符号乘法器和无符号的原理是一样的,只不过需要进行符号位的处理。
2024-06-12 00:03:55
761
原创 FPGA通过移位相加实现无符号乘法器(参数化,封装成IP可直接调用)
在硬件设计中,乘法器是非常重要的一个器件,乘法器的种类繁多,常见的有并行乘法器、移位相加乘法器和查找表乘法器。并行乘法器的实现非常简单,在Verilog中只需要通过 * 实现,若要进行有符号的乘法,需使用 系统函数$signed。查找表乘法器实际上是先将乘法的计算结果提前算好,这样就可以在计算时通过查表的方式直接得到结果,一般用于位宽较小的情况。移位相加乘法器是一种耗费较少资源的算法,其思想是将乘法转化为加法和移位运算,可以写成并行,也可以写成串行。串行的缺点是比较耗时,一般用于对性能要求不高的场合。
2024-06-09 00:03:34
644
原创 FPGA仿真必备——Matlab生成.mif/.txt/.coe(封装成函数形式可直接调用)
在开发FPGA的过程中,经常都会涉及到将数据写为mif、txt、coe文件,每次都去写相关代码,属实比较麻烦效率也很低,我就想着写一个函数,封装起来,要使用的时候直接调用。.mif 和 .coe 是 FPGA 设计中常用的存储文件,用于 ROM、RAM 等存储器数据的加载,常见的还用在 DDS 信号发生器和 FIR 滤波器的设计中。.txt 文件主要用于 Matlab 和 FPGA 的联合仿真,比如在之前的设计。
2024-06-08 23:58:14
2595
原创 基于FPGA的任意点滑动平均(滑动窗长度和数据位宽参数化,例化时参数可设置)
对于一维信号,我们可以使用类似移动平均滤波(Moving Average Filtering)实现denoising。Moving Average Filtering 是一种简单的信号滤波算法,用于减小信号中的噪声或去除高频成分,从而平滑信号。它基于对信号中一定窗口内数据的平均值进行计算。移动平均滤波可以平滑信号,但对快速变化的信号可能响应较慢。
2024-06-06 22:55:31
2117
4
原创 Vivado 设置关联使用第三方编辑器 Notepad++
Vivado软件自带的编辑器超级难用,代码高亮对比不明显,而且白色背景看久了眼睛痛。为了写代码时有更加舒适的体验,可以找自己喜欢的编辑器进行替换。之前是用的VsCode,但是有时候VsCode会莫名其妙占用内存,非常的卡,后来改用Notepad++,简洁舒适,没有那些乱七八糟的玩意,也不卡。
2024-06-06 22:41:37
3807
4
原创 Vivado 设置关联使用第三方仿真软件 Modelsim
Vivado 软件自带有仿真功能,该功能使用还是比较方便的,初学者可以直接使用自带的仿真功能。Modelsim仿真工具是Model公司开发的。它支持Verilog、VHDL以及他们的混合仿真,它可以将整个程序分步执行,使设计者直接看到他的程序下一步要执行的语句,而且在程序执行的任何步骤任何时刻都可以查看任意变量的当前值,可以在Dataflow窗口查看某一单元或模块的输入输出的连续变化等,比vivado自带的仿真器功能强大的多,是目前业界最通用的仿真器之一。
2024-06-06 22:40:36
1212
原创 高效的VIVADO BlockDesign设计方法:将自己设计的模块信号以总线形式聚合
在FPGA的顶层设计中,常常会涉及到诸多模块进行相互连接。通常情况下,我们会使用verilog语言中的模块例化,来完成各个模块之间的连接,但是这样可读性太差,过一段时间再来看项目,或者交给其他人,要理清模块之间的连接情况,需要额外花费大量时间。
2024-06-03 23:34:34
12269
2
原创 Vivado的两种下载安装方式:Webpack下载与安装、本地文件安装详细步骤讲解
本人自本科大二开始接触FPGA相关知识,现已将近六年,由于一直在上学,也不是一直在搞FPGA,但是也完成过一些项目。整个学习的过程中,零零碎碎的,也没写啥总结,总是觉得不系统。从这篇开始将从比较基础的角度讲述如何一步步了解FPGA。我相信动手一步步做下去是从零开始学习知识的最快方法,而不是一直去看书看文章,学习工科最重要的就是动手,且FPGA只是一个工具,学习信号处理、通信、以及一些算法相关的知识比FPGA更为重要。
2024-06-02 21:17:55
3574
2
原创 FPGA定点数FFT过后转换为浮点数与Matlab计算的FFT结果进行比对
前面一篇文章讲了,Matlab将调制映射后的数据转化为定点数,放入FPGA中进行处理。那么定点数,在FPGA中进行FFT过后,如何验证其正确性呢?这就需要将FFT的输出数据读取出来,在Matlab中转化为浮点数,然后与Matlab使用FFT处理后的结果进行对比。
2024-06-02 00:13:12
1793
原创 Matlab里面的浮点数与FPGA定点数的相互转化应用(含Matlab代码,封装成函数可直接调用)
Matlab里面计算通常用的是浮点数,而FPGA在做数字信号处理时,为了节约资源,常常使用的是定点数。在实践中,我们经常需要将Matlab实现中的算法,用FPGA进行实现。那么,Matlab里面的是浮点数怎么转换为定点数到FPGA里面进行使用,以及FPGA里面计算的定点数,怎么又在Matlab里面又转换为浮点数进行验证呢?
2024-06-01 13:42:46
2108
原创 计算机算法中的数字表示法——浮点数
前面讲了定点表示法,定点表示法有一个主要的限制,那就是它不能有效地表示非常大或非常小的数,因为小数点的位置是固定的。为了解决这个问题,人们发明了浮点表示法,其中小数点的位置是浮动的,可以根据需要移动以表示不同大小的数。
2024-05-31 17:48:47
1178
基于Xilinx FPGA的OFDM通信系统基带设计
2024-04-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人