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:复位信号

key1:0:按键信号

stcp:输出数据存储器时钟

shcp:移位寄存器时钟输入

ds:串行数据输入

oe:输出使能信号

  • 编写顶层模块代码

仿真与上板验证

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

小结

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

相关推荐
czhaii3 小时前
单片机光学自动打靶机寻点流程分析
单片机·嵌入式硬件·硬件工程
是摆烂第一名呀3 小时前
【rk3506】U-Boot串口时钟未配置,导致串口彻底失效
linux·arm开发·驱动开发·嵌入式硬件
我叫洋洋3 小时前
VMware Workstation 16 桥接网络修复记录
linux·嵌入式硬件
LS_learner4 小时前
数学建模嵌入式中的串行流水线 + 消息并发
嵌入式硬件
【云轩】4 小时前
离散量输入输出电路设计:V/地、V/开、地/开信号与单片机接口的电路实现
单片机·嵌入式硬件·mongodb
2401_854151554 小时前
STM32 低功耗模式:SLEEP / STOP / STANDBY 怎么选
stm32·单片机·嵌入式硬件
Kuakewei8885 小时前
7533稳压芯片ic输入串电阻原理:3.3V输出功耗计算与散热指南
嵌入式硬件
謓泽6 小时前
【6.26】芯片测试入门 从零搭自动化测试框架|PyVISA+OOP 保姆级教程
stm32·单片机·fpga开发·雷达·tr
KaifuZeng7 小时前
模电面试问题汇总二
单片机·嵌入式硬件·面试·模电·通信与接口协议
冰茶丿7 小时前
状态机在嵌入式系统中的应用:不只是switch-case这么简单
数据库·嵌入式硬件·mongodb