1.3 英特尔FPGA器件的高级特性与应用
英特尔FPGA器件中集成了很多应用模块,这些模块主要涉及以下功能。
(1)时钟管理。
(2)片内存储器。
(3)数字信号处理。
(4)片外存储器。
(5)高速差分接口。
(6)高速串行收发器。
1.3.1 时钟管理
时钟在FPGA设计中的重要性不言而喻,所以首先讨论时钟管理。
1.时序问题
1)时钟偏斜和时钟抖动
时钟偏斜一般指的是到达寄存器时钟输入端的时钟相位不一致的现象。时钟偏斜产生的原因有两个:一是从PLL出来的时钟不同相;二是PLL输出同相时钟,但是经过的路径不一样,造成相位误差。时钟偏斜如图1-10所示。
时钟抖动是指时钟的边缘在正常位置前后变化,如图1-11所示。
时钟偏斜和时钟抖动是绝对存在的,应尽可能减小偏斜和抖动来达到设计要求。
图1-10 时钟偏斜
图1-11 时钟抖动
2)时序余量
时序余量是指信号能被下一级正确采样的传输时间范围,它包括以下几部分。
(1)Micro Tco:源触发器的时钟到信号输出的时间。
(2)Tlogic:源触发器到目的触发器的走线及逻辑延时。
(3)Micro Tsu:目的触发器的信号建立时间。
(4)Micro Th:目的触发器的信号保持时间。
只有满足以下条件才能保证信号正确传输:Micro Tco+Tlogic+Micro Tsu≤T(时钟周期),同时要满足目的寄存器所需的保持时间。
对于外部I/O同步传输时序分析,也有相应的4个参数,具体如下。
(1)Tco:时钟到引脚信号输出的延时。
(2)Tfight:信号从一个芯片引脚到另一个芯片引脚的传输时间。
(3)Tsu:信号在另一个芯片引脚上的建立时间。
(4)Th:信号在另一个芯片引脚上的保持时间。
上述参数须满足以下条件:Tco+Tfight+Tsu≤T(时钟周期),同时要满足相应的保持时间。时钟驱动如图1-12所示。
图1-12 时钟驱动
以上时序分析是在不考虑时钟偏斜和时钟抖动的情况下进行的。实际应用中一般都存在时钟偏斜和时钟抖动,此时应满足以下条件:
Micro Tco+Tlogic+Micro Tsu≤T+Tskew-Tjitter(时钟周期)
类似地,外部I/O同步传输也要考虑时钟偏斜和时钟抖动:
T co+Tfight+Tsu≤T+Tskew-Tjitter(时钟周期)
在上面两个条件式中,Tskew和Tjitter分别表示时钟偏斜和时钟抖动。
另外,考虑到时钟在PCB上的走线延时不可控,而且容易受到外部电磁干扰,外部I/O同步传输还可以采用串行数据和时钟同时传输的方法,发送端采用数据和时钟混合调制,接收端采用分别恢复时钟和数据的方法,这样可以保证稳定和高效传输。
3)使用全局时钟网络改善时钟质量
全局时钟网络是为了给整个芯片提供高质量的时钟而专门开发的布线网络,如图1-13所示。全局时钟源从PLL的输出口出来,到达FPGA器件的中心,再被分发到每个区域的触发器,因此全局时钟到每个区域的延时相等,从而可以保证时钟偏斜最小。另外,专用的时钟网络经过布线优化,受外部或者内部信号影响最小,从而可以保证时钟抖动最小。
2.锁相环的使用
1)锁相环(PLL)和延迟锁定环(DLL)
锁相环和延迟锁定环都可以通过反馈来做频率合成和相位锁定,起到去抖动、改变占空比和移相的作用。锁相环如图1-14所示。延迟锁定环如图1-15所示。
图1-13 全局时钟网络
图1-14 锁相环
图1-15 延迟锁定环
锁相环工作原理:先通过VCO输出一个频率,再把这个频率反馈到时钟输入端,与输入时钟做频率和相位比较,然后输出调节信号给滤波器,调节滤波器的输出电压,再控制VCO产生一个新的时钟,直到VCO产生一个设定频率和相位的时钟后,锁定滤波器输出稳定不变的时钟。锁相环是模拟电路,对于供电和抗干扰要求比较严格。
延迟锁定环工作原理:延迟锁定环的输出时钟由延迟链组合得到,每个延迟链抽头输出一个相位的时钟,用相位延迟控制逻辑来做抽头信号的选择,如果延迟链抽头足够多,就可以得到许多不同相位和频率的时钟。延迟锁定环是数字电路,由于数字电路本身的抖动特性,输出的时钟信号滤除不了抖动,但抗干扰能力强。
2)英特尔FPGA的锁相环
英特尔FPGA有两种锁相环,分别是增强型锁相环(EPLL)和快速锁相环(FPLL)。
增强型锁相环可以对片内外提供丰富的时钟输出,具有一些高级属性。快速锁相环主要用于高速源同步差分I/O口的设计和一些普通的应用。
增强型锁相环的结构如图1-16所示。
图1-16 增强型锁相环的结构
增强型锁相环的时钟输入有两个:inclk0和inclk1。这两个时钟输入可以由4个专用时钟或引脚输入,也可以采用内部全局或者区域时钟输入,通过MUX做切换。增强型锁相环的输入路径上有一个分频系数N,反馈路径上有一个倍频系数M,VCO的输出有8个相位抽头,每条相位时钟输出路径上有一个分频计数器实现所需频率输出。
在用Quartus软件生成锁相环时,由用户设定输入频率和输出频率,以及输出时钟的相位和占空比,由软件自动生成所需的参数N、M、C,最终得到的频率是Fout=FinM/NC。
锁相环反馈模式见表1-1。
表1-1 锁相环反馈模式
续表
锁相环反馈模型如图1-17所示。
图1-17 锁相环反馈模型
(1)Normal模式即A、B点同相位。
(2)Zero Delay Buffer模式即A、C点同相位。
(3)External Feedback模式即A、D、E点同相位。
(4)No Compensation模式即不补偿反馈路径延时,输出时钟的相位通过计算路径延时得到。
(5)Source Synchronous模式是源同步模式,即把I/O口数据和时钟相位关系保持到内部逻辑中,以保证数据被正确采样。
3)锁相环电源设计
因为锁相环是模拟电路,对外部电磁干扰比较敏感,所以在连接锁相环电源时需要采取一些抗干扰措施。锁相环电源设计如图1-18所示。
首先通过电感将锁相环的供电和数字电源隔离,隔离之后采用电容滤除高低频干扰,在VPLL引脚处加去耦电容。
图1-18 锁相环电源设计
1.3.2 片内存储器
片内存储器是FPGA中最灵活高效的存储单元。
英特尔FPGA中的嵌入式RAM分为三类,分别是640bit的MLAB、9kbit的M9K及144kbit的M144K。
嵌入式RAM一般由三部分组成,如图1-19所示。输入部分有寄存器,用于寄存输入的数据、地址、读写信号。中间部分是一个异步读写RAM模块。输出部分用于直接或者寄存输出RAM数据,输出寄存器是可选的。RAM读写时序图如图1-20所示。
RAM有以下几种配置模式。
(1)单端口RAM:用一个端口进行读写,如图1-21所示。
图1-19 嵌入式RAM的结构
图1-20 RAM读写时序图
图1-21 单端口RAM
(2)简单双端口RAM:一个端口读,一个端口写,如图1-22所示。
图1-22 简单双端口RAM
(3)实际双端口RAM:两个端口都能读写,如图1-23所示。
图1-23 实际双端口RAM
(4)多端口RAM:多个端口均能进行读写。
(5)先进先出(FIFO)RAM。
(6)ROM:只读RAM,由HEX或者MIF数据初始化。
所有的RAM都可以在生成时选择独立的读写时钟。
另外,软件在综合RAM时,会自动给RAM加上一个防止读写冲突的逻辑,以保证写入正确,读出维持上一个数据输出。如果设计能保证读写不冲突,可以在软件中设置不自动生成避免读写冲突的逻辑。
RAM的用法很灵活,除了一般的数据缓存,还可以用作固定系数乘法器(用ROM实现)、移位器、串并转换器、异步时钟域连接器等。
1.3.3 数字信号处理
数字信号处理(DSP)模块是目前设计中不可或缺的模块之一,FPGA器件集成DSP专用硬核就是为了方便那些需要用到大规模计算而又无须使用逻辑资源来生成DSP模块的设计。
在一些复杂的处理系统(如语音的回声消除、高清视频传输等)中,通常需要进行高带宽的数据处理。如果用传统的DSP芯片或者FPGA逻辑资源来实现高速高带宽的数据处理,成本会很高。
英特尔嵌入式DSP模块包含输入寄存器、乘法器、流水寄存器、加/减/累加单元、求和单元、输出多路选择器、输出寄存器,如图1-24所示。
图1-24 英特尔嵌入式DSP模块
DSP模块中的乘法器由4个双输入18×18乘法器组成,乘法器的输入可以是外部18位并行数据输入,也可以是内部的输入寄存器组成的移位寄存器的输入,如图1-25所示。移位寄存器可以很方便地实现一组数据按对应关系与一组系数相乘的FIR滤波器。
4个18×18乘法器可以分拆为8个9×9乘法器,也可以组合成一个36×36乘法器。加/减/累加单元支持全精度加法,以及无符号数和有符号数的加减法,并且可以由AddnSub信号来控制加减运算。其输出可以作为输入进入累加单元,实现最大52位的累加结果。不同的DSP模块结构图如图1-26~图1-30所示。
图1-25 乘法器
图1-26 DSP模块完整结构图
图1-27 两个乘法器运算后再求和的DSP模块结构图
图1-28 乘法器运算后与36位输入进行求和的DSP模块结构图
图1-29 18位FlR模式的DSP模块结构图
图1-30 27位FlR模式的DSP模块结构图
需要注意的是,在Quartus软件中生成乘法器或者加法器时,可以选择用DSP模块或逻辑单元(LE)来实现。
1.3.4 片外存储器
片外存储器虽然不是片内资源,但在设计中同样必不可少,而且FPGA器件集成了片外存储控制器,所以片外存储器通信也是FPGA设计中关键的一环。
1.存储器类型
按电路类型分,有动态存储器(DRAM)和静态存储器(SRAM)。目前,SRAM大多采用6个MOS管的结构,DRAM大多采用一个MOS管加一个电容的结构。SRAM不存在电容充放电过程,反应速度快,但是存储单元所占面积大,难以实现便宜的大容量结构。DRAM存储单元所占面积小,能实现大容量,但是有电容充放电过程,所以反应速度慢。
这两种存储器发展都很快,在容量和读写速度方面都有很大的提升。
各种存储器的比较见表1-2。
表1-2 各种存储器的比较
2.SDRAM的读写控制
同步SDRAM需要按照读写手册要求的时钟周期去采样。值得注意的是,SDRAM的数据口是双向的,在切换的瞬间要做延时处理,以避免大电流导通。
3.DDR SDRAM的读写控制
英特尔FPGA中有专用的DDR存储器控制I/O,其结构如图1-31所示。
在图1-31中,输出使能控制部分有两个触发器,可以通过一个选择器和一个或门控制输出使能信号是否经过第二个触发器来延后半拍信号输出。
图1-31 DDR存储器控制l/O结构
在输出数据部分,高低位数据同时在时钟正沿输入输出寄存器,通过一个将时钟作为选择信号的选择器,在时钟高电平阶段把高位数据输出到三态门,在时钟低电平阶段把低位数据输出到三态门。
输入数据部分通过两个寄存器在时钟正负沿寄存数据,低位数据通过一个时钟高电平控制的锁存器。在时钟高电平阶段,也就是高位数据寄存以后,开启低位锁存器,把低位数据和高位数据同时输入FPGA内部逻辑。时序图如图1-32所示。
图1-32 时序图
关于DDR SDRAM的数据与时钟问题,一般采用数据和时钟同时输出的源同步方式,这种方式保证了数据和时钟的原始相位关系,便于正确采样数据信号。时钟和数据都采用双向接口。
DDR SDRAM的时钟为差分信号CK和CK#,CK为正端,CK#为负端,把CK正沿与CK#负沿的交叉点称为时钟正上升沿,把CK负沿与CK#正沿的交叉点称为时钟负下降沿。
DDR SDRAM的地址和控制信号是在输入时钟的正沿进入寄存器的。在读数据模式下,DQS(数据采样信号)和DQ(数据总线)在读写命令和地址有效的时钟正沿之后经过一段CAS延时才有效。DQS在CAS延时期间有一个状态跳变,这个状态跳变是从三态变成低电平,再加一个上升沿,表示数据开始有效,以后每个数据的低位在DQS负沿采样,高位在DQS正沿采样。DQS在数据传输结束之后也有一个状态跳变,即DQS拉低一个CK周期后再变成三态。
SDRAM与DDR SDRAM的比较见表1-3。
表1-3 SDRAM与DDR SDRAM的比较
1.3.5 高速差分接口
随着数据传输带宽和传输速率的要求不断提高,设计中逐渐不再用简单的LVTTL或者LVCMOS电平信号来传输数据,而是采用传输速率更高、抗干扰能力更强的差分串行接口。
因为传输速率高,时钟和数据的相位对应关系变得非常严格,甚至一些数据和时钟的抖动都会造成数据采样错误,因此需要一个动态追踪最佳采样时间窗口的模块来负责恢复一个采样时间余量足够的时钟,这个模块就是动态相位调整(DPA)模块。
要实现高速差分串行输出,首先要把内部逻辑的低速高带宽并行数据转换成高速串行数据,然后在高速串行时钟的配合下把数据发送出去。如果高速并串转换用通用的LE来实现,则传输速率达不到要求,因此只能用IOE自带的并串转换器实现。串行时钟可由PLL得到,采用源同步输出,锁定时钟和数据的相位,以保证接收端的数据被正确采样。
高速差分输入需要高速串并转换模块,该模块需要在IOE中实现,因为采用通用的LE来实现,传输速率也达不到要求。
1.3.6 高速串行收发器
高速串行收发器也是一种高速串行收发端口。与高速差分接口不同的是,高速串行收发器只发送数据,不发送时钟。另外,高速串行收发器依赖一个模拟电路的信号调制和解调模块来实现数据的高频传输,而且通过简单的匹配转换,可以兼容光纤、微波和高速网口等信道。