文章目录
前言
结合串口接收模块和 tft 显示屏控制模块,设计一个基于 DDR3 的串口传图帧缓存系统 。
提示:以下是本篇文章正文内容,下面案例可供参考
一、接口转换模块设计
模块是系统中相对比较重要的模块,涉及到与 DDR 控制器接口对接 。该模块的主要是实现接口的转换,将普通的 FIFO 接口转换成 AXI 接口,用于将 FIFO 里的数据读出然后存储在 DDR 存储器以及将 DDR 存储器读出的数据存放到 FIFO 缓存 。
AXI 接口包括 5 个通道,分为写事务和读事务 。考虑模块设计实现的简单性(AXI 协议支持复杂的乱序读写操作等,这里就不做考虑),将一次完整的写事务流程规定为○1 主机向写地址通道写入地址和控制信息——>○2 写数据通道突发写入数据——>○3 收到设备的写数据响应 。一次完整的读事务流程规定为○1 主机向读地址通道写入地址和控制信息——>○2 收到设备的读数据响应和读的数据 。对于 DDR 控制器模块,需要等到为高后,才能进行
读/写操作 。读/写操作不可同时进行,对读/写操作就需要有一个判断仲裁的过程, 模块状态机设计如下图所示 。
上电初始状态为 IDLE 状态,当 DDR 完成初始化和校准(即变为高电平)后进入读/写仲裁状态 ARB;在该状态根据是否有读/写操作请求跳转到读/写流程的各个状态;完成一次读/写流程后,状态回到 ARB 状态进行下一次的操作 。状态机采用三段式,第一二段的代码如下 。
always@(posedge ui_clk or posedge ui_clk_sync_rst)beginif(ui_clk_sync_rst)curr_state <= S_IDLE;elsecurr_state <= next_state;endalways@(*)begincase(curr_state)//具体状态转移见下endcaseend
用户侧逻辑的时钟和复位信号采用的 DDR 控制器模块输出的和
。状态机在上电复位处于初始状态 IDLE,当 DDR 完成初始化和校准后进入
读/写仲裁状态 ARB,具体代码如下 。
S_IDLE:beginif(init_calib_complete)next_state = S_ARB;elsenext_state = S_IDLE;end
在读/写仲裁状态 ARB,根据当前的读/写请求跳转到读/写操作流程中的地址通道的操作 。这里为了设计简单化,将写操作优先级高于读优先级 。
S_ARB:beginif(wr_ddr3_req == 1'b1)next_state = S_WR_ADDR;else if(rd_ddr3_req == 1'b1)next_state = S_RD_ADDR;elsenext_state = S_ARB;end
当在 ARB 状态出现写操作请求后,进入到 AXI 写地址通道的操作状态 ,在该状态,传输写操作的地址和控制信息,当和同时为高时表明地址已经传输完成,进入到写操作的写数据通道的操作 。此处与中-1’b1说明:
assign wr_ddr3_req = (wr_fifo_rst_busy == 1'b0) && (wr_fifo_rd_cnt >= wr_req_cnt_thresh) ? 1'b1:1'b0;assign rd_ddr3_req = (rd_fifo_rst_busy == 1'b0) && (rd_fifo_wr_cnt <= rd_req_cnt_thresh) ? 1'b1:1'b0;assign wr_req_cnt_thresh =AXI_LEN-1'b1;assign rd_req_cnt_thresh = AXI_LEN-1'b1;
因为一次突发读取的数据是32个,此处想让写优先,将 设置成= -1’b1(30)此时刚好能错过读的条件,由上图当为02时为31 。而将 设置成= -1’b1(30)是因为最大计数到30(由于fifo设置提前读数所致) 。
S_WR_ADDR:beginif(m_axi_awready && m_axi_awvalid)next_state = S_WR_DATA;elsenext_state = S_WR_ADDR;end
在对写操作的写数据通道的操作中,当主机写完最后一个数据后,进入到等待写响应的状态 。
S_WR_DATA:beginif(m_axi_wready && m_axi_wvalid && m_axi_wlast)next_state = S_WR_RESP;elsenext_state = S_WR_DATA;end
- 干货!基于部分-整体关系的概念、关系和物理场景认知推理
- 智能控制技术_基于Matlab的二阶系统模糊控制仿真实例_课程学习
- 基于FPGA的串口传图SRAM缓存VGA显示
- Matlab代码实现 【sop】基于灵敏度分析的有源配电网智能软开关优化配置
- 基于FPGA的串口传图SDRAM缓存VGA显示
- 整体设计 基于 DDR3 的串口传图帧缓存系统设计实现
- 基于传染病模型中的再生数R0的讨论【基于matlab的动力学模型学习笔记_2】
- AXI之原子操作
- 三.SPSS+finebi实现基于分类算法的理财产品顾客亏损及收益分析
- 基于Python实现机器人自动走迷宫【100011016】