zynq仅仅用一片ddr3 32bit16bit怎么改配置

1110人阅读
xilinx随笔(16)
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & 作者:Hello,Panda
& & & & 目前Xilinx zynq器件刮起了一阵SoC风,正在全国如火如荼的推行。Zynq-7000 系列处理基于 Xilinx 的可扩展处理平台 Extensible ProcessingPlatform,EPP)结构,该结构在单芯片内集成了基于具有丰富特点的双核 ARMCortex-A9 MPCore 多核处理器的处理系统(Processing System,PS)和 Xilinx可编程逻辑(Programmable Logic,PL)。其中,Cortex-A9 双核处理器是整个架构的核心,外部存储器接口、及丰富的外设资源(PL可看做完全可编程的外设)都挂载在
1 &ZYNQ 处理器概述
& & & & 从Zynq 处理器的结构框图(图 1-1)可以看到 PS位于整个架构的核心,PL&通过各数据互联接口与 PS进行交互。
1.1 处理器系统(PS)&
处理器系统主要由应用处理单元(APU)、通用外设、时钟复位系统及互联接口构成。&
1.1.1 应用处理单元(APU)&
应用处理单元(APU)包括:&
& & & (1) 两个独立的 ARM Cortex-A9(ARMv7)处理器内核与两个Neon 协处理器,他们共享512KB 的L2 缓存。各处理的L1 级缓存是独立的,因此两个处理器可以单独运行各自的任务。Neon技术主要用于加速多媒体和信号处理算法(如视频编解码、3D图形、图像处理技术、游戏加速等),Neon可认为是128bit矢量DSP,可执行打包的SIMD 指令,最高支持64bit单精度浮点运算。&
& & &(2)8 通道 DMA 控制器。64bit位宽,支持 M-toM,其中四个通道支持 PL请求。&
& & &(3) L1 和L2 级Cache。512KB L2 级Cache为两个处理器共有,32KB&D-Cache 和 I-Cache 为每个处理器私有。&
& & &(4)GIC(Generic Interrupt Controller)。管理95 中断信号,需要注意的是,PL-PS 的中断有对应各自处理器的快速中断和普通的F2P IRQ。
& & &(5)侦听控制单元(SCU)。智能管理两个出来器与 L2 共享高速缓存之间的数据一致性。&
& & &(6)OCM(On Chip Memory)。256KB SRAM,PL可以通过 AXI_HP 接口直接访问。&
1.1.2 通用外设&
& & & 通用外设包括由挂载在中央互联单元(Central Interconnet)上的低速设备及DDR。&
& & & &(1)通用外设。通用外设(SPI、I2C、UART、USB 等)通过 MIO 引出,由于 PS 的 MIO 较少,因此可通过 EMIO 连接到PL后通过管脚输出。图1-2 通用外设管脚分配图。从图1-2 可以看出,MIO 分成两个BANK,BANK0 对应MIO[15:0],BANK[1]对应 MIO[53:16]。两个 BANK 的电压互相独立,可以是 1.8V、2.5V 或 3.3V,上电时通过采样 MIO[7]和 MIO[8]的值确定 BANK0 和 BANK1 的电压。因此,为了保证它们的电压值不被其他逻辑改变,这两个引脚只能作为输出,最好是不和任何其他设备相连,在硬件设计时要特别注意。&另外由于MIO数目有限,引脚一般可多设备复用,设计原理图时需特别注意合理分配这些引脚。&
& & & &(2)DDR控制器。DDR 控制器支持1.2V LPDDR、1.8V DDR2、1.5VDDR3和1.35V DDR3L。可支持16bit或32bit的数据位宽,突发长度最大支持16beats,容量最大为1GB,在32bit位宽时可支持ECC 较验。
& & & & &图1-3 是DDR控制器的访问端口图,从图可以看出,DDR控制器共有S0~S3 四个端口可被访问。其中 S0、S1 由 PS 访问,S0 为 L2 Cache 专享,S1由连接在中央互联设备上的外设使用;S2、S3 由PL访问,直接连接在 AXI_HP&to DDR Interconnect 上。每个端口访问 DDR 物理层都需经过三级仲裁来保证。&
& & & & Z7020 支持 DDR 的 Fmax 为 533MHz(Z 可达 667MHz),若DDR 的位宽为 32bit,可提供的理论带宽为 4264MB/s。,实际使用经验说明按照75%降额完全没有问题。
1.2 时钟和复位&
& & & &ZYNQ-7000 在 PS 内有三个模拟锁相环,分别提供给 ARM 内核、I/O 外设和DDR。时钟系统的结构如图1-4 所示。&
& & & & PS 共提供四个时钟源给 PL,这四个时钟可从三个锁相环的任意一个得到,PL 时钟之间没有相对的相位关系。&ZYNQ 的复位系统由硬件、看门狗定时器、JTAG 和软件复位构成,系统的框图如图1-5 所示。电源复位信号(PS_POR_B)和系统复位信号(PS_SRST_B)复位所有硬件。PS的三个看门狗产生复位信号,JTAG控制器可产生只复位 PS调试端口的复位信号或系统级复位信号,软件可产生只复位独立子模块的或系统级的复位信号。图1-5 是复位系统的结构图。&对PL而言,PL的复位信号源来自和每个PL时钟同步的对应时钟复位信号。在设计中,一般采用低频时钟产生全局复位信号。&
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:43329次
排名:千里之外
原创:22篇
评论:13条
(1)(2)(1)(3)(4)(2)(2)(5)(2)本编文章的目的主要用简明的方法对DDR3进行读写,当然这种方式每次读写都需要CPU干预,效率是比较低的,但是这是学习的过程吧。
本系列文章尽可能的让每一个实验都相对独立,过程尽可能保证完整性,保证实验的可重现性。 但是用到的模块或者IP的具体作用和用法不保证都重复详细的介绍。
本文所使用的开发板是兼容zedboardPC 开发环境版本:Vivado 2015.4 Xilinx SDK 2015.4
生成硬件系统
新建vivado工程
选择Zedboard
新建Block Design
添加ZYNQ PS
点击Run Block Automation,让vivado自动配置好zedboard相关的默认的信息,点击OK
双击ZYNQ,在此可以去掉一些不用的外设
设置好的Block Design如图所示
在block design上右击,选择Create HDL Wapper
完成后,在block design上右击,选择Generate Output Prouducts,在弹出的对话框选择Generate
点击Generate Bitstream
完成后,选择File-&Export-&Export Hadfware,选中Include bitsteam
File -& Launch SDK,把硬件架构导出到软件工程
编写软件程序
新建Hello工程
DDR3的地址
建好后,在mem_demo_bsp-&ps7-&cortexa9_0的路径下,打开xparameters_ps.h这个头文件,这个头文件是cortexA9可以直接控制的外设地址的宏定义。在里面可以找到DDR的地址,可以看到如下代码:&/* Canonical definitions for DDR MEMORY */&#define XPAR_DDR_MEM_BASEADDR 0xU&#define XPAR_DDR_MEM_HIGHADDR 0x3FFFFFFFU&等会我们要使用这个地址,对DDR3进行读写操作
读写操作函数
在mem_demo_bsp-&ps7-&cortexa9_0的路径下,打开xil_io.h这个头文件,这个头文件是cortexA9可以直接控制的内存映射或者映射到了地址空间的IO。在里面可以看到如下代码:&//从某个地址读数据&u8 Xil_In8(INTPTR Addr);&u16 Xil_In16(INTPTR Addr);&u32 Xil_In32(INTPTR Addr);
//向某个地址写数据。&void Xil_Out8(INTPTR Addr, u8 Value);&void Xil_Out16(INTPTR Addr, u16 Value);&void Xil_Out32(INTPTR Addr, u32 Value);&OK,有了这些就可以简单的对DDR进行续写操作了
#include "stdio.h"
#include "platform.h"
#include "xparameters.h"
#include "xparameters_ps.h"#include "xil_printf.h"
#include "xil_io.h"
#define DDR_BASEARDDR
XPAR_DDR_MEM_BASEADDR + 0x
int main()
init_platform();
xil_printf("Hello World\n\r");
for(i=0; i&32; i++)
Xil_Out32(DDR_BASEARDDR+i*4,i);
for(i=0; i&32; i++)
rev = Xil_In32(DDR_BASEARDDR+i*4);
xil_printf("the address at
%x data is : %x \n\r" ,DDR_BASEARDDR+i*4, rev);
cleanup_platform();
串口终端的结果如下:&Hello World&the address at
data is : 0&the address at
data is : 1&the address at
data is : 2&the address at 1000000C data is : 3&the address at
data is : 4&the address at
data is : 5&the address at
data is : 6&the address at 1000001C data is : 7&the address at
data is : 8&the address at
data is : 9&the address at
data is : A&the address at 1000002C data is : B&the address at
data is : C&the address at
data is : D&the address at
data is : E&the address at 1000003C data is : F&the address at
data is : 10&the address at
data is : 11&the address at
data is : 12&the address at 1000004C data is : 13&the address at
data is : 14&the address at
data is : 15&the address at
data is : 16&the address at 1000005C data is : 17&the address at
data is : 18&the address at
data is : 19&the address at
data is : 1A&the address at 1000006C data is : 1B&the address at
data is : 1C&the address at
data is : 1D&the address at
data is : 1E&the address at 1000007C data is : 1F
阅读(...) 评论()你的位置:
&& 详细内容
专家秘笈大放送:在Zynq上用MIG扩展内存(2)-Vivado篇
热度395票&&浏览4726次
时间:日 12:21
硬件平台:ZC706开发板软件工具:Vivado 2013.2&Step 1: 创建工程&&& 启动Vivado 2013.2,创建一个新的工程zc706_mig。选中Create project subdirectory。&&& 选择RTL Project&&& 一路Next,在Default Part页面选择ZC706开发板。Step 2: 配置Zynq&&& 在左面的Flow Navigator窗口,单击Create Block Design,Design Name填写zynq。&&& 在Diagram Tab页里面添加IP ‘ZYNQ7 Processing System’。&&& 双击processing_system7_1,打开配置界面。取消所有外设,仅仅保留UART。UART1使用MIO 48..49。关闭FCLK_CLK0的输出。Step 3: 配置MIG&&& 在Diagram Tab页里面添加IP ‘MIG 7 Series’。双击mig_7series_1,打开配置界面。&&& 在Memory Selection页,选择DDR3&&& 在Controller Options也,配置Clock Period为1250ps,配置Memory Type=SODIMMS; Memory Part=MT8JTF12864HZ-1G6。&&& 在AXI Parameter页,配置Data Width=32, ID width=12。&&& 在Memory Options页,配置Input Clock Period=5000ps(200MHz).&&& 在FPGA Options页,配置System Clock=Differential,Reference Clock=Use System Clock,System Reset Polarity=ACTIVE HIGH。&&& 在Extended FPGA Options页,选中DCI Cascade。&&& 在IO Planning Options页,选择Fixed Pin Out,然后导入labfiles\zc706_mig_pinout.ucf,单击Validate,忽略warnings,单击Next。&&& 在System Signals Selection页,单击Next。&&& 在Summary页,单击Next。&&& 在Simulation Options页,选择Accept,单击Next。&&& 在PCB Information页,单击Next。&&& 在Design Notes页,单击Generate。Step 4: 建立IP之间的连接&&& 在Diagram Tab页, 单击窗口上部的Run Connection Automation,选择/mig_7series_1/S_AXI,系统将自动添加IP并建立部分连接。&&& 单击窗口上部的Run Connection Automation,选择/mig_7series_1/sys_rst。&&& 连接/mig_7series_1/ui_clk到processing_system7_1/M_AXI_GP0_ACLK&&& 连接/mig_7series_1/aresetn到/proc_sys_rest/peripheral_aresetn[0:0]&&& 单击窗口上部的Run Block Automation,选择processing_system7_1&&& 单击/mig_7series_1/SYS_CLK前面的加号,展开这个接口。&&& 选中/mig_7series_1/sys_clk_p,单击右键,选择Create Port。在弹出的窗口里面更改Type为Clock,填写Frequency(MHz)为200。&&& 对/mig_7series_1/sys_clk_n执行同样的操作。&&& 选中/mig_7series_1/DDR3接口,单击右键,选择Make External&&& 单击Diagram Tab页左边最下面的Regenerate Layout按钮,由工具自动重新排布。生成的结果如下。是不是感觉非常漂亮?Step 5: 创建约束&&& 命名为system,将以下内容拷贝到约束文件中:&&&&&&& set_property LOC G9 [ get_ports sys_clk_n]&&&&&&& set_property IOSTANDARD DIFF_SSTL15 [ get_ports sys_clk_n]&&&&&&& set_property LOC H9 [ get_ports sys_clk_p]&&&&&&& set_property IOSTANDARD DIFF_SSTL15 [ get_ports sys_clk_p]&&&&&&& set_property LOC A8 [ get_ports reset]&&&&&&& set_property IOSTANDARD LVCMOS15 [ get_ports reset]&&&&&&& # additional constraints&&&&&&& #&&&&&&& create_clock -name sys_clk_pin -period "5.0" [get_ports "sys_clk_p"]&Step 7:设计验证&&&&& &在Block Design窗口里面,在zynq.bd上面单击右键,选择Generate Output Products,然后再单击右键,选择Create HDL Wrapper。&&&& 在左面的Flow Navigator窗口,单击Generate Bitstream。&&&& 在我的计算机上,大约20分钟后,bit文件生成。&&&& 然后在Vivado中,单击File-&Export-&Export Hardware for SDK,选中Launch SDK。&&&& 在SDK里面,可以用模板“Memory Tests”创建一个工程,测试确认MIG工作正常。&以此为基础,开发者可以灵活的调整MIG的AXI端口和Memory端口的工作频率,完成贴合自己应用的嵌入式设计。&==END==附件:&
对本篇资讯内容的质量打分:
当前平均分:-0.12 (153次打分)
【已经有191人表态】
[感动最多的]
[路过最多的]
[高兴最多的]
[难过最多的]
[搞笑最多的]
[愤怒最多的]
[无聊最多的]
[同情最多的]->【Xilinx技术小组】
操作环境:ubuntu10.04lts X64_64bit,PlanAhead/XPS14.1
参考资料:ZedBoard_HW_UG_v1_1,
ZedBoard原理图,
Zynq-700 EPP CTT
MT41K128M16HA-15E datasheet
建立完PSbase system后,可以配置了,下面开始DDR3的设置,在XPS下操作。
在Zynq的tab下点击“memeryinterface”(图1中红圈标识的模块),出现PS7 DDR Configuration 窗口,如图2所示。
图1,Zynq选项卡
图2,PS7 DDR Configuration 窗口
因为ZEDboard板卡上使用DDR3作为外部存储器,所以“Enable DDR Controller”要选上。然后就是“DDR ControllerConfiguration”中的参数选择了:
Memory Type:ZEDboard使用的是DDR3
Memory Part:使用的DDR3芯片型号为MT41J128M16HA-15E,这来源于原理图。在ZedBoard 的硬件用户手册上说使用了MT41K128M16HA-15E型号的DDR3颗粒,与原理图有所不同,其实Micron的这2种颗粒都是DDR3的,不过MT41J仅是1.5V的,而MT41K是可以使用1.35V电压的,当然也兼容1.5V。
Effective DRAM Bus With:ZedBoard使用了2片MT41J128M16HA-15E,单片总线宽度为16bit,故此处选择32bit。
Operating Freq(MHZ) :接口时钟,根据ZedBoard的硬件用户手册,为533MHz,实际填写的是533.333313MHz,这是由于PLL分频不能正好分出整数值。该DDR3型号后面的-15E说明该芯片最大标准数率为1333Mbps,因此最大的接口频率就是667MHz。
Operating Temperature:DDR3器件的工作温度,默认就是0-85摄氏度,不用改了
在Traning/Board Detail栏中,将Write level 、Read gate、Read data 3个选项打钩,根据硬件用户手册的说明,这可以让DDR3性能处于最佳状态。
在DQS to Clock Delay(ns)和Board Delay(ns)中,要填上以下数值:
这是为了补偿DDR3器件本身以及PCB布线的偏差而设的,具体的计算原理可以参考xilinx的AR46778,在官方上搜索即可找到。请问4层板能实现zynq+ddr3吗? - Protel|AD|DXP论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
Hot [直播]
请问4层板能实现zynq+ddr3吗?
22:50:42  
想diy一个小玩意,考虑到成本问题,只使用4层板用的主要芯片就两个
1.Xilinx ZYNQ XC7Z010-1CLG225 (15 * 15 0.8mm BGA)
2.16bit DDR3 1片
请问4层板能实现吗?
23:18:02  
PCB在线计价下单
板子大小:
板子数量:
PCB 在线计价
225的BGA与DDR3,4层板很困难,就算你用4层板布通了,由于 DDR3的速度,你的板子有很大可能会出现各种问题的。
尤其是DDR3部分的布线规则,要有足够的间距。4层的话是做不到的。是布不下这么多线的。
这个最少要用6层的。要有完整的电源平面。
20:24:19  
225的BGA与DDR3,4层板很困难,就算你用4层板布通了,由于 DDR3的速度,你的板子有很大可能会出现各种问题的。
尤其是DDR3部分的布线规则,要有足够的间距。4层的话是做不到的。是布不下这么多线的。
这个最少要用6层的。要有完整的电源平面。 ...
坛友好 请教一下对于多层线路板有什么快速的方法能检测出层与层之间的漏电电流呀& & 在实际维修过程当中有时会遇到这种情况&&还望赐教
12个问题&&&&&&&&10168个浏览
21个问题&&&&&&&&21785个浏览
34个问题&&&&&&&&8334个浏览
Powered by

我要回帖

更多关于 zynq ddr3 电路设计 的文章

 

随机推荐