 
- UID
- 1029342
- 性别
- 男
|

3.FPGA与DSP的EMIF连接
FPGA的灵活性使我们可以将其用做具备可选择总线宽度(8位~64位)的各类存储器而创建不同的设计。通过接口设计,可将FPGA用做同步或异步标准存储器,或同步或异步FIFO。通过接口设计,可将FPGA以同步或异步的方式连接到EMIF。
在同步模式中,ECLKOUTx时钟用于驱动FPGA接口逻辑。此时钟甚至可以驱动整个 FPGA。FPGA的逻辑功能、专用乘法器、PPC405或MicroBlaze™处理器等使其具备了强大的处理功能。这样,FPGA就可以用做协处理器或高速数据处理和传输器件。
FPGA的存储器容量小于TMSC64x类型DSP的寻址空间。FPGA存储器必须使用FPGA Block RAM来实现。上述TMSC64x到FPGA的接口为FIFO结构,可以使用Black RAM资源来实现。
FIFO接口可使用标准的TMSC64x EMIF FIFO接口机制。如表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.3V VCCIO。如果无法指定,就必须使用电平移位器件。这一器件可为两个器件间的信号通路引入额外的时间。
4.FIFO接口的设计实例
本设计使用了标准的EMIF FIFO设置。如图11.7所示为用于Xilinx公司的Virtex-II Pro 和Spartan-3器件的设计示例。

图11.7基于FIFO的EMIF接口实例
数据组芯片使能信号(Cex)与异步输出使能(AOE)一起,用于为设计的写或读FIFO部分生成使能信号。此信号还用于为数据多路复用器和标志选择逻辑生成使能信号。
FIFO的读写时钟通过本地时钟布线直接布线到FIFO时钟输入。
FIFO中使用的 RAMB16组件由于沿着与EMIF相连接的I/O块进行排列,显著改善了时序。当Block RAM组件的列的大小与使用的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(HDS1 XOR HDS2)] OR HCS
| 对于一个写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位的写入操作。 |
|