
FPGA学习
文章平均质量分 60
一些FPGA开发的小项目
努力向前的小徐
这个作者很懒,什么都没留下…
展开
-
Modelsim添加中间变量
参考链接:Modelsim查看中间变量 原文我自己感觉不怎么好理解,所以自己又总结了一下)编译好编写的仿真文件后,点击需要仿真的文件开始仿真点击后界面如图看到Objects界面只有我们在仿真文件中定义的变量(也就是例化模块的输入输出变量),并没有我们例化的模块的中间变量 然后我们可以看到左侧sim窗口有我们例化的模块,点击该模块,就可以将模块内部的中间变量加入到仿真波形中...原创 2021-11-28 14:56:54 · 4874 阅读 · 2 评论 -
FPGA驱动OLED Verilog代码 (三)------ 顶层模块 点亮OLED
一、代码顶层模块比较简单,直接实例化各个模块进行连接就好了代码如下:module oled_drive( input clk, //时钟信号 50MHz input rst_n, //按键复位 output oled_rst, //oled res 复位信号 output oled_dc, //oled dc 0:写命令 1:写数据 output oled_sclk, //oled do 时钟信号 output oled_mosi //oled d1 数据信...原创 2021-11-26 00:42:12 · 3547 阅读 · 13 评论 -
FPGA驱动OLED Verilog代码 (二)------ OLED初始化
一、概述: 逐字节发送初始化命令给OLED,设置OLED的一些寄存器。当然,我自己肯定也没有去研究过应该发哪些命令(毕竟用32的使用都是直接copy的代码),然后现在也是参照之前32驱动OLED的初始化命令来实现OLED的初始化。 先贴一份32的代码(大伙也可以自己去改编为Verilog来练练手)void OLED_Init(void){ OLED_SPI_Init(); OLED_CLK = 1; OLED_RST = 0; OLED_DLY_ms(10...原创 2021-11-26 00:13:56 · 6291 阅读 · 2 评论 -
FPGA驱动OLED Verilog代码 (一)------ SPI写模块
概述: 我本身没有很仔细的去学习SPI的时序,而是参照了之前STM32驱动OLED时模拟的时序来写的,其中写一个字节的时序如下/*************************************************************************//*函数功能: 通过SPIO软件模拟SPI通信协议,向模块(SSD1306)写入一个字节 *//*入口参数: ...原创 2021-11-25 23:49:07 · 2900 阅读 · 5 评论 -
FPGA驱动OLED Verilog代码 (四)------ 字符和汉字显示
一、概述: 首先先展示一下成果图,然后主要使用RAM的读写来完成,下面依次介绍各个模块二、OLED显示原理(部分) oled分为7页,每一页有128个字节用来显示 首先先设置页地址,然后设置列的低地址和高地址(这里不是很理解,设置扫描方向吗?) 设置好后依次写入128个显示数据,完成一页的显示,如果你的字模为8*8的,那这样就能完整显示出一个字了(如下图x一样) 但是如果字体的高度大于8怎么办了?...原创 2021-11-27 17:01:00 · 5789 阅读 · 7 评论 -
FPGA串口通信
一、概述 串口收发时序参考 起始位:拉低数据线,传输一个0作为开始信号 停止位:拉高数据线,传输一个1作为结束信号 波特率:1秒钟传输多少位,例如波特率为115200就是一秒钟可以传输115200位数据 设计中需要注意的点:1、严格按照时序设计,先发送低位再发送高位 2、系统时钟计数,fpga的时钟频率都是很高的,需要对时钟计数来确认发送一位的时钟数,定义一个常量来保存最大的计数值,...原创 2021-12-08 23:57:05 · 1232 阅读 · 0 评论 -
FPGA驱动LCD1602(IIC) Verilog代码(四)------ 顶层模块
一、概述 顶层模块就是例化lcd初始化模块和写命令/数据模块,然后把两个模块连接起来就完成了 先贴一下最后实现的效果图 顶层模块代码如下二、Verilog代码module lcd_drive( input clk, //时钟信号 50m input rst_n, //按键复位 output scl, //iic scl inout sda //iic sda);wire clk_1m; //1m的时钟信号wire ...原创 2021-12-04 15:49:08 · 3178 阅读 · 4 评论 -
FPGA驱动LCD1602(IIC) Verilog代码(二)------ LCD写命令/数据模块
一、概述 时序及数据参考链接:51单片机 使用IIC转接板驱动LCD1602 lcd1602引脚说明参考链接:STM32通过(软/硬IIC)控制LCD1602液晶显示屏(IIC转8位并口的PCF8574转接板的使用)原创 (图片来自上述链接) 写数据和写命令的操作基本上都是一样的,只是最后以为不一样,所以就增加一个输入信号来控制是写数据还是...原创 2021-12-04 15:23:44 · 2448 阅读 · 0 评论 -
FPGA驱动LCD1602(IIC) Verilog代码(一)------ IIC写模块
一、概述IIC时序参考链接:51单片机 使用IIC转接板驱动LCD1602 基本参考该链接中的IIC时序,使用Verilog代码来实现IIC写模块。只是比较好奇为什么在所有位发完之后,scl还要拉低再拉高了(我没有这样做的时候会一直收不到ack信号)? 需要注意IIC SDA信号的写法,声明为in_out,它是作为wire类型一样来进行赋值的。接着注意SDA的方向控制,要及时释放掉控制权。 下面直接贴出代码二、Verilog代码...原创 2021-12-04 15:06:48 · 2396 阅读 · 0 评论 -
FPGA驱动LCD1602(IIC) Verilog代码(三)------ LCD初始化
一、概述: 前面已经完成了lcd写数据/命令,那么lcd的初始化就比较简单了,就是先发送命令复位设置lcd,然后发送数据过去交给lcd显示就好了。 lcd的显示比较简单一点,只需要传输要显示字符的ascll码,lcd就会显示出该字符,而且支持自动的移位,即显示完一个字符后接着自动确定下一个字符的显示位置,不过需要指定方向好像,这个我没有研究(毕竟指令都是嫖来的)二、Verilog代码module lcd_init( input clk, //时钟信号...原创 2021-12-04 15:41:01 · 2491 阅读 · 0 评论 -
FPGA驱动OLED Verilog代码 (五)------ 动态显示字符
一、概述 前面已经介绍了向RAM中写入静态字模数据来显示静态的字符和汉字。接下来实现动态显示字符在OLED屏的不同位置。动态显示字符的核心就是从ROM中读取字符的字模,但取出来的字模数据如果直接写进RAM的话,只能实现字符在某一页的显示,而不能实现任意坐标下的显示。所以在写进RAM之前,我们应该对字模数据做一定处理,然后再写进RAM中。接着RAM读取模块(前面已经介绍过了,本次会改变等待的值,提高一下刷新率)会不断的读取字模数据进行显示。 这里可以先参...原创 2021-11-29 19:54:24 · 3386 阅读 · 7 评论 -
FPGA(主)与STM32(从)SPI通信
一、概述 主要实现了FPGA向STM32快速发送数据(比较稳定),至于STM32发送过来的数据,大概率还是处于丢位状态。但因为我主要是要完成一个FPGA这边持续向STM32的发送,所以我也没仔细去研究如何实现双方通信更稳定(同时本人能力也有限)。 至于SPI的通信时序,有四种模式,我选择的是空闲状态为高电平,采集在上升沿的一种模式。具体的时序可以参考其他博客,我自己的理解(以我选择的这种模式)就是在sck为低电平的时候寄存数据,然后一直保持数据到下一次sck为低电平。获取...原创 2021-12-06 18:55:17 · 6938 阅读 · 10 评论