FPGA与DSP协同处理系统设计之: FPGA与DSP的通信接口设计
11.3FPGA与DSP的通信接口设计
·主机型接口,如HPI等。
·总线型接口,如PCI、EMAC等。
·串口型接口,如McBSP、McASP、SPI、UART等。
·特殊类接口,如VLYNQ、VPORT等。
以上的接口中,比较常用的接口是EMIF和HPI。其中总线接口需要协议支持,开发难度较大,串行接口开发简单,但是速率较慢。VPORT等特殊接口一般是在特定的场合下应用,不具备通用性,而且需要修改DSP驱动,开发周期较长。
11.3.1基于TMS320C64x系列的EMIF接口设计
1.EMIF简介
TMSC64xEMIF是TMSC621xEMIF的增强版。它具备TMSC621x/TMSC671xEMIF的所有功能,并添加了以下新功能。
(1)EMIFA上的数据总线可以是64位宽,也可以是32位宽。
(2)EMIFB上的数据总线为16位宽。
(3)EMIF时钟ECLKOUTx为内部生成,并基于EMIF输入时钟。器件复位时,以下3个时钟之一会被配置为EMIF输入时钟。
·内部CPU时钟4分频。
·内部CPU时钟4分频。
·外部ECLKIN与TMSC64xEMIF接口的存储器应按照ECLKOUTx的时钟频率运行。
·可编程同步存储器接口控制器的同步控制引脚替换了固定的SBSRAM控制引脚。
·PDT引脚提供外部到外部传输支持。
如图11.4所示为组成EMIFA和EMIFB接口的信号,表11.2对这些信号进行了描述。端口A的信号都带前缀“A”,端口B的信号都带前缀“B”。为方便起见,所有信号名称都省略了EMIF端口前缀。
EMIFA接口具备与8、16、32或64位系统接口的功能。EMIFB接口端口仅支持8位和16位系统,如图11.5所示。
外部器件(主要是存储器)通常与总线的ED[7:0]字节侧右对齐。Endianess(字节顺序)决定ED[7:0]位是作为字节0(littleendian(小端))还是字节N(bigendian(大端),其中2N是总线宽度)存取。对不同字节通道的选择,可通过低有效字节使能信号的应用(如表11.2所示)来完成。
图11.4EMIFA和EMIFB信号
表11.2 EMIF信号描述
引脚 |
I/O/Z |
描述 |
CLKOUT4 |
O/Z |
CPU时钟的4分 |
CLKOUT6 |
O/Z |
CPU时钟的6分 |
ECLKIN |
I |
EMIF时钟输入 |
ECLKOUT1 |
O/Z |
速率为ECLKIN、CPU/4或CPU/6时的EMIF输出时钟 |
ECLKOUT2 |
O/Z |
速率为ECLKIN、CLKOUT4或CLKOUT6时的EMIF输出时钟 |
ED[63:0] |
I/O/Z |
EMIFA64位数据总线 |
ED[31:0] |
I/O/Z |
EMIFA32位数据总线 |
ED[15:0] |
I/O/Z |
EMIFB16位数据总线 |
EA[22:3] |
O/Z |
EMIFA地址输出 |
EA[20:1] |
O/Z |
EMIFB地址输出 |
CE0 |
O/Z |
存储器空间0的芯片选择 |
CE1 |
O/Z |
存储器空间1的芯片选择 |
续表
引脚 |
I/O/Z |
描述 |
CE2 |
O/Z |
存储器空间2的芯片选择 |
CE3 |
O/Z |
存储器空间3的芯片选择 |
BE[7:0] |
O/Z |
EMIFA64位字节使能,字节使能仅针对其对应的字节通道有效 如BE[0]对应ED[7:0] |
BE[3:0] |
O/Z |
EMIFA32位字节使能,字节使能仅针对其对应的字节通道有效 |
BE[1:0] |
O/Z |
EMIFB16位字节使能,字节使能仅针对其对应的字节通道有效 |
ARDY |
I |
异步就绪输入,低速外设插入等待状态 |
SOE3 |
O/Z |
CE3的同步输出使能 |
AOE |
O/Z |
异步输出使能 |
SDRAS |
O/Z |
DRAM存储器的行地址选通脉冲 |
SOE |
O/Z |
同步输出使能 |
ARE |
O/Z |
异步读使能 |
SDCAS |
O/Z |
SDRAM存储器的列地址选通脉冲 |
SADS/SRE |
O/Z |
同步地址选通脉冲或读使能 |
AWE |
O/Z |
异步写选通脉冲 |
SDWE |
O/Z |
SDRAM的写使能 |
SWE |
O/Z |
同步写使能 |
HOLD |
I |
外部总线保持请求 |
HOLDA |
O |
外部总线保持确认 |
BUSREQ |
O |
总线请求 |
PDT |
O/Z |
外设数据传输 |
SDCKE |
O/Z |
SDRAM时钟使能 |
CLKOUT4 |
O/Z |
CPU时钟的4分 |
CLKOUT6 |
O/Z |
CPU时钟的6分 |
ECLKIN |
I |
EMIF时钟输入 |
ECLKOUT1 |
O/Z |
速率为ECLKIN、CPU/4或CPU/6时的EMIF输出时钟 |
ECLKOUT2 |
O/Z |
速率为ECLKIN、CLKOUT4或CLKOUT6时的EMIF输出时钟 |
ED[63:0] |
I/O/Z |
EMIFA64位数据总线14 |
ED[31:0] |
I/O/Z |
EMIFA32位数据总线 |
ED[15:0] |
I/O/Z |
EMIFB16位数据总线 |
EA[22:3] |
O/Z |
EMIFA地址输出 |
续表
引脚 |
I/O/Z |
描述 |
EA[20:1] |
O/Z |
EMIFB地址输出 |
CE0 |
O/Z |
存储器空间0的芯片选择 |
CE1 |
O/Z |
存储器空间1的芯片选择 |
CE2 |
O/Z |
存储器空间2的芯片选择 |
CE3 |
O/Z |
存储器空间3的芯片选择 |
BE[7:0] |
O/Z |
EMIFA64位字节使能。字节使能仅针对其对应的字节通道有效 |
BE[3:0] |
O/Z |
BE7对应ED[63:56] |
BE[1:0] |
O/Z |
BE6对应ED[55:48] |
ARDY |
I |
BE5对应ED[47:40] |
SOE3 |
O/E |
BE4对应ED[39:32] |
BE3对应ED[31:24] |
||
BE2对应ED[23:16] |
||
BE1对应ED[15:8] |
||
BE0对应ED[7:0] |
图11.5按Endianess对齐字节
有关EMIF接口及其功能的完整概述,请参阅相关的TI数据手册(tms320c64xx.pdf,其中xx为15t、16t或18)。
2.FPGA的BlockRAM简介
Xilinx架构的FPGA都可以访问模块存储器(BlockRAM)。Virtex、Virtex-E和Spartan-II器件中的这些4Kbit的模块在Virtex-II、Virtex-IIPro和Spartan-3器件中都增加到18Kbit的模块。
这些模块都是完全同步、真正的双端存储器。用户可独立地从每个端口读出或向每个端口写入(但同一地址不能同时进行读和写)。另外,每个端口都有一个独立的时钟,并且对每个端口的数据宽度都可以独立进行配置。如图11.6所示为双端RAM模块的框图。
由FPGA逻辑和一批BlockRAM组成的FIFO取决于所构建的FIFO要求的宽度和深度。FIFO可使用XilinxCOREGenerator™工具构建,或者可以用HDL手动组合。
使用COREGenerator工具构建FIFO具有一定优势,即设计可以达到并实现很高的性能指标。按照设计规范用HDL构建的设计则可赋予设计人员完全的设计自由。
3.FPGA与DSP的EMIF连接
FPGA的灵活性使我们可以将其用做具备可选择总线宽度(8位~64位)的各类存储器而创建不同的设计。通过接口设计,可将FPGA用做同步或异步标准存储器,或同步或异步FIFO。通过接口设计,可将FPGA以同步或异步的方式连接到EMIF。
在同步模式中,ECLKOUTx时钟用于驱动FPGA接口逻辑。此时钟甚至可以驱动整个FPGA。FPGA的逻辑功能、专用乘法器、PPC405或MicroBlaze™处理器等使其具备了强大的处理功能。这样,FPGA就可以用做协处理器或高速数据处理和传输器件。
FPGA的存储器容量小于TMSC64x类型DSP的寻址空间。FPGA存储器必须使用FPGABlockRAM来实现。上述TMSC64x到FPGA的接口为FIFO结构,可以使用BlackRAM资源来实现。
FIFO接口可使用标准的TMSC64xEMIFFIFO接口机制。如表11.3所示为EMIF信号的总结。
表11.3 EMIF与FPGA的接口信号
信号名称 |
方向 |
CE |
DSP输出 |
AOE |
DSP输出 |
AWE |
DSP输出 |
ARE |
DSP输出 |
INTx |
DSP输入 |
INTy |
DSP输入 |
INTz |
DSP输入 |
ED[63:0] |
DSP双向 |
FIFO要求连续地读时钟和连续地写时钟。这些时钟由ARE和AWE信号生成,使用FPGA的本地时钟控制功能进行布线。
DSP具有3.3V的接口逻辑,所以用于连接到EMIF的I/O组(bank)必须指定为3.3VVCCIO。如果无法指定,就必须使用电平移位器件。这一器件可为两个器件间的信号通路引入额外的时间。
4.FIFO接口的设计实例
本设计使用了标准的EMIFFIFO设置。如图11.7所示为用于Xilinx公司的Virtex-IIPro和Spartan-3器件的设计示例。
图11.7基于FIFO的EMIF接口实例
数据组芯片使能信号(Cex)与异步输出使能(AOE)一起,用于为设计的写或读FIFO部分生成使能信号。此信号还用于为数据多路复用器和标志选择逻辑生成使能信号。
FIFO的读写时钟通过本地时钟布线直接布线到FIFO时钟输入。
FIFO中使用的RAMB16组件由于沿着与EMIF相连接的I/O块进行排列,显著改善了时序。当BlockRAM组件的列的大小与使用的I/O的数量相同时,即可构建快速的矩形接口。
本设计使用常规的FIFO标志输出。要对标志逻辑施加额外控制,无论是针对DSP端还是FPGA端,可使用写计数器和读计数器输出。
信号AINIT(图11.7中未显示)强制所有标志为高有效状态。AINIT发出后,在第一个WR_CLK上,FULL和ALMOST_FULL标志变为无效,呈低状态。对于在首个RD_CLK边沿上的EMPTY和ALMOST_EMPTY标记,也会发生同样情况。
ALMOST_EMPTY和ALMOST_FULL标志表明只剩下了一个FIFO位置。使用WR_COUNT和RD_COUNT输出,可以构建用户定义的FIFO标志。这两个计数器的值都不反映FIFO内容(地址)的准确位置。FIFO的两个端口(时钟域)都存在时钟延迟,长度为一个时钟周期。
输出WR_COUNT和RD_COUNT为被延迟的内部FIFO高位地址计数器。为输出选择两个比特,即可将FIFO的位置确定到总尺寸的四分之一(如下面计数器解码示例中所示)。
计数器越宽,位置就能越精细。下面是计数器解码示例。
·COUNT[1:0]=0b00表明FIFO小于1/4满或1/4空。
·COUNT[1:0]=0b01表明FIFO在1/4和1/2满之间或1/4和1/2空之间。
·COUNT[1:0]=0b10表明FIFO在1/2和3/4满之间或1/2和3/4空之间。
·COUNT[1:0]=0b11表明FIFO大于3/4满或3/4空。
DSP对不同标志的反应取决于FPGA中读写FIFO的状态。
11.3.2基于TMS320系列DSP的主机接口(HPI)设计
1.HPI接口简介
HPI接口是一种数据宽度为16位的并行端口(C64xx系列DSP中,HPI口的数据宽度达到32位)。通过HPI口,主机可以直接对CPU的存储器空间进行操作。
在C621x、C671x系列DSP中,没有留出专门的EDMA通道来执行HPI口的访问操作,而是直接将HPI口连接到内部的地址产生硬件上,因而提高了对内部存储空间的访问速度。
HPI口内部加入了两个8级深度的读写缓冲,可以执行地址自增的读写操作,提高读写操作的吞吐量。HPI口为内部CPU提供了标准32位的数据接口,同时为外部主机也提供了一个经济的16位接口,所以对外部主机而言,每次读写必须执行成对的16位操作。
对于C64xx系列DSP,HPI可以选择16位(HPI16)和32位(HPI32)两种模式。
对于C621x、C671x系列DSP,HPI口内部有3个寄存器,分别是控制寄存器(HPIC)、地址寄存器(HPIA)和数据寄存器(HPID)。这3个寄存器可以直接被主机访问,主机每执行一次对CPU内部存储空间的访问都必须先对控制寄存器和地址寄存器写入相应的值,然后才能对数据寄存器进行读写操作。
HPI口的外部接口是由数据总线HD[15:0]以及一部分用于描述和控制HPI接口的控制信号组成,这些控制信号的具体类型如表11.4所示。
表11.4 HPI信号描述
引脚 |
描述 |
HCNTL[1:0] |
控制HPI的操作类型 |
HHCNTL |
半字确认输入,“0”、“1”分别表示一次字传输的第一个半字和第二个半字 |
HR/W |
读/写选择 |
续表
引脚 |
描述 |
HRDY |
就绪状态标志 |
HINT |
中断标志,DSP向主机提出中断 |
HAS |
区别地址/数据复用总线的数据与地址 |
HDS1、HDS2、HCS |
数据选通输入,三者配合可用于产生一个HPI内部选通信号HSTROBE,这个信号可以用以下公式来描述: HSTROBE=[NOT(HDS1XORHDS2)]ORHCS |
对于一个写HPI口的操作,应首先使能HCS,变化HDS1或HDS2,可使HSTROBE信号产生一个下降沿。HPI口在这个下降沿采样控制信号HCNTL[1:0]、HHWIL和HR/W,同时在使能HCS的同时驱动HRDY,以使主机进入等待状态。直到HRDY产生下降沿,表明HPID已清空,可以接收新的数据。此时HSTROBE也将产生一个上升沿,并采样HD[15:0]上的数据并将其送入HPID,以完成第一个半字的写入。
对于第二个半字的写入,由于32位的HPID已经清空,可以直接写入数据。不会出现未准备好的情况,所以HRDY一直保持为低,与第一个字节的写入相同。该操作也在HSTROBE的下降沿采样控制信号,并在HSTROBE的上升沿采样数据总线HD[15:0]的数据并送HPID,以完成一个32位的写入操作。
2.FPGA与DSP的HPI连接实例
FPGA与HPI的接口连接比较简单,就是将HPI接口相关的信号全部连接到FPGA的管脚。如图11.8和图11.9所示分别是FPGA和TI不同系列的DSP的连接框图。
图11.8FPGA与C621x、C671x系列DSP的HPI接口互联框图
图11.9FPGA与C64x系列DSP的HPI接口互联框图
评论