《UltraFast 嵌入式设计方法指南》(2)——硬件级

作者:高视

本次接着看下《UltraFast 嵌入式设计方法指南》中关于硬件设计方面的内容,主要分3部分:硬件设计需要考虑的事项、设计流程及个人总结。

1. 硬件设计考虑事项
硬件设计需要考虑的部分主要有:首先当然是PL部分的配置启动,接着是存储接口及外设,IP模块,PL时钟及数据流接口,各种高速接口管理及AXI4总线接口等,如下图所示,下面只摘取PL部分的配置启动、存储接口、外设、IP模块和PL时钟简略介绍,其它详细内容请查看对应文档。

配置及启动:
我们知道,SRAM架构的FPGA启动时都是通过外部加载配置数据来完成,Flash架构的Actel FPGA除外,同样PL的启动也是通过加载外部数据来完成,而Zynq不仅包括PL,还包含PS,所以启动时先启动PS,再通过PS来配置PL启动整个流程,也就是说Zynq的启动既包含常用的FPGA启动,还包含ARM的启动流程。典型的启动流程如下:

首先启动当然是BootROM,BootROM包含一个上电复位后执行的代码,并且代码通过外部静态存储读取 FSBL。FSBL负责:利用XPS提供的PS配置数据进行初始化。将比特流(bitstream)下载到PL。将第二阶段引导程序(SSBL)或者是“裸奔”应用代码加载到内存。开始执行SSBL或是“裸奔”应用程序,也就是后面的OS及APPLICATION阶段。

另外需要关注的就是启动器件选择,启动器件和ARM的启动差不多,主要包括:可就地执行的四通道 SPI 模式、NAND 闪存、可就地执行的 NOR 闪存模式、SD 存储卡、JTAG等,至于具体配置可查阅对应UG585中的“启动和配置”章节内容。

存储接口:
存储接口有DDR、QSPI和静态存储控制器接口。
其中,DDR 储存器控制器包含三个主要模块:一个 AXI 储存器接口 (DDRI),一个核心控制器与事务调度器 (DDRC),以及数字 PHY (DDRP) 控制器。有关每个模块和其他控制器的详情,请参阅:《Zynq-7000 All Programmable SoC 技术参考手册》 (UG585)。对于某些 Zynq-7000 AP SoC 器件的最高速度等级,支持的最大总线时钟为 DDR3 模式 666 2/3MHz。对于其它所有速度等级,支持的最大总线时钟为 DDR3模式 533 MHz。理论上的最大总线比特率是:Data transfer rate = 666 2/3 MHz * 2 bits (for double data rate) = 1333 Mb/s per data IO,使用 32 位的最大总线宽度时,所述最大总线带宽为 42.6 Gb/s,或 5.3 GB /s。

PS QSPI 闪存控制器使用 QSPI 接口与外部串行闪存进行通信。储存器闪存单元平行排列,有时被称为 NOR 闪存。而这种配置的密度较小,并且具有比 NAND 闪存更小储存器容量,允许在单字节阵列中的任何地方进行读取。对于读取操作,它与标准地址映射储存器行为类似,非常适合代码存储。此外,它支持就地执行 (XIP) 功能,CPU 可以直接执行QSPI 代码,而无需先读取代码到 DDR 或 OCM。QSPI 可以通过 U-Boot、Linux、iMPACT 以及 SDK 进行编程。

静态储存器控制器有两个接口模式:NAND 闪速接口模式和并行端口储存器接口模式。NAND 闪存接口模式支持 NAND 闪存,而并口接口模式支持 NOR 闪存和同步 SRAM。因为 QSPI 和 NOR 闪存都使用基于 NOR 的存储单元,又因为在线性模式下 QSPI 被限制于 16Mb,容量成为了选择 NOR 闪存而非 QSPI 的差异化因素。然而,因为静态储存器控制器限制的地址行的数量为 26 位,它支持的最大 NOR 闪存仅为 64MB。16MB QSPI 限制(BootROM 读取数据不得超过 16MB)仅适用启动。在 BootROM 加载 FSBL 到 OCM 或 DDR 储存器之后,在闪存器件页面寄存器的支持下,QSPI 控制器切换到 I/O 模式并可访问高达 128MB 的储存器。因此,与 NOR 闪存控制器支持 64MB 器件(40 引脚情况下)的能力的相比,QSPI 支持 128MB 器件(仅使用 8 引脚)使得 QSPI 超过 NOR 闪存,成为优先解决方案。

