FPGA
文章平均质量分 61
队长-Leader
这个作者很懒,什么都没留下…
展开
-
数字电路实用总结
一、数字逻辑。1.1 进制。二进制主要用于机器的内部运算,十六进制主要用于程序编写,十进制则主要用于结果的显示。1.2 二进制补码。如果是正数,则补码=原码。如果是负数,则补码=反码+1。补码可以将减法转为加法。时钟就能很好的解释补码,如下图,要加多少个小时都不会超出12小时,因为超出的部分会溢出而舍弃掉;而要减去若干个小时,可以使用补码将其转为加法。这样的好处是,在硬件电路上,只要实现补码的加法器,即可完成加法和减法,减少硬件上的开销。1.3 常用的编码。1.3..原创 2021-08-17 22:13:49 · 3053 阅读 · 1 评论 -
数字信号处理——多速率信号处理
一、前言。二、抽取滤波器。三、内插滤波器。四、多相分解。五、两通道滤波器组。原创 2021-06-08 22:19:59 · 3894 阅读 · 0 评论 -
数字信号处理——数字滤波器实现
一、IIR滤波器基本结构。1.1 直接型。由IIR滤波器的系统函数,直接得到结构。将系统函数的分子、分母分开实现,再级联起来,可以得到直接I型。交换系统函数的分子、分母的位置,再共用中间的延时单元,可以得到直接II型。1.2 级联型。1.3 并联型。二、FIR滤波器基本结构。2.1 直接型。2.2 级联型。三、有效字长效应。3.1 输入量化误差。3.2 系数量化误差。3.3 乘积运算量原创 2021-06-08 22:12:57 · 1639 阅读 · 1 评论 -
数字信号处理——FIR滤波器设计
一、线性相位。二、窗函数设计法。三、频率抽样法。四、优化设计。原创 2021-06-03 22:52:12 · 24017 阅读 · 2 评论 -
数字信号处理——IIR滤波器设计
IIR滤波器是利用模拟滤波器经过变换得到数字滤波器。所以要先介绍模拟滤波器的设计。原创 2021-05-31 23:12:54 · 11822 阅读 · 2 评论 -
基于FPGA的等精度频率计
一、简介。测频常常使用等精度测频法,它可以在整个测量范围内保持相同的精度。二、等精度测频的结构。三、仿真结果。四、其它问题。原创 2021-01-12 22:58:30 · 1723 阅读 · 1 评论 -
基于FPGA的异步FIFO设计
异步FIFO的结构如下图所示:具体的逻辑如下图所示:空满标志逻辑如下图所示:fifo_async.v代码如下:`timescale 1ns / 1psmodule fifo_async #(parameter ADDR_WIDTH=5,BIT_WIDTH=8) // DEPTH = 32,ADDR_WIDTH=ADDR_WIDTH( input iResetN ,input iWriteClk,iWriteEnable // write part原创 2021-01-08 23:15:40 · 1670 阅读 · 1 评论 -
基于FPGA的MSK调制
MSK调制的结构如下图所示。1、基带信号经过差分编码,然后为1bit的信号。2、串并转换后为2bit的信号,分为高位和低位。高位和低位再分别映射为+1和-1。3、再把低位的+1、-1延时基带信号的一个周期。4、最后高位和低位的+1、-1(wSignedHigh、wSignedLow)分别与子载波(wSubCarrierI、wSubCarrierQ)相乘。5、子载波相乘后(wSubCosI和wSubSinQ)再与主载波相乘,最终相加,可以得到MSK已调信号。原创 2021-01-06 23:28:47 · 3100 阅读 · 1 评论 -
基于FPGA的QAM调制
QAM调制的结构如下图所示。1、先将基带信号串并转换为4位的并行信号。2、再将4位的并行信号通过星座映射为高两位和低两位,其取值范围为+1、-1、+3、-3。3、再将星座映射后的信号与载波相乘,这里用有符号乘法器。4、最终相加,得到QAM已调信号。仿真结果如下图所示:其它问题。1、一些教科书中载波那里会写成移相90度,其实就是sin载波移相90度为cos载波,可以不用管移相这个步骤,直接合成sin和cos载波即可。2、QAM为既调幅又调相,从仿真图中可以看出,幅值有3原创 2021-01-05 09:22:45 · 3442 阅读 · 0 评论 -
基于FPGA的DPSK/QPSK调制
一、DPSK调制。DPSK调制的结构图如下图所示:DPSK就是差分编码+2PSK,如果不加入差分编码,则会出现倒pi现象,那么调制后也无法还原出基带信号。差分编码只对基带信号进行编码,与调制无关。仿真结果如下图所示:二、QPSK调制。...原创 2020-12-21 23:52:07 · 6678 阅读 · 0 评论 -
基于FPGA的ASK/FSK调制
一、ASK调制。2ASK也就是OOK,在433MHz的无线通信模块中用的多,速率不高,其结构如下图所示:仿真结果如下图所示:二、FSK调制。2FSK在433MHz的无线通信模块中用的多,速率不高,其结构如下图所示:仿真结果如下图所示:...原创 2020-12-17 23:10:49 · 2237 阅读 · 0 评论 -
基于FPGA的Chirp调制
Chirp信号在雷达、通信中有广泛的应用,这里介绍它的调制方法。Chirp调制的结构如下图所示:其中锯齿波的相位累加器需要将其右移(也就是缩小),再与载波的相位累加器进行相加。仿真结果如下图所示:...原创 2020-12-16 23:46:15 · 1590 阅读 · 0 评论 -
基于FPGA的AM/FM调制
AM调制的结构如下图所示:由正弦表和相位累加器,可以构成DDS。那么两个DDS,一个用于产生调制信号,一个用于产生载波信号。由于正弦表一般为无符号数,所以要转为有符号数,再送进乘法器,最终可以得到AM已调信号。(乘法器需要使用IP,为全并行乘法器)正弦表可以自己写脚本生成,也可以使用mif maker生成,再存在ROM中。仿真结果如下图所示:...原创 2020-12-14 23:13:44 · 4845 阅读 · 0 评论 -
基于FPGA的FFT设计
一、前言。频域,更利于分析信号的成分,如:基波、谐波。在示波器、频谱仪中,经常用到频谱图。DFT和FFT都是时域变换到频域的工具,DFT适用于任意点数,而FFT一般是偶数点(基2、基4、分裂基等)而且速度更快。二、方案。由于FFT是统一处理若干个点,也就是若干个数据,所以先把数据缓存起来,计算好再输出。这里使用了两块RAM做输入、输出缓存器。蝶型运算主要由复数乘法器和复数加/减法器构成,其中复数乘法器可以由3个实数乘法器实现。旋转因子可以先扩大再存入ROM中,计算完成后.原创 2020-09-29 23:10:42 · 8473 阅读 · 1 评论 -
Verilog读取bmp图片
在没有开发板的情况下,要使用Verilog做图像处理,就只能仿真了。这时需要一个激励,让Verlog读取到图片,这里就提供一个例子去读取bmp图片。`timescale 1ns / 1nsmodule bmp_tb;integer iBmpFileId,iOutFileId,iIndex=0,iCode;reg [7:0] rBmpData [0:200000];reg rClk;reg [7:0] rData;integer iBmpWidth,iBmpHight,iDataSt原创 2020-09-17 22:54:10 · 8483 阅读 · 13 评论 -
VHDL代码风格
慢慢地,越来越少人用VHDL了。原创 2020-08-11 22:54:11 · 2532 阅读 · 0 评论 -
彻底掌握Quartus——Signaltap篇
一、前言。Signaltap是嵌入式逻辑分析仪,说到嵌入式,很容易让人想起ARM,其实Signaltap跟ARM没有半毛钱关系。这里的嵌入是嵌到FPGA的内部。如果你用过Signaltap,就会发现,每次都要综合整个工程,再下载代码,然后才可以使用Signaltap,这说明了Signaltap是由一些逻辑电路组成,而不是仿真。请不要把Signaltap和Modelsim混为一谈(如果是...原创 2016-11-25 16:24:35 · 94182 阅读 · 12 评论 -
彻底掌握Quartus——虚拟JTAG篇
Altera的FPGA支持多种调试工具,其中最为大家所熟知的是Signaltap,虽然Signaltap支持条件触发、保存波形等强大的功能,但是,它也只能看个波形而已啊。如果我要跟FPGA内部的逻辑交换数据,是否有个简便的方法?有的,它就是虚拟JTAG,它可以在线地把FPGA内部的数据写入或读取,这样,在调整算法参数(如PID的参数整定)的时候,无需多次综合。推荐《虚拟JTAG教学视频原创 2016-08-02 13:48:28 · 13024 阅读 · 10 评论 -
编写测试平台-HDL模型的功能验证 第一章
第一章 什么是验证?验证不是一个测试平台,也不是一堆测试平台。验证是一个证明设计[1]的功能是否正确的过程。验证贯穿于我们的日常生活中:对账,品尝炖菜,在地图上寻找标志物。这些都是验证的过程。注[1]:设计就是可综合的HDL。在这一章,我会介绍验证的基本概念,叙述验证的重要性、代价以及方法。我们会看到不同的测试方法之间的差异,以及测试和验证的差异。我会指出为什么验证是设计复用的关键。翻译 2017-12-30 18:25:56 · 1889 阅读 · 0 评论 -
USB光端机
一、概述。光端机的结构很简单,由发送端和接收端组成。如下图所示,单向传输。光端机也可以是双向传输,只要使用2对光模块,或者光模块支持波分复用就可以了。常用的光端机有:以太网光端机,视频光端机(包括VGA、DVI、HDMI、SDI、DP接口),音频光端机,电话光端机,串口/CAN光端机,还有专用的鼠标、键盘光端机等。其中较为棘手的是USB光端机(以下只讨论USB2.0光端机),因...原创 2019-09-19 22:08:53 · 3142 阅读 · 6 评论 -
增加元件例化语句的可读性
在我们写verilog或者HDL的时候,往往需要用到元件例化。这里不用原理图方式,因为可移植性差。但是用代码实现元件例化,可移植性是提高了,但是可读性差了,所以这里提供一个方法来提高可读性。就是使用AsciiArtStudio,把图片转成asc II码,再复制到.v或者.vhd文件,如下图所示。这个工具的用法比较简单,在工具箱那里随便点,就能掌握的了,主要缺点是没法放大,但是目原创 2016-04-08 18:05:44 · 2724 阅读 · 0 评论 -
什么是DSP
一、DSP,一般有两种解释。1、Digital Signal Process,数字信号处理,是电子信息工程的专业课,主要内容有FFT、FIR、IIR、CIC。2、Digital Signal Processor,数字信号处理器,以下简称为DSP处理器。DSP处理器与单片机、ARM这种CPU类似,内部有指令集、ALU等,也有很多外设,如:串口、IIC、SPI、CAN、USB等。用得最...原创 2017-12-06 21:05:12 · 69147 阅读 · 2 评论 -
使用模板加快编码效率(三)——sublime [更新]
这是使用模板系列的最后一篇了,也是最实用的方法。前面提到的,插入文件的方法,适合计算机水平一般的初学者;而用TCL脚本的,则适合喜欢自定义各种奇特功能的专业人士。那么,本次介绍的方法,就更适合绝大多数码农了。原创 2015-08-30 10:29:51 · 16297 阅读 · 6 评论 -
CRC校验
一、CRC原理。 CRC校验的原理非常简单,如下图所示。其中,生成多项式是利用抽象代数的一些规则推导出来的,而模2加(也就是异或),是对应于有限域的除法。二、CRC算法。 那么在FPGA当中,也有好几种算法。1、比特型算法。 这种算法,跟手算的差不多,一个时钟周期处理一个bit,速度慢,但消耗的面积小。原创 2016-06-12 21:18:07 · 40588 阅读 · 6 评论 -
矢量控制——SVPWM
空间矢量脉宽调制——SVPWM,主要思想是把三相交流电机等效为直流电机,然后跟踪圆形磁场。SVPWM主要由:波形发生器,Chark变换,扇区判断,Park变换,桥臂作用时间,比较器,插入死区等模块组成。1、波形发生器。使用DDS在FPGA内部产生正弦波、三角波。如果是三相星形不带零线,则可以只产生两路正弦波(相位相差120度),相位差可以在DDS的地址加个常数来实现。三角波,则...原创 2016-07-31 17:12:23 · 43112 阅读 · 4 评论 -
RS232接口的可靠传输方法
一、基本概念。 串口,一般是指RS232。RS232是协议名称,而串口还应该包括了其它协议,如:RS485、RS422等。串口也叫UART,有时叫USART(应该写成U(S/A)RT,但是略显累赘),U是通用,A是异步,S是同步,所以,UART跟USRT区别在于有无同步时钟,所以有的串口会有三根线(地线除外)。为了避免混淆,以下均使用RS232,而不使用串口。...原创 2016-05-25 23:33:37 · 22760 阅读 · 2 评论 -
使用模板加快编码效率(一)——txt文本
这里的模板,不是指C++的template,而是verilog或者VHDL的模板。在verilog最烦的,还是写begin end,所以把这些重复的工作预先做好,那么下次再也不用烦了。要使用模板,还是有好几种方法的。一、记事本。二、脚本。三、配置编辑器。四、使用quartus或ISE自带的模板。由于quartus和ISE自带的模板是相当恶心的,所以不推荐,理由如下:原创 2015-05-19 19:52:38 · 1370 阅读 · 0 评论 -
使用模板加快编码效率(二)——TCL
现在介绍用TCL脚本添加模板,几行脚本就可以实现这个功能了,非常简单。代码如下:写好上面这个脚本,保存为t.tcl,然后放在工程目录下,跟你的HDL代码放在一起。然后打开ISE的TCL控制台(因为quartus的TCL控制台不好用)。首先,用source命令解释一下这个脚本。然后,输入指令aa test 2,aa就是add always块的意思,test原创 2015-05-24 20:12:57 · 1493 阅读 · 0 评论 -
Modelsim/QuestaSim教程——DO文件篇
如果你对Modelsim/QuestaSim还不是很熟悉,玩熟再来,点击转至《基础篇》。你也可以在优酷看到演示的视频。下面介绍使用DO文件实现自动仿真的功能。先给个参考的文件/目录路径,建议大家按照这样的路径来放置文件。源代码在最后面,先介绍如何配置它。一、设置好testbench文件名。不需要写后缀名,但必须是.v,.vt,.vhd,.vht文件(注意大小写)。...原创 2015-11-23 21:38:24 · 20265 阅读 · 5 评论 -
最大公约数Stein算法之verilog实现
求最大公约数有几种算法:1、辗转相除法,2、更相减损法,3、Stein算法。Stein算法跟更相减损法很像,而且只有比较、减法,非常适合用FPGA实现。原创 2015-09-03 20:21:52 · 6440 阅读 · 9 评论 -
时序约束的基础概念
时序约束和时序分析,在FPGA设计当中,是相当重要的基本功。但是市面上的教材、资料都相当的枯燥,不易理解。于是,笔者尝试用通俗易懂的文字来解释这部分的内容。1、什么是时序?时序是指时间的先后顺序。在绝大多数的数字电路当中,都是依靠时钟来驱动各种电路工作的。时钟就像个领导一样,告诉各种电路,在什么时刻做什么事情。做的事情也是有先后顺序的,如果你不按常规出牌的话,就会出错,然后被领导骂了。原创 2015-09-25 10:15:17 · 36343 阅读 · 2 评论 -
关于Quartus中错误信息PLL must be driven by a non-inverted input clock pin的解释
曾经在使用Quartus的PLL时,出现如下错误。这个错误信息的意思是:PLL必须由同相的时钟输入引脚驱动。这就跟我们用LEs实现的IP有区别了。先看一下手册。红圈部分已经说明了PLL只能连CLK0、CLK1、CLK2、CLK3,这四个引脚(再通过选择器来选择其中一路时钟做为PLL的输入),除此之外都连不了。再看看开发板上的原理图。上面两张图,很原创 2015-07-13 22:58:25 · 4644 阅读 · 0 评论 -
使用Doxygen为VHDL工程生成文档模板
在开发一个项目的时候,也会同时写说明文档的,这时候大家会自然而然想到用word来写,但是word写出来的文档,不便于阅读,所以这里推荐一个文档生成工具:Doxygen。目前的Doxygen还不支持verilog,所以这里,以VHDL的工程作为示例。一、下载Doxygen。http://sourceforge.net/projects/doxygen/files/?source=na原创 2016-01-19 00:14:42 · 2811 阅读 · 0 评论 -
浅析PID算法
这里的PID是指控制类的比例-积分-微分算法,而不是进程ID号。PID算法,不管是原理上,还是代码上都比较简单。主要运用在电机控制、开关电源、电源管理芯片等领域。一般《自动控制原理》上给的是位置式算法,如下图所示。但是工程上,用增量式算法比较多,这样可以避免积分环节饱和溢出的问题,具体公式就不贴出来了,网上资料多如牛毛。下面看这样的一个电机控制的例子,如下图所示。原创 2016-04-13 21:57:16 · 13594 阅读 · 5 评论 -
如何学习FPGA
一、入门首先要掌握HDL(HDL=verilog+VHDL)。第一句话是:还没学数电的先学数电。然后你可以选择verilog或者VHDL,有C语言基础的,建议选择VHDL。因为verilog太像C了,很容易混淆,最后你会发现,你花了大量时间...原创 2015-03-25 20:27:45 · 148517 阅读 · 95 评论 -
使用Tcl脚本把png图片转mif或coe文件
在做FPGA图像处理时,可以先用testbench仿真。这时,tb需要一个激励,也就是图像。这个图像也可从电脑中的文件读取出来。但是Altera的ROM支持mif文件,Xilinx只支持coe文件,他们都不支持图片文件,如:png、jpg、gif等。Tcl脚本的Tk库提供了读取png图片的命令。那么,我们可以使用Tcl脚本把png图片转成mif或coe文件,让FPGA从ROM中读出,再经过算法处理。原创 2017-11-29 17:26:52 · 3485 阅读 · 0 评论 -
有关Lattice Diamond的若干bug
相信很多玩FPGA的朋友都听过Altera和Xilinx,但却很少听说Lattice。Lattice这家公司主打低成本的FPGA(放心,高端领域是完全见不到他的),所以受到很多小公司青睐,但是,便宜没好货,Diamond很难用。所以,笔者会不定期把发现到的bug记录下来。首先把Diamond的下载链接给出来吧,破解很简单,在Lattice官网注册个账号,然后在Licensing S原创 2016-05-11 23:53:46 · 14284 阅读 · 2 评论 -
Verilog算法入门
一、什么是算法?算法就是按步就班地解决问题,也就是解决问题的办法。算法是个很泛的概念,并不是一定得包含高深的数学公式。二、用Verilog语言实现的算法跟C语言实现的算法有何区别?Verilog是完全可以自主地设计硬件,而C语言则是依赖于CPU,依赖于现成的硬件。Verilog做出来的算法往往比C的要快,这也是我们使用Verilog最好的理由。然而,较为复杂的算法,就很难使原创 2017-10-11 15:21:00 · 11827 阅读 · 0 评论 -
Modelsim/QuestaSim教程——基础篇
写完HDL代码,当然要仿真一下,这时可以使用quartus自带的qsim或者ISE自带的isim来仿真,但是,业界推荐使用Modelsim。Modelsim的版本比较多,一般是用功能最全的SE版。其中,AE/ASE是集成了Altera库的版本(仿真quartus的IP核,会轻松很多),XE是集成了Xilinx库的版本(仿真ISE的IP核,会轻松很多)。QuestaSim其实就是Models原创 2015-08-28 17:44:35 · 49868 阅读 · 5 评论 -
定点与浮点
定点与浮点在《计算机组成原理》有很详细的说明,但是电子专业的学生只学《单片机》,而《单片机》并没有介绍定点与浮点的内容,所以电子专业的学生缺了这点基础,导致在FPGA处理运算时遇到拦路虎。一、定点。定点数是非常简单的,它最早在小学的时候就已经学了,只不过那个时候并没有使用这个术语。如上图所示,31.5米=315分米,显然根据单位的不同,小数点是可以移动的。只要单位固定了,那原创 2017-07-20 23:44:08 · 34236 阅读 · 8 评论