引 言
随着电子技术的飞速发展,在实际应用中数据高速传输有着越来越高的要求,链路口为数据传送提供了高速、独立的通信机制,得到广泛应用。AD公司生产的TS201 DSP就具备这种端口。为了使不具备此接口的器件同样也能通过链路口与TS201进行高速通信,引入FPGA进行设计。
FPGA器件因其集成度高、功能强大、现场可编程等优点被广泛应用于各种场合。通过在FPGA上参照链路口通信协议编写VHDL程序,完成数据传送方式的转换,实现此接口与其他设备通信,以满足系统的高速通信要求。
本文设计了一种基于Xilinx公司Virtex4系列的FPGA的128位并行数据与ADSP TS201的链路口通信方式。
1. ADSP TS20l链路口协议
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被置为低。
图3表示当Lxacki被置为低时,说明接收端没有准备好接收更多数据的情况。此时若仍有数据传送,则会造成数据的丢失。
当发送数据长度可变时发送方用Lxbcmpo信号通告接收数据块传输已完成。Lxbcmpo与接收端的Lxbcmpi输入信号连接,当接收端识别该信息,就通知DMA通道数据块传送完毕。
Lxbcmpo信号通过在块的最后4个字传输的第一个Lxclkout上升沿变低,指示块传输完成。而在同一4个字的最后一个Lxclkout下降沿置位。若LTCTLx寄存器中的TBCMPE位被清除或当链路口传输由处理器核执行,Lxbcmpo无效。
2. 模块建立与优化
ADSP TS201的链路口采用的是独立的发送和接收通道,因此对应的FPGA也需要采用不同的接收电路和发送电路。
无论是接收还是发送均由两部分组成:接收/发送缓冲和接收/发送模块。接收模块主要是用于接口和数据的拆包处理,发送模块是用于数据接收和打包处理。接收/发送缓冲则是用来分别配合接收/发送模块进行数据缓冲,并实现数据传输功能。
2.1 接收电路
接收模块:接收到由链路口4位数据总线送出的数据差分信号Lxdatap/n和控制差分信号Lxclk p/n以后不能直接拆包处理,需要将原来的差分信号转换成完整信号、Lxdata和Lxclk,才可进入双倍数据速率器(DDR)寄存,此寄存器由时钟信号clkin(与Lxclk同频率)控制。由于是4位数据总线同时串行传送数据,其具体的数据排序如图4所示。
可见,每一路传送的数据均不是连续的,且都按模4余数分配。为了方便数据并行送出,需要将数据进行拆包整理。每个clkin周期收到8位数据,将此按位号由大到小的顺序整理,并放入mid(7:O)中。其间增加一级触发器作为缓冲。
接收缓冲:此部分主要由状态机和FIFO构成,其中状态机主要控制FIFO写命令的产生,由链路口时钟Lxclk和时钟信号clkin共同产生,即当Lxclk产生第一个上升沿时计数器开始计数从O~15,每次计数就会将相应的FIFO写许可we d置为有效。将128位数据每8位为一组,分别送入16个8位F1FO中,由外部的FIFO_oe读信号和sysclk时钟信号控制128位数据并行读出。即将FIFO_oe信号同时接到16个FIFO上,当FIFO_oe有效时,从16个FIFO中同时读出数据。并根据FIFO存储状态发送Lxacko信号和fuiIflag信号,若FIF0不满则将Lxacko信号置为1(高有效)允许发送端继续通过链路口发送数据;否则Lxacko置为O.
其中,FIFO 8由Core generator直接生成,是异步8位先进先出存储器。下面涉及的FIFO 16,FIFO 32均这样生成。接收(Rx)流程图如图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所示。
2.2 发送电路
发送模块:当外部接收到128位并行数据Datain(127:0)及FIFO写控制信号Datan_we后,将数据按以下规则重新组合排序:
数据整理后,同时送入4个32位FIFO 32中,写时钟为sysclk.当FIFO 32不为空且Lxacki信号为高电平时,接收端允许传送数据。数据由FIFO 32中读出,分别放入4个32位寄存器中,准备发送。
发送缓冲:此部分由状态机和双数据率(DDR)寄存器组成。当发送条件成立,数据放入寄存器后,由state信号控制寄存器,每个Txclk周期从4个寄存器中各读出2位数据Data_tx(7:O)共8位,为了满足链路口通信协议,发送出的数据应如图4所示。因此,将Data_tx两两分组(0和4,1和5,2和6,3和7),4对数据分别由4个双数据率(DDR)寄存器经差分转换送出,根据协议同时送出相应的时钟控制信号Lxclk p/n(与Tkclk相同频率)。按照协议,Lxclk的第一个上升沿必须在第一位数据传送中建立,因此,这里引入时钟信号Txclk90(Txclk相移90°),用来控制Lxelk p/n信号。数据传送结束前的最后一个时钟周期内将Lxbcompo信号置低(低有效)。发送(Tx)流程如图7所示。结构如图8所示。
综合后此电路的主时钟Txclk频率最快可达到280 MHz.分析后发现此结构制约速度的瓶颈为高频计数器,此计数器产生控制信号。因此,为了提高速度优化结构。将此计数器改为原时钟的二分频信号clkd2控制计数。此时每当clkd2上升沿从FIFO 32读出32位数据放入寄存器,该寄存器同样由clkd2控制,时钟的上升沿来到时读出4位数据,组成连续的16位数据,这些数据经过子模块fast的处理,按照链路口协议要求输出数据dataout.综合后此电路的主时钟Txclk频率最快可达到400 MHz.
子模块fast的结构如图9所示。
子模块fast控制模块是由clk,clknot,clkd2和clkd2not四个时钟组合生成,产生muxO和muxl两个控制信号。当mux0=0时Datainn(3:O)输出到DataO,反之,当muxO=1时Datainn(11:8)输出到Data0;同样,当muxl=0时Datainn(7:4)输出到Datal,反之,当muxl=0时,Datainn(15:12)输出到Datal.
为了提高速度,保证高频率下程序的稳定性,使用rloc命令,通过对。fast模块各个触发器属性描述及对底层基本逻辑单元的相对位置进行约束,使得同一组数据的触发器放置相对集中,从而减少了由于时钟信号在布局布线中产生延迟使得数据建立时间不足而引起的不定态。
3. 实现与仿真
ModelSim是一个独立的仿真工具,在Xilinx公司的ISE集成开发环境中给ModelSim仿真软件预留了接口,通过这个接口可以从ISE集成工具中直接启动ModelSim工具进行仿真。由于厂家的推广,ModelSim得到了广泛的应用。
仿真也可分为功能仿真和时序仿真等3大类型。由于特殊底层元件的使用,需要一些器件库模型的支持。而综合后门级功能仿真以及实现后时序仿真都需要厂家器件库的支持。
因此,在使用ModelSim 6.2进行功能级仿真和布局布线后仿真时,应根据需要提前对Xilinx的UN ISIM,XmnxCoreLib,SIMPRIM,SmartModel库进行编译。其中,UNISIM库包含了Xilinx公司全部的标准元件;XilinxCoreLib则包含了使用Xilinx CoreGenerator工具生成的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所示。
接收:此波形表示有TS201链路口接收到一组数据,当FIFO_oe(即FIFO读信号)为高时将数据并行送出,如图11所示。
结 语
本文介绍了一种利用VHDL语言在FPGA上实现链路口通信的方法,实现FPGA与ADSP TS201之间的高速链路口通信。设计最终能达到的接收链路时钟频率为500 MHz,发送链路时钟频率为400 MHz,充分发挥了链路口通信的速度优势。也使得ADSPTS201通过具有此功能的FPGA与其他并行接口器件或设备进行高速通信成为可能。 |