第3章总线结构及存储器接口 总线是把微处理器核与存储器、I/O端口以及外部设备相连接的信息通道,但总线并不仅仅指的是一束信号线,而应包含相应的通信协议和规则。由于嵌入式系统中所采用的微处理器芯片大多是高集成度的SoC系统级芯片,芯片内部除了有微处理器核外,还集成有许多片内存储器、I/O接口部件,因此,在微处理器芯片内部就需要高性能的总线,把这些部件连通起来,Zynq芯片内部即是如此。本章在介绍总线的分类后,主要介绍了Zynq芯片内部的片内总线(AMBA总线)、基于Zynq芯片引脚的板级总线及片外存储器的接口设计。 3.1总线的作用及分类 在嵌入式系统中,按照总线的使用场合不同,可以把总线分成片内总线、板级总线和系统级总线等几类总线。片内总线即微处理器芯片内部的总线,典型的如Arm公司提出的AMBA(Advanced Microcontroller Bus Architecture)总线。板级总线是指板卡中芯片与芯片之间,或者板卡与板卡之间的连接总线,有的书又称其为内总线,典型的如PC104总线、PCI总线等。但是,嵌入式系统由于受到应用条件的限制,特别是体积方面的限制,因此,在构建板级目标系统时,往往并未采用标准化的总线,而是以微处理器芯片引脚为基准,直接完成芯片与芯片引脚之间的连接。系统级总线是指系统与系统之间的连接总线,典型的如RS232总线(或RS485总线)、CAN总线和USB总线等。 以Zynq芯片为核心的嵌入式系统开发中,在构建硬件平台时所涉及的总线主要是片内总线和板级总线。板级总线与Zynq芯片的引脚有关(Zynq芯片的引脚介绍见2.1.3节),其必须具备以下几种基本的功能。 ① 提供地址信号、数据信号的传输通道。 ② 提供总线定时功能,即同步定时、异步定时或半同步定时。大多数微处理器总线中这3种定时方式都提供。 ③ 提供中断机制的仲裁信号通道,即I/O端口或设备能通过微处理器总线中的某些信号线向微处理器核提出中断请求,并且微处理器核可通过信号线向I/O端口或设备应答。 下面分别对3种总线的作用进行简要介绍。 3.1.1片内总线 片内总线是SOPC类型芯片的内部总线,它把集成在芯片内部的各功能模块连接起来,用于完成芯片内部功能模块之间的数据、地址、控制等信号的交互。Arm公司提出的片内总线标准AMBA是SOPC类型芯片广泛使用的总线标准,用于设计高性能的嵌入式微处理器,被众多芯片厂商所采用,Xilinx公司的Zynq芯片内部即采用了AMBA总线标准。 以AMBA总线架构所设计的SOPC芯片,其内部功能模块的连接结构如图31所示。 图31典型的基于AMBA总线的连接结构 从图31中可以了解到,SOPC芯片内部的微处理器核、DMA控制器、片内存储器以及其他的高性能系统部件均通过AHB(AMBA Highperformance Bus)总线连接在一起,较低速度的I/O部件,如UART、Timer、GPIO、看门狗部件等均通过APB(Advanced Peripheral Bus)总线连接在一起,并通过一个总线桥与AHB总线连通。 APB总线主要用于连接芯片内部低速率的I/O功能模块,具有低功耗、单总线主控器、非流水线结构的特点,所有信号仅与时钟上升沿相关,每个信息的传送时间至少需要两个时钟周期。 AHB总线主要用于连接芯片内部高速率的功能模块,解决高性能可同步的设计要求。其总线特点是单时钟周期边沿操作、支持字和字节传输、支持突发传输、支持多总线主控器、非三态方式等。 AMBA总线规范的具体细节将在3.2节中介绍。 3.1.2板级总线 板级总线有时又称为内总线。在某些嵌入式系统的应用场合中,如某些工业设备的控制器中,由于嵌入式系统通常由若干块板卡构造而成,因此,板卡与板卡之间就要设计信号连接的通道,即设计板级总线(或称内总线)来连通各个板卡。为了方便工业化的生产,便于不同厂家生产的板卡能融合在一个系统中,国际上的一些标准化组织推出了一些总线标准,其中在嵌入式系统中使用的内总线标准主要有PC104总线、STD总线和PCI总线等。当然,由于有些嵌入式系统受到应用条件(体积方面)的限制,因此,在构建板级目标系统时,往往并未采用标准化的总线,而是以微处理器芯片引脚为基准,直接完成芯片与芯片引脚之间的连接。 下面将对嵌入式系统中3种主要的板级总线标准进行介绍,而基于Zynq芯片引脚的板级总线(非标准化的总线)将在3.3.2节介绍。 1. PC104总线 PC104总线是专门为控制领域的应用而定义的嵌入式系统总线,它支持采用堆栈结构的总线形式,通过PC104总线可以把各板卡叠加在一起,从而构建小型、高可靠性的嵌入式系统,如图32所示。PC104总线是嵌入式系统中应用得比较多的内总线标准之一。 图32基于PC104的嵌入式系统 1992年由RTD公司和AMPRO公司联合12家从事嵌入式系统生产的厂商组建了国际PC104协会,并于2003年推出了PC104总线标准,该总线标准得到了众多其他嵌入式系统厂商的支持。PC104总线的特点有以下几个。 ① 板卡尺寸小型化,仅为90mm×96mm。 ② 堆栈式连接,使得连接可靠,抗震能力强,并有效地减少了系统占用空间。 ③ 模块可自由扩展,运行设计者互换及配置各种功能板卡。 2. STD总线 STD总线也是在工业控制领域被使用的一种嵌入式系统板级总线(内总线)标准,如图33所示。早在1987年,STD总线就被国际标准化组织批准为国际标准IEEE961。到1989年又推出了兼容32位微处理器的STD32总线标准。STD总线的特点有以下几个。 图33基于STD总线的嵌入式系统 ① 采用无源母板结构,其他功能板卡(包括微处理器的板)垂直插入母板。 ② 支持多处理器系统。 ③ 易于扩展,维护性好。 ④ 有6根逻辑电源线,4根辅助电源线,可以做到数/模电源隔离,抗干扰性能好。 ⑤ 具有丰富的OEM板卡。 3. PCI总线 PCI(Peripheral Component Interconnect)主要是通用个人计算机(PC)中被广泛使用的板级总线(内总线)标准。在有些嵌入式系统中,也会采用PCI总线作为其板级总线,如图34所示。PCI总线的特点有以下几个。 图34基于PCI总线的嵌入式系统 ① 具有良好的即插即用特性,即板卡插入总线槽时不会产生硬件资源上的冲突。 ② 数据传送高速性,具有非常高的数据传输效率。 ③ 具有自动配置功能,当PCI板卡插入总线系统时,系统将会根据读到的该卡有关信息,结合系统中的实际情况,为该板卡分配地址、中断请求信号以及某些定时信号。 ④ 支持地址线和数据线公用一组物理线路的多路复用技术。 ⑤ 具有良好的可扩展性能。 3.1.3系统级总线 系统级总线又称为外总线,它通常用于系统与系统,或者系统与智能模块之间的连接,其示意图如图35所示。系统级总线中,数据的传送通常采用串行方式,而片内总线和板级总线中,数据的传送通常是并行方式。 图35系统级总线的使用示意图 系统级总线的标准有许多,不同行业内,其采用的系统级总线标准会有所不同。下面按照使用的场合,分成以下3类来简要介绍系统级总线标准,第4章将选取一些系统级总线标准进行详细介绍。 1. 异步串行总线 异步串行通常是指数据传送时所需要的同步时钟,在发送方和接收方可以是不同的时钟源,但其时钟频率的标称值应该相同。异步串行通信简单、灵活,对同步时钟的要求不高,其在数据传输时,数据比特流不需要保持连续,而是以较短的二进制位数为一帧,按照一定的格式要求传输。但其传输效率较低,因此常用于传输信息量不大的场合。 异步串行总线标准有许多种,如RS232总线、RS422总线和RS485总线等。其中,RS232总线标准是在工业领域最基础的,也最常用的一种系统级总线标准,在4.2节中将详细对其进行介绍。 2. 系统与智能模块间的总线 在嵌入式系统的硬件平台构建时,除了要设计微处理器芯片与存储器芯片等功能芯片的连接电路外,有时还要设计与某些功能的模块连接电路,如摄像头模块、4G通信模块、GPS模块等。微处理器芯片与其他芯片的连接通常用板级总线,而与这些智能模块之间连接采用系统级总线,这类总线标准主要有: I2C总线、SPI总线、SD总线等,这些总线中的数据传送通常采用同步串行方式。4.3节和4.4节将详细介绍I2C总线、SPI总线。 3. 系统与系统间的总线 系统与系统之间的连接总线,常用的总线标准有CAN总线、工业以太网和USB总线等。CAN总线和工业以太网主要应用于企业生产设备之间的互联,USB总线主要应用于嵌入式系统与外部智能设备之间的互联。 工业生产设备的控制是嵌入式系统中非常重要的应用领域。因此,了解并掌握工业现场环境下的系统级总线标准是非常必要的。在8.3节和8.4节中将详细介绍CAN总线、工业以太网总线。 3.2AMBA总线规范 AMBA(Advanced Microcontroller Bus Architecture)是一种开放的,用于高性能嵌入式系统中的片内总线规范,它在Zynq系列的全可编程芯片中被广泛采用,同时也广泛地在其他类型的SoC芯片中采用。 1996年Arm公司推出了AMBA总线规范的第一个版本; 1999年推出了总线规范的2.0版本,该版本的规范中比前一个版本增加了AHB(AMBA Highperformance Bus)总线规范; 2003年推出了总线规范的3.0版本,它又增加了高级可扩展接口AXI(Advanced Extensible Interface),用于更高性能的互联; 2009年与Xilinx公司合作,对AXI规范进行了修订,定义了基于FPGA的、高性能系统的AXI 4规范。AMBA总线规范的主要内容包含APB、AHB、AXI等部分的总线规范。 ① APB是用于SoC芯片内较低性能的I/O部件或模块的连接,一般作为Arm系列微处理器芯片中二级总线用。 ② AHB是用于SoC芯片内高性能系统模块连接的总线,支持突发模式数据传输和事务处理。 ③ AXI是用于SoC芯片内更高性能系统模块连接的总线,是单向、多通道传输总线,支持多项数据交互,支持并行执行突发模式。 3.2.1APB总线规范 APB总线是AMBA总线结构之一,是用来连接低速I/O部件或I/O端口的信息通道。它不支持多个总线主控器,APB总线结构中只有一个总线主控器,就是AHB到APB的总线桥(下面简称APB桥),APB桥同时又是AHB总线结构中的从模块,如图31所示。APB桥的主要功能是实现AHB总线规范到APB总线规范的转换,它接收并锁存AHB总线上发来的地址、数据和控制信号,并提供二级地址译码来产生选择信号,以便选中连接在APB总线上的某个I/O部件,同时向其转发数据信号。 APB总线的特性是: 总线结构上不需要总线仲裁器,采用两个时钟周期完成传输,不需要等待周期,也不需要接收方的应答。总线中的控制逻辑简单,共有4个控制信号,即PSEL、PENABLE、PCLK、PWRITE,简介如下。 ① PSEL信号的作用是通知APB总线上的从模块,有传输要开始,其目的是用来选中低速的I/O部件,使其做好传输数据的准备,即具有地址锁存功能,PSEL信号为高时有效,使APB总线的地址信号PADDR被锁存。 ② PENABLE信号的作用是使能传输,即使得APB总线上的传输正式开始。其作用是使参与传输的双方同步,PENABLE信号为高时有效。 ③ PCLK信号是APB总线系统的时钟信号,AHB总线系统中采用的是HCLK时钟信号。 图36APB传输状态图 ④ PWRITE信号是读写命令信号,用来确定APB总线上数据是输入还是输出。 APB总线上的数据传输,其状态图如图36所示。从图中可以看出APB总线的具体数据传输原理。 ① APB总线的初始状态为“空闲状态”(即IDLE状态),此时没有传输操作,也没有任何I/O部件被选中。 ② 当APB桥要发起传输时,PSEL信号置高(PSEL=1),PENABLE信号置低(PENABLE=0),APB总线系统进入“准备状态”(即SETUP状态),且只在此状态停留一个时钟周期,当时钟PCLK的下一个上升沿到来时,系统进入“使能状态”(即ENABLE状态)。 ③ APB总线系统进入“使能状态”时,之前在“准备状态”时的PADDR地址信号、PSEL信号、PWRITE信号等将维持不变,而PENABLE信号将置高。总线上的数据传输也将只维持一个时钟周期即完成。传输完成后,若没有后续的数据要传输,即进入“空闲状态”; 否则进入“准备状态”。 3.2.2AHB总线规范 AHB总线系统主要由3个部分组成,即主模块(Master)、从模块(Slave)和基础结构(Infrastructure),其结构示意图如图37所示。主模块是总线的主控器,整个AHB总线上的信息传输均是由主模块发起。从模块是总线的受控器,它们响应总线主模块发起的总线传输,根据总线主模块发出的控制信号,完成相应的数据读写操作。基础结构则是由总线仲裁器、译码器、多路选择器等模块组成。 图37AHB总线结构示意图 如图37所示,一个AHB总线结构中,可以支持多个总线主控器(最多16个主控器)和多个总线受控器(受控器个数不限)。由于有多个总线主控器,因此,结构中需要一个总线仲裁器,以便当多个主控器同时需要访问总线时,由总线仲裁器根据优先级来确定哪个主控器可以访问总线,并且确保不允许被中断的连续数据传输时的数据传输安全。 AHB总线在SoC芯片内部将微处理器核(CPU)、片内RAM、外部DDR芯片接口、DMA总线主控器等连接起来,并通过APB桥可以和APB总线系统连接,是SoC芯片内部信息通道的骨架。AHB总线主要由3类信号线组成,即地址总线(HADDR)、写数据总线(HWDATA)、读数据总线(HRDATA),这3类信号线是相互独立的、互不干扰的,如图37所示。在某个时刻,这3类总线只能由一个总线主控器或受控器来独占。选择哪一个总线主控器或受控器来独占总线是由总线仲裁器来决定的,它控制多路选择器来选择获得控制权的那个模块发送地址和数据。 1. AHB总线的信号线 AHB总线中除了有地址信号线、写数据信号线、读数据信号线外,还有一些用于控制数据传输的控制信号线。AHB总线的信号线如表31所示。 表31AHB总线信号线列表 信号线名称信号发起者信 号 有 效信 号 功 能 HADDR[31:0]总线主控器32位地址总线 HWDATA[31:0]总线主控器32位写数据总线 HRDATA[31:0]总线受控器32位读数据总线 HCLK时钟源电路上升沿总线的时钟信号 HRESETn复位电路低电平系统复位信号 续表 信号线名称信号发起者信 号 有 效信 号 功 能 HWRITE总线主控器高电平时为写,低电平时为读传输方向控制信号 HTRANS[1:0]总线主控器AHB总线的传输类型,有4种类型 HSIZE[2:0]总线主控器一次传输时的字节大小,最大可达1024位 HBURST[2:0]总线主控器AHB总线的突发传输类型,有8种类型 HSELx译码器总线受控器的选择信号 HREAD总线受控器低电平总线传输延时请求。当总线受控器需要数据传输延时若干周期时,应将该信号拉成低电平 HRESP[1:0]总线受控器总线受控器发给主控器的应答信号 HPROT[3:0]总线主控器保护控制信号 HBUSREQx总线主控器高电平总线主控器的总线请求信号,最多支持16个 HLOCKx总线主控器总线主控器的总线锁定请求信号 HGRANTx总线仲裁器高电平总线仲裁器发出的总线使用授权信号。当HREAD和HGRANTx同时为高电平时有效 HMASTER[3:0]总线仲裁器总线仲裁器给每个总线主控器分配的ID号 HMASTLOCK总线仲裁器当前总线主控器正在执行总线锁定操作的指示信号 HSPLITx总线受控器总线受控器(具有SPLIT操作)提供的仲裁控制信号 2. AHB总线的传输 AHB总线传输开始前,必须有某个总线主控器向总线仲裁器提出总线请求信号HBUSREQx,并获得总线仲裁器的授权信号HGRANTx。被授权的总线主控器发出地址信号(HADDR[31:0])和控制信号启动AHB总线传输。控制信号包括数据传输方向(即写数据HWDATA[31:0]还是读数据HRDATA[31:0])、数据传输宽度HSIZE[2:0]以及是否是突发传输。 写数据总线是用于总线主控器发数据给总线受控器,数据传输方向是从主控器到受控器。读数据总线是用于总线主控器接收总线受控器发出的数据,数据传输方向是从受控器到主控器。图38是一个简单的数据写/读时序。 图38一个简单的AHB写/读时序(没有插入等待周期) 从图38中可以看到,一个数据传输(数据写/读)由两个阶段的操作完成,一个阶段是在一个HCLK周期内完成地址及控制信号的发送; 另一个阶段是在一个HCLK周期(也可以是多个HCLK周期)内完成数据传输。若需要多个HCLK周期来完成数据传输时,总线受控器必须使HREADY信号线为低电平,即要求在数据传输时插入等待周期。 从图38中还可以看到,在HCLK时钟信号的上升沿,总线主控器向总线上发送地址和控制信号,在下一个HCLK时钟信号的上升沿,总线受控器获取地址及控制信号,然后使HREADY信号线为高电平,并发送对应的响应信号。在第二个HCLK时钟周期内,完成数据的传输。数据的传输分成两种情况: 一种是写操作,总线主控器在第二个HCLK时钟信号的上升沿向总线上发送数据; 另一种是读操作,总线受控器将HREADY信号线拉高后,向总线上传输数据。在第三个HCLK时钟信号的上升沿,总线主控器采集到HREADY信号线为高电平,一次传输完成。 实际上,AHB总线允许更高性能的传输,在一个HCLK时钟周期内可以同时传输一个地址和一个数据,即在传输一个地址信号的同时传输前一个地址对应的数据信号,这也体现了AHB总线的流水线特征。图39是一个典型的基于AHB总线流水的数据传输时序图。 图39一个典型的AHB总线流水数据传输时序图 在图39中,第二个HCLK时钟开始,地址信号与数据信号同时传输,体现了总线流水特征,并且在第二个数据传输时,总线受控器将HREADY信号线拉低,发出了总线传输延时请求,这时的传输延时了一个HCLK时钟周期,传输结束后,再把HREADY信号线拉高。 传输中的控制信号包括传输方向(HWRITE)、保护控制(HPROT)和传输大小(HSIZE),它们与地址信号的时序是相同的。HWRITE为高电平时,表示传输方向为写操作,即总线主控器通过写数据线HWDATA[31:0]向总线受控器发数据; HWRITE为低电平时,表示传输方向为读操作,即总线受控器通过读数据线HRDATA[31:0]向总线主控器发数据。HPROT提供总线保护的附加信息,若没有必要,请不要使用该信号。 传输的大小由HSIZE信号确定,共有8种大小,由3根HSIZE信号线确定。表32是HSIZE信号与传输大小的对应关系。 表32HSIZE信号与传输大小的对应关系 HSIZE[2]HSIZE[1]HSIZE[0]传输大小(单位是二进制位) 0008位(即字节) 00116位(即半字) 01032位(即字) 01164位 100128位(即4字) 101256位(即8字) 110512位 1111024位 AHB总线的其他信号线(包括传输类型、突发传输类型以及一些总线仲裁信号)的作用及时序在此就不一一详细介绍了,读者可参考AMBA总线规范的相关文档。 3.2.3AXI总线规范 AXI总线是SoC芯片中的可扩展接口总线,是在AMBA 3.0版本中被提出的,在AMBA 4.0版本中被升级为AXI 4,它向下兼容APB和AHB的接口。AXI 4总线规范是基于突发传输方式的,采用了独立的地址/控制和数据传输周期,并且具有5个不同的信息通道,这5个独立的信息通道是读地址通道、写地址通道、读数据通道、写数据通道和写响应通道。AXI 4总线标准被许多第三方厂商支持,提供了许多成熟的IP核,使得该总线接口被广泛使用。 1. AXI 4总线的信号线 AXI 4总线规范有3种接口信号集,一种称为AXI Full(又称为AXI 4),另两种分别是AXI 4Lite和AXI 4Stream。AXI 4Lite和AXI 4Stream的信号可以说是AXI Full信号的子集,AXI 4Lite用于主模块与I/O端口间的地址/单数据传输,AXI 4Stream用于基于FPGA设计的大数据突发传输,传输时不需要地址信号。下面就AXI 4(即AXI Full)的信号进行介绍,AXI 4的信号除了一些全局性的信号线外,主要是按照通道来构成相关的信号集。AXI 4总线信号的列表如表33所示。 表33AXI 4总线信号 信号集名称信 号 名 称信号发起者信 号 功 能 全局信号 ACLK时钟源电路全局时钟信号,所有的信号由其上升沿触发 ARESETn复位电路全局复位信号,低电平复位 低功耗接口信号 CSYSREQ时钟控制器低功耗请求信号,将使I/O设备进入低功耗状态 CSYSACKI/O设备或模块低功耗请求响应 CACTIVEI/O设备或模块I/O设备请求时钟信号 续表 信号集名称信 号 名 称信号发起者信 号 功 能 读地址通道信号 ARID[3:0]总线主控器读地址的ID号,用于标注一组读地址 ARADDR[31:0]总线主控器读地址信号线,用于在一次突发读传输时给出读地址的首地址 ARLEN[7:0]总线主控器突发传输的长度,用于确定突发传输的次数 ARSIZE[2:0]总线主控器突发传输的数据大小,用于确定每次突发传输的数据宽度,数据宽度种类同表32 ARBURST[1:0]总线主控器突发传输类型 ARLOCK总线主控器总线锁信号 ARCACHE[3:0]总线主控器缓存类型 ARPROT[2:0]总线主控器保护类型 ARVALID总线主控器读地址有效,用于确定读地址线上的地址有效,以及控制信号有效。该信号应一直保持有效,直到ARREADY为高 ARREADY总线受控器读地址准备好,用于确定总线受控器可以接收地址和相关的控制信号 ARQOS[3:0]总线主控器用于每次读传输地址通道上的4位QoS标识符,可以作为优先级标志 ARREGION[3:0]总线主控器用于每次读传输地址通道上的域标识符 写地址通道信号 AWID[3:0]总线主控器写地址的ID,用于标注一组写地址 AWADDR[31:0]总线主控器写地址信号线,用于在一次突发写传输时给出写地址的首地址 AWLEN[7:0]总线主控器突发传输的长度,用于确定突发传输的次数 AWSIZE[2:0]总线主控器突发传输的数据大小,用于确定每次突发传输的数据宽度,数据宽度种类同表32 AWBURST[1:0]总线主控器突发传输类型 AWLOCK总线主控器总线锁信号 AWCACHE[3:0]总线主控器缓存类型 AWPROT[2:0]总线主控器保护类型 AWVALID总线主控器写地址有效,用于确定写地址线上的地址有效,以及控制信号有效。该信号应一直保持有效,直到AWREADY为高 AWREADY总线受控器写地址准备好,用于确定总线受控器可以接收地址和相关的控制信号 AWQOS[3:0]总线主控器用于每次写传输地址通道上的4位QoS标识符,可以作为优先级标志 AWREGION[3:0]总线主控器用于每次写传输地址通道上的域标识符 读数据通道信号 RID总线受控器一次读数据的ID号 RDATA[31:0]总线受控器读数据总线 RRESP总线受控器读响应信号 RLAST总线受控器最后一个读突发传输的指示信号 RVALID总线受控器读数据有效的指示信号 RREADY总线主控器准备好信号,表示总线主控器可以读数据 续表 信号集名称信 号 名 称信号发起者信 号 功 能 写数据通道信号 WID总线主控器一次写数据的ID号 WDATA[31:0]总线主控器写数据总线 WSTRB[3:0]总线主控器写数据有效字节的指示信号线,表明哪8位有效 WLAST总线主控器最后一个写突发传输的指示信号 WVALID总线主控器写数据有效的指示信号 WREADY总线受控器准备好信号,表示总线受控器可以接收写数据 写响应通道信号 BID总线受控器写响应ID BRESP总线受控器写响应信号 BVALID总线受控器写响应有效的指示信号 BREADY总线主控器准备好信号,表示总线主控器可以接收写响应 表33表明,所有AXI 4总线上的模块均使用同一个时钟信号ACLK,模块是在ACLK时钟的上升沿对输入信号进行采样,或在ACLK时钟的上升沿之后发出输出信号。复位信号也是所有总线上连接的模块共用的,复位时各信号线的状态如下。 ① 总线主控器控制信号线: ARVALID、AWVALID、WVALID的状态为低电平。 ② 总线受控器控制信号线: RVALID、BVALID的状态为低电平。 ③ 其他信号线的状态为任意电平,既有可能是高电平,也有可能是低电平。 2. AXI 4总线的传输 AXI 4总线上的总线主控器和总线受控器之间的传输,需要在它们之间先通过握手信号建立连接。AXI 4总线中5个传输通道的握手信号线分别是该通道对应的VALID信号线和READY信号线(表33),只有当VALID和READY信号同时有效,才能进行有效的传输。一个典型的AXI 4总线基于握手方式的传输时序图如图310所示。 图310AXI 4总线基于握手方式的传输时序 AXI 4总线的传输是突发式的,突发传输发生时,总线主控器只给出第一个地址,由总线受控器计算后续的地址。AXI 4总线的其他信号线(包括突发传输的长度、突发传输的大小、突发传输类型等)的作用及要求在此就不一一详细介绍了,读者可参考AMBA总线规范的相关文档。 3.3Zynq芯片的总线结构 以Zynq芯片为核心所开发的嵌入式系统,是基于Zynq芯片的总线结构来构建的,如图311所示。其总线结构中包括芯片内部的互连总线,以及芯片与其他芯片或模块之间的连接总线(即板级总线)。Zynq芯片内部包含PS部分和PL部分,为了使PS部分的CortexA9微处理器核与PL部分的FPGA能有效融合在一个芯片内,就需要设计它们之间的高效互连总线; 否则,若它们之间互连总线传输效率低,那么将CortexA9微处理器核与FPGA集成在一个芯片中的优势就不能充分发挥。下面详细介绍Zynq芯片内部各部件间的互连结构以及Zynq芯片与外部模块的接口。 图311以Zynq芯片为核心的系统总线结构 3.3.1PS部分的接口连接 Zynq芯片的PS部分包含许多I/O端口及存储器接口,它们的功能与其他嵌入式CPU芯片内部的I/O端口功能一样,用于连接外部设备或模块。但是,这些I/O端口除了PS部分的CortexA9微处理器核可以通过指令进行读写外,还可以使用PL部分来访问。I/O端口的引脚是通过芯片MIO类型的引脚引出的,可以进行动态配置其功能。若配置成GPIO引脚,则最多可以配置54个该类型引脚。另外,通过EMIO功能,还可以把I/O端口引脚扩展到PL部分的引脚上,若该类型引脚配置成GPIO引脚,最大可配置成64个输入、128个输出。图312是PS部分的I/O接口连接情况。 图312PS部分的I/O接口连接情况 在图312中,MIO(Multiuse I/O)是PS部分的多功能I/O引脚,即其功能可进行配置。EMIO(Extendable Multiplexed)被称为可扩展的MIO,是将I/O端口的输入输出引脚连接到PL的引脚上,主要用于当MIO引脚不够用时来扩展输入输出引脚。 用于连接外部DDR存储器芯片的引脚,在Zynq芯片的引脚上是专用的引脚,而不是通过MIO或EMIO。这类引脚的接口将在3.4节介绍。 3.3.2芯片内部PS和PL互联结构 Zynq芯片内部有许多功能部件,如CortexA9微处理器核、DMA控制器及片上存储器(OCM)、DDR控制器、多个接口功能部件(如GPIO、SPI、UART、I2C、CAN)等。这些部件在芯片内部按照AMBA 3.0总线规范进行互联,构建了它们之间的高速数据通路。其中,Zynq芯片内的PL与PS之间的互联是基于AXI 4.0规范的,它们之间的AXI互联接口有3种类型,即AXI_GP接口、AXI_HP接口和AXI_ACP接口,下面对它们进行分别介绍。 1. AXI_GP接口 AXI_GP接口(GP是General Purpose的缩写)被称为通用的AXI总线接口,主要是用于连接PS部分中的各种I/O端口部件。AXI_GP接口共有4个,其中两个是32位的总线主控器接口,另两个是32位的总线受控器接口。 PS部分中APU采用AXI_GP接口的总线主控器接口,就可以把PL部分当作I/O部件来访问,这时完成的数据传输需要CortexA9微处理器核执行数据传送指令来完成,数据的吞吐率较低。若APU采用的是AXI_GP接口的总线受控器接口,则PL部分可以访问PS部分的同一个I/O端口。 AXI_GP接口的典型应用就是用于控制数据量不大的普通传输,如用于步进电机控制或温度传感器等这样的接口电路设计,它们需要传输的数据通常只是控制命令或少量的参数数据。 2. AXI_HP接口 AXI_HP接口被称为高带宽的接口,主要用于PL访问PS中的OCM(片上存储器)和DDR控制器。即用PL中FPGA设计的功能模块(如DMA控制器)作为总线主控器,可以直接访问PS部分中的OCM和DDR控制器,向相关存储器内传送数据或读取数据,而不需要通过APU来控制。除了访问OCM和DDR控制器,AXI_HP接口不能访问其他的片内部件。 AXI_HP接口有4个,每个接口均可编程设置为32位或64位的数据宽度,并且每个接口有一个读FIFO缓冲区和一个写FIFO缓冲区,这些FIFO为大数据量的突发传输提供缓冲。 AXI_HP接口的典型应用就是进行大数据量突发式传输控制。例如,用于一个视频信号的采集电路中,若图像采集模块(即摄像头)的数据传输接口采用AXI_HP,并利用PL中的FPGA设计DMA传输的控制器作为AXI总线的主控器,就可以不需要APU参与控制,把采集到的图像数据高速地传输到DDR存储器中。 3. AXI_ACP接口 AXI_ACP接口被称为加速器一致性接口,是PL部分与PS部分之间最紧密的接口。PL部分通过该接口,可以访问PS中的数据缓存区(32KB D_Cache),并且可由SCU模块保证数据缓存的一致性。 AXI_ACP接口和AXI_HP接口的作用有些类似,均是提供一个高带宽的数据传输通道,以提高数据的吞吐率。它们之间的差别是AXI_ACP接口连接到了SCU模块上,因而可以直接访问高速缓存中的数据,且能保证缓存一致性操作,而AXI_HP接口只能访问片内存储器和片外的DDR存储器。 但是,由于AXI_ACP接口访问数据缓存区,可能会导致APU中的CortexA9微处理器核访问数据缓存区的延时,从而降低了CPU的效率。因此,AXI_ACP接口更适合数据量中等的传输场合,而数据量大的传输场合建议采用AXI_HP接口。AXI_ACP接口的典型应用是用硬件来设计算法加速器的场合。 上面提到的3种AXI接口均是点对点的主/从式接口,当需要多个接口来进行数据传输时,需要加入AXI互联开关(AXI Interconnect)模块。其作用是提供将一个或多个AXI总线主控器连接到一个或多个AXI总线受控器的交换矩阵。 综上所述,PL部分与PS部分之间的数据通道有多种接口方式。表34列出了几种接口方式及其作用。 表34PL与PS间的数据接口方式 接口及控制方式特点典 型 应 用数据速率/(MB·s-1) AXI_GP(采用CPU读写指令控制)PL为受控器,占用的PL资源少,设计简单。但吞吐率低I/O控制<25 AXI_HP(采用DMA控制)PL为主控器,吞吐率高,有多个接口。但只能访问OCM/DDR,且用PL设计主控器时设计复杂用于大数据量突发传输1200(每个接口) AXI_ACP(采用DMA控制)PL为主控器,吞吐率高,可访问高速缓存,且传输延时低。但可能引起高速缓存振荡,且用PL设计主控器时设计复杂用于数据量中等,且要求数据一致性的数据传输1200 续表 接口及控制方式特点典 型 应 用数据速率/(MB·s-1) AXI_GP(采用DMA控制)中等的吞吐率。但用PL设计主控器时设计复杂PS中I/O端口访问PL到PS控制功能600 PS DMA中等的吞吐率,具有多个通道,用PL设计受控器时设计简单。但需要编程来控制DMA操作600 3.3.3Zynq芯片的板级总线 嵌入式系统的板级目标系统硬件平台设计时,主要完成的任务是把微处理器芯片与其他功能芯片进行有机地连接。因此,了解基于芯片引脚的板级总线,是设计嵌入式系统板级硬件平台的关键。本书中的许多示例所涉及的微处理器芯片是Xilinx公司的Zynq芯片,因此,本小节将分别介绍基于Zynq芯片的板级总线。 Zynq芯片的板级总线即是基于Zynq芯片引脚的,在2.1.3节中已经列出了Zynq芯片的引脚。在此,按照功能的分类对Zynq芯片的引脚再进行归纳。 Zynq芯片的引脚主要分成PS部分的引脚和PL部分的引脚,按照功能分类主要是专用的地址类信号引脚、数据类信号引脚、控制类信号引脚以及PS部分的I/O引脚和PL部分的I/O引脚等。下面就几类主要的信号引脚加以介绍。 1. 地址类信号引脚 该类引脚是PS部分的专用引脚,Zynq芯片的地址类信号引脚有以下几个。 ① 块地址信号引脚DDR_BA2~DDR_BA0。 ② 行或列地址信号引脚DDR_A14~DDR_A0。 ③ 行选通信号引脚DDR_RAS_B。 ④ 列选通信号引脚DDR_CAS_B。 ⑤ 片选信号引脚DDR__CS_B。 上述的信号引脚将作为地址总线与片外DDR存储器芯片连接,也可作为其他需要地址信号的片外I/O功能芯片的地址总线。 2. 数据类信号引脚 该类引脚是PS部分的专用引脚,Zynq芯片的数据类信号引脚有以下几个。 ① 数据信号引脚(即数据总线)DDR_DQ31~DDR_DQ0。 ② 数据选通信号引脚(正极)DDR_DQS_P3~DDR_DQS_P0。 ③ 数据选通信号引脚(负极)DDR_DQS_N3~DDR_DQS_N0。 ④ 数据掩码信号引脚DDR_DM3~DDR_DM0。 Zynq芯片的数据总线是32位的,支持32位数据宽度,可用作连接片外存储器芯片的数据总线,也可用作其他需要数据总线的片外I/O功能芯片的数据线。数据选通信号即数据的同步信号,该信号确保数据接收方安全读取数据。数据掩码信号用于选择数据是否被屏蔽。这些信号引脚是专用于与DDR寄存器芯片的数据信号传输。 3. 控制类信号引脚 Zynq芯片的控制类信号又分成以下几个子类。 1) DDR存储器芯片的控制信号 ① DDR差分时钟信号引脚(正)DDR_CK_P。 ② DDR差分时钟信号引脚(负)DDR_CK_N。 ③ DDR时钟使能信号引脚DDR_CKE。 ④ 写使能信号引脚DDR_WE_B。 ⑤ DDR复位信号DDR_DRST_B。 2) PS部分系统控制信号 ① 系统时钟信号引脚PS_CLK。 ② 系统上电复位信号引脚POR_B。 ③ 系统复位信号引脚STSR_B。 4. I/O部件接口引脚 PS部分的I/O部件引脚是MIO53~MIO0(注: 根据Zynq芯片的型号不同,这些引脚的数量有所不同)。这种类型的引脚是多功能的,可以通过MIO引脚的配置寄存器来设置其功能。例如,UART的串口通信的引脚TXD、RXD,即可通过软件把它们配置到相应的MIO引脚上。 5. PL类引脚 PL部分的引脚是FPGA逻辑电路对应的I/O引脚,其功能可配置,并且通过EMIO模块扩展成PS部分的I/O端口引脚。这类引脚的数量根据Zynq芯片的类型不同而有所不同。在Zynq芯片上,这类引脚的符号是IO_××_#(注: #表示块号,××表示该引脚在块内的序号)。 6. 其他功能类引脚 其他功能类引脚主要包括JTAG调试接口引脚、复位引脚、时钟电路引脚及电源引脚等。详细的引脚功能可参见2.1.3节,这里不再进行介绍。 3.4存储器芯片的接口设计方法 在设计嵌入式系统时,若程序代码及数据量大时,通常片内存储器的容量不足以存储这些代码或数据,需要设计片外存储器。而片外存储器芯片有多种类型,不同类型的存储器芯片,其接口电路有所不同。本节先了解存储器芯片的分类,然后将根据存储器芯片分类来介绍其对应的接口电路设计方法。 3.4.1存储器芯片分类 存储器通常分成两大类别,即随机存储器(RAM)类和只读存储器(ROM)类。RAM类存储器芯片通常是易失性存储器,用作存储动态数据,或者运行时的代码存储区域。ROM类存储器芯片是非易失性存储器,通常用作代码静态时的存储区域或常数的存储区域。 1. 随机存储器 随机存储器可以被读出数据,也可以向其内部写入数据,之所以称为随机,是因为在读写数据时,可以从存储器的任意地址处进行,而不必从开始地址处顺序地进行。随机存储器又分为两大类,即静态随机存储器(Static Random Access Memory,SRAM)和动态随机存储器(Dynamic Random Access Memory,DRAM)。这两者相比较具有以下差别。 ① SRAM读写速度比DRAM读写速度快。 ② SRAM比DRAM功耗大。 ③ DRAM的集成度可以做得更大,则其存储容量更大。 ④ DRAM需要周期性地刷新,而SRAM不需要。因为SRAM中的存储单元内容在通电状态下始终是不会丢失的,因而,其存储单元不需要定期刷新。 在实际设计中,由于DRAM的集成度高、功耗低,因此,主存储器中所需的RAM型存储器芯片均采用DRAM型芯片,特别是一种称为同步动态随机存储器(Synchronous Dynamic Random Access Memory,SDRAM)型的存储芯片。只有在低端嵌入式系统中,由于需求的存储容量不是很大,而会选用SRAM型存储器芯片。有时SRAM还用于作二级高速缓存。 图313(a)所示为一款SRAM存储器芯片,存储容量为32KB。图313(b)所示为一款DRAM存储器芯片,存储容量为64MB。 图313随机存储器 2. 只读存储器 只读存储器(ROM)是指其内部存储单元中的数据不会随失电而丢失的存储器。在嵌入式系统中,只读存储器中通常存储程序代码和常数。 只读存储器通常又分成EPROM、EEPROM和闪存(Flash)。目前,闪存作为只读存储器在嵌入式系统中被大量采用,闪存使用标准电压即可擦写和编程。因此,闪存在标准电压的系统内就可以进行编程写入。但它们的写入操作是按块顺序进行的,而不能随机地写入任何地址单元。 NOR和NAND是现在市场上两种主要的非易失性闪存技术。Intel于1988年首先开发出NOR Flash技术,彻底改变了嵌入式系统中原先由EPROM和EEPROM一统天下的局面。紧接着,1989年,东芝公司发表了NAND Flash结构,强调降低每比特的成本,更高的性能,并且像磁盘一样可以通过接口轻松升级。 在嵌入式系统的存储系统设计时,采用NAND Flash还是NOR Flash需根据实际要求确定,两类Flash各有优、缺点。即使在嵌入式系统中两者均采用,它们起的作用也不同。NAND Flash和NOR Flash比较,有以下特点。 (1) NOR Flash的读取速度比NAND Flash稍快,NAND Flash的擦除和写入速度比NOR Flash快很多。 (2) Flash芯片在写入操作时,需要先进行擦除操作。NAND Flash的擦除单元更小,因此相应的擦除电路更少。 (3) 接口方面它们也有差别。NOR Flash带有SRAM接口,有足够的地址引脚来寻址,可以很容易地存取其内部的每一字节,可以像其他SRAM存储器那样与微处理器连接; NAND Flash器件使用复杂的I/O接口来串行地存取数据,各个产品或厂商的方法还各不相同,因此,与微处理器芯片的接口电路复杂。 ① NAND Flash读和写操作采用512B的块,这一点类似硬盘管理操作,显然,基于NAND Flash的存储器就可以取代硬盘或其他块设备。 ② NAND Flash的单元尺寸几乎是NOR Flash器件的一半,即NAND Flash结构可以在给定的尺寸内提供更高的存储容量,也就相应地降低了价格。 ③ NAND Flash中每个块的最大擦写次数是100万次,而NOR Flash的擦写次数是10万次。 ④ 所有Flash器件都受位交换现象的困扰。在某些情况下,NAND Flash发生的次数要比NOR Flash多。 ⑤ NAND Flash中的坏块是随机分布的。需要对介质进行初始化扫描以发现坏块,并将坏块标记为不可用。在已制成的系统中,若没有可靠的方法进行坏块扫描处理,将导致系统高故障率。 ⑥ NAND Flash的使用复杂,必须先写入驱动程序才能继续执行其他操作。向NAND Flash写入信息需要相当高的技巧,因为设计者绝不能向坏块写入,这就意味着在NAND Flash上自始至终都必须进行虚拟映射。 图314(a)所示为一款NOR Flash存储器芯片,存储容量为2MB。图314(b)所示为一款NAND Flash存储器芯片,存储容量为1GB。 图314Flash存储器芯片 3. DDR存储器 DDR存储器是双倍数据流的SDRAM,对应的英文是Double Data Rate SDRAM,它在传统的SDRAM类存储器基础上进行了改进。DDR存储器和传统的SDRAM存储器的主要区别就在于,DDR存储器在一个时钟周期内,时钟的上升沿和下降沿各进行一次数据传输,而传统的SDRAM存储器只在时钟上升沿进行一次数据传输。 DDR存储器技术还在不停地改进和发展中,从1997年推出DDR类型的存储器芯片开始,经过DDR2(2001年推出)、DDR3(2008年推出)、DDR4(2011年推出),到当今推出了DDR5。本书主要以DDR3为背景来介绍其存储接口电路设计。 DDR3存储器主要有以下几个特点。 ① 芯片的功耗低,且发热量小。 ② 工作频率高,采用差分时钟信号,其时钟频率是第一代DDR芯片的4倍,其数据传输速率是传统SDRAM芯片的8倍。 ③ 存储容量密度大,每个存储芯片(或称存储颗粒)规格多为32M×32bit。 ④ 通用性能好,与DDR2在引脚、封装方面是兼容的。 3.4.2SROM型存储器接口设计方法 SROM型存储器是SRAM型存储器、EPROM型存储器、NOR Flash型存储器的统称。其中,EPROM型芯片只在低端的嵌入式系统中使用,大多数嵌入式系统中已不再使用该类型的存储器芯片,而是使用NOR Flash型存储器芯片。在实际的接口电路中,这3类存储器芯片与微处理器之间的接口电路设计方法是相似的。微处理器与SROM型存储器接口一般有以下几种信号线。 (1) 片选信号线CE。有的书上又标记为CS,用于选中该存储器芯片。若CE=0时,该存储器芯片的数据引脚被启用; 若CE=1时,该存储器芯片的数据引脚被禁止,对外呈高阻状态。 (2) 读写控制信号线。控制SROM芯片数据引脚的传送方向。若是读有效,则数据引脚的方向是向外的,微处理器从其存储单元读出数据; 若是写有效,则数据引脚的方向是向内的,微处理器向其存储单元写入数据。通常,SRAM芯片是可以随机写的,而EPROM芯片、NOR Flash芯片是不能够随机写的。 (3) 若干根地址线。用于指明读写单元的地址。地址线是多根,应与存储器芯片内部的存储容量相匹配。 (4) 若干根数据线。双向信号线,用于与微处理器之间的数据进行交换。数据线上的数据传送方向由读写控制信号线控制。数据线通常有8根或16根或32根,由微处理器的数据宽度确定。 图315微处理器与SROM接口电路 一个典型的微处理器与SROM型存储器的接口电路原理框图如图315所示。 SROM型存储器芯片中存储的内容,在上电时通常是不会丢失的,并且地址引脚的根数是与芯片内部存储容量相对应的。例如,若一个SROM型存储芯片的容量为64KB,那么其地址引脚就有16根(A0~A15)。因此,微处理器与其接口电路相对来说比较简单,接口电路中不需要刷新电路,设计时重点考虑的是地址分配,即如何用地址信号控制芯片的片选信号,并满足微处理器读写周期的时序要求。SROM型的读写时序如图316所示。 图316SROM型的读写时序 设计SROM型存储器芯片的地址分配电路时,还需要考虑数据总线的宽度,即读写一次的数据位数是字节(8位)、半字(16位)或者字(32位)。采用不同的数据总线宽度,在设计地址分配电路时,微处理器地址信号线与存储器芯片地址信号线的对应关系会有些不同。图317至图319分别给出数据总线宽度为8位、16位、32位的SROM型芯片接口地址分配示意图。 图3178位(64KB容量)的SROM 地址分配示意图 图31816位(128KB容量)的SROM 地址分配示意图 图31932位(256KB容量)的SROM地址分配示意图 在图317中,长方形框内部符号A0~A15、DQ0~DQ7、nWE、nOE、nCE等代表存储器芯片的引脚信号,长方形框外部符号表示微处理器的信号。图318与图319中类同。可以看到,地址分配主要是完成微处理器的地址信号线与存储器芯片的地址信号线的连接,同时需要完成存储器片选信号线的连接。在微处理器的地址信号线与存储器地址信号线的连接关系上,受存储器数据总线宽度的影响。但无论数据总线宽度如何,即无论是8位、16位还是32位,地址均按顺序对应连接。 另外,需提出的是,在嵌入式系统中,片外存储器系统是由多片存储器芯片组成,以满足系统对存储器容量、存储器类别的要求。这时,对有些嵌入式微处理器来说,其地址分配电路中应该包含一个高位地址译码电路,通过对微处理器高位地址进行译码,产生的译码信号分别用于控制不同存储器芯片的片选信号,从而达到给不同芯片分配不同地址范围的目的。而有些嵌入式微处理器其外围可能就不需要加译码电路,因为其内部已把存储空间映射成几个独立的存储块,换句话说,它的内部已经集成有译码电路。 3.4.3DRAM型存储器接口设计方法 DRAM型的存储器芯片里的存储单元内容,在通电状态下,随着时间的推移会丢失,因而,其存储单元需要定期刷新。微处理器与该类型存储器芯片接口的信号线,除了有与SROM型存储器芯片相同的信号线外,还有RAS(行地址选择)信号线和CAS(列地址选择)信号线。需要这些信号的原因是可以减少芯片地址引脚数(这样只需要一半地址引脚),并且方便刷新操作。在微处理器读写DRAM时,其地址按下面时序提供。 首先,微处理器输出地址的高位部分出现在DRAM芯片的地址引脚上,此时,RAS信号线置成有效,把地址引脚上的地址作为行地址锁存在DRAM芯片内部。 随后,微处理器输出地址的低位部分出现在DRAM芯片的地址引脚上,此时,CAS信号线置成有效,把地址引脚上的地址作为列地址锁存在DRAM芯片内部。注意,此时RAS信号线应保持有效。 DRAM的刷新是通过执行内部读操作来完成的,一次刷新一行,刷新应该在完成一次读写操作后进行,微处理器与DRAM的 图320微处理器与DRAM接口电路 接口电路中应设计有控制刷新的逻辑。图320所示为典型的微处理器与DRAM接口电路。 典型DRAM的刷新、写、读时序如图321所示。 进行DRAM的地址分配电路设计时,也需考虑数据总线宽度的影响。图322和图323分别给出数据总线宽度为16位和32位的DRAM接口 图321DRAM时序图 图32216位DRAM的地址分配 图32332位DRAM的地址分配 地址分配示意图。图中采用的DRAM芯片数据宽度为16位,容量为1M×16×4块,即8MB。A22、A21控制块地址BA1、BA0。 从图322和图323中可以看出,DRAM存储器地址分配主要也是完成微处理器的地址信号线与存储器芯片的地址信号线的连接,同时需要完成存储器片选信号线的连接。但DRAM的地址信号分成行地址和列地址两部分,因此,其地址引脚有些是复用的,在设计时要注意。另外,地址分配时还需提供行地址选通信号(RAS)和列地址选通信号(CAS),并且还需存储块的地址。 在图322中,长方形框内部符号A0~A11、DQ0~DQ15、nWE、nSCS、nSRAS、nSCAS等代表存储器芯片的引脚信号,外部符号表示微处理器的信号。图323中类同。 3.4.4NAND Flash型存储器接口设计方法 前面已经提到,不同厂家生产的NAND Flash类型存储器芯片,其接口没有统一的标准,因此,在设计其接口电路时,应参考所选用的芯片技术手册来进行。目前,以Intel公司为首的ONFI(Open NAND Flash Interface)组织正在发起制定NAND Flash的标准接口规范,这将会使NAND Flash得到更普及地应用。 近年来,由于NAND Flash存储信息的非易失性且其数据存储密度大、价格适中,因此,在许多嵌入式系统中均设计有NAND Flash存储器,作为系统辅助存储器,可用来存储系统的应用程序文件(类似于通用台式计算机的磁盘)。但是,NAND Flash存储器与微处理器之间的接口较为复杂,存取数据通常采用I/O方式,并且NAND Flash缺乏统一的接口规范,这更增加了其接口设计的复杂度。 NAND Flash存储器芯片的引脚分为3类,即数据引脚、控制引脚和状态引脚。其中数据引脚高度复用,既用作地址总线,又用作数据总线和命令输入信号线。典型的支持NAND Flash芯片连接的接口内部结构如图324所示。 图324典型的支持NAND Flash连接的接口内部结构 图324显示,接口引脚中有8个I/O数据引脚(I/O0~I/O7),用来输入输出地址、数据和命令。控制信号引脚有5个,其中CLE和ALE分别为命令锁存使能引脚和地址锁存使能引脚,用来选择I/O端口输入的信号是命令还是地址。nCE、nRE和nWE分别为片选信号,读使能信号和写使能信号。状态引脚R/nB表示设备的状态,当数据写入、编程和随机读取时,R/nB处于高电平,表明芯片正忙; 否则输出低电平。NAND Flash的读写时序如图325所示。 图325NAND Flash的读写时序 例如,K9F6408系列是一种典型的NAND Flash芯片,图326是其引脚及命令图。它的数据宽度为8位,内部存储单元按页和块的结构组织。一片K9F6408的使用容量为8M×8b,片中划分成1024个块,每个数据块又包含16个页。其中每个数据页内有528B,前512B为主数据存储器,存放用户数据,后16B为辅助数据存储器,存放ECC代码、坏块信息和文件系统代码等。该芯片内部还有一个容量为528B的静态寄存器,称为页寄存器,用来在数据存取时作为缓冲区使用。编程数据和读取的数据可以在寄存器和存储阵列中按528B的顺序递增访问。当对芯片的某一页进行读写时,其数据首先被转移到该寄存器中,通过这个寄存器和其他芯片进行数据交换,片内的读写操作由片内的处理器自动完成。 图326K9F6408系列NAND Flash芯片引脚及命令 3.4.5DDR型存储器接口设计方法 在嵌入式系统中,若代码及数据的容量较大,片内存储器容量不足时,常用DDR型存储器作为主存储器,用作当前运行代码及数据的主存储区域。典型的微处理器与DDR3型存储器的接口电路原理框图如图327所示。它们之间的信号线一般有以下几种。 图327微处理器与DDR3接口电路 (1) 差分时钟信号线CK_P/CK_N。CK_P和CK_N时钟信号正好相位相反,形成差分,数据的有效传输正好是在两个时钟信号的交叉点上。因此,在CK_P的上升沿(也是CK_N的下降沿)和CK_P的下降沿(也是CK_N的上升沿)均有数据有效传输,如图328所示。 图328DDR3存储器读写时序 (2) 控制信号线。控制信号主要有: 时钟使能信号CKE、写使能信号WE_B等。CKE信号是高电平有效,其无效时,DDR3内部与数据传输有关的部件处于睡眠状态,进入省电工作模式。WE_B信号为低电平时,写操作使能,为高电平时,读操作使能。 (3) 地址类信号线。地址类信号线主要有: ① 地址线An~A0,用于指明读写单元的地址。地址线有多根,应与DDR3存储器芯片内部的存储容量相匹配。Zynq芯片的地址线有15根,即A14~A0。 ② 片选信号线CS_B,低电平有效,是整个DDR芯片的工作使能信号,若其为高电平则整个芯片不工作。 ③ 行地址选通信号RAS_B,低电平有效,指示地址线上的地址是行地址。 ④ 列地址选通信号CAS_B,低电平有效,指示地址线上的地址是列地址。 ⑤ 存储块选择信号BA2~BA0,用于选择3个存储块中哪个被激活。 (4) 数据类信号线。数据类信号线主要有以下几种。 ① 数据线DQ0~DQm,双向信号线,用于与微处理器之间的数据交换。数据线上的数据传送方向由读写控制信号线控制。数据线通常有32根或64根,由微处理器的数据宽度确定。Zynq芯片的数据线有32根,即DQ0~DQ31。 ② 数据选取信号DQS,双向信号线,用于确定数据最稳定的时刻,以便于数据准确地传输。在读存储器时,该信号由存储器发出,在写存储器时,该信号由微处理器发出。 ③ 数据掩码信号DM,高电平有效,在写操作时可以用来屏蔽写入的数据。 典型的DDR3存储器读写时序如图328所示。 3.5Zynq芯片的外存储系统设计 Zynq芯片内部集成有L1、L2二级高速缓存及片上存储器OCM,并且还集成有BootROM,其内部存有最初始的启动代码。但OCM容量只有256KB,若程序代码和数据容量很大时,就需要设计大容量的片外存储系统。另外,OCM存储器的类型是RAM型(即易失性)的,其存储的代码和数据在掉电时会丢失,因此,在设计实用的嵌入式系统时,还需设计片外的非易失性存储器,如NOR Flash或NAND Flash。下面介绍Zynq芯片的几种片外存储系统及其接口设计。 3.5.1SROM型存储系统设计 SROM型存储系统,指的是利用SRAM型芯片或者NOR Flash型芯片而设计的存储系统。Zynq芯片利用其内部集成的SMC(Static Memory Controller)模块来设计SRAM型芯片或者NOR Flash型芯片的接口,SMC还可以用来设计NAND Flash型芯片的接口。SMC的接口互联结构如图329所示。 图329Zynq芯片的SMC接口互联结构 1. SROM型存储器接口 通过向配置寄存器(基地址为0xE000E000)写入命令,可以把SMC配置成SROM型存储器接口的控制器,该控制器控制的存储器接口具有8位数据宽度、24位地址信号、两个片选信号以及异步存储器操作命令信号(写/读)。 典型的Zynq芯片与NOR Flash型存储器的接口电路如图330所示。 图330Zynq芯片与NOR Flash型存储器的接口电路 两个片选信号CE_B0、CE_B1分别对应的首地址是0xE2000000、0xE4000000,单个存储芯片的存储容量应根据实际需要确定,但最大不能超过128MB。 若存储器芯片是SRAM芯片,其接口电路和NOR Flash型存储器的接口电路相同,只是不需要WAIT信号(等待信号)线的连接。 2. NAND Flash型存储器接口 通过向配置寄存器(基地址为0xE000E000)写入命令,还可以把SMC配置成NAND Flash型存储器接口的控制器,该控制器控制的存储器接口具有以下特点。 ① 支持ONFI(Open NAND Flash Interface)接口规范1.0版。 ② I/O数据宽度为8位或16位。 ③ 异步存储器操作模式。 一个典型的Zynq芯片与NAND Flash型存储器的接口电路如图331所示。 图331Zynq芯片与NAND Flash型存储器的接口电路 在图331(a)中,I/O信号线用于传输NAND Flash的命令、地址、数据信号,NAND Flash对应的基地址是0xE1000000。 图331(b)是以K9F6408芯片为例的NAND Flash接口的具体电路,方框内部的符号表示K9F6408芯片的引脚信号,外部符号表示是所连接的Zynq芯片的信号线,即图331中的CE_B0(对应nFCE)、CLE(对应nCLE)、ALE(对应nALE)等。 在Zynq芯片内部,可以把SMC配置成用于控制NAND Flash存储器的部件,除了nFCE、nFRE、nFWE等引脚外,内部还有许多用来支持NAND Flash存储器接口的寄存器,基地址即是0xE1000000。在设计NAND Flash存储器接口时,还必须对这些寄存器进行操作。另外,还必须根据具体的NAND Flash芯片的命令格式以及操作流程编写其读写操作程序。 3.5.24倍SPI Flash存储系统设计 4倍SPI Flash存储器是按照SPI(Serial Peripheral Interface)接口标准设计的Flash存储芯片,“4倍”是指SPI接口信号中有4组I/O信号线。SPI接口标准中通常规定有3种信号线,即CLK(时钟)、I/O(数据输入输出)、S(从器件选择)。SPI接口的详细内容将在第4章介绍,这里仅介绍Zynq芯片与SPI接口的Flash存储器的连接原理及电路。 Zynq芯片PS部分的4倍SPI Flash控制器,是用于按照SPI协议进行串行访问Flash存储器部件的,它具有吞吐量大、引脚数少的特点。4倍SPI Flash控制器支持两种操作模式,即I/O模式和线性模式,其内部结构如图332所示。 图3324倍SPI Flash控制器内部结构 I/O模式支持对Flash存储器的所有操作,包括编程、擦除、读取操作等。在I/O模式下,4倍SPI Flash控制器仅负责信息的串行发送和接收,设计者需要熟悉4倍SPI Flash存储器的通信协议,根据协议来解析串行发送和接收到的信息。I/O模式下读取Flash存储器中的数据,需要进行以下操作。 ① 首先向TxFIFO发读命令和存储单元的地址。 ② 读命令发出后,进行循环等待,直到RxFIFO中有有效的数据。 ③ 读入RxFIFO中的有效数据,并根据SPI协议过滤出原始数据。 ④ 将过滤出的原始数据对齐(可按大端或小端存储方式)。 线性操作模式只支持对Flash存储器的读操作,即此操作模式下,4倍SPI Flash存储器相当于一个普通的、带有地址总线和数据总线的ROM。当CortexA9微处理器核通过AXI总线发来读命令后,其内部将自动产生I/O命令,来加载存储器中的数据。即在线性操作模式下,4倍SPI Flash存储器类似于一个具有AXI接口信号线的只读存储器,控制器自主完成AXI到SPI协议的转换。 图333是典型的Zynq芯片与外部4倍SPI Flash存储器的信号接口电路。图中只有一块4倍SPI Flash存储器,必须连接到控制器的QSPI0上,其地址范围是0xFC000000~0xFCFFFFFF,共16MB。 图3334倍SPI Flash存储模块的接口电路 3.5.3DDR存储系统设计 Zynq芯片与外部DDR存储芯片的连接及读写操作,是通过其中的DDR控制器来进行的,该DDR控制器可支持与DDR2、DDR3等存储器芯片的连接及访问操作。DDR控制器内部包括3部分功能模块,即DDR控制器端口(DDR Controller Interface,DDRI)、DDR控制器中心部件(DDR Controller Core,DDRC)、DDR物理接口(DDR Controller PHY,DDRP)。 DDR控制器端口(DDRI)负责各个端口的读写请求和仲裁,共有4个端口,其中一个为L2缓存专用,可由CortexA9微处理器核和ACP访问; 两个为AXI_HP接口; 还有一个由AXI总线上的其他主控器共享。 DDR控制器中心部件(DDRC)负责对读写操作进行调度。它接收DDRI发来的读写请求,并将物理地址映射到DDR的行地址、列地址。 DDR物理接口(DDRP)负责与DDR芯片连接,将控制器发来的读写命令转换为DDR存储芯片的时序信号,并通过引脚发送给DDR芯片。 典型的Zynq芯片与DDR存储器芯片的连接电路如图334所示。 图334Zynq芯片与DDR3存储器的连接电路 本 章 小 结 存储器系统是嵌入式系统硬件平台的重要组成部分。硬件平台中的各硬件部件需要通过总线连接在一起,根据总线连接的部件及使用的场合不同,总线可以分成片上总线、板级总线(内总线)、系统总线(外总线)等3种。若目标系统中要外接存储器芯片,则需采用板级总线进行连接。复杂的嵌入式系统的存储系统通常由寄存器、Cache、主存储器、辅助存储器等4级存储区域组成。寄存器和Cache通常都是集成在微处理器核中的,主存储器和辅助存储器通常需要外接存储器芯片来构成。本章详细讨论了AMBA总线规范,以及需要外接存储器芯片时,SROM型、DRAM型、NAND Flash型、DDR型存储器的接口设计方法; 并以Zynq7000芯片为应用背景,详细介绍了其存储机制,并给出了其NOR Flash存储器芯片、SDRAM存储器芯片、NAND Flash存储器芯片、DDR存储器芯片的接口电路示例。 习题3 1. 选择题 (1) 总线是连接若干模块的信号线及其规范,根据使用的场合分为片上总线、板级总线和系统总线。下面属于片上总线的是()。 A. AMBAB. RS232C. PC104D. STD (2) 以Zynq芯片为核心的目标系统中,有时需要采用SDRAM类型芯片来构建外部存储空间,SDRAM芯片是()。 A. 易失性存储器芯片B. 只读性存储器芯片 C. 非易失性存储器芯片D. 静态随机存储器芯片 (3) 下面所列举的是SROM型存储器芯片与微处理器芯片之间连接时,其接口连线的特征,其中错误的是()。 A. 需要片选信号线CS,用来选中某存储器芯片工作 B. 若存储器芯片的容量是2n×8b,则接口中需要n根地址线,8根数据线 C. 需要指示数据传输方向的控制信号线 D. 需要锁存行地址的锁存信号线 (4) 下面有关AMBA总线规范的描述语句中,错误的是()。 A. AMBA是一种开放的,用于高性能嵌入式系统中的片内总线规范 B. AMBA总线规范的主要内容包含了APB、AHB、AXI等部分的总线规范 C. AHB是用于芯片内较低性能系统模块连接的总线规范 D. AMBA规范中面向FPGA的高性能系统总线规范可以用AXI 4规范 (5) AXI总线是SoC芯片中的扩展接口总线规范,在AMBA 4.0版本中被升级为AXI 4总线规范。下面的语句中,错误的是()。 A. AXI 4总线规范向下兼容了APB规范和AHB规范的接口 B. AXI 4总线规范是基于突发传输方式的,采用了独立的地址/控制和数据传输周期 C. AXI 4总线规范具有4个不同的信息通道 D. AXI 4总线规范有3种接口信号集,即AXI Full、AXI 4Lite和AXI 4Stream (6) Zynq芯片内的PL与PS之间的互联是基于AXI 4.0规范的,它们之间的AXI互联接口有3种类型。下面列举的接口类型不属于AXI互联接口类型的是()。 A. AXI_GPB. AXI_GPIOC. AXI_HPD. AXI_ACP (7) Zynq芯片的引脚主要分成PS部分的引脚和PL部分的引脚。下面所列举的引脚中,不属于PS部分引脚的是()。 A. 数据引脚B. MIO引脚C. 地址引脚D. EMIO引脚 (8) 嵌入式系统中,通常需要非易失性存储器芯片来存储指令代码。下面所列举的存储器芯片类型中,不属于非易失性存储器芯片类型的是()。 A. DDR3B. NOR FlashC. NAND FlashD. EEPROM (9) NAND Flash存储器是一种非易失性存储器芯片,但其与微处理器芯片之间的接口不同于其他类型的存储器芯片。在NAND Flash芯片的引脚中不包含()类引脚。 A. 地址B. I/O数据C. 控制D. 状态 (10) 若NOR Flash型存储器与Zynq芯片之间的接口电路中,需要提供A0~A22共23根地址信号线,且存储器首字节的地址是0x30000000,那么,其最后1字节的地址应该是()。 A. 0x300FFFFFB. 0x301FFFFF C. 0x303FFFFFD. 0x307FFFFF 2. 填空题 (1) 随机存储器可以被读出数据,也可以被写入数据。之所以称为随机,是因为在读写数据时,可以从存储器的处进行,而不必从开始地址处顺序地进行。 (2) Zynq芯片的内部采用了AMBA总线技术来连接芯片内部的各功能模块,其中连接低速I/O功能模块的总线技术是技术。 (3) NAND Flash存储器芯片的引脚分为3类,即I/O数据引脚、控制引脚和状态引脚。其中I/O数据引脚高度复用,既用作,又用作数据总线和命令输入信号线。 (4) AXI 4总线规范要求,在总线上的总线主控器和总线受控器之间进行传输时,首先需要通过在它们之间建立连接。 (5) Zynq芯片内部的PL与PS之间的互联是基于规范的,它们之间的互连接口有3种类型。 (6) 用Zynq芯片内部PL的FPGA所设计的功能模块(如DMA控制器)作为总线主控器,可以通过接口直接访问PS部分中的OCM和DDR控制器。