热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

DDR3ui接口读写回环测试

由于工作需要,需要使用DDR4,资源有限,选择在开发板上进行DDR3的入门学习,套路大同小异,现将调试过程进行

        由于工作需要,需要使用DDR4,资源有限,选择在开发板上进行DDR3的入门学习,套路大同小异,现将调试过程进行相关记录。

        开发板上只有一颗DDR3颗粒,型号为MT41K128M16,大小256MB,数据位宽16bit,这里可以计算一下按照16bit位宽读写DDR,地址最大值:256*1024*1024*8/16 = 'd134217728 = 'h800_0000。

一、DDR读写用户接口:

二、DDR读写时序

        严格按照手册上的读写时序进行配置,用户侧的输入控制信号,推荐组合逻辑进行编写,避免不必要的延时:

三、简单记录下MIG的IP配置

        注意:例化完MIG之后,为了验证硬件的好与坏,DDR3需要抓取init_calib_complete信号,该信号为高电平,表示DDR颗粒正常工作并且校验完成;如果是DDR4颗粒,在上板调试时,调试界面会有校验是否通过指示。

(1)MIG工作频率设置最高的400MHz。

        此时PHY to Controller Clock Ratio固定为4:1,UI clock为400MHz / 4 = 100MHz,这个时钟是MIG输出给UI的时钟,用户可以拿这个时钟来驱动用户逻辑,能够避免跨时钟域的问题。

        MIG工作频率设置为400MHz时,由于DDR是双边沿采样,因此DDR实际的工作频率为800MHz;用户工作频率为100MHz,DDR颗粒的数据位宽为16bit,那么可以计算出用户接口的数据位宽为16*8 = 128bit。

        总结,物理层,DDR颗粒工作频率800MHz/位宽16bit,用户侧工作频率100MHz/位宽128bit。

(2)输入给MIG的系统时钟200MHz,该200MHz时钟在本工程中,由开发板上晶振的50MHz通过MMCM产生,MIG通过内部的PLL产生400MHz的MIG工作频率。

(3)系统时钟属性选择No Buffer,50MHz晶振时钟产生200MHz的MMCM选择了Global Buffer

(4)参考时钟属性选择No buffer,从MIG的用户手册时钟树上分析,MIG工作频率 > 667MHz时,根据FPGA的速度等级去选择参考时钟,为300MHz还是400MHz;否则参考时钟选择200MHz。

        当系统时钟设置为200MHz时,参考时钟可以设置为use system clock。

四、仿真分析

(1)写,w_app_cmd[2:0]为3'b000

        burst突发8,地址位宽28bit,从28'h000_0000到28'h7ff_fff8;写数据位宽128bit,取值为地址值+1。

        28'h000_0000开始写:

        28'h7ff_fff8结束写,此时DDR颗粒写满:

(2)读,w_app_cmd[2:0]为3'b001

        读命令发出,到读到数据有一段时间的延时。

        读第一个数据:

        读最后一个数据:

附代码:ddr3_read_write_ctr.v-硬件开发文档类资源-CSDN文库


推荐阅读
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 配置IPv4静态路由实现企业网内不同网段用户互访
    本文介绍了通过配置IPv4静态路由实现企业网内不同网段用户互访的方法。首先需要配置接口的链路层协议参数和IP地址,使相邻节点网络层可达。然后按照静态路由组网图的操作步骤,配置静态路由。这样任意两台主机之间都能够互通。 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • MPLS VP恩 后门链路shamlink实验及配置步骤
    本文介绍了MPLS VP恩 后门链路shamlink的实验步骤及配置过程,包括拓扑、CE1、PE1、P1、P2、PE2和CE2的配置。详细讲解了shamlink实验的目的和操作步骤,帮助读者理解和实践该技术。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 本文由编程笔记#小编整理,主要介绍了关于数论相关的知识,包括数论的算法和百度百科的链接。文章还介绍了欧几里得算法、辗转相除法、gcd、lcm和扩展欧几里得算法的使用方法。此外,文章还提到了数论在求解不定方程、模线性方程和乘法逆元方面的应用。摘要长度:184字。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • 本文讨论了微软的STL容器类是否线程安全。根据MSDN的回答,STL容器类包括vector、deque、list、queue、stack、priority_queue、valarray、map、hash_map、multimap、hash_multimap、set、hash_set、multiset、hash_multiset、basic_string和bitset。对于单个对象来说,多个线程同时读取是安全的。但如果一个线程正在写入一个对象,那么所有的读写操作都需要进行同步。 ... [详细]
  • 一直没有对java中的一些图像概念进行区分,一下子区分的太多了会乱,这么先来个简单的吧:ImageIO可以把一个图片转换成Buffered ... [详细]
  • 本文介绍了使用数据库管理员用户执行onstat -l命令来监控GBase8s数据库的物理日志和逻辑日志的使用情况,并强调了对已使用的逻辑日志是否及时备份的重要性。同时提供了监控方法和注意事项。 ... [详细]
author-avatar
静-静-静距离
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有