
FPGA之quartus和modelsim学习
文章平均质量分 53
坚持每天写程序
这个作者很懒,什么都没留下…
展开
-
fpga代码规范之GVIM编辑器
GVIM 是类似于记事本的代码编辑工具,但相比于记事本其输入效率更高,可以更好的提升工作 效率。由于 GVIM 具有丰富的代码补全、编译及错误跳转等便于编程的功能,其在 IC 开发领域得到 了广泛应用,也为学习 FPGA 工程提供了助力。GVIM 是一款 FPGA 工程师常用的软件,本文是基于明德扬的教程总结了一些常用且相对好用的命令。首先是GVIM分为三种模式:命令模式(打开gvim为默认模式,即光标闪烁时就是命令模式);插入模式(左下角显示“插入”);列操作模式(左下角显示“可视块”)...原创 2022-07-06 16:25:40 · 1326 阅读 · 0 评论 -
《原子教你玩FPGA》读书笔记以及quartus和modelsim安装包
FPGA简介FPGA是工程师可以通过传统的原理图输入或硬件描述语言自由地设计一个数字系统。FPGA=I/O单元(是芯片与外界电路的接口,完成对信号的驱动与匹配)+可编程逻辑单元(改变内部连接与配置,完成不同逻辑单元)+嵌入式块RAM(根据地址读写数据的存储单元)+丰富的布线资源(全局布线资源,长线布局资源,短线布局资源,分布式布局资源)+底层嵌入功能单元(eg.PLL,DSP,CPU)+内嵌专用硬核(指通用性相对较弱,不是所有FPGA都有)FPGA设计流程:设计输入(HDL)、RTL仿真(...原创 2022-02-24 10:11:38 · 629 阅读 · 0 评论 -
基于FPGA的数字滤波器设计(IIR滤波)
基本原理1. IIR数字滤波器设计的基本原理基本原理和结构。IIR滤波器,即无线脉冲响应滤波器,其答案为脉冲响应是无限长的,传递函数可以表示为式。IIR滤波器有直接I型,直接II型,级联型及并 联型4种常用的结构形式,其中级联型结构便于实现,且受参数量化影响较小,因此使用较为广泛。由差分方程可得,输出信号由两部分组成:第 一部分∑M i=0 x(n-i)b(i)表示将输入信号进行延时,组成M节延时网络,相当于FIR滤波器得横向网络,实现系统的零点。第二部分∑N l=1y(n-l)..原创 2022-02-23 10:18:09 · 12861 阅读 · 12 评论 -
基于FPGA的低通数字滤波设计
1、filter solution中的设计第一步,在滤波器界面中选择数字滤波,然后选择FIR滤波。因为系统时钟仿真的100M所以对应采样频率设置为100M。阶数为32阶的低通滤波器,通带频率为4M。频谱宽度是0.1M到100M。第二步,可以看到离散频率响应。Hanning在10M频率处为-44.5db:Bartlett在10M频率处为-30.6db:Hamming在10M频率处为-58.03db:所以...原创 2022-02-23 09:54:44 · 5362 阅读 · 3 评论 -
lcd显示彩条实验
分频模块module clk_div( //时钟分频模块 input clk, //50Mhz input rst_n, input [15:0] lcd_id, //LCD屏ID output reg lcd_pclk );reg clk_25m;reg clk_12_5m;r...原创 2021-11-09 09:49:19 · 874 阅读 · 0 评论 -
matlab产生混频信号,quartus通过ROM进行数据存储,及信号处理
1.matlab产生混频信号x = 5*sin(2*pi*200*t) + 5*sin(2*pi*1000*t) + 5*sin(2*pi*2000*t)clear;clc;fs = 8000;N=1024;n=0:N-1;t=n/fs;x = 5*sin(2*pi*200*t) + 5*sin(2*pi*1000*t) + 5*sin(2*pi*2000*t);%混频信号% c = min(x); %得出信号的最小值% f1 = x + 5;f = round(x+14)';%根据所原创 2021-11-06 15:27:01 · 3119 阅读 · 1 评论 -
VGA彩条显示(可以在显示屏上看到白黑红绿蓝的彩条)
VGA ,视频图形阵列,使用模拟信号进行视频传输的标准原创 2021-11-02 11:03:17 · 1623 阅读 · 0 评论 -
RS485串口通信实验(使用两块开发板通过RS-485串口通信,由各自开发板上的四个按键分别控制对方开发板上四个LED灯的亮灭。)
RS485只有两根数据线,只能实现半双工传输系统框图1.按键模块module key_debounce( //按键消抖 input sys_clk, //外部50M时钟 input sys_rst_n, //外部复位信号,低有效 input [3:0] key, //外部按键输入 output reg k.原创 2021-10-26 10:26:24 · 3437 阅读 · 0 评论 -
串口通信原理
并行通信是指数据的各个位用多条数据线同时进行传输优点:传输速度快缺点:占用引脚资源多串行通信是将数据分成一位一位的形式在一条传输线上逐个传输优点:通信线路简单、占用引脚资源少缺点:传输速度慢同步通信:带时钟同步信号的数据传输;发送方和接收方在同一时钟的控制下,同步传输数据。异步通信:不带时钟同步信号的数据传输。发送方与接收方使用各自的时钟控制数据的发送和接收过程。串行通信的传输方向:单工 :数据只能沿一个方向传输半双工:数据传输可以沿两个...原创 2021-10-22 18:35:48 · 4167 阅读 · 0 评论 -
FIFO读写实验
FIFO一般用于不同时钟域之间的数据传输,也常用来实现不同位宽的接口的数据匹配。(可以避免两个模块时钟不一致,造成的亚稳态状态,也可以进行数据缓存,也可以解决数据发送时两边时钟不一致)利用FIFO在不同位宽的接口之间作数据匹配:(可以将fifo输入端设计为8位,输出端设计为16位,就可以解决该问题)下面是本次实验的系统框图1.fifo ip核的设计在ip catalog中搜索fifo,双击fifo然后在工程文件夹中创建IPcore文件夹,然后再在里面建fifo文件夹,最.原创 2021-10-21 17:44:18 · 1943 阅读 · 0 评论 -
RAM读写实验(用Altera RAM IP核生成一个单端口的RAM,然后对RAM进行读写操作,并通过Modelsim软件进行仿真)
RAM(Random Access Memory),即随机存取存储器,它可以随时把数据写入任一指定地址的存储单元,也可以随时从任一指定地址中读出数据, 其读写速度是由时钟频率决定的。RAM主要用来存放程序及程序执行过程中产生的中间数据、 运算结果等。1.新建ram ip核,在ip catalog中搜索ram 选择如图选项然后新建ip core文件夹,将其存为ram_1port开始设计ip 核,将深度设为8,宽度设为32,ip核用什么单位搭起来选择auto,然后输入输出数据的时钟选..原创 2021-10-20 11:10:42 · 3521 阅读 · 0 评论 -
pll锁相环(可以根据系统时钟进行倍频、分频、相位偏移等等,而普通的计数器只能分频)
1.PLL是一种反馈控制电路,其特点是利用外部输入的参考信号控制环路内部震荡信号的频率和相位。2.Quartus II软件提供了锁相环PLL的IP核,对时钟网络进行系统级的时钟管理和偏移控制,具有时钟倍频、分频、相位偏移(就相当于时钟的上升沿和下降沿可以移动,换位置等)和可编程占空比(一般是50%)的功能。3. PLL IP核的使用在ip catalog中搜索altpll,然后双击第一个然后点击...在文件夹中新建ipcore文件夹然后命名为pll_clk...原创 2021-10-19 17:27:13 · 5041 阅读 · 1 评论 -
FPGA学习之UART串口通信(当UART控制器从上位机接收到数据后,立即将数据输出,并发送回上位机,完成“回环测试”)
FPGA需要控制的仅为两条信号线:RXD和TXD,即数据接收线和数据发送线,因此我们只需要关注数据接收和发送时的时序图。传送的一帧数据里面包括起始位(0),8位数据位,奇偶校验位,停止位(1)。当空闲时,10位数据均为高电平,在检测到起始位低电平时,开始传输。波特率是衡量数据传输速率的指标,表示每秒传输的二进制位数,在此例中设为9600,所以50M/9600==5207,所以分频时要计数到5207.1.串口接收数据的速率控制模块:用于控制串口接收的速率module bps_rx(.原创 2021-09-29 08:46:41 · 4446 阅读 · 3 评论 -
FPGA学习之数模转换(TLC5620)(通过4个按键输入,输出数模转换需要的数据和数码管显示需要的数据)
1.数模转换器即DAC,一般情况下由四个部分组成,权电阻网络,运算放大器,基准电源和模拟开关。是一种以二进制显示的数字量转换成以参考电压为基准的模拟量转换器。2.设计原理:TLC5620是一个拥有4路输出的数模转换器,时钟频率最高可以达到1MHZ,在本实例中它可以将输入的数字量转换为实际的模拟量(电压),并通过4个按键控制4路输出电压,每按一次,电压随之上升,同时数码管上依次显示相应的值:A1,A0,RNG,以及输入的数字量,采用开发板的基准电压2.5v。芯片端口图:点击此处添加图原创 2021-09-25 10:35:49 · 6508 阅读 · 2 评论 -
FPGA学习之模数转换(TLC549)(调节电位器改变ADC的模拟输入量,读取采样值后,数码管显示,并比较两个值)
点击此处添加图片说明文字TLC549是模数转换芯片,只需要对外接时钟(clk),芯片选择(cs)和输入模拟信号(ANIN)进行控制,当cs被拉低时,ADC前一次转换数据的最高位立即出现在数据线DAT上,之后的数据在时钟下降沿来时改变因为ADC的位宽为8bits,所以采样电压为v=(D*V(ref))/256(D为ADC转换后读取的8位二进制数,V(ref)为参考电压)1.TLC549芯片的驱动模块:点击此处添加图片说明文字module tcl549_Dr...原创 2021-09-23 17:57:39 · 7530 阅读 · 4 评论 -
FPGA学习之状态机的多种描述方式(一段式,二段式,三段式)
1.状态机的设计思路:一是从状态变量入手,分析各个状态的输入,状态转移和输出二是先确定电路的输出关系,再回溯规划每个状态的条件,输入等2.状态机的三要素是状态,输入和输出,根据状态机状态是否和输入条件相关,可以分为摩尔型状态机(与输入条件相关)和米勒型状态机(与输入无关)3.一段式描述:将用于状态转移判断的组合逻辑和用于状态寄存器转移的时序逻辑写在同一个always里面,在描述当前状态时还要考虑下一个状态的输出(这样写代码不清晰,难以维护)二段式描述:输出使用的是组合逻辑,很容易产生毛原创 2021-09-23 09:37:51 · 1235 阅读 · 0 评论 -
FPGA之异步复位同步释放信号产生(综合同步复位和异步复位的优点)
1.同步复位:只有在时钟上升沿来的时候,复位信号才有有效。(当时钟上升沿以外的时刻都检查不到复位信号)表示:always @(posedge clk)异步复位:无论时钟上升沿是否到来,复位信号都有效。(当时钟上升沿或者复位信号有效时,都可以判断是否复位)表示:always @(posedge clk or negedge rst)2.同步复位:他只在时钟上升沿去判断是否复位,所以降低了亚稳态出现的概率,但会消耗FPGA更多的资源异步复位:因为FPGA有自带的异步复位专用端口,所以节约资源。但是原创 2021-09-22 18:22:48 · 526 阅读 · 0 评论 -
基于FPGA的按键计数(通过按键实现对FPGA板子的数码管显示数进行控制)
1.项目要求:数码管显示范围为0~999 999,当数码管显示999 999,若此时按下加的按键,则数码管显示数清零,若数码管显示为0 ,若按下减的按键时,数码管为999 9992.编写分频计数模块,用1KHz(系统时钟为5Mhz)作为驱动时钟。将分频出来的时钟输出给key_jitter模块点击此处添加图片说明文字代码如下:(仿真时可以把T设小一点,不然跑不完)module freq( //系统时钟是50M,产生一个1KHZ的慢时钟input clk,input rst_n,原创 2021-09-22 16:55:08 · 13828 阅读 · 8 评论 -
炫“库”行动——人大金仓征文大赛FPGA学习之按键消抖(verilogHDL)以及二进制数转BCD实战演练和数码管显示
当按键按下时,对按键状态进行计数,如果没有达到就不认为按下按键,并且对按键按下的次数进行计数1.按键模块代码编写代码如下module key_pluse(input clk,input rst_n,input key_in,output reg [3:0] sum //记录按键按下的次数);reg [10:0] counter; //按下计数寄存器reg pos_flag; //按键按下成功标志位reg state; //状态寄存器always @(pos原创 2021-09-17 14:58:17 · 416 阅读 · 0 评论 -
FPGA之边沿检测电路(检测信号由高到低或者由低到高的跳变)
1.电路原理分析1)当系统复位时,也就是rst为0时,寄存器inst的清零端失效,即输出端Q为0,那么经过两个与门后,系统输出端posedge和negedge为0,则系统处于复位状态2)复位结束后,假设输入信号signal在某一时刻由0变为1,因为寄存器的特性,输出端Q只能在下一个时刻发生跳变,所以此时端口1和2为0,所以negedge为0,而端口3连接的是signal信号为1,而端口4是Q端之后取反,所以也为1,故此时posedge为13)下降沿原理与上面上升沿原理类似...原创 2021-09-16 13:57:20 · 1973 阅读 · 0 评论 -
FPGA之FIFO读写数据(发送接收模块,当发送模块检测到FIFO为空时,开始写入数据,当FIFO为满时,读出数据)
1.c创建FIFO的IP核在IP catalog里面搜索FIFO并双击,保存为my_fifo然后一直点击next读和写的full和empty都要√上,不然后面定义要出错勾选inst文件2.对FIFO进行写入操作3.对FIFO进行读出操作4.顶层文件的编写及rtl结构图5.测试文件的编写6.仿真结果...原创 2021-09-16 13:57:01 · 2678 阅读 · 0 评论 -
FPGA只读存储器IP核----ROM的设计方法(用来存储数据,可以节约成本,也可以保护数据)
1.创建新的文件(rom ip核的创建,以及.mif文件的创建)创建一个工程后,选择如图的文件设置位宽和深度右击想要填充的数据,选择custom fill cells然后如图配置开始地址等信息配置完成后,就会出现如图的数据在右侧的IP catalog中搜索rom 就双击如图的rom:1保存ip核如图点击browse ,加入之前的.mif文件一直next到如图,勾选inst后缀的文件,完成rom设置2.编写rom的控制模块,用于产生递原创 2021-09-16 13:56:44 · 1471 阅读 · 0 评论 -
FPGA学习之锁相环生成不同频率时钟(quartus中用锁相环分频或者倍频能够有效减少时钟发生部分的代码量,也可以实现任意时钟频率。)
1.创建锁相环测试文件点击IP Catalog图标,如图选择到ALTPLL双击ALTPLL命名为my_pll,并选择verilog,然后点击ok系统时钟为50M,所以这里改为50,然后点击next一直点击next到这个界面,并且配置如图,选择外部时钟频率,并改为25M,然后点击next这里是设置第二个时钟频率,设置为100M,然后点击next一直点击next到这个界面,选择my_pll_inst.v文件,这个是调用IP核的端口,然后点击finish2.编写原创 2021-09-16 13:50:04 · 5640 阅读 · 1 评论 -
FPGA项目之分模块流水灯
此项目中需要分频和LED驱动两个模块以及顶层模块1.时钟分频模块如下:开发板的系统时钟频率是50MHz,流水灯要每秒变化一次,那么分频模块就要变成1/(1s)=1Hz,所以要计数50 000 000次才是一秒,所以该项目要计数25 000 000次为0.5s,那么一秒内就可以变化一次。分频代码如下:2.led驱动模块,是状态机来判定led的状态,初始state为0,当复位后,判定状态为0,则点亮一个灯,状态加一,后面反复。程序代码如下:3.最后是顶层模块程序以及rtl图:原创 2021-09-14 15:28:59 · 1469 阅读 · 3 评论 -
FPGA软件quartus和modelsim的问题集合1
1.问题:quartus和modelsim软件联合仿真不成功报错信息中指明为这样的一个情况,你选择了modelsim作为仿真工具,但是quartus找的却是modelsim altera 这样的一个可执行文件。建议更改仿真工具,改为modelsim_altera 作为你的仿真工具即可,更改路径在assignment 》settings》simulation》。解决办法:tools——options——EDA tool options里面两个地址都选上,modelsim和modelsim-alte原创 2021-09-14 15:14:09 · 1250 阅读 · 0 评论