今天给大侠带来FPGA Xilinx Zynq 系列第二十篇,嵌入式系统和 FPGA之总线等相关内容,本篇内容目录简介如下:
9. 嵌入式系统和 FPGA
9.3 总线
9.3.1 系统与外设总线
9.3.2 总线主机和从机
9.3.3 总线仲裁
9.3.4 存储器访问
9.3.5 总线带宽
9.4 本章回顾
9.5 参考文献
本系列分享来源于《The Zynq Book》,Louise H. Crockett, Ross A. Elliot,Martin A. Enderwitz, Robert W. Stewart. L. H. Crockett, R. A. Elliot, M. A. Enderwitz and R. W. Stewart, The Zynq Book: Embedded Processing with the ARM Cortex-A9 on the Xilinx Zynq-7000 All Programmable SoC, First Edition, Strathclyde Academic Media, 2016。
嵌入式系统和 FPGA
9.3 总线
总线实现了处理器和其他处理器及外围设备之间的接口。处理器、存储控制器和外围设备通过标准总线接口连接到总线上。具体所使用的总线架构会具有具体的总线接口,不过基本上,一个总线包括地址、控制 (读 / 写请求和确认)及数据信号 [2]。图 9.7 给出了详细描述,其中高亮了三种主要的总线信号:
- 地址线将存储器地址或目标端口识别号传输给 I/O 设备。
- 控制线管理系统的控制和时序、同步操作和发送控制信号,比如中断请求和确认。
- 数据线负责数据的传输。
数据传输发生在一个总线周期内。
图 9.7: 总线由控制、地址和数据线组成
嵌入式系统中出现的所有协处理器都是通过处理器总线直接连接或紧密耦合到主处理器上的。在多处理器的系统中,每个处理器的子系统是通过系统总线连接的。
总线还带有控制总线访问的仲裁机制。并非所有连接的模块都可以请求总线访问,模块被分成总线主机和总线从机两类 [2]。
9.3.1 系统与外设总线
在较大型的嵌入式系统设计中,可能最好用多个总线来提供所有的处理器和外设之间的足够的通信带宽。在这样的系统中,两类主要的总线是系统总线和外设总线。
系统总线
在一个嵌入式系统设计中,系统总线是实现各种外设和处理器核心之间通信的主要方式。在较小的嵌入式系统设计中,系统总线可能是设计中唯一出现的总线。在较大的、多总线的设计中,系统总线会是连接存储器控制器和处理器,及任何高速设备之间具有最大带宽的总线。剩下的不需要这么高的处理器访问速度的外设和存储器控制器,会通过外设总线连接。
外设总线
为了把嵌入式系统设计分割成独立的领域,可以加上第二个总线,就是外设总线。有很多理由要这样做,比如让低速和高速设备之间有所区分,或是为一组外设核心之间的通信提供专门的带宽。这样就让一组外设之间能互相通信,而同时系统总线上的诸如处理器 - 存储器访问的通信能并行进行。
总线桥
为了让位于不同总线上的设备能互相通信,比如处理器(在系统总线上)请求外设核心 (外设总线上)的数据,就需要在两个总线之间的桥。桥连接两个总线,并传递两者之间的请求。在一个总线上,这个桥是作为总线主机挂着的,而在另一个总线上则是作为从机的。
9.3.2 总线主机和从机
在一个嵌入式系统中,连接到总线的模块可以分成两种不同的类型:
- 总线主机具有请求访问总线的能力,因此负责给出地址和控制信号来发起数据传输。它发起总线周期,而其他的总线模块则获得这个总线周期的类型。
- 总线从机不具有发起总线周期的能力,而只能监视总线活动。它要对地址和控制线上的信号做译码,而做了寻址后,就可以在总线上放置数据或接受总线上的数据。
9.3.3 总线仲裁
由于在一个嵌入式系统中,总线是在所有设备间共享的,在任一时刻,就需要决定哪个总线设备被允许使用总线。决定这个访问的方法叫做总线仲裁。如果同一个时刻有多个主机设备请求访问,就需要由总线仲裁器来决定哪个设备应该首先获得访问。
简而言之,如果总线的下一个周期还没有开始,那么具有最高优先级的主机(最小的分配编码)会优先获得总线的访问。较低优先级的主机(较大的分配编码)会被放入一个等待队列,在较高优先级的请求处理完成后会得到处理。
9.3.4 存储器访问
一个嵌入式系统中存储控制器的访问方式能极大地影响整体的性能。即便使用了非常高效的存储器类型和存储控制器,系统的性能也会遭受到糟糕的存储访问控制的影响。重要的是系统以能最大化存储带宽的方式来构造和访问,同时保持最少的资源需求。
可编程输入 / 输出 (I/O)
管理存储控制器和其他外设之间的数据移动的手段之一,是让所有的数据传输都通过处理器。这样的存储传输叫做可编程 I/O,它让系统能以最少的资源来处理存储传输。这个方法需要外设和处理器位于同一个总线上,处理器成为所有外设和存储器通信的中心点。如果外设和存储器之间的存储传输请求的数量很大,处理器就会花费大量时间来做存储传输,那么做其他计算的时间就少了 [2]。如果系统在可编程逻辑中实现大多数功能,那么可编程 I/O 是能用最少的资源 管理存储事务的有效方法。不过,如果处理器需要从事大量其他计算,其他的方法也许更好 [2]。
直接存储器访问 (DMA)
降低处理器负担的一种办法是用直接存储器访问 (Direct Memory Access, DMA)来做存储传输。用了这个方法,处理器向 DMA 控制器发出一个存储传输请求,然后 DMA 控制器将来做这个存储事务。这样当 DMA 控制器在做传输的时候,处理器就可以从事其他任务了。在这种情况下,DMA 控制器既是总线主机也是总线从机。
作为主机,DMA 控制器要和存储控制器通信,也会要请求总线仲裁。作为从机,DMA控制器回应从总线主机 (大多数时候就是处理器)而来的请求,建立起存储传输。为了发起传输事务,DMA 控制器必须得到以下数据 [2]:
- 源地址 — 数据将要被读出的地址。
- 目的地址 — 数据应该被写入的地址。
- 传输长度 — 应被传输的字节数。
图 9.8 提供了一个 DMA 储存传输的概览。
图 9.8: DMA 存储传输操作
参照图 9.8,DMA 存储传输的过程是:
1. 为了配置想要用 DMA 来传输数据到存储器的那个设备,处理器发出一个DMA命令然后禁止所有的 DMA 中断。
2. DMA 控制器把数据从外设传输到存储器,而让 CPU 腾出手来做其他计算。
3. 数据传输完成后,向 CPU 发出一个中断来通知它 DMA 传输可以关闭了。
9.3.5 总线带宽
总线带宽是总线上一定的单位时间内可以传输的总的数据量。总线带宽的值取决于两个因素:
- 总线数据宽度 — 这是总线同时传输数据的物理的线路的数量。32 位独立数据线的总线可以同时传输 32 位的数据。
- 总线频率 — 这是总线操作的速度。这指的是每秒总线可以发送 / 接收的数据位的数量,是以赫兹 (Hz)为单位的。
这些参数和总线带宽之间的关系如公式 (1) 所示:
Bus Bandwidth (Mbits/s) = Bus Width bits ( ) × Bus Frequency (MHz)
比如,一条 32 位宽的工作在 10MHz 的总线的总线带宽,也就是最大的吞吐率是:
Bus Bandwidth = = 32 bits 10 MHz × 320 Mbits/s (40 MBytes/s)
显然,连接到总线的外设越多,总线上所需的吞吐率就越高。因此,总线带宽 需要足够高,以避免系统出现总线饱和的问题。
9.4 本章回顾
本章我们介绍了嵌入式系统的概念,研究了一般嵌入式系统的架构。我们讨论 了嵌入式系统中处理器的角色,还有处理器的一些功能,谈到了比如处理器 cache和执行周期的问题。还介绍了协处理器的功能以及软件 / 硬件中断的使用。
嵌入式系统中各个部分之间的通信是依赖于所使用的总线系统的,本章讨论了 总线的功能,也介绍了对于多总线系统的需求,以及总线主机和从机设备之间的区别。还总结了总线仲裁和存储访问技术,并讨论了总线带宽的重要性。
9.5 参考文献
[1] D. Liu, “Introduction” in Embedded DSP Processor Design: Application Specific Instruction Set Processors, Morgan Kaufmann, 2008, pp 1 - 46.
[2] R. Sass and A. G. Schmidt, “Managing Bandwidth” in Embedded Systems Design with Platform FPGAs: Principles and Practices, 1st. Ed, Morgan Kaufmann, 2010, pp 295 - 346.
[3] R. Sass and A. G. Schmidt, “System Design” in Embedded Systems Design with Platform FPGAs: Principles and Practices, 1st. Ed, Morgan Kaufmann, 2010, pp 115 - 196.
第二十篇到此结束,下一篇将带来第二十一篇,开启第十章,Zynq 片上系统概述等相关内容。欢迎各位大侠一起交流学习,共同进步。
END
后续会持续更新,带来Vivado、 ISE、Quartus II 、candence等安装相关设计教程,学习资源、项目资源、好文推荐等,希望大侠持续关注。
大侠们,江湖偌大,继续闯荡,愿一切安好,有缘再见!