"30年---我与赛灵思FPGA的故事”—— ZYNQ-7000使用总结(9) ——PS和PL的通信

PS与PL通信概述

传统的SoPC设计无外乎两种方式:(1)在FPGA上设计一个软核,比如Altera的NIOSII,Xilinx的MicroBlaze等(2)将一个独立的FPGA和处理器芯片(比如ARM等)联合使用。第一种方式的局限在于软核的性能远远不及硬核,而且会占用大量的FPGA资源;第二种方式的局限在于如果处理器核FPGA之间需要大量数据通信的时候,两者之间的带宽往往就会成为瓶颈。而ZYNQ-7000芯片的出现,解决了这两方面的问题:一方面FPGA和ARM做在同一款芯片里面,使用的是硬核处理器,处理能力相比软核大大提升;另一方面,做在同一个芯片内,通过高速总线,解决了FPGA和ARM通信瓶颈的问题。前面的一系列文章其实已经对两者之间的通信有所涉及,但因为最近发现有很多人想对PS和PL部分的通信多了解一些,所以我决定写一篇文章,介绍一下。介绍的宗旨是全而不详,因为每一种方式都在Xilinx官方有很详细的文档,我就不做文字搬家了,只写出所有的通信方式,每一种大家可以去芯片手册或者其他相关文档查找。

其实,PS和PL部分的通信,从ZYNQ-7000的芯片结构图上面都可以找到:

PS和PL部分的通信,从ZYNQ-7000的芯片结构图上面都可以找到

我们看上面这个图,其实横跨PS与PL两部分的都属于PS与PL的通信,只是有的带宽大,有的小。图中我用红颜色的框框出来了10个地方,这也是PS与PL的几乎所有的通信接口,还有一两个图上没有体现出来,后面会说明。下面我们分组介绍一下。

方式一:总线级别的接口

前面的文章《ZYNQ-7000使用总结(6)——AXI接口简述》已经简单介绍过AXI总线,而PL与PL部分通信所使用的总线就是AXI总线。从图中可以看出总共有4种9条:2条32位Master总线接口,2条32位的Slave总线接口,4条32位/64位可配置的高性能Slave接口,1条64位的Slave ACP接口。下面我们分别做一下介绍。

32b GP AXI Master/Slave Ports
首先我们可以看到这两种总线都是通过Central Interconnect连接到IO Peripheral(IOP)那边去的;其次,我们需要知道里面的GP就是General Purpose的意思;最后,这两类线都是32位的。结合这些,我们就可以了解到这两类线都是AXI中速度相对比较低的总线,主要用于PL与PS中的IOP的通信。

High Performance AXI 32b/64b Slave Ports
这个总线的信息基本在名字里面体现的差不多了:高性能、32位/64位可配置、Slave是它最主要的三个特点。然后我们来看一看这高性能的线到底是干嘛的。首先我们看一下它的结构图:

我们可以看到PL是通过4个FIFO控制器连接到了Memory Interconnect,其中两条连到了DDR控制器,一条连接到到了一个双端口的OCM Interconnect。而我们知道DDR和OCM都属于高速设备,所以这也就是为什么这里要用这种高性能总线的原因。所以,这个总线主要是用于大吞吐量数据的传输,而且用户还可以做一定的配置。而且该总线(每条)还具有如下一些特性:
. PL与PS部分内存传输延迟低
. 有1KB 深度的FIFO
. 32位/64位可配置
. 支持高达32字(word)长的读缓冲
. 在读的时候可是释放对数据的控制以更加高效的利用AXI Interconnect带宽
. 支持多个对DDR和OCM的控制命令

64b AXI ACP Slave Port
这个也是64位的,和前面的相比,多了一个ACP,而这个ACP的全称是Accelerator Coherency Port,一般翻译为“加速一致性接口”。我们从图中可以看到,它是连接到了CPU的Snoop Control Unit(SCU),这个一般翻译为侦测控制单元。他的作用就是保证两个处理器核对共享的缓存操作的数据保持一致性(好像有点拗口),因为我们看到两个A9核共享的是同一个二级缓存,那么可能就会出现一个改变了缓存内容,另外一个不知道的情况,而这个SCU就是“监视”这个共享区域的,一旦它发生了变化,便会通知另外一个处理器核,通过这样的机制,便实现了前面所谓的“一致性”。所以,这个接口也是高速的,不过它和前面的总线相比,还会多一个ACP的功能。

