ps端是怎么ddr3 控制器ddr

没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!zedboard如何从PL端控制DDR读写(五) - christ0127 - 博客园
  有了前面的一堆铺垫。现在终于开始正式准备读写DDR了,开发环境:VIVADO2014.2 + SDK。
  一、首先要想在PL端通过AXI去控制DDR,我们必须要有一个AXI master,由于是测试,就不自己写了,直接用package IP生成,方法如下:
  1.选择package IP工具
  2.创建新的AXI外设
  3.接口类型选择Full,模式选择master,如果你不关心里面的详细实现过程,那么直接finish就好了。(后面我们会继续分析里面的过程)
  二、创建好了IP,自然要加入到IP库里,如图,在IP Catalog空白处右键,设置,把刚刚生成IP的路径放进去:
  三、接下来创建BD块,把整个硬件系统搭建好:
  需要指出的是,由于我们需要用到HP,所以在zynq的配置里面把HP勾选上,任选一个通道就行
&  四、然后校验正确性,产生输出文件,创建BD块顶层,这都是套路,一路走下来就行。如果你想在调试里看到产生的AXI信号,那么需要对AXI标记一下debug
&  五、综合,set up debug,然后生成比特流,并将其导入到SDK;在SDK里跑个hello world 就行,主要目的是用CPU去把DDR控制器初始化。
  到这里整个过程基本就结束了,接下来看仿真波形:
&  放大一点,可以看到每次地址的步进长度是十进制的64,这是因为我们的突发长度设置的是16,位宽为32bit。
  但是问题来了,我们在上一节里面说过,有一部分地址是连到了OCM的,那么这一部分地址是多少呢?UG585里给出了如下说明:
  我们是从全0地址开始写数据的,然而全0的地址刚好分配到了OCM,这TM就很尴尬了。一开始想让程序运行的时间长一点,这样地址是不是就可以跑到0x了?然而并没有什么用,因为地址只跑到就停止了,如图:
  还记得前面打包AXI IP时候我们说过要分析其过程吗?其实那里就已经挖了一个坑了,具体见代码:
  这是AXI的写数据状态机,(可以看到,官方也是用一段式状态机来实现整个时序的,印证了前面三段式状态机不好实现的说法),从写状态到读状态的跳变是由writes_done信号来控制的,那么这个writes_done又是怎么产生的呢?继续看代码:
  writes_done是由write_burst_counter的高位进位来控制的,再继续找write_burst_counter:
  在这个计数器里有一个很关键的位C_NO_BURSTS_REQ ,在代码的低179行,它的定义如下:
localparam integer C_NO_BURSTS_REQ = C_MASTER_LENGTH-clogb2((C_M_AXI_BURST_LEN*C_M_AXI_DATA_WIDTH/8)-1);
  C_M_AXI_BURST_LEN我们设置的是16,C_M_AXI_DATA_WIDTH是32,clogb2可以理解为计算以2为底的某个数的对数,那么最后得到的C_NO_BURSTS_REQ = 6;也就是说write_burst_counter的位宽是7为,当最高位为1时,写数据停止。也就是只会发生64次写数据,之后计数器和写地址就会归零。那么64次写数据乘以每次突发长度16再乘以位宽4个字节,最后得到的数值是4096,换算成16进制刚好是0x。  所以要想真正的往DDR里面写数据,我们还需要对代码进行修改。  到这里离成功就已经不远了从零开始,搭建zynq-7000的PS硬件平台--DDR3接口集成与配置 | 电子创新网赛灵思中文社区没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!zedboard如何从PL端控制DDR读写(一)
时间: 13:07:04
&&&& 阅读:1904
&&&& 评论:
&&&& 收藏:1
标签:& & 看了一段时间的DDR手册,感觉大体有一点了解了,想要实际上板调试,然而实验室可用的开发板不多,拿了一块zynq板看了看,DDR确实有,但是已经集成了控制器,而且控制器还放到了PS端,PL只能通过AXI接口访问。
& & 无奈另外两块开发板也这样,索性就用AXI去控制吧,正好还能再复习一遍AXI。
& & 先简单介绍一下zynq,其全称是ZedBoard Zynq Evaluation and Development Kit &, FPGA芯片型号为xc7z020clg484-1。
& & 片内包含一个丰富特性的基于双核ARM Cortex-A9的处理子系统(Processing System,PS)和Xilinx 28nm可编程逻辑(Programmable Logic,PL)。PS除了核心外还包括片上存储器、外部存储器接口以及大量外设连接接口。【引用:Zynq-7000 Overview】
& &可以看到其存储器规格为:512MB DDR3;256Mb Quad-SPI Flash;4GB SD Card;
& &板卡结构框图如下所示:从图中我们也可以明显的看到DDR位于PS端
& & 位于PS端的ARM直接有硬件支持AXI接口,而PL则需要使用逻辑实现相应的AXI协议。Xilinx提供现成IP如AXI-DMA,AXI-GPIO,AXI-Datamover都实现了相应的接口,使用时直接从XPS的IP列表中添加即可实现相应的功能。
有时,用户需要开发自己定义的IP同PS进行通信,这时可以利用VIVADO向导生成对应的IP。VIVADO中用户自定义IP核可以拥有AXI-Lite,AXI-FULL,AXI-Stream。
AXI-Lite具有轻量级,结构简单的特点,适合小批量数据、简单控制场合。不支持批量传输,读写时一次只能读写一个字(32bit)。
AXI4接口和AXI-Lite差不多,只是增加了一项功能就是批量传输,可以连续对一片地址进行一次性读写。
上面两种均采用内存映射控制方式,即ARM将用户自定义IP编入某一地址进行访问,读写时就像在读写自己的片内RAM,编程也很方便,开发难度较低。代价就是资源占用过多,需要额外的读地址线、写地址线、读数据线、写数据线、写应答线这些信号线。
另外一种AXI接口就是AXI-Stream,这是一种连续流接口,不需要地址线(很像FIFO,一直读或一直写就行)。对于这类IP,ARM不能通过上面的内存映射方式控制(FIFO根本没有地址的概念),必须有一个转换装置,例如AXI-DMA模块来实现内存映射到流式接口的转换。AXI-Stream适用的场合有很多:视频流处理;通信协议转换;数字信号处理;无线通信等。其本质都是针对数值流构建的数据通路,从信源(例如ARM内存、DMA、无线接收前端等)到信宿(例如HDMI显示器、音频输出等)构建起连续的数据流。这种接口适合做实时信号处理。
有了上面的这些官方IP和向导生成的自定义IP,用户其实不需要对AXI时序了解太多(除非确实遇到问题),因为Xilinx已经将和AXI时序有关的细节都封装起来,用户只需要关注自己的逻辑实现即可。
&标签:原文地址:http://www.cnblogs.com/christsong/p/5672807.html
&&国之画&&&& &&&&chrome插件
版权所有 京ICP备号-2
迷上了代码!

我要回帖

更多关于 ps ddr 的文章

 

随机推荐