FPGA-ROM IP核的使用(2)

前言

接着昨天的进行一个小的实验验证ROM IP核。

实验效果

读取上一期生成的IP核中的数据,并将其显示在数码管上。

具体流程

ROM IP核存放数据0~255,之后每隔0.2s,从0的地址开始读数据,并显示在数码管上;接着先后使用两个按键信号读取指定地址数据,完成后,从当前地址开始继续0.2s间隔往后读取数据。

步骤

调用模块

ROM IP核模块

数码管显示模块

按键消抖模块

ROM控制模块

其中按键消抖模块和数码管显示模块为已有模块,可直接调用。

ROM IP核模块的调用过程

调用昨天完成的单端口ROM,将文件夹中生成的inst.v文件内容复制到顶层模块后,连接各个信号即可:

ROM控制模块调用

为什么要添加ROM控制模块?ROM的读操作在上升沿触发,但实际调用ROM时候并没有读使能,需要控制生成读地址。控制框图如下:时钟为系统时钟,复位信号低电平有效,有两个消抖后的按键信号,输入信号就是这几个,通过它们来产生读取的地址并读取数据。

ROM控制模块控制时序分析如下图所示:

系统时钟clk:50Mhz,一个时钟也就是20ns,设计效果是0.2s,设计一个计数器实现0.2s变化一次的效果。

计数器cnt_200ms:0.2s,一个时钟上升沿变化一次,最大计数值也就是200_000_000ns/20ns-1=9_999_999。即CNTMAX=9_999_999。计数器每次计数到最大值,地址+1。按键在某个地址按下时,也让计数器为0。

key1与key2:按键信号,拉高一个时钟。

addr1与addr2:读地址的标志信号,按下一次后,拉高,再按下一次后,拉低。红色线所示

图中含义是:按下按键1后,读取地址2的数据,按下按键2后,读取地址4的数据。可以看到这里延了一拍。绿色线所示。

每次只读取一个地址信号,因此每次只能有一个地址标志信号为高电平。

接下来就是参考上面的波形图编写ROM控制模块的代码了:

编辑器:Notepad++

顶层模块设计

顶层模块就是各个子功能模块的实例化和各类信号的连接,感觉也是最难得一部分,最需要全局思维的一部分。下面是顶层模块输入输出框图,其中

clk:系统时钟

rst_n:复位信号

key[1:0]:按键信号

stcp:输出数据存储器时钟

shcp:移位寄存器时钟输入

ds:串行数据输入

oe:输出使能信号

  • 编写顶层模块代码

仿真与上板验证

这里就不贴具体代码了,结果符合预期,上板验证(随机连续拍了几张图,还不知道怎么传视频)

小结

感觉还是有些懵懂,还需要多花时间琢磨一下。

相关推荐
【云轩】5 小时前
【零基础实战】STM32控制DRV8833电机驱动详解
stm32·单片机·嵌入式硬件
RFID舜识物联网7 小时前
RFID测温技术:电力设备安全监测的新利器
网络·人工智能·嵌入式硬件·物联网·安全
朝颜_祝余8 小时前
模电知识点总结(4)
单片机·嵌入式硬件
¥ 多多¥9 小时前
单片机总结【GPIO/TIM/IIC/SPI/UART】
单片机·嵌入式硬件
1101 11019 小时前
STM32-智能台灯项目
stm32·单片机·嵌入式硬件
苏慕TRYACE9 小时前
RT-Thread+STM32L475VET6——icm20608传感器
stm32·单片机·嵌入式硬件·rt_thread
橘猫0.o9 小时前
【STM32】内存管理
stm32·单片机·嵌入式硬件
电棍23310 小时前
verilog测试平台设计与verilog的synthesis
fpga开发
Bit流11 小时前
记录此刻:历时两月,初步实现基于FPGA的NVMe SSD固态硬盘存储控制器设计!
fpga开发·#fpga nvme ssd·# nvme ssd 读取·#fpga nvme协议实现
楼台的春风12 小时前
【STM32 基于PID的闭环电机控制系统】
c语言·stm32·单片机·嵌入式硬件·mcu·物联网·算法