![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
FPGA
文章平均质量分 69
FPGA之旅
这个作者很懒,什么都没留下…
展开
-
Aurora8B10B(二) 从手册和仿真学习Aurora8B10B
在上篇文章中,主要结合IP配置界面介绍了一下Aurora8B10B,这篇文章将结合文档来学习一下Aurora8B10B内部的一些细节 和 相关的时序吧。文档主要是参考的是这个。原创 2023-12-16 17:46:16 · 1276 阅读 · 0 评论 -
Aurora8B10B(一) 从IP配置界面学习Aurora
哈喽,大家好,好久没有给大家写FPGA技术的文章,是不是已经忘记我是做FPGA的啦,O(∩_∩)O哈哈~。这里将会给大家分享我学习到的第一个高速接口Aurora8B10B,有点复杂,但不是特别复杂,对于第一次接触到高速接口的朋友来说,难点在于细节的把控上,由于资料并不是那么多(也挺多的 ̄□ ̄||),很多新的概念,结构和名词,是第一次接触到,不能够很好的吸收,加上网上的教程不全面,很难有一篇文章对它的各个详细作全面的介绍,而且仿真都是基于官方例程来的,直接忽视了里面的细节。原创 2023-11-30 18:34:31 · 1346 阅读 · 0 评论 -
FPGA实现平衡小车(文末开源!!)
本次设计分为三大部分:MPU6050姿态解算 , 电机驱动(PWM+编码器) , 平衡控制,遥控器控制的模块另外算。其中MPU6050姿态解算为设计的核心,解算出来的角度越稳,平衡控制就越容易,小车也就越稳定。平衡控制其核心是调节PID的参数,参数调的好,小车没烦恼。这里只对框架上做一个简单的介绍,具体的实现说明可以在我的微信公众号上获取: FPGA之旅整体架构如下。原创 2023-11-19 19:49:00 · 537 阅读 · 0 评论 -
FPGA实现直流电机驱动(速度位置控制)
本篇文章将介绍如何使用FPGA实现一个直流有刷电机控制器,主要包括 速度控制 和 角度控制(好像在无刷电机控制中,习惯将其称为环,即速度环 和 角度环(位置环))。因此这是一个闭环系统,需要得到系统的反馈,实时得到电机的转速和角度,所以需要上篇中编码器模块的输出,作为控制器的反馈,通过PID进行调节。原创 2023-10-13 15:05:11 · 769 阅读 · 0 评论 -
FPGA实现电机霍尔编码器模块
想要知道直流电机的转速,就需要用到编码器,常用的编码器有霍尔和光电两种,但是光电编码器比较贵(性能好于霍尔),所以平常的时候使用最多的是霍尔编码器了。霍尔编码器一般有AB两相信号输出,默认的时候为低电平,当电机转动的时候,AB两相会输出具有一定相位差的脉冲,根据相位差可以确定电机旋转的方向,另外根据单位时间内,脉冲的数量可以确定电机的转速(原创 2023-10-09 09:54:51 · 925 阅读 · 0 评论 -
FPGA通过MIG IP读写DDR3
本期将接收如何驱动DDR3存储器,当然不会像SDRAM那样,自己手写驱动;而是借助Vivado提供的MIG IP来完成这项工作。但是建议在学习DDR3之前,可以学习一下且写一下SDRAM的驱动,因为它们的涉及到的存储原理和框架一样,只不过DDR3在其基础上增加了一些功能和特性而变得复杂了起来,学会了SDRAM可以约等于学会了DDR3,是不是很nice。IP核的创建就不作过多的介绍了,点点点就可以,在关键的位置注意一下就可以了(与硬件电路是否一致)。原创 2023-08-14 21:10:37 · 1023 阅读 · 0 评论 -
定点乘法器优化(3)---华为杯
在上次优化中,针对部分积生成进行了一个优化,将一个部分积生成的门电路数从221减少到了119。虽然减少了很多,但不够。本次将提出另外一种新的编码与部分积生成方式,将门电路的个数大大减少。原创 2023-07-25 20:12:37 · 392 阅读 · 0 评论 -
Vivado进行自定义IP封装
本篇文章将介绍如何使用Vivado来对上篇文章(FPGA驱动SPI屏幕)中的代码进行一个IP封装,Vivado自带的IP核应该都使用过,非常方便。这里将其封装成IP核的目的主要是为了后续项目的调用,否则当我新建一个项目的时候,我需要将其对应的.v文件全部添加进工程里面来,当涉及需要添加不同工程的.v文件较多的时候,会变的非常麻烦。基于此目的,这篇文章。在菜单栏Tools下的Settings进行添加添加完成后,就可以在IP Catalog下看到我们自己的IP核了。原创 2023-07-23 08:54:51 · 1071 阅读 · 0 评论 -
FPGA驱动SPI屏幕(附完整工程)
相信大家都玩过屏幕,在FPGA上使用最多的就是VGA/HDMI接口的显示器了,这两种显示器的优点就不用说了,缺点就是体积比较大,而且价格比较贵,对于追求便携/价格低的我来说,SPI接口的屏幕才是我的首要选择,而且一般是可以带触摸的哦。后面图像处理相关的代码都会基于此屏幕哦!原创 2023-07-19 20:43:43 · 2560 阅读 · 1 评论 -
FPGA实现ESP8266驱动且进行数据包收发
本次将使用正点原子的ESP8266 WIFI模块,来实现PC与FPGA之间的TCP通讯,其中ESP8266与FPGA之间的接口是UART。模块实物图如下,到手就可以使用了,RST和IO_0两个IO口不接或者接高电平就可以了。在使用之前,需要通过AT指令对模块进行配置,比如说是AP模式,还是STA模式。AP模式就是模块作为无线 WIFI 热点,允许其他 WIFI 设备连接到本模块;STA模式就是连接到其它的WIFI设备。具体的指令可以在正点原子论坛上下载。原创 2023-05-27 19:33:50 · 2044 阅读 · 0 评论 -
FPGA实现MPU6050姿态解算---附完整代码
在之前的文章中(很久之前了(CSND中)),已经通过FPGA获取到了MPU6050的六轴数据:三轴加速 和 三轴角速度,但是没有对它进行然后处理。那么在本篇文章中,将利用Cordic算法来进行姿态解算。原创 2023-05-20 20:06:10 · 1541 阅读 · 10 评论 -
定点乘法器优化(2)---华为杯
在上次优化中,对各个部分都进行了一些微小的优化,门电路的使用 和 延时都下降了一点点。但是这还远远达不到设计的要求,还需要进一步的优化。本次的优化分享,主要在部分积的生成上进行优化。原创 2023-05-14 13:33:29 · 449 阅读 · 0 评论 -
FPGA实现Cordic算法求解arctan和sqr(x*2 + y* 2)
由于在项目中需要使用的MPU6050,进行姿态解算,计算中设计到**arctan 和 sqr(x2 + y2),**这两部分的计算,在了解了一番之后,发现Cordic算法可以很方便的一次性求出这两个这两部分的计算。另外也可以一次性求出sin和cos的值。另外该算法还可以计算其他的一些公式(没做过多的了解)。原创 2023-05-13 12:01:42 · 1762 阅读 · 1 评论 -
FPGA实现PID控制算法(含仿真)
相信大家对于PID控制算法,都不感到陌生了,平衡车就是靠它平衡起来的,还有飞控的平衡算法也是它,以及FOC中的闭环控制中也是用的它,它不仅简单,而且易于理解。那么本篇文章将简要介绍一下算法的原理,然后带大家使用FPGA来实现(C语言实现过程特别简单)。原创 2023-05-07 20:31:12 · 3974 阅读 · 40 评论 -
定点乘法器优化---华为杯
在本篇文章开始之前,先对上篇文章中的一个错误进行指正一下。在部分积生成的时候,需要计算-2A和2A的值,我的做法就是直接左移了一位,这样就会有一个问题,符号位被移掉了,为什么我的计算结果还是对的呢?因为仿真的A比较小,15位的值和符号位是一样的,没有影响,所以当时没有发现。需要对符号位扩展一位,变成17位的数之后,再进行计算2A和-2A。如下图这样,扩展一下最高位。原创 2023-04-13 22:40:04 · 1241 阅读 · 2 评论 -
定点乘法器----部分积压缩(华为杯)
在上篇文章中,已经介绍了如何使用booth算法生成部分积了,那么在这篇文章中将介绍如何使用加法树对部分积进行压缩。加法树压缩有多种形式,常见的是Wallace压缩,也是赛题中介绍一种方法。感兴趣的可以,可以研究研究哦。原创 2023-03-31 22:40:30 · 1810 阅读 · 0 评论 -
定点乘法器----基4booth算法
本篇文章将介绍如何使用 基4 booth算法(赛题中介绍了)来生成部分积,在开始之前,简要介绍一下定点乘法器的计算流程:对乘数进行booth编码 —> 利用得到的编码值和被乘数生成部分积----> 对部分积进行压缩求和。基4 booth(后面简称为booth2)算法用来完成前面的两步。ps: 有booth2就有booth1,它们大同小异,只不过booth1太垃圾了,感兴趣的可以自行了解。原创 2023-03-29 21:34:20 · 3628 阅读 · 0 评论 -
FPGA实现Flash读写操作
本篇文章所使用的Flash型号为M25P16,是ST公司的一款(好像还有一款同名的,是别的公司的)。容量为16Mbit,SPI接口,时钟速率可达50Mhz。要想完成对Flash的读写擦除操作,只需要弄懂两点即可:SPI时序 和 Flash操作指令。其他的细节和一些概念可以学习的过程中了解补充。原创 2023-03-02 09:24:25 · 7302 阅读 · 7 评论 -
WS2812全彩RGB驱动方法
买了一个圆形的WS2812模块玩玩,特来总结一下驱动方法,感觉对比于普通的RGB灯来说,还是有点不一样的。踩了一些坑,也在此列出。原创 2022-12-22 20:25:36 · 6868 阅读 · 1 评论 -
FPGA驱动eMMC系列(三)-----命令的发送与接收
本篇文章,将介绍如何编写命令的发送,与响应的接收,这部分代码,这部分代码。对应所以模式而言,发送与接收的时序都是一样的,所以这部分代码对应所以的eMMC而言,都是通用的。先来看一下整体的框图,命令模块下包括发送与接收,还是比较容易的。关注微信公众号FPGA之旅回复eMMC代码V1获取完整工程,目前支持高速和HS200.HS400有点问题,可能是我PCB的问题。FPGA驱动eMMC系列(二)-------上电初始化FPGA驱动eMMC系列(一)-------简介。原创 2022-10-13 09:55:03 · 2669 阅读 · 0 评论 -
FPGA驱动eMMC系列(二)-------上电初始化
本篇文章将介绍eMMC如何上电启动,并且初始化进入到我们所需要的模式当中去,同样只介绍相关的内容,一些无关却重要的知识点,可以自行查看手册。原创 2022-10-04 09:49:38 · 2962 阅读 · 17 评论 -
FPGA驱动eMMC系列(一)-------简介
由于项目需要使用到eMMC存储器,所以特地的去学习了一下。在网上也找了许多资料,但大多是介绍性的,以及对文档的翻译,没能很好的讲解如何从零编写Verilog代码来控制eMMC。看了很多文章,但大多大同小异,还是无从下手。故在这里分享我的学习例程,教大家如何编写eMMC驱动,以使用为主,至于一些理论和不相关就不作介绍了,同时可以作为参考,避免踩坑,同时欢迎大家与我交流,共同进步。本例基于JESD84-B50手册进行学习,也就是eMMC5.0,目前最新的好像是eMMC5.1,但差距应该不大。原创 2022-10-03 16:11:28 · 6022 阅读 · 18 评论 -
FPGA采集DHT11温湿度
在温湿度传感器中,dht11是使用的最多的一个,在很多课设,毕设中是首选。仅需要一个IO口,就可以完成温湿度采集。在这里分享利用FPGA来完成DHT11温湿度采集的一个demo分享。需要完整代码的可以关注微信公众号 FPGA之旅回复 DHT11-FPGA 获取数据传输过程还是比较容易的,下面来详细说明一下各个部分的持续情况。数据表示:数据0 : 50us的低电平加26us~28us的高电平 。数据1:50us的低电平加70us的高电平从机拉低总线50us。这里的时间可以根据实际测试的结果进行调整。这很重原创 2022-06-19 20:19:50 · 969 阅读 · 0 评论 -
FPGA视频采集系统和Sobel算法处理
一. 简介今天在这里给大家分析一个视频采集系统,并且配备有简单的图像处理操作,以及蓝牙APP控制的项目。项目主要用的硬件有黑金AX4010开发板AN430 VGA显示屏OV5640摄像头HC05蓝牙模块安卓手机非常适合作为课设或者毕设需要完整项目的可以去 微信公众号 FPGA之旅 回复 FPGA视频采集 获取链接效果图片如下二. 项目内容介绍通过OV5640摄像头读取数据将数据存到SDRAM中将SDRAM中的数据读出显示在AN430显示屏幕上其中读写SDRAM的过程中,使原创 2022-05-24 11:41:25 · 358 阅读 · 1 评论 -
FPGA读取MPU6050六轴陀螺仪
一. 简介欢迎关注 FPGA之旅 微信公众号 回复 FPGA驱动MPU6050 获取下载链接本篇文章将介绍如何使用FPGA驱动MPU6050模块。MPU6050模块的接口是IIC,所以驱动的实质也是通过IIC协议对模块进行读写,和OLED模块一样。其流程为初试话相关寄存器,例如角速度和加速度的精度。读取MPU6050模块的ID,判断是否初始化完成。角速度和加速度的数据读取。二. mpu6050的初始化通过C语言可以知道,使用其模块只需要初始化一下五个寄存器即可。三. 读取ID值原创 2022-04-09 20:14:05 · 2723 阅读 · 12 评论 -
FPGA实现俄罗斯方块 (三)
一. 完整视频演示如果觉得不错的话,欢迎给点个赞哦。地址 :完整视频演示在这个项目中,主要介绍一下两个功能 : 1. 当前图形的移动,旋转。 2. 地图的存储以及消行。这两个功能介绍完成后,也预示着本项目顺利结束,需要完整项目的话,可以自行获取哦。二. 当前图形的移动,旋转通过上一篇文章中的下一个图形的数据,传到当前图形中,我们就可以对这四个方块进行我们想要的操作啦。下落 : 下落其实就是方块的y值加一,每隔一定的时间,定时器产生一个使能信号即可。左右移动: 通过按键的输入,将方块的x值原创 2022-04-04 14:52:57 · 2072 阅读 · 0 评论 -
FPGA实现俄罗斯方块(二)
一. 简介在前一篇文章中,简要的介绍了一下俄罗斯方块的一些基本要素,以及一些需要注意的点。在这篇文章中,主要实现两个功能 1. 绘制俄罗斯方块的边界,2.绘制出下一个方块的图像。 现在让我们开始吧。先看一下效果图。二. 边界的绘制在这里定义每一个方块的边长为10,边框的起始点相对于屏幕的偏移为(20,20)。然后设置下一个方块的预览区域的宽度为5(5个方块大小,后面不再提示)。这样整个俄罗斯方块的边界大小就确定下来了为宽18,高22。localparam TerisW = 'd10;loc原创 2022-04-03 19:56:48 · 4274 阅读 · 0 评论 -
FPGA实现俄罗斯方块(一)
一. 项目简介项目所需硬件一块FPGA开发板一块vga时序的显示器四个独立按键项目背景最近看到许多学校的课设和毕设就是利用FPGA实现一个俄罗斯方块小游戏出来,然后再网上搜索了一下,发现开源的代码太少了,并且难以学习。于是我就想实现一个基于FPGA的俄罗斯方块开源小项目,供大家学习。二. 俄罗斯方块游戏介绍大家可能都玩过俄罗斯方块,但是可能并没有过多的去关注游戏的一些细节,所以在这里还是很有必要做一些简要的介绍。地图大小 : 宽10个方格,长20个方格。图形类型 :原创 2022-04-02 15:40:35 · 6141 阅读 · 6 评论 -
FPGA驱动VGA显示
一. VGA时序图下面引用黑金教程里面的一个图片。所以VGA显示的时序图都是如此的。从图中可以看到两个信号线,分别是行同步和列同步,它们都是在同步时间内拉高,其余时间都为低电平。从图中可以得知,在每一行的开始,行同步拉高,在每一列的开始,列同步拉高,它们各自拉高的时间可以参考手册。二. 查看手册这里以AN430显示模块的手册为例。通过手册可以清楚的看出,显示的时钟频率以及各个状态所对应的持续时间。Horizontal_cycle : 一行的周期是525个VGA时钟周期Horzont原创 2022-03-17 09:21:26 · 1278 阅读 · 0 评论 -
OLED数字时钟---FPGA实现
一. 硬件FPGA开发版4个按键0.96寸 IIC接口的oled显示模块二. 功能介绍oled初始化oled清屏oled数字时钟显示oled字符显示三. 效果演示关注 微信公众号 FPGA之旅 回复 Oled数字时钟 获取下载链接四. 核心代码讲解大家可以参考前篇文章oled字符显示,本代码是基于该工程扩展而来的。1. 字符数据显示时,时钟字符的大小为1632,星期字符的大小为1616。调用这些memory的值也是通过Python生成copy而来的2. 字符显原创 2022-03-06 14:29:54 · 5542 阅读 · 2 评论 -
FPGA按键消抖(高级篇)
一. 硬件介绍FPGA开发板一个按键一个led灯二. 功能介绍可以满足三种不同要求的消抖方式通过led灯测试三种消抖方式三. 消抖方式介绍mode 0 : 按键按下消抖后,算一次。mode 1 : 按键按下消抖后,抬起,算一次。mode 2 : 按键按下消抖后,每隔一段时间,算一次。通过下面这个mode参数可以在例化的时候,选择对应的模式。//模式//0 按下生效,抬起,算一次//1 按下抬起,算一次//2 按下后,一段时间算一次parameter原创 2022-03-01 21:40:08 · 615 阅读 · 0 评论 -
FPGA数字时钟
一. 所需硬件一块FPGA开发板六个动态数码管三个独立按键二. 功能介绍时-分-秒显示,为24小时制通过按键可以动态调整时间通过按键可以动态选择要调整的时间,对应的数码管闪烁按键消抖三. 核心代码介绍1. RTL图本代码项目一共由三个模块核心模块组成时钟控制模块 : 通过接收外部按键的输入,来设置当前项目的显示模式时钟模块 : 生成时分秒三个数据数码管显示模块: 接收时钟模块提供的数据,驱动数码管的显示2.数码管选中闪烁twinkle_en为亮或者暗使能信号,原创 2022-02-26 21:51:12 · 1470 阅读 · 0 评论 -
FPGA驱动Oled显示字符
在前面两篇文章的基础上,加大难度,实现了字符的显示,效果如下图所示,需要完整代码的可以关注FPGA之旅,回复 Oled字符,获取下载链接。一. 字符数据的制作在进行字符显示的时候,我们需要用到取模软件对字符数据进行提取。这里采用的是PCtoLCD软件用来生成字符数据。(软件打包在项目里面)二. 字符数据生成Verilog生成的字符数据如下,这样是不能直接输入到Verilog里面去的。一个个手动赋值是非常繁琐的,这里采用了python,来读取txt文件,生成verilog代码。(也可以采用ram原创 2022-02-07 15:46:12 · 2287 阅读 · 5 评论 -
FPGA驱动Oled--IIC
ps: 前几天写了oled的IIC驱动,仿真时序没有什么问题,但就不知道为什么驱动不了,无奈只要在网上下载了iic的驱动。先看看效果OLED初始化同样也是通过阅读c语言代码,确定初始化流程,以及初始化所需要的数据。可以清楚的知道将一下数据通过iic依次写入即可OLED全亮通过C语言可以知道,只需要将8个page里面的数字全部写入1即可OLED全暗通过C语言可以知道,只需要将8个page里面的数字全部写入0即可原理什么的就不过多讲了,具体的寄存器有什么作用,具体需要用到的时原创 2022-02-06 17:22:44 · 1621 阅读 · 0 评论 -
IIC驱动FPGA-----oled
一. 简介最近在弄oled显示屏的FPGA驱动,该显示屏是IIC接口的,随便可以深入学习一下IIC协议,以及如何用它来驱动oled显示。由于在驱动oled的时候,是不需要对其进行读取的,因而只需要读数据的部分,减轻一些工作量。二.IIC协议IIC总共由两根数据线组成,一个为时钟线scl,另外一个为数据线sda。其设备也分为主机和从机,时钟线由主机提供,数据线根据需要看是主机控制,还是从机控制。IIC协议主要包括以下部分:空闲开始信号数据传输应答信号停止信号空闲:空闲的时候原创 2022-01-19 19:49:47 · 2332 阅读 · 0 评论 -
FPGA驱动动态数码管----基础显示
一. 硬件介绍下面就是动态数码管的硬件原理图,可以很清楚的看到,其数据端口由两个数据端组成:片选端、数据端。片选端: 根据硬件结构,高或者低对应其数码管是否为可亮。否则无论数据端是什么,都不会亮数据端:根据硬件结构,可以分为共阴或者共阳数码管,对应为高或低电平时,数码管的对应位亮或者灭。根据数据端的数据,被选中的数码管会显示出对应的信息。欢迎关注 : FPGA之旅,获取更多资源...原创 2021-10-08 23:04:09 · 361 阅读 · 0 评论 -
矩阵键盘FPGA实现(含消抖)
在文章之前还是推一下公众号(FPGA之旅 ),回复“矩阵键盘”,即可获得完整代码原创 2021-05-13 21:48:59 · 3331 阅读 · 3 评论 -
FPGA按键消抖
一. 简介一般在我们使用的开发板中,都需要对按键进行软件消抖的,消抖后的按键,才能满足一般的需求,所以对其进行消抖处理是非常有必要的二. 实现过程要实现怎样的消抖过程,可以根据需求来,例如1.按下消抖,算一次2.先按下消抖,然后松开,算一次3.先按下消抖,然后根据持续的时间,来计算次数这里主要说一下第二点的实现过程先来看看状态转移图,开始的时候,就空闲态,然后按下后,就进入delay状态,如果此间松开的话,就有回到空闲态,以此达到一个消抖的效果,delay状态过后,就进入一个等待按键松开原创 2021-02-15 21:03:16 · 1094 阅读 · 0 评论 -
FPGA实现任意角度旋转图片
将图片的中心移动到坐标原点由于旋转一般是以图片的中心点旋转的,但图片的左上角的坐标是00,所以我们需要将图片的00点移动到图片的中心来,这里进行一个坐标转换,乘以如下矩阵即可。进行旋转旋转也是很简单,在上面的基础上再乘以如下的矩阵即可坐标还原在上面的时候,我们将图片的图片的中心点坐标设置为了00,所以在最后,我们要将图片的坐标还原为左上角为00的坐标,再乘以如下矩阵结果上面的三个矩阵的相乘后,最后得到的表达式为,也就是x,y上的像素值要显示为X1和Y1上面的像素值,还要判断一下X1和Y1原创 2021-01-11 10:34:49 · 1669 阅读 · 3 评论 -
FPGA实现图片翻转旋转
图像大小为100 * 100代码的实现过程都一样,也就是地址的初值和递进值不同,较为简单,就直接给出地址改变的相关代码了左旋转90°always@(posedge clk_9M or negedge rst)begin if(rst == 1'b0) rom_addr <= 'd0; else if(cur_y > 'd150) rom_addr <= 'd0; else if(active == 1'b1) begin rom_addr <= rom原创 2021-01-07 14:45:42 · 1365 阅读 · 0 评论