
FPGA学习笔记
有关verilog入门以及一些基本的总结分析,个人观点,供自己回忆以及他人参考。
ty_xiumud
有些时候,不是因为看到了希望才去坚持,而是坚持了,才看到希望。
展开
-
可综合的异步FIFO的设计与仿真
可综合的异步FIFO的设计与仿真综述FIFO(First in First out),经常用来对跨时钟域多bit数据的同步处理。常用的有同步FIFO与异步FIFO,本文主要处理异步FIFO的问题。首先,试图将多个变化的信号从一个时钟域同步到一个新的时钟域,并确保所有变化的信号都同步到新时钟域的同一个时钟周期,已经被证明是有问题的,在CDC部分中已经进行了说明,后续也会进一步的解释。这也是为什么引入格雷码来做数据同步的原因。在FIFO设计中判断FIFO的空满状态,是一个关键性的问题。原创 2022-10-23 20:52:59 · 574 阅读 · 1 评论 -
Win11安装ise14.7(最终解决方案)——Ubuntu18.04安装ISE与modelsim
原文标题:How to install Xilinx ISE Design Suite 14.7 on Ubuntu 18.04 (with drivers)如何在lunux下安装ISE14.7!!升级了win11,发现ise彻底用不了了,然后在网上找相关的博文,基本上是明确了用不了了。只能使用替代方案,然后发现有两个方式linux或者是使用Xilinx提供的方案(个人感觉很蠢)。两种方式都会在后续给出,本文采取的是第一种,在linux下安装。你要是你不想自己安装,也可以直接使用博主提供的虚拟机直接使用.原创 2022-05-27 19:58:22 · 7903 阅读 · 25 评论 -
基于FPGA的简易DDS信号发生器的设计与验证
基于FPGA的简易DDS信号发生器的设计与验证一,理论介绍补充:举例理解二,代码实现一,理论介绍DDS 是直接数字式频率合成器(Direct Digital Synthesizer)的英文缩写,是一项关键的数字化技术。作为设计人员,我们习惯称它为信发生器,一般用它产生正弦、锯齿、方波等不同波形或不同频率的信号波形,在电子设计和测试中得到广泛应用。DDS 的基本结构主要由相位累加器、相位调制器、波形数据表 ROM、D/A 转换器等四大结构组成,其中较多设计还会在数模转换器之后增加一个低通滤波器。实现原创 2021-02-20 13:51:02 · 2049 阅读 · 2 评论 -
基于FPGA实现SPI接口协议(一)
UART,IIC以及SPI作为三个基本的低速接口协议,是我们经常使用的,本系列将简单介绍SPI的接口协议,然后用几个简单的demo案例(对flash的操作)对SPI接口进行熟悉。本文介绍SPI通信协议的基本内容以及FLASH芯片的相关基本的知识。SPI通信协议的基本介绍SPI(Serial Peripheral Interface,串行外围设备接口)通讯协议,是 Motorola 公司提出的一种同步串行接口技术,是一种高速、全双工、同步通信总线,在芯片中只占用四根管脚用来控制及数据传输,广泛用于 .原创 2021-02-06 11:57:12 · 2784 阅读 · 3 评论 -
ISE_FIFO_IP核接口测试(二)
本文用于测试FIFO(First-in-First-out)IP,将从界面生成,常用接口的介绍,简单的测试文件及仿真截图分析这几个方面介绍ISE工具中FIFOIP核的使用及相关时序与笔者之前的ISE_FIFO_IP核接口测试(一)相互参考吧,各有侧重。先简单介绍下FIFO,这里FIFO不同于双口RAM,对于FIFO是没有地址的,如其名字一样,先进先出。先进去的数据先出来,而这里可以配置进去的时钟与出去的时钟,但是需要注意的问题是不能写满与读空。这里理解成一个单行道,数据一个接着一个,我们只需要控.原创 2021-01-15 22:34:48 · 517 阅读 · 0 评论 -
基于FPGA的EEPROM读写(IIIC 接口协议)
笔者使用的是黑金AX309的开发板,其板载了一块有一个 IIC 接口的 EEPROM 芯片 24LC04(data sheet),容量大小为 4Kbit。这里先简单总结下一般的存储器件,然后介绍IIC协议及其读写时序,最后板机验证。这里最后实现给EEPROM中写入数据,然后再讲写入的数据显示在数码管验证其正确性。本文主要介绍IIC协议,至于芯片的种类不影响协议本身以及相关问题的理解。(参考资料会在文末给出出处或在文中以超链接的形式给出)一,相关存储器件介绍ROM Read Only Memory,意.原创 2021-01-03 16:45:03 · 1608 阅读 · 6 评论 -
基于 FPGA 的智力抢答器设计
本文设计文档及源码将在公众号免费公布,关注公众号回复A-001获取题目简述:设计一个支持四选手抢答的智力抢答器,实现自动智力抢答判定的功能。并且将抢答过程的信息和抢答结果通过 LED 显示器显示。基本功能:1,4 个选手按下按键,在此期间内倒计时模块预设时间为 20s,超出 20s 时判断此次抢答违规,20s 以内按下按键,根据其按键快慢实现抢答功能。2,每位选手预设积分为 100,抢答成功者加 10 分,失败扣 10 分,其余选手不扣分;3,在每次抢答结束下一次抢答前清零,以便进行下一.原创 2020-05-27 10:13:23 · 2127 阅读 · 2 评论 -
十进制转5421BCD(测试文件及modelsim.do文件的模板)——补充篇
十进制转5421BCD(测试文件及modelsim.do文件的模板)——补充篇1,十进制转5421BCD2,源码及其仿真代码源码测试代码3,仿真结果及.do文件仿真结果.do文件结语简述:此博文以十进制转5421BCD为例,将仿真的文件的写法以及使用modesim自动化执行脚本文件进行简单的总结,更新之前文章的模板。以后有关代码的书写可以参考此博文。主要分为个部分,第一个部分介绍转5421BCD...原创 2020-04-30 22:02:04 · 2709 阅读 · 0 评论 -
基于FPGA实现uart串口模块——进阶版1
设计目标本文实现uart发送多个多个数据给上位机,上位机显示,这里不对数据进行解析。这次实现的是使用开发板持续向上位机发送“I love you”本博文计划实现。下一篇博文实现当发送"I love you too",开发板回复收到。...原创 2020-01-20 12:56:24 · 1710 阅读 · 14 评论 -
基于FPGA的超声波测距
计数为2942原创 2019-10-29 09:48:43 · 4570 阅读 · 17 评论 -
Verilog代码实例化的简单理解(以38译码器为例)
在这之前,简单先总结一下这段时间对Verilog(硬件描述)和C(软件)的区别。在openhw论坛中看到这样一句话:一个例化调用就相当于一个电路,你用if语句,有时候要综合出这个电路有时候又不要综合出这个电路了,这个不是让人家软件为难吗!你要这样,综合出来时必须的,至于用不用,要看你有没有信号给它,它的输出有没有引回来!!!只要有可能用到的模块,必须综合出来,至于后续的使用,则根据自己的引脚链接。...原创 2018-10-09 15:32:30 · 20531 阅读 · 1 评论 -
IIC控制设计读写EEPROM
IIC控制设计本博文完全参考小梅哥(下面是链接)IIC协议详解+Uart串口读写EEPROMIIC模块是比较好理解,但个人觉得比较难实现。接下来简单分析小梅哥代码的思想。(魔咒呀魔咒~)IIC简述...原创 2019-03-22 00:27:25 · 1227 阅读 · 0 评论 -
ISE使用中RAM IP核配置及ram测试(两种测试)
简单总结ISE中RAM的ip核配置过程以及相关的端口。分类ram分为分布式ram(distributed ram)以及块ram(block ram)前者是自己用寄存器搭建的,这里理解可以转至Vivado使用技巧(27):RAM编写技巧简单理解块ram就是自己用寄存器写出来的储存单元,仅仅用于储存比较少量的数据。优点是dram不需要时钟线来控制,可以直接用组合逻辑进行控制。bram是fpga...原创 2019-03-23 15:11:41 · 9338 阅读 · 3 评论 -
基于FPGA的SDRAM控制器设计(一)----------SDRAM初始化
SDRAM简介SDRAM(synchronous Dynamic Random ),同步动态随机存储器,同步指内存工作需要同步时钟,内存的命令的发送和数据的接收都以它为标准。动态是指需要不断地刷新来保证数据不丢失(电容存储),随机指的是储存位置可以随机指定,自由储存。...原创 2019-04-04 22:05:15 · 3554 阅读 · 0 评论 -
基于FPGA的SDRAM控制器设计(二)----------SDRAM的刷新
SDRAM是基于电容存储的,因此需要不断刷新来保证数据不会丢失。 此文总结SDRAM的刷新模块。数据手册分析(及时序分析)这是刷新模块的时序图。这里据视频邓堪文老师讲解,AutoRefresh 只需要进行一次即可。时间间隔描述在SDRAM内部有刷新计数器,刷新完一次后,计数器会自动加一 。SDRAM模块工作有三种,1,刷新2,写,3,读,所以需要引入仲裁机制,自身的工作状态...原创 2019-04-07 23:31:48 · 1168 阅读 · 0 评论 -
Verilog 语法点使用————(持续更新)
参考于夏玉文老师的《Verilog数字电路设计系统教程》目录1,`define--宏定义2,数组1,`define--宏定义1,定义方法其中`为英文字符字符下的“~”。2,使用方法`include "defines.v"要将你定义的宏引入注意:1,同时,字符串后面不用(也不能)加;区分于paramater,localparam(后续填坑...原创 2019-04-26 10:55:30 · 980 阅读 · 0 评论 -
ISE_FIFO_IP核接口测试(一)
xilinx FIFO的使用及各信号的讨论Xilinx ISE FIFO读写操作仿真学习原创 2019-04-24 20:31:58 · 1774 阅读 · 0 评论 -
博文传送门--FPGA
0,按键消抖Verilog实现独立按键消抖(状态机)Verilog实现的多个按键消抖(具体模块可用)1,状态机(交通灯)Verilog实现交通灯(数电课设)----------旧 Verilog实现交通灯(数电课设)-----新--及对于状态机的理解2,uart协议在第一篇中(基于FPGA实现uart串口模块(Verilog)--------接收模块及思路总结)后面新更...原创 2019-05-03 15:38:10 · 2395 阅读 · 0 评论 -
Vivado入门创建工程之----流水灯
本文参考米联客提供的教程,对vivad开发过程部分进行总结和记录。笔者使用的版本是vivado 2017.3step1.1,新建工程step1.2,点击nextstep1.3,设置工程名称与路径step1.4,(选择要创建的工程类型)点击nextstep1.5,选择器件step1.6,创建结束完成后界面如下:step2.1,添加文件点...原创 2019-07-15 19:00:16 · 2099 阅读 · 3 评论 -
FPGA实现VGA显示(四)——————读取ROM显示彩色图片(a)
这里只介绍模块思路,ROM的生成和设置等等其他问题,会单独开一篇总结。先放图看结果准备阶段首先用到这两个软件第一个用来解码,将图片中的每一个像素点用16进制表示,第二个用来转换图片。因为图片太大的话,资源太小,就不能显示。用第二个软件修改图片的长度宽度,用第一个软件生成.coe文件。然后,会生成一个这个在桌面。然后生成ip就可以了。这里的100是图片的宽,然后92 是图...原创 2019-02-13 13:45:06 · 8581 阅读 · 10 评论 -
FPGA实现VGA显示(三)——————单个字符显示
这里笔者首先记录一个问题,给自己提个醒,所有的模块都有一点点的问题,在行数列数都可能有一行像素的误差,有可能是在驱动和显示模块的问题,等后面修改,这里第一次做,只要不影响显示,实现功能。字符显示只修改vga_display模块,其他模块参考FPGA实现VGA显示(二)——————color_bar显示及方框移动(参考开拓者FPGA开发指南)字符显示相对较简单,主要是控制每一个像素点的黑白,...原创 2019-02-13 12:37:23 · 5998 阅读 · 7 评论 -
Verilog实现交通灯(数电课设)-----新--及对于状态机的理解
目录此文主要用于状态机的理解,及代码书写的对比(同之前写的交通灯)。状态机状态机注意要点:依据久思路重写交通灯控制模块仿真截图显示模块解决上次遗留问题(新代码的控制)此文主要用于状态机的理解,及代码书写的对比(同之前写的交通灯)。原来的交通灯:https://blog.csdn.net/qq_41467882/article/details/83651...原创 2019-01-25 00:43:36 · 14684 阅读 · 12 评论 -
fpga数电基础之--------触发器
本文主要介绍五种同步触发器,简单提及主从触发器和边沿触发器。0,SR锁存器(基本RS触发器)重点SR锁存器可以由与非门或者或非门构成。它是各种触发器电路形式最简单的一种,也是以后所有的基本组成部分。或非门有1出0同时为0才出1.与非门有0出1,同时为1才出0.与非门构成的SR锁存器 次态不仅仅与当前的输入有关,还有与当前的状态有关。这里有一点,Sd和Rd不能同时为1。同时为...原创 2019-01-24 11:12:52 · 2216 阅读 · 1 评论 -
Verilog实现交通灯(数电课设)----------旧
这里是新写的交通灯Verilog实现交通灯(数电课设)----------新:https://blog.csdn.net/qq_41467882/article/details/86626507里边又两个核心代码和数码管显示的新方法及对状态机的新理解。。参考思路:https://www.cnblogs.com/christsong/p/5629643.html里边有思路框架,可以用来参...原创 2019-10-17 17:12:20 · 24131 阅读 · 34 评论 -
状态机(FSM)的介绍--以检测序列1001为例
有限状态机(FSM-Finite State Machine),是做微控器的核心,其输出值取决于过去的输入以及当前的输入,是时序组合逻辑的组合。其含有一组具有“记忆”功能的寄存器,其功能为记忆有限状态机内部的状态,被称为状态寄存器。其中时序逻辑功能是储存有限状态机的内部状态,组合逻辑功能分为次态产生逻辑:用于确定有限状态机的下一个状态输出逻辑:确定有限状态机的输出分为Moore型和...原创 2018-11-02 01:31:16 · 5927 阅读 · 3 评论 -
三种方法用Verilog实现多人表决器
module biaojue(a,b,c,d,e,f);input a,b,c,d,e;output f;reg f;reg[2:0] count1;initial count1=0;always@(a,b,c,d,e)begincount1=a+b+c+d+e;f=count1<3?0:1;//当人数在三人以下是输出1endendmodulemodule b...原创 2018-09-29 01:38:43 · 23636 阅读 · 1 评论 -
逻辑门的Verilog实现与仿真
1,非门 ~2,与门 &3,或门 |4,与非门 ~(x&y)5,或非门 ~(x|y)6,异或门 x^y or (~x&y)|(x&~y) 7,同或门 x~^ymodule luojiyunsuan(a,b,z);input a;input b;output [6:0];assign z[6] = ~a;as...原创 2018-09-27 00:18:09 · 8928 阅读 · 4 评论 -
仿真文件的写法(以四位全加器为例)
刚刚开始接触FPGA,网上很多Verilog的源代码,但是有关仿真文件的写法很少。这篇简单记录下仿真文件的写法。以四位全加器为例子。四位全加器的代码如下。module adder4bit(input [3:0] a,input [3:0] b,//设定输入output [3:0]sum,output cf//输出);assign {cf,sum}=a + b;...原创 2018-09-15 13:58:55 · 9970 阅读 · 3 评论 -
基于Verilog实现呼吸灯
时间的单位换算首先掌握秒的单位换算,这里总结一些。因为笔者目前用的大多为50MHz,所以介绍以此为例。但关于秒的转换全世界都是一样的。1MHz = 1,000kHz = 1,000,000Hz频率:是用单位时间内完成的周期性变化的次数,是描述周期运动频繁程度的量。因此结合以上内容,50MHz,就是说,(两个相邻时钟上升沿算一个周期)1s内有50,000,000Hz个时钟上升沿。所以...原创 2019-01-26 12:06:38 · 7253 阅读 · 6 评论 -
Verilog实现独立按键消抖(状态机)
本文参考小梅哥的独立按键消抖视频1,实验原理:这里是黑金开发板教程中的图,可以看出,按键未按下时的状态是高电平,按下为低电平。下边是小梅哥画的图解。因为是机械按键,按下时候有一个不稳定的抖动期,这个时间大概在20ms以内。2,设计思路:利用状态机实现独立按键的消抖未按下时空闲状态 按下抖动滤除状态 按下稳定状态 释放抖动滤除状态在第一个状态时,等待按键按下,一旦...原创 2019-01-22 22:08:50 · 14000 阅读 · 4 评论 -
FPGA实现VGA显示(二)——————color_bar显示及方框移动(参考开拓者FPGA开发指南)
首先感谢所有开源分享资源的博主或者机构个人,这篇主要参考开拓者FPGA开发指南。通过分析代码,理清思路。主要分为四个模块,顶层模块,时钟分频模块,VGA显示模块,VGA驱动模块。前三个模块在任何时候都是不变的,只有最后一个模块,显示需要显示的内容。代码设计真的很巧,这里讲驱动模块单独写出来,不仅方便控制,同时仿真也很方便的可以看到结果。具体代码的理解讲在代码中展现,同时后面的字符显示,基于RO...原创 2019-02-12 13:18:01 · 4239 阅读 · 3 评论 -
FPGA实现VGA显示(六)——————多字符显示及基于fpga的“打字机”实现
前面笔者总结了如何显示单字符,设立通过一个简单的任务来总结如何实现vga多字符显示。实验要求基础:由PC通过UART发送数据在VGA显示。数据可以为字母,数字,汉字(任选10个字),VGA分为左右两个区域,输入字母或者数字时在VGA左边显示,输入汉字时在VGA右边显示。发挥:有删除功能,可通过按键删除显示的数字,字母或者汉字。左边的按键按下字母或者数字删除,右边的按键按下汉字删...原创 2019-02-17 23:09:15 · 4755 阅读 · 2 评论 -
FPGA实现VGA显示(一)——————屏幕驱动及color_bar显示
VGA显示,就是屏幕应用VGA接口线点亮屏幕。同样需要遵守一定的条件。符合时序,才能点亮屏幕,控制屏幕的显示。这里参考http://dengkanwen.com/70.html感谢,同时这里还有VGA协议标准链接:https://pan.baidu.com/s/1cqJ8iOo9KRhTBnXuIkPe5w 提取码:igee同样是来自邓堪文博客内容。里边干货挺多的,可以学习学习...原创 2019-02-12 11:35:20 · 6735 阅读 · 8 评论 -
基于FPGA实现uart串口模块(Verilog)--------发送模块及整合
基于FPGA实现uart串口模块(Verilog)--------发送模块及整合当接收模块接收到数据后,需要重新发送形成回环验证模块正确性。思路和结束模块有一点点的小差异。接收模块最终输出的是一个并行的八位数据,所以只有在最后输出保证输出结果正确就可以,而发送模块必须按照波特率时钟发送每一位的数据。具体代码实现如下代码实现module uart_tx( //-----------i...原创 2019-02-12 11:01:05 · 4442 阅读 · 10 评论 -
基于FPGA实现uart串口模块(Verilog)--------接收模块及思路总结
基于FPGA实现uart串口模块(Verilog)--------接收模块及思路总结uart通信协议简单理解为串转并和并转串的两个模块。同时必须保证数据的正确性。且输入输出端为串行。此次实现uart协议通过回环来保证数据接收发送的正确。用状态机来理解(也不知道是不是状态机,觉得这样写比较好理解)。两个接收,发送是对于开发板来说的。开发板的接收端连接的是pc机的发送端。反之。波特率...原创 2019-02-11 22:51:30 · 15324 阅读 · 22 评论 -
FPGA实现VGA显示(五)——————配置ROM测试及图片显示(b)
如何使用ISE生成ROMip显示彩色图片这里设置宽度,这里深度设置设置的是9200,设置的时候进行简单计算。 例化可以直接得到,修改内部连线即可 ROM简单测试总结前面显示代码其实是有问题的,因为ROM读数据有一个时钟周期的延时!!这里可以写一个简单的模块进行测试。ip里边有一个 读取使能信号,这里简单总结,为后面提供一点便利。可以看出,在读信号有效...原创 2019-02-14 20:17:30 · 4018 阅读 · 1 评论 -
fpga数电基础之--------基本概念
1,数字信号与模拟信号有什么区别?数字信号不是连续变化的,而模拟信号是连续的。这里笔者的理解是微积分的过程中,无穷多的小数格是数字信号,而曲线是模拟信号。2,什么是数值,什么是编码,什么是译码?数值,是进位计数制的简称,常见的有二进制,八进制,十进制,十六进制。理解什么是编码译码,就要理解什么是代码。代码是用来描述信息系统中信息(这里的信息包括数值和符号ascall)的二进制码。编码,...原创 2019-01-23 00:27:18 · 901 阅读 · 0 评论 -
Verilog实现的多个按键消抖(具体模块可用)
由于前面已经分享过了,这里直接说思路,贴代码。原理等等其他的翻前面的博文。(代码经过验证,可以在板机上使用)1,逻辑功能四个独立按键分别对应四个led灯,按键控制led的反转。2,设计思路这里的思路其实很简单,基于按键的抖动最长为20ms,所以每20ms取一次按键状态,前后两次进行下降沿检测就行。(有没有很简单,还有一个更简单的!!!后面代码中分享)贴张图3,实验代码...原创 2019-01-22 22:39:14 · 16534 阅读 · 6 评论 -
安装ISE.14.7后仿真时遇到的问题与解决
安装ISE14.7的时候,安装跟着教程走完后。点击以管理员身份运行打开。在仿真的时候,遇到了这样两个bug。FATAL_ERROR:Simulator:Fuse.cpp:209:1.133 - Failed to compile one of the generated C files. Please recompile with -mt off -v 1 switch to iden...原创 2018-09-11 23:35:41 · 2603 阅读 · 0 评论