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:输出使能信号

  • 编写顶层模块代码

仿真与上板验证

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

小结

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

相关推荐
xuxie992 分钟前
N18 RTC
单片机·嵌入式硬件·实时音视频
惶了个恐6 分钟前
嵌入式硬件第九弹——ARM(5)
arm开发·单片机·嵌入式硬件·arm·硬件工程
嵌入式×边缘AI:打怪升级日志13 分钟前
IMX6ULL 的 LED 操作方法
stm32·单片机·嵌入式硬件
三佛科技-1341638421220 分钟前
家用电子血压计方案开发MCU控制芯片
单片机·嵌入式硬件·物联网·智能家居·pcb工艺
仰泳之鹅21 分钟前
【stm32进阶】定时器+ADC+DMA+乒乓缓冲区
stm32·单片机·嵌入式硬件
进击的小头23 分钟前
第4篇:嵌入式处理器内核全解析:ARM Cortex-M_R_A系列核心差异与选型指南
arm开发·单片机·嵌入式硬件
Heartache boy11 小时前
野火STM32_HAL库版课程笔记-手动建立工程模板与CubeMX后续用法(重要)
笔记·stm32·单片机·嵌入式硬件
可乐鸡翅好好吃15 小时前
UUID----私有服务与公有服务
嵌入式硬件
Wave84515 小时前
Freertos中PendSV与sysTick
单片机·嵌入式硬件
jghhh0115 小时前
带红外抄板和LCD显示的单相电能表设计
stm32·单片机·嵌入式硬件