FPGA开源工作室将通过五篇文章来给大家讲解xilinx FPGA 使用mig IP对DDR3的读写控制,旨在让大家更快的学习和应用DDR3。
本实验和工程基于Digilent的Arty Artix-35T FPGA开发板完成。
软件使用Vivado 2018.1
第三篇:mig IP用户读写时序
1 mig接口说明
对于mig与DDR3/DDR2 SDRAM的读写时序我们不需要了解太多,交给mig就可以了。我们需要做的是控制好User Interface,写出正确的User logic。想要写好User logic,我们就必须清楚每一个用户控制接口的含义:
- app_addr[ADDR_WIDTH – 1:0]:此输入指示当前提交给UI的请求的地址。 UI聚合外部SDRAM的所有地址字段,并为您提供平面地址空间(Rank,bank,row,colum)。
- app_cmd[2:0]:此输入指定当前提交给UI的请求的命令。
- app_en:此输入在请求中变化。 您必须将所需的值应用于app_addr []和app_cmd [2:0],然后断言app_en以将请求提交给UI。 这会通过断言app_rdy来启动UI确认的握手。
- app_wdf_data[APP_DATA_WIDTH – 1:0]:该总线提供当前正在写入外部存储器的数据。
- app_wdf_end:此输入指示当前周期中app_wdf_data []总线上的数据是当前请求的最后一个数据。
- app_wdf_wren:此输入表示app_wdf_data []总线上的数据有效。
- app_wdf_rdy:此输出表示写数据FIFO已准备好接收数据。 当app_wdf_rdy和app_wdf_wren都被声明时,接受写入数据。
- app_wdf_mask[APP_MASK_WIDTH – 1:0]:该总线指示app_wdf_data []的哪些字节写入外部存储器以及哪些字节保持其当前状态。 通过将值1设置为app_wdf_mask中的相应位来屏蔽字节。 例如,如果应用程序数据宽度为256,则掩码宽度取值为32. app_wdf_data的最低有效字节[7:0]使用app_wdf_mask的Bit [0]屏蔽,app_wdf_data的最高有效字节[255:248]使用app_wdf_mask的Bit [31]屏蔽。 因此,如果必须屏蔽最后一个DWORD,即app_wdf_data的字节0,1,2和3,则app_wdf_mask应设置为32'h0000_000F。
- app_rdy:此输出指示您是否接受当前提交给UI的请求。 如果在确认app_en后UI未声明此信号,则必须重试当前请求。 如果出现以下情况,则不会声明app_rdy输出:
- PHY /内存初始化尚未完成;
- 所有bank都被占用(可以看作命令缓冲区已满);
- 请求读取并且读取缓冲区已满;
- 请求写入,没有可用的写缓冲区指针;
- 正在插入定期读取。
- app_rd_data[APP_DATA_WIDTH – 1:0]:此输出包含从外部存储器读取的数据。
- app_rd_data_end:此输出表示当前周期中app_rd_data []总线上的数据是当前请求的最后一个数据。
- app_rd_data_valid:此输出表明app_rd_data []总线上的数据有效。
- ui_clk_sync_rst:reset信号来自于UI,与ui_clk同步。
- ui_clk:这是UI的输出时钟。 它必须是输出到外部SDRAM的时钟频率的一半或四分之一,这取决于在GUI中选择的2:1或4:1模式。
- init_calib_complete:校准完成后,PHY将init_calib_complete置‘1’。 在将命令发送到内存控制器之前,应用程序无需等待init_calib_complete。
- app_ref_req:置位时,此高电平有效输入请求内存控制器向DRAM发送刷新命令。 它必须在一个周期内进行脉冲以发出请求,直到app_ref_ack信号被置位以确认请求并指示它已被发送,然后置为无效。
- app_ref_ack:置位时,此高电平有效输入确认刷新请求,并指示该命令已从存储器控制器发送到PHY。
- app_zq_req:置位时,此高电平有效输入请求存储器控制器向DRAM发送ZQ校准命令。 它必须在一个周期内进行脉冲以发出请求,直到app_zq_ack信号被置位以确认请求并指示它已被发送,然后取消置位。
- app_zq_ack:置位时,此高电平有效输入确认ZQ校准请求,并指示该命令已从存储器控制器发送到PHY。
了解了每个信号的作用我们来讲解mig 用户逻辑的读写时序。
2 命令与地址
如上图所示①,②,③情况,只有在③时刻app_en和app_rdy同时为高电平app_cmd(命令)和(app_addr)地址才有效,所以当需要app_cmd,app_addr有效时app_en必须保持到app_rdy为高电平才有效。
3写时序
如上图所示①,②,③种情况,写命令和写数据直接存在三种逻辑关系。
1,①表示写命令(app_cmd),写当前地址(app_addr)和写数据(app_wdf_data)以及写控制信号(app_en,app_rdy,app_wdf_rdy,app_wdf_wren,app_wdf_end)同时有效。
2,②表示写数据(app_wdf_data)和写控制信号(app_wdf_wren,app_wdf_end)先于写命令(app_cmd)和写当前地址(app_addr)以及其他写控制信号(app_en,app_rdy,app_wdf_rdy)一个用户时钟(ui_clk)。
3,③表示写数据(app_wdf_data)和写控制信号(app_wdf_wren,app_wdf_end)迟于写命令(app_cmd)和写当前地址(app_addr)以及其他写控制信号(app_en,app_rdy,app_wdf_rdy)。最多两个用户时钟(ui_clk)。
4读时序
如上图所示,当读命令(app_cmd)和当前读地址(app_addr)以及读控制信号(app_en,app_rdy)同时有效时,等待读数据有效信号(app_rd_data_valid)有效时读数据(app_rd_data)有效。
《FPGA自习学院》将不断更新和总结FPGA相关学习资料,书籍,实例工程和视频。欢迎大家加入《FPGA自习学院》,一起学习一起成长。
<li class="tool-item tool-active is-like "><a href="javascript:;"><svg class="icon" aria-hidden="true"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#csdnc-thumbsup"></use> </svg><span class="name">点赞</span> <span class="count">3</span> </a></li> <li class="tool-item tool-active is-collection "><a href="javascript:;" data-report-click="{"mod":"popu_824"}"><svg class="icon" aria-hidden="true"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-csdnc-Collection-G"></use> </svg><span class="name">收藏</span></a></li> <li class="tool-item tool-active is-share"><a href="javascript:;" data-report-click="{"mod":"1582594662_002"}"><svg class="icon" aria-hidden="true"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-csdnc-fenxiang"></use> </svg>分享</a></li> <!--打赏开始--> <!--打赏结束--> <li class="tool-item tool-more"> <a> <svg t="1575545411852" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5717" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M179.176 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5718"></path><path d="M509.684 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5719"></path><path d="M846.175 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5720"></path></svg> </a> <ul class="more-box"> <li class="item"><a class="article-report">文章举报</a></li> </ul> </li> </ul> </div> </div> <div class="person-messagebox"> <div class="left-message"><a href="https://blog.csdn.net/baidu_34971492"> <img src="https://profile.csdnimg.cn/7/7/8/3_baidu_34971492" class="avatar_pic" username="baidu_34971492"> <img src="https://g.csdnimg.cn/static/user-reg-year/1x/4.png" class="user-years"> </a></div> <div class="middle-message"> <div class="title"><span class="tit"><a href="https://blog.csdn.net/baidu_34971492" data-report-click="{"mod":"popu_379"}" target="_blank">FPGA开源工作室</a></span> </div> <div class="text"><span>发布了93 篇原创文章</span> · <span>获赞 104</span> · <span>访问量 15万+</span></div> </div> <div class="right-message"> <a href="https://im.csdn.net/im/main.html?userName=baidu_34971492" target="_blank" class="btn btn-sm btn-red-hollow bt-button personal-letter">私信 </a> <a class="btn btn-sm bt-button personal-watch" data-report-click="{"mod":"popu_379"}">关注</a> </div> </div> </div>