五、仿真展示
可以看到如下图所示的波形 。
在初始化校准完成信号变高后,就立马产生了一次读 DDR 操作,同时读出数据写入到
,这个时候从 DDR 读出的数据是无效的,因为在此之前还没有往 DDR 里存入
数据 。这就是为什么在仿真上在往 DDR 存储数据后,读数据之前先对进行一
次复位清空缓存的操作,同时对把 DDR 的地址也复位到起始地址 。这样可保证读取的数据
都是从 DDR 起始地址开始,同时保证读之前读 FIFO 没有无效的缓存数据 。在串口传图系
统上使用也是采用仿真类似的方式进行的,为了达到显示屏显示图像的帧同步(不出现显示
偏移问题),会在显示每帧数据前将读 FIFO 模块进行一次复位清空缓存和读
DDR 操纵的地址复位到起始 。保证每次屏幕显示图像数据都是从 DDR 内存中起始地址开
始读出的数据 。
之后在往写 FIFO 写入 1024 个数据(位宽为 16bit)过程中,AXI 总线上产生了 4 次突
发写,每次突发写是 32 个数据(位宽为 ),这个与设置的突发写长度和预期的突发写
次数(写 FIFO 数据个数FIFO 写数据位宽/AXI 数据位宽/AXI 一次突发写数据个数 =
/128/32 =4,根据这个公式,写 FIFO 数据个数不是随意设置,否则会出现不能满足
写入数据正好是 AXI 突发写数据个数的整数被)一致 。
对第一次突发写 DDR 操作部分 AXI 写事务波形放大来看 。
从波形图可以看到一次 AXI 写数据操作流程如下:
(1)在地址通道写入接下来要写入数据的起始地址和写突发长度等信息,在
和同时为高时,这些信息被传输给 DDR 控制器;
(2)在写数据通道写入指定突发长度的数据,当和同时为高时表示写
入数据被传输给 DDR 控制器,在写最后一个数据时,wlast 变为高,写完最后一个 wlast 变
为低;
(3)在写响应通道等待设备的写响应,当和同时为高时表示响应的到来 。
一次操作过程中,数据写入流程与我们设计预期是一致的 。同时可以对写入的数据波形
放大了看,写入的每个数据是由写 FIFO 写入 8 个 16bit 数据拼接而成的数据,具体
拼接过程的位宽转换是由写 FIFO 完成 。可以通过类似方法去对其他几次的写操作波形进行
观察,从而验证设计的正确性 。
【fifo2mig_axi基于 DDR3 的串口传图帧缓存系统设计实现】将 1024 个数据(位宽为 16bit)写完之后,对读 FIFO 进行一次清零,清零的作用前面
已经说过 。等待一段时间后,对读 FIFO 进行读数据操作,读取前面写入的 1024 个数据 。读
数据过程中,AXI 总线上就会产生突发读的操作 。
对红色圈中第一次突发读 DDR 操作部分 AXI 读事务波形放大来看 。
(1)在地址通道写入接下来要读取数据的起始地址和读突发长度等信息,在和
同时为高时,这些信息被传输给 DDR 控制器;
(2)在读响应通道,当和同时为高时表示读出的有效数据,当 rlast 变为
高时表示读出的最后一个数据 。图中波形 rdata 有部分地方数据是未知,这些地方并非是有
效数据地方,可不用关心 。
从整体上看,写 FIFO 中写入数据是 100~1123 的 1024 个连续递增数据,波形与仿真代
码是一致的,下图是整个写入数据和写入第一个数据与最后一个数据的波形图 。
读 FIFO 中读出的数据同样也是 100~1123 的 1024 个连续递增数据,注意读 FIFO 的输
出模式是 First Word Fall。
从写入数据与最后读出数据的一致性说明模块功能是正常的 。
【附件:】链接:
- 干货!基于部分-整体关系的概念、关系和物理场景认知推理
- 智能控制技术_基于Matlab的二阶系统模糊控制仿真实例_课程学习
- 基于FPGA的串口传图SRAM缓存VGA显示
- Matlab代码实现 【sop】基于灵敏度分析的有源配电网智能软开关优化配置
- 基于FPGA的串口传图SDRAM缓存VGA显示
- 整体设计 基于 DDR3 的串口传图帧缓存系统设计实现
- 基于传染病模型中的再生数R0的讨论【基于matlab的动力学模型学习笔记_2】
- AXI之原子操作
- 三.SPSS+finebi实现基于分类算法的理财产品顾客亏损及收益分析
- 基于Python实现机器人自动走迷宫【100011016】