本文探讨在Virtex-5 FPGA中实现设计的一些难题,然后用一个项目作为示范来详解充分利用其功能集的技法。设计过程包括几个步骤,从针对应用选择适合的Virtex-5开始。为便于本文叙述,我们假定IP模块已经过汇编,并且已经就绪备用或已经用CORE Generator生成。 针对应用选择适合的器件 多数音视频采集器件都支持单信道,以Y/Cr/Cb数据格式生成源同步数字信号。DSP虽然有能力采集数字音视频信号,也能够执行数字信号处理任务,但通常却仅支持少数几条信道。本设计选择了FPGA,事实证明这对于多信道输入任务和信号处理任务都是良好的替代方案。 图 1所示为典型的安全视频监视系统,其中有一个3G/SD/HD/SDI视频接口。在此设计中,摄像头将3G—SDI格式的信息传送到电路板,后者继而收集数据,并且以145.5MHz的最高时钟频率将其转换成10位(Y/Cr/Cb格式)的源同步视频数据(10/20位的接口)。电路板以 96kHz的最高时钟频率处理源同步音频数据。
这里,存储器的容量是512Mb,宽度是32位,所以FPGA必须支持高达2Gb的扩展能力。 对于这个设计来说,FPGA必须支持多达十条数字音视频源同步输入信道(20位源同步Y/Cr/Cb数据格式),并且必须可按照SD/HD数据格式配置。其他要求还包括音视频信号处理和可选压缩算法、带有高级DMA引擎的中央处理单元和一个用来连接VGA显示器或标准型电视机的音视频输出端口等。 要满足这些技术条件,在实现设计时必须考虑几个因素。其中的主要因素是时钟要求分析、初始布局规划、核生成和IP集成、时序约束定义以及布局布线后的时序分析和时序校正。但首先要决定FPGA的选择。 FPGA的选择 我们根据几个因素进行选择。器件需要满足预计的I/O要求,并且必须具有相应数量的逻辑单元、适宜的Block RAM尺寸以及一定数量的时钟缓冲器和时钟管理器件,如锁相环(PLL)、数字时钟管理(DcM)模块和乘累加模块。基于这些需求,我们选择了 Virtex-5 XCVSX95T-FF1136。 时钟要求分析 选择FPGA之后,我们开始设计过程,即分析时钟控制要求,然后将信号映射到I/O组或I/O引脚。 对于时钟要求分析,重要的是考虑以下几个因素:FPGA是否具有足够的时钟功能I/O线和全局时钟I/O线?是否有足够的PLL、DCM和全局时钟缓冲器?全局时钟I/O缓冲器是否支持所要求的最高频率? 本设计的时钟控制要求包括:一个以150MHz-200MHz频率运行的全局系统时钟,具有若干PLL供所有内部逻辑用来进行处理;一个以 250MHz频率运行的全局时钟,具有PLL/DCM的PCI Express链接;一个以250MHz频率运行的全局时钟缓冲器(带有PLL和DCM)用于以太网MAC;以及一个200MHz的时钟(由 PLL/DCM生成),用于I/O模块中的逐位去歪斜等。 我们总共需要4~6个全局时钟缓冲器和16个局部时钟缓冲器。FPGA XCVSX95T-FF1136提供每组20个全局时钟输入引脚和4个时钟功能I/O。也可将I/O组的时钟功能引脚直接连接到区域缓冲器或I/O缓冲器,并且将其用于特定区域或相邻区域。另外,各GTP/MGT还有一个参考时钟输入引脚。 初始布局规划 初始布局计划是设计的关键阶段,因为此时所作的决定将确定最终设计是否能满足时序。其中组选择和引脚分配是布局规划的重要步骤。如何进行这两个步骤取决于FPGA周围其他组件的布局。 Virtex—5 FPGA共有18个I/O组,可以将各种输入/输出对映射到这些I/O组。有几个I/O组支持20对输入/输出或10个全局时钟。其他I/O组则大多支持40对输入/输出,每对输入/输出上有4个输入时钟功能引脚和8个输出时钟功能引脚。 同时,上下两牛个FPGA包括三个时钟控制模块(CMT),即一个PLL和两个DCM。对于需要上下两半个器件中的PLL的所有全局时钟信号,我们必须确保予以妥善映射,以使设计具有从全局时钟输入缓冲器到PLL的直接连接。然后我们使用剩下的14个I/O组,这些组支持40条I/O线,是单端/差分模式。每个组由4个单端时钟功能引脚和8个差分时钟功能引脚组成。接下来可以将时钟功能引脚映射或连接到区域时钟缓冲器或I/O时钟缓冲器。 一般情况下,可以使用这些时钟功能引脚和区域缓冲器来映射源同步时钟输入。区域缓冲器具有较低歪斜度,可以访问三个区域(一个区域缓冲器所在的区域,以及其上和其下各一个区域)。但对于源同步数据的组选择,我们倾向于只使用一个I/O组。如果需要其他IIO,则最好将I/O组用于已事先映射到相邻组的数据信号。 设计的初始布局规划按照几个步骤进行。首先将系统时钟放在上半部,然后将自动采集(可选)时钟放在下半部。我们锁定了每半部分的CMT,以满足 I/O组的3/4要求。这样映射能确保每半部分都留有两个PLL/DCM(CMT)可用于PCI Express和千兆位以太网的MAC(SGMII)功能。 再把同步数据映射到含有区域时钟的组,所以把10个音视频信道输入映射到剩下的I/O组。每条视频信道由20条数据线、3个控制信号和3个视频时钟输入组成。同时,每条音频信道由4个数据信号、3个控制信号和1个音频时钟信号组成。这样就满足了32个信号至少使用两个时钟功能引脚的要求。 对于本设计,10个音视频信道使用10个I/O组。我们将视频时钟和音频时钟映射到了时钟功能引脚,以确保有效使用区域时钟缓冲器和I/O时钟缓冲器。根据PCB的要求,我们为音视频信道选择了第5、 6、 13、 17、 18、 19、 20、 22和25组。 对于DDR存储器,设计支持1条32位的数据总线、14条地址线和若干条控制线。我们需要85~90个信号来映射DDR存储器接口。根据PCB的布局,我们使用了I/O组11、23和15来映射DDR的全部I/0信号。由于 DDR存储器按照系统时钟工作,所以我们选择将DDR生成的读数据DQS信号映射到具有时钟功能的I/O线。 核生成与IP集成 用CORE Generator生成核并且集成知识产权模块的任务可能很棘手。 Virtex—5支持可以用CORE Generator工具生成的时钟控制模块的各种配置。其中包括若干滤波器时钟抖动PLL、一个具有滤波器时钟抖动功能的PLL-DCM对、一个具有输出双倍数据速率(ODDR)的PLL-DCM对或DCM、一个标准型相移时钟DCM和若干动态时钟切换PLL。 要生成PLL,首先需要了解输入是单端的还是差分的(示例设计中都是单端的)。然后,必须确定时钟抖动是否适宜(在我们的示例中是120皮秒),以及是否使用了全局缓冲器来缓冲所有输出。 每个PLL最多可生成6个不同频率的时钟。在我们的示例中,设计需要4个200MHz的系统时钟和1个19.048MHz或39.096MHz的音频采集时钟。 为了使用ODDR触发器在源同步输出中驱动时钟,我们实现了一个DCM,用于驱动ODDR触发器来实现随路时钟控制。此DCM与我们用来进行内部时钟控制的DCM并行运行。 我们用CORE Generator生成了ASYCNFIFO或BlockRAM,并且用嵌入式微处理器核上的中断逻辑来支持ECC,以完成数据错误检测。 在生成PCIExpress核时,我们必须确保参考时钟具有与PC主板上的PCIExpress插槽输出相同的性能(即100MHz)。另外,我们还需要确定该核需要多少基址寄存器(BAR),以及BAR是存储器映射还是I/O映射。我们为地址解码使用了BAR监视器,这可以帮助生成BAR命中点。 在设计PCIExpress与系统局部总线之间的桥接器时,我们使用了BAR(起存储器或I/O区域芯片选择的作用)来访问存储器映射或I/O映射的寄存器或BlockRAM,确保该核及总线能正确访问所有寄存器或BlockRAM。 如果上述任何点未命中,则主机PC在尝试传递和执行读事务时就不会得到任何响应。主机PC会进入未知的状态,或者产生无法恢复的错误。 对于IP集成,必须为各FPGA分别使用一个时钟复位模块。异步复位必须与每个时钟都同步,无论是全局时钟还是区域时钟。就内部而言,复位信号是相对于特定的时钟而异步有效置位和同步无效置位,而其输出则施加到各时钟所属的特定模块。需要确保已经将所有全局输入时钟连接到用CoreGen生成的 PLL/DCM核。 将区域时钟连接到BUFR/BUFIO。另外,为了避免布局布线工具使用不必要的布线资源,只能仅生成必要的复位信号。需要确保将PLL/DCM的锁存条件传送给外部引脚或配置寄存器。示例中,我们仅将200MHz系统时钟的PLL锁存器连接到了I/O引脚。 因为我们是在用高速源同步输入和输出进行设计,所以Virtex-5的逐位去歪斜功能帮助我们在输入和输出级满足建立和保持要求,逐位去歪斜功能内置于所有I/O模块(10DELAY基元)。对于源同步输入,源同步时钟使用BUFIO或BUFR,因此会引入附加延迟。为了补偿此延迟,我们通过一个IODELAY实例来驱动数据和时钟输入,该实例是按照具有已知延迟计数的输入延迟模式配置的。我们通过修改延迟计数值来帮助满足输入级的时序要求。 输出级的情况与此相似。因为同步时钟信号是随数据传送,我们需要确保数据和时钟信号的传送方式能满足FPGA或ASIC在另一端的建立和保持要求。对于时钟和数据输出,我们都使用了按照具有已知延迟计数值的输出延迟模式配置的IODELAY实例。 时序考虑事项和约束定义 生成并实现IP之后,下一步是执行时序。我们对所有输入时钟的周期、抖动和输入偏移延迟进行了约束,并且设置了相对于源时钟的所有输出延迟和输入对输出的延迟。然后在用户约束文件(UCF)中建立了时序和布局约束。 我们将所有输入时钟约束为特定频率,并且用以下UCF代码定义了抖动输入: NET"i_clk_200_s"TNM_NET="IN_200_CLKGRP";TIMESPEC"IN_200_CLKGRP"=PERIOD5nsHIGH50%INPUT_JITTER0.1ns 对于源同步数据,在SDR的情况下,我们可以将输入时钟设置为0度相移或180度相移,而在DDR的情况下可以将其设置为90度相移。图2所示为时钟在90度相移时的源同步DDR数据输入时序。
对于PCIExpress核和千兆位以太网MAC核上的时序约束,我们按照CORE Generator示例中的定义对Block RAM和PLL/DCM使用了所有时序和布局约束。 因为许多Virtex—5设计都使用多个异步时钟,所以我们必须在设计中定义伪通路,以使这些时钟不受影响。 布局布线后的时序分析和时序校正 对设计进行布局布线后,我们运行了静态时序分析(STA)和时序仿真,以了解是否存在其他时序错误。对于STA,我们确保时序报告涵盖了有约束和无约束的全部通路。通过使用STA报告,我们可以鉴定输入/输出时序和内部系统时序。 事实证明,基于Virtex—5的FPGA非常适合我们的视频监视系统的要求。区域时钟缓冲器和I/O时钟缓冲器使我们能够支持多信道源同步音视频输入。而且,该器件的PCI Express和千兆位以太网MAc硬宏为我们提供了进行远程监视所需的全球连接能力。 在未来的设计工作中,我们将可依靠前期规划来确保有效使用特定FPGA的可用资源,设计出具有附加价值的产品。 |