ADSP TS201链路口通信的FPGA实现

2009-03-19 01:59魏云斐张遂南
现代电子技术 2009年3期

魏云斐 张遂南

摘 要:AD公司的TS201 DSP系列可通过其特有的链路口实现高速通信,为使不具备此接口的设备也能与TS201进行链路通讯,采用 FPGA实现数据在链路口与其他并行接口之间的传输,即 128位并行模式和4位通信模式之间的转换。设计选用Xilinx公司的Virtex4系列的FPGA,它具有低功耗差分(LVDS)模式,双倍数据速率(DDR)寄存器以及嵌入式先进先出(FIFO)存储器等功能,更适合于此设计。在ISE 和Modelsim等辅助工具的帮助下,使用VHDL语言编程,分析和优化整个设计,最终完成设计。可实现接收链路时钟频率为500 MHz,发送链路时钟频率为400 MHz。

关键词:链路口;低功耗差分;双倍数据速率;FPGA;VHDL

中图分类号:TN919文献标识码:B

文章编号:1004-373X(2009)03-167-04

Implementation of ADSP TS201 Link Port Communication on FPGA

WEI Yunfei,ZHANG Suinan

(Xi′an Micro-electronics Technology Institute,Xi′an,710075,China)

Abstract:Through AD′s TS201 DSP series special high speed link ports communication,to enable the equipments which doesn′t has the interface to link with TS201 communication,the transmission of data between link ports and other parallel interfaces is realized by FPGA,that is,the conversion between 128 b and 4 b Xilinx Virtex4 grade -12 series FPGA is chosen,it contains a Low-power Differential (LVDS) model,Double Data Rate (DDR) register,embedded FIFO memory and other functions.In the ISE and Modelsim′s help,using VHDL language program,the entire design is analysed and optimized.It can get a receiving clock frequency about 500 MHz,a transmitting clock frequency about 400 MHz.

Keywords:link port;LVDS;DDR;FPGA;VHDL

0 引 言

随着电子技术的飞速发展,在实际应用中数据高速传输有着越来越高的要求,链路口为数据传送提供了高速、独立的通信机制,得到广泛应用。AD公司生产的TS201 DSP就具备这种端口。为了使不具备此接口的器件同样也能通过链路口与TS201进行高速通信,引入FPGA进行设计。

FPGA器件因其集成度高、功能强大、现场可编程等优点被广泛应用于各种场合。通过在FPGA上参照链路口通信协议编写VHDL程序,完成数据传送方式的转换,实现此接口与其他设备通信,以满足系统的高速通信要求。

本文设计了一种基于Xilinx公司Virtex4系列的FPGA的128位并行数据与ADSP TS201的链路口通信方式。

1 ADSP TS201链路口协议

ADSP TS201有4个链路口均采用LVDS(Low Voltage Differential Signaling )电路, 每个链路口都是由4位双向差分数据线和另外3个控制信号构成。接收控制信号包括:Lxclkinp/n,Lxacko,Lxbcmpi;发送控制信号包括: Lxclkoutp/n,Lxacki和Lxbcmpo。其中,Lxclkoutp/n和Lxclkinp/n用于描述输出或输入信号的时钟,Lxacko和Lxacki则表示接收端发出的信号和发送端接收的信号表明是否可以继续发送,Lxbcmpi和Lxbcmpo说明块传输已经完成。

链路口每个方向(Rx或Tx)均可通过1位或4位数据总线通信,发送端发送数据到外部设备,接收通端从外部设备获取数据。这里主要讨论4位数据总线通信模式的具体实现。

在链路口通讯协议的时序上采用一些通用规则,具体规则如下:

① 第一个数据(1位或4位)必须在链路口时钟(Lxclkoutp)的第一个上升沿发送。

② 后一个数据(1位或4位)必须在链路口时钟(Lxclkoutp)最后一个下降沿发送。

③ 当链路口停止收发后Lxclkoutp被置为低。

④ 每次至少传送4个字(128位)。传送需要用16个链路口周期,如图1所示。

当Lxacki被置为高,即接收缓冲是空的,发送通道被初始化,发送端可以继续发送数据。如图2所示,第一个数据在第一个Lxclkoutp上升沿有效,最后一个数据在最后一个链路口时钟下降沿之前发送。当链路口停止时Lxclkoutp被置为低。

图1 4位模式时序

图2 链路口a只发送4个字的时序

图3 链路口a发送到接收端(Rx满)

图3表示当Lxacki被置为低时,说明接收端没有准备好接收更多数据的情况。此时若仍有数据传送,则会造成数据的丢失。

当发送数据长度可变时发送方用Lxbcmpo信号通告接收数据块传输已完成。Lxbcmpo与接收端的Lxbcmpi输入信号连接,当接收端识别该信息,就通知DMA通道数据块传送完毕。

Lxbcmpo信号通过在块的最后4个字传输的第一个Lxclkout上升沿变低,指示块传输完成。而在同一4个字的最后一个Lxclkout下降沿置位。若LTCTLx寄存器中的TBCMPE位被清除或当链路口传输由处理器核执行,Lxbcmpo无效。