好了,总线级别的接口就介绍完了,总共四种九条。

方式二:EMIO
EMIO是ZYNQ-7000中的一个新概念,全称是Extendable MIO,即可扩展的MIO。而MIO全称Multiplexed IO,也就是复用IO。我们从Xilinx的一些资料可以得知MIO的数量有限,而且已经将其地址分配给了PS部分已有的一些外设资源,这个分配工作由软件去做。而这个EMIO就是用来对有限的MIO做扩展的。通过它我们可以从PL部分访问PS部分还没有映射地址的外设。下面是一张图:

所以,除了32b AXI GP Master/Slave以外,EMIO也是我们从PL部分访问PS部分IOP的一个途径,不过相比总线,EMIO的速度会慢一点,但是它的灵活性却会更高一些。更多关于MIO和EMIO的资料可参考UG585文档以及其他相关文档去了解。

方式三:其他
这里把剩下的放在一起做一下很简单的介绍。主要原因是前面的两种方式主要在PS和PL的通信中起数据传输作用,而且一般量会比较大。而其他的就主要就是一些信号,功能为主,数据传输只是实现功能的一个方式,一般量也比较小,比如像时钟呀,DMA之类的,不像前面的,主要就是做一个简单的数据传输。下面简单列举出来:

DMA、中断、事件信号
. 用于传输事件信号的处理器总线
. PL部分的外设IP传给PS部分中断控制器(GIC)信号线路
. 给PL部分使用的4通道DMA信号
. 异步触发信号

时钟和复位
. PS部分输出的4个时钟信号(供PL部分使用)
. PS部分输出的4个复位信号(供PL部分使用)

配置及其他信息
. 前面的文章已经讲过ZYNQ的PL部分也是由PS部分做的,所以PS与PL之间也会存在配置的一些通路
. 上面的图中还有XADC通信方式(XADC就是Xilinx的AD转换:Xilinx AD Converter)
. Config AES/SHA。这个是板子上的一些加密配置,AES和SHA都是目前国际上标准的加密/认证标准。
. 还有图中未画出的JTAG接口

总结
至此,Xilinx ZYNQ-7000的PS(Processing System,即ARM处理器部分)和PL(Programmable Logic,即FPGA部分)的通信就介绍完了,里面也对涉及的属于概念作了一下简单介绍。对于每种通信方式的细节没有做很深入的介绍,大家如果想了解可以去查找对应的文档。

  • 9
    点赞
  • 84
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Zynq-7000 是赛灵思(Xilinx)公司推出的一款高度集成的可编程 SoC(System-on-Chip)器件,结合了双核 ARM Cortex-A9 处理器、FPGA 等硬件资源,适用于各种嵌入式应用。下面是 Zynq-7000 的原理图主要部分: ![Zynq-7000原理图](https://img-blog.csdn.net/20180725110713346?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Rlc3QxOTk2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/80) 上图中的主要模块包括: 1. Cortex-A9 双核处理器模块:包括两个 Cortex-A9 内核,各自拥有独立的指令和数据缓存,可以通过 AXI 总线进行互连。 2. DDR3 SDRAM 控制器模块:用于连接 DDR3 SDRAM 存储器,提供高速的数据访问和存储能力。 3. 外设控制器模块:包括 USB、SDIO、SPI、UART 等外设控制器,用于连接外围设备,实现数据的输入输出。 4. FPGA 逻辑资源模块:包括 FPGA 的逻辑资源,用于实现各种自定义的逻辑功能。 5. 外部存储器接口模块:包括 PS(Processing System)侧的存储控制器和 PL(Programmable Logic)侧的存储控制器,用于连接各种外部存储器,如 NOR Flash、NAND Flash、SD 卡等。 6. 中断控制器模块:用于处理各种中断请求,实现系统的中断机制。 7. PS-PL 互连模块:用于连接 PSPL 之间的数据和控制信号,实现两者之间的数据交换和通信。 8. 时钟管理模块:用于产生各种系统时钟信号,提供时钟管理功能。 以上是 Zynq-7000 原理图主要部分的简要介绍,不同型号的 Zynq-7000 器件的具体原理图可能会有所不同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值