zoukankan      html  css  js  c++  java
  • Xilinx 7系列例化MIG IP core DDR3读写

    昨晚找了一下,发现DDR3读写在工程上多是通过例化MIG,调用生成IPcore的HDL Functional Model。我说嘛,自己哪能写出那么繁琐的,不过DDR读写数据可以用到状态机,后期再添砖加瓦吧,当下先对比一下网上找的一段程序和自己例化后的程序。
    另外,仿真了十余分钟,最后的是什么鬼?一头雾水T.T。想着每一次要分析信号要等那么久就难受。
    Xilinx <wbr>7系列例化MIG <wbr>IP <wbr>core <wbr>DDR3读写

    更重要的是分享一波关于“Xilinx平台下DDR3设计教程”的资料。就其中的“仿真篇”而言,亲测可行,还是中文版
    datasheet看着亲切。0.0
    ********************20170519更新:确定关键信号及学习博客********************
    前天师兄确定说是利用MIG IP core进行例化,参考了几份关于UG重点详解:https://wenku.baidu.com/view/63e8c92d195f312b3069a5ea.html
    http://blog.chinaaet.com/chinaaetwoaini/p/5100050615
    更重要的是找到了“XILINX DDR3 IP核使用教程完版”http://download.csdn.net/download/kpsuwen/9374463
    do sim.do仿真后加入“app_cmd、app_addr、app_en、app_rdy、app_wdf_wren、app_wdf_end、app_wdf_rdy、app_wdf_data”等用户核心信号(下图是UG586文档第58页中的“内存接口示意图”)。我们主要关心的是左侧关于写操作的交互信号。
    ********************20170520更新:对用户信号进行总结及简单的读写时序********************
    Xilinx <wbr>7系列例化MIG <wbr>IP <wbr>core <wbr>DDR3读写
    这几个信号的分析总结在“XILINX DDR3 IP核使用教程完版”中都有所提及,我就稍微的总结一下:
    1.写操作由两套系统:地址域和数据域。
    1.1.地址域:在地址域上,app_rdy(controlled by DDR3)、app_en(controlled by user)同时拉高为1时地址app_addr(29bit=rank 1+bank 3+row 15+ column 10)才有效;
    1.2.数据域:在数据域上,app_wdf_rdy(controlled by DDR3)、app_wdf_wren(controlled by user)同时拉高为1时数据app_wdf_data才有效。
    1.3.app_wdf_data和app_rd_data[APP_DATA_WIDTH-1:0]信号都是数据信号,其中“2 * nCK_PER_CLK * PAYLOAD_WIDTH”,“nCK_PER_CLK=4”,“PAYLOAD_WIDTH = (ECC_TEST == "OFF") ? DATA_WIDTH : DQ_WIDTH”,“ECC_TEST == OFF”故“PAYLOAD_WIDTH =DATA_WIDTH=64”。2*4*64=512。数据位宽与BL有关,BL=8表示DDR3-SDRAM每次可以写入8个64bit数据,512bit
    1.4.地址和数据不一定需要同步,可提前或者滞后两个时钟,见下图。另外下图也可看出命令信号app_cmd和地址信号app_addr是对齐绑定的,而不和数据域绑定。
    Xilinx <wbr>7系列例化MIG <wbr>IP <wbr>core <wbr>DDR3读写
    写通道:
    Xilinx <wbr>7系列例化MIG <wbr>IP <wbr>core <wbr>DDR3读写
    读通道:
    Xilinx <wbr>7系列例化MIG <wbr>IP <wbr>core <wbr>DDR3读写

      2.读操作
     
    写时序仿真结果图:
    Xilinx <wbr>7系列例化MIG <wbr>IP <wbr>core <wbr>DDR3读写
    分析:以clk为基础时钟,“app_en=1、app_rdy=1”时“app_addr”有效,四个时钟,写入了四个地址,另外需要强调一点的是: app_addr[ADDR_WIDTH – 1:0] 是ddr3的地址,精确到每个col地址,但是因为实际突发长度(Burst Length)要求8所以每个数据都是第4位开始。因此第四位开始app_addr进行二进制增加。
     
    读时序仿真结果图:
    Xilinx <wbr>7系列例化MIG <wbr>IP <wbr>core <wbr>DDR3读写
    分析:暂时搁置
     
    ********************20170521更新:关于V7系列的mig例化********************
    早上大致看了以下师兄給的VC709板关于mig例化仿真文档,双BANK,先是bank a,再是bank b,最后bank a_b,xilinx 用K7系列和V7系列例化的过程几乎一致,只是V7的这份user guide的仿真环境是vivado,用ise应该是一样的效果,今天中午的问题卡在了在例化过程中加入.dxc引脚文件时报错了,见下图:
    Xilinx <wbr>7系列例化MIG <wbr>IP <wbr>core <wbr>DDR3读写
    郁闷的很,大概直译一下“对于某些端口,即使对于所选择的配置是必需的,也不提供位置约束。 以下是提供的UCF中缺少的端口:ddr3_addr[15]”,ddr3_addr[15:0],16bit,单单最后这位的引脚配置报错,我尝试手动输入这120余个引脚信息,但是IO standard又不能强行输入,就放弃了此想法。sublime打开xilinx官网down的dxc文件,找到ddr3_addr[15]口,见下图:
    Xilinx <wbr>7系列例化MIG <wbr>IP <wbr>core <wbr>DDR3读写
    对比了一下ddr3_addr[15]和ddr3_addr[14:0]之间的差别,没发现有毛病。难道我思考方向错了?!
     
    花了40min中,按照dxc中的信息强行把管脚配置完毕,人工配置太累了,下图是配置管脚后的:
    Xilinx <wbr>7系列例化MIG <wbr>IP <wbr>core <wbr>DDR3读写
    输入完后系统会识别IO标准:
    Xilinx <wbr>7系列例化MIG <wbr>IP <wbr>core <wbr>DDR3读写
    终于又可以继续了... ...
    **********20170713更新:上面遇到的问题是因为ise不支持xdc引脚文件的缘故,vivado平台下正常**********
     
    Here is the Summary
    Xilinx <wbr>7系列例化MIG <wbr>IP <wbr>core <wbr>DDR3读写
     
    ********************20170522更新:DDR3内部核心频率、时钟频率、数据传输频率********************
    1.核心频率/Core Frequency/:(解释1)内存cell阵列的工作频率,它是内存的真实运行频率。(解释2)每款芯片都有其自己的极限频率,这个极限频率就是内存的核心频率,或者说是它能正常工作的频率,因此把内存的频率称为内存的真实频率。
    2.时钟频率:(解释1)I/O Buffer(输入/输出缓存)的传输频率。(解释2)内存作为数字逻辑芯片,本身不产生频率,频率是主板上的频率发生器外加给它的,主板上产生的这个频率称为时钟频率。
    3.数据传输频率:内存与系统交换数据的频率,也称为内存的等效频率或者接口频率。
    *****三者在内存中的关系*****
    核心频率就是内存的工作频率,到DDR2、DDR3才有了时钟频率概念,时钟频率是将核心频率通过倍频技术得到的一个频率。///DDR内存核心频率和时钟频率相同,但在传输数据的时候在脉冲的上升沿和下降沿都传输了一次,所以数据传输频率是核心频率的2倍;DDR2内存将核心频率倍频2倍得到了时钟频率,同样在上升沿和下降沿各传输一次数据,所以数据传输频率就是核心频率的4倍、时钟频率的两倍;DDR3内存的时钟频率是核心频率的4倍,同样在上升沿和下降沿各传输一次数据,所以数据传输频率就是核心频率的8倍。
    Following are three examples.
    DDR2-800:核心频率200MHz,时钟频率400MHz,数据传输频率800MHz;
    DDR3-800:核心频率100MHz,时钟频率400MHz,数据传输频率800MHz;
    DDR3-1066:核心频率166MHz,时钟频率533MHz,数据传输频率1066MHz.
     
     

    3

    0

     
    阅读(1836)┊ 评论 (3)收藏(0) 转载(1) ┊ 喜欢 打印举报
    已投稿到:
     
     
     
    • 文锋若风

       
      1.SDRAM的内部是一个个存储阵列。这些存储阵列就代表了一个个的Logical-Bank(L-Bank)。每个阵列中的小单元就是最小的存储单元,其位数即为Bank的位数。当前的SDRAM多为4 bank.

      5月16日 20:28回复(0)

    • 文锋若风

      2.DQS是内存和内存控制器之间信号同步用的。 
      由DQ信号发出端发出DQS,信号接收端根据DQS的上、下沿来触发数据的接收。 
      简单点说,如果是从内存中读取信号,那么主板北桥(内存控制器)根据内存发出的DQS来判断在什么时候接收读出来的数据。如果是写的话,就正好相反,内存根据北桥发出的DQS来触发数据的接收。 
      DDR2每芯片有一个读、写双向的DQS,DDR3是有读和写两个DQS(2个DQS的好处是,不必等待DQS反向)。 
    转载:http://blog.sina.com.cn/s/blog_b5fa66e50102wx5e.html
  • 相关阅读:
    java OA系统 自定义表单 流程审批 电子印章 手写文字识别 电子签名 即时通讯
    flowable 获取当前任务流程图片的输入流
    最新 接口api插件 Swagger3 更新配置详解
    springboot 集成 activiti 流程引擎
    java 在线考试系统源码 springboot 在线教育 视频直播功能 支持手机端
    阿里 Nacos 注册中心 配置启动说明
    springboot 集成外部tomcat war包部署方式
    java 监听 redis 过期事件
    springcloudalibaba 组件版本关系
    java WebSocket 即时通讯配置使用说明
  • 原文地址:https://www.cnblogs.com/chengqi521/p/7879144.html
Copyright © 2011-2022 走看看