这里介绍了ZYNQ中常用存储器接口,不仅对使用ZYNQ非常有用,还对以后其它项目中选择存储接口有很大的参考价值。

外设:
ZYNQ的外设主要有2部分:PS外设和PL外设。PS外设主要是一些低速通用固定的外设:USB、I2C、UART、SPI、SD等,通用型强;而PL外设则是一些已有IP或者自定义IP外设:DMA、自定义串口等,灵活性强。

一个PS+PL外设的例子:

上图中的例子:您必须使能 GEM0 的 MIO 连接和 GEM1 的 EMIO 连接。使能 GEM1 的 EMIO 将发送和接收的 GMII 信号送达 PS 的 IP 顶层实例。用户必须在 IP 集成器中例化赛灵思 1000BASE-X IP 核,并将其连接到 GEM1 EMIO 端口。您可以使用 Vivado Design Suite 设计实现流程来生成码流。如需了解更多信息,请参阅:《Zynq-7000 AP SoC 中通过 PL 以太网实现 PS 与 PL 以太网性能和巨型帧支持》 (XAPP1082) 。

IP模块:
IP 模块主要分两大类:
• 软 IP 模块:您可以在 FPGA 结构中实现这些模块,使用 RT L或更高级别的说明。它们更适用于数字核,因为硬件描述语言 (HDL) 与进程无关,可以综合到门级。 HDL 具有灵活性、可移植性和可复用性优势,但是具有不能保证时序或功耗特性的缺点。
• PS IP 模块:这些模块具有固定的布局并且针对特定应用和进程进行了优化。它们的主要优点是具有可预测的性能,但是需要着额外的工作和成本投入,而且缺乏便携性,这可能大大地限制了其应用范围。 PS IP 模块通常通过了预审,这意味着供应商已经对芯片进行了测试。这大大增加了其正确性的保障。

当你用ZYNQ开发时,你会发现硬件设计时的IP开发贯穿始终(包括调用IP核自定义IP),一个IP模块的举例如下:


PL时钟:
PL时钟有四种可用时钟源:
• 来自 PS 的时钟 (FCLK):PS输入到PL的时钟FCLK;
• 从 GT 恢复时钟:GT 收发器的接收器时钟数据恢复 (CDR) 电路从输入数据流中提取时钟和数据;
• 外部时钟源:外部IO输入单端或差分时钟;
• 由 MMCM 生成的时钟:时钟管理模块分倍频得到的时钟。




2. 硬件设计流程
硬件设计流程的部分主要是IP的创建、维护集成模块化等,简单说就是如何将硬件设计模块化来提高系统的设计效率和性能,这些IP模块既包括用开发工具生成的IP,也包括自定义封装的IP,最终都是通过总线互联。这些具体设计流程的东西就不一一讲解,详细内容请查看对应文档。

3. 总结
《UltraFast 嵌入式设计方法指南》中硬件设计部分内容涉及PS+PL系统的考虑各个部分和细节,同时我们不难发现:ZYNQ设计中特别注重模块化复用的IP设计思想,整个硬件设计流程都是围绕这个展开,我们常听说软件设计中的模块化编程,其实硬件设计中也可以模块化互联,硬软件思维不同但思想可以借用,至少ZYNQ中的IP模块就是基于AXI4总线的模块化互联,这大大方便了硬件设计开发和维护。

文章转载自:FPGA2嵌入式

1 条评论

(1楼)666666

房东的猫 在 星期日, 02/04/2018 - 21:02 发表。

666666666