2 模块建立与优化

ADSP TS201的链路口采用的是独立的发送和接收通道,因此对应的FPGA也需要采用不同的接收电路和发送电路。

无论是接收还是发送均由两部分组成:接收/发送缓冲和接收/发送模块。接收模块主要是用于接口和数据的拆包处理,发送模块是用于数据接收和打包处理。接收/发送缓冲则是用来分别配合接收/发送模块进行数据缓冲,并实现数据传输功能。

2.1 接收电路

接收模块:接收到由链路口4位数据总线送出的数据差分信号Lxdata_p/n和控制差分信号Lxclk_p/n以后不能直接拆包处理,需要将原来的差分信号转换成完整信号Lxdata和Lxclk,才可进入双倍数据速率器(DDR)寄存,此寄存器由时钟信号clkin(与Lxclk同频率)控制。由于是4位数据总线同时串行传送数据,其具体的数据排序如图4所示。

可见,每一路传送的数据均不是连续的,且都按模4余数分配。为了方便数据并行送出,需要将数据进行拆包整理。每个clkin周期收到8位数据,将此按位号由大到小的顺序整理,并放入mid(7:0)中。其间增加一级触发器作为缓冲。

接收缓冲:此部分主要由状态机和FIFO构成,其中状态机主要控制FIFO写命令的产生,由链路口时钟Lxclk和时钟信号clkin共同产生,即当Lxclk产生第一个上升沿时计数器开始计数从0~15,每次计数就会将相应的FIFO写许可we_d置为有效。将128位数据每8位为一组,分别送入16个8位FIFO中,由外部的FIFO_oe读信号和sysclk时钟信号控制128位数据并行读出。即将FIFO_oe信号同时接到16个FIFO上,当FIFO_oe有效时,从16个FIFO中同时读出数据。并根据FIFO存储状态发送Lxacko信号和fullflag信号,若FIFO不满则将Lxacko信号置为1(高有效)允许发送端继续通过链路口发送数据;否则Lxacko置为0。

图4 4位数据模式传送数据排序

其中,FIFO 8由Core generator直接生成,是异步8位先进先出存储器。下面涉及的FIFO 16,FIFO 32均这样生成。接收(Rx)流程图如图5所示。

图5 接收流程图

综合后此电路的主时钟Clkin频率最快可达到368 MHz。由于一个FIFO 8就占用了一个18 Kb的嵌入式FIFO资源,而16个FIFO就占据了16个块的资源,这不仅造成了资源的浪费,还增加了布局布线所需要的时间。因此,为了优化结构,增加一级寄存器,扩展数据的位数,使得数据在未进入FIFO 前就已得到处理,由原来的8位数据mid连成16位数据Data,再送入16位的FIFO 16中。优化后,FIFO 16的使用率由原来的22%减少到11%,大大减少了线上延迟。综合此电路的主时钟clkin频率最高可实现500 MHz。具体结构如图6所示。

图6 优化后的接收结构

2.2 发送电路

发送模块:当外部接收到128位并行数据Datain(127:0)及FIFO写控制信号Datain_we后,将数据按以下规则重新组合排序:

loop0 : for i in 0 to 7 generate

ramdata0((4*i)+3 downto 4*i)<=datain((16*i)+3 downto (16*i)+0);

ramdata1((4*i)+3 downto 4*i)<=datain((16*i)+7 downto (16*i)+4);

ramdata2((4*i)+3 downto 4*i)<=datain((16*i)+11 downto (16*i)+8);

ramdata3((4*i)+3 downto 4*i)<=datain((16*i)+15 downto (16*i)+12);

end generate;

数据整理后,同时送入4个32位FIFO 32中,写时钟为sysclk。当FIFO 32不为空且Lxacki信号为高电平时,接收端允许传送数据。数据由FIFO 32中读出,分别放入4个32位寄存器中,准备发送。

发送缓冲:此部分由状态机和双数据率(DDR)寄存器组成。当发送条件成立,数据放入寄存器后,由state信号控制寄存器,每个Txclk周期从4个寄存器中各读出2位数据Data_tx(7:0) 共8位,为了满足链路口通信协议,发送出的数据应如图4所示。因此,将Data_tx两两分组(0和4,1和5,2和6,3和7),4对数据分别由4个双数据率(DDR)寄存器经差分转换送出,根据协议同时送出相应的时钟控制信号Lxclk_p/n(与Txclk相同频率)。按照协议,Lxclk的第一个上升沿必须在第一位数据传送中建立,因此,这里引入时钟信号Txclk90(Txclk相移90°),用来控制Lxclk_p/n信号。数据传送结束前的最后一个时钟周期内将Lxbcompo信号置低(低有效)。发送(Tx)流程如图7所示。结构如图8所示。

图7 数据流程图

综合后此电路的主时钟Txclk频率最快可达到280 MHz。分析后发现此结构制约速度的瓶颈为高频计数器,此计数器产生控制信号。因此,为了提高速度优化结构。将此计数器改为原时钟的二分频信号clkd2控制计数。此时每当clkd2上升沿从FIFO 32读出32位数据放入寄存器,该寄存器同样由clkd2控制,时钟的上升沿来到时读出4位数据,组成连续的16位数据,这些数据经过子模块fast的处理,按照链路口协议要求输出数据dataout。综合后此电路的主时钟Txclk频率最快可达到400 MHz。

子模块fast的结构如图9所示。

子模块fast控制模块是由clk,clknot,clkd2和clkd2not四个时钟组合生成,产生mux0和mux1两个控制信号。当mux0=0时Datainn(3:0)输出到Data0,反之,当mux0=1时Datainn(11:8)输出到Data0;同样,当mux1=0时Datainn(7:4)输出到Data1,反之,当mux1=0时,Datainn(15:12)输出到Data1。

图8 发送结构

图9 fast模块结构

为了提高速度,保证高频率下程序的稳定性,使用rloc命令,通过对fast模块各个触发器属性描述及对底层基本逻辑单元的相对位置进行约束,使得同一组数据的触发器放置相对集中,从而减少了由于时钟信号在布局布线中产生延迟使得数据建立时间不足而引起的不定态。

3 实现与仿真

ModelSim是一个独立的仿真工具,在Xilinx公司的ISE集成开发环境中给ModelSim 仿真软件预留了接口,通过这个接口可以从ISE集成工具中直接启动ModelSim工具进行仿真。由于厂家的推广,ModelSim得到了广泛的应用。

仿真也可分为功能仿真和时序仿真等3大类型。由于特殊底层元件的使用,需要一些器件库模型的支持。而综合后门级功能仿真以及实现后时序仿真都需要厂家器件库的支持。

因此,在使用ModelSim 6.2进行功能级仿真和布局布线后仿真时,应根据需要提前对Xilinx的UNISIM,XilinxCoreLib,SIMPRIM,SmartModel库进行编译。其中,UNISIM库包含了Xilinx公司全部的标准元件;XilinxCoreLib则包含了使用Xilinx Core Generator工具生成的IP的仿真模型;SIMPRIM库用来做时序仿真或者门及功能仿真;SmartModel库用来模拟复杂的FPGA设计。

首先按如下步骤完成对XX的编译:

(1) 将ModelSim根目录下的modelsim.ini文件的属性设置为存档;

(2) 在ModelSim的命令窗口中输入命令:“compxlib-s mti_se-arch all-l vhdl-w-lib all”;

(3) 将ModelSim.ini文件的属性重新设置为只读。

环境建立好以后,首先对程序进行功能级仿真,验证功能是否达到要求;功能仿真正确后再进行布局布线后仿真,根据布局布线仿真的情况再对程序进行分析,调整或者修改原先的设计,以满足设计要求。

发送:此波形显示将128位数据Data0转换成链路口的传送协议送出,如图10所示。

图10 发送波形

接收:此波形表示有TS201链路口接收到一组数据,当FIFO_oe(即FIFO读信号) 为高时将数据并行送出,如图11所示。

图11 接收波形

4 结 语

本文介绍了一种利用VHDL语言在FPGA上实现链路口通信的方法,实现FPGA与ADSP TS201 之间的高速链路口通信。设计最终能达到的接收链路时钟频率为500 MHz,发送链路时钟频率为400 MHz,充

分发挥了链路口通信的速度优势。也使得ADSP TS201通过具有此功能的FPGA与其他并行接口器件或设备进行高速通信成为可能。

参考文献

[1]侯伯亨.VHDL硬件描述语言与数字逻辑电路设计[M].西安:西安电子科技大学出版社,1999.

[2]刘书明,罗勇将.ADSP TS20XS系列DSP原理与应用设计[M].北京:电子工业出版社,2007.

[3]王诚,薛小刚,钟信潮.FPGA/CPLD设计工具-XilinxISE使用详解[M].北京:人民邮电出版社,2005.

[4]ModelSimsRSE User′s Manual[DB/OL].Software Version 6.2b,2006.

[5]Xilinx ISE 8 Software Manuals[DB/OL].Xilinx,Inc.All Rights Reserved,2006.

[6]朱明程.现场可编程逻辑门阵列器件 FPGA原理及应用设计[M].北京:电子工业出版社,1994.

[7]Stefan Sjoholm,Lennart Lindh.VHDL for Designers[M].北京:清华大学出版社,2000.

[8]初步产品技术规范.Virtex-4系列概述[DB/OL].DS112(v2.0),2007.

[9]Virtex-4 User Guide[DB/OL].UG070 (v2.2),2007.

[10]ADSP-TS201 TigerSHARCsRProcessor Hardware Reference[DB/OL].Revision 1.1,2004.

作者简介

魏云斐 女,1981年出生,硕士研究生。主要研究方向为计算机系统结构

注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。