购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.3 基于FPGA的数字信号处理实现原理

你可以将FPGA配置为与所要求功能相对应的不同运行模式。你可以使用适当的硬件描述语言(Hardware Description Language,HDL),如VHDL或Verilog HDL,实现任何硬件的设计。因此,同一个FPGA可以实现DSL路由器、DSL调制解调器、JPEG编码器、数字广播系统或背板交换矩阵接口。

高密度的FPGA结合了嵌入式硅功能,可以在FPGA内实现完整的系统,从而在可编程芯片实现中创建系统。嵌入式硅功能(如嵌入式存储器、数字信号处理模块和嵌入式处理器)非常适合实现DSP功能,如有限冲激响应(Finite Impulse Response,FIR)滤波器、快速傅里叶变换(Fast Fourier Transform,FFT)、相关器、均衡器、编码器和译码器。

嵌入式DSP模块提供加、减和乘等功能,这是DSP功能中常见的运算。通常,与仅提供有限数量乘法器的DSPs相比,Intel FPGA提供了更大的乘法器带宽。

决定整体DSP带宽的一个因素是乘法器带宽,因此使用FPGA的整体DSP带宽可以比使用DSP处理器的高得多。

许多DSP应用程序使用外部存储设备来处理海量数据。FPGA内建的存储器资源不仅满足这些要求,而且在某些情况下也不需要外部存储设备。

FPGA内建的软核/硬核嵌入式处理器实现在软件和硬件之间进行灵活的系统划分,因此提供了更通用的系统集成。在集成嵌入式处理器的片上可编程系统内,设计者可以利用FPGA内的通用逻辑资源实现硬件元器件,然后设在嵌入式处理器中实现系统需要的软件。Intel提供了不同系列的FPGA/SoC元器件,使得设计者在嵌入式软核处理器和嵌入式硬核处理器之间进行选择。

你可以在FPGA中实现诸如Nios II/Arm Cortex M0/Arm Cortex M3嵌入式处理器之类的软核处理器,并添加多个系统外设。Nios II/Arm Cortex M0/Arm Cortex M3处理器支持用户可确定的多个主设备的总线架构,该架构可优化总线带宽并消除DSP处理器中存在的潜在瓶颈。你可以使用多主设备总线来定义用于一个特定应用所需要的尽可能多的总线和性能。现有的DSP处理器在选择片上数据总线的数量时会在宽度和性能之间进行权衡,这可能会限制性能。

FPGA内的嵌入式处理器软核提供对自定义指令的访问,如Nios II处理器中的MUL指令,可以使用硬件乘法器在两个时钟周期内执行乘法运算。由于元器件逻辑资源的可配置性,FPGA元器件提供了一个灵活的平台来加速硬件中对性能至关重要的功能。DSPs具有预定义的硬件加速器块,但是FPGA可以为每种应用实现硬件加速器,从而从硬件加速中获得最佳可实现的性能。在实践中,设计者可以使用参数化的IP核或硬件描述语言从头开始实现硬件加速器块。

为了方便设计者在Intel FPGA平台上开发DSP算法,Intel提供了大量的IP核。你可以参数化Intel DSP IP核,以实现最有效的硬件实现并提供最大的灵活性。你可以轻松地将IP核移植到新的FPGA系列,从而获得更高的性能和更低的成本。可编程逻辑和软核IP的灵活性使得设计者可以快速将设计适应新标准,而不必等待通常与DSPs相关的交付时间。

2.3.1 FPGA基本原理

与前面所介绍的DSPs相比,FPGA内包含了大量可通过编程连接的逻辑资源。因此,FPGA 提供了具有可变字长的、灵活的、具有潜在并行处理能力的架构。此外,在Intel近些年来所推出的FPGA中还集成了DSP块来进行通用的DSP算法。使用FPGA进行DSP可以满足特定的处理速度和性能要求,同时兼备了低成本和低功耗的特点。

查找表(Look-up Table,LUT)是FPGA内实现逻辑功能的基本单元。不同的输入所需要的LUT的资源如表2.2所示。

表2.2 不同的输入所需要的LUT的资源

查找表主要完成的功能如下。

(1)实现对输入的逻辑组合功能(无反馈)。

(2)无论输入多么复杂,一个4/6输入LUT总会执行输入小于或者等于4/6的函数功能。

(3)地址输入选择存储单元中的逻辑函数。

(4)LUT的复杂度与输入端口的个数有关。输入端口越多,LUT的复杂度越高。

虽然LUT是FPGA器件内实现组合逻辑功能的基本单元,但是通过Intel的Quartus Prime Pro集成的综合工具,设计者并不需要知道逻辑功能具体实现的过程。实际上,LUT使用静态随机存取存储器(SRAM),它通过将 n 个输入的2 n 个逻辑函数保存起来以实现LUT功能。在这种形式中,SRAM的地址线被当作输入,而其输出提供了逻辑函数的值。

这种在FPGA内使用LUT实现组合逻辑功能的方法解决了传统实现方法带来的实现复杂度和逻辑传输延迟不能确定的缺点,显著提高了逻辑功能的实现性能。

对于下面有4个逻辑输入( A B C D )和一个逻辑输出( Z )的逻辑表达式:

使用Verilog HDL语言描述,如代码清单2-1所示。

代码清单2-1 top.v文件

:读者可以定位到本书提供资料的\intel_dsp_example\example_2_1 目录下,用Quartus P rime P ro 2019.4集成开发环境打开该设计。

没有化简前的逻辑结构如图2.10所示。很明显,传统的数字逻辑使用逻辑与门、或门和非门实现逻辑表达式所要呈现的功能。

使用Quartus Prime Pro 2019.4集成开发环境对该设计进行Analysis Synthesis,通过Technology Map Viewer(Post-Mapping)打开综合后的网表结构,如图2.11所示。

图2.10 逻辑表达式的等效逻辑门组合

图2.11 网表结构

思考与练习2-2 :通过鼠标右键单击图2.11中的元器件符号,出现浮动菜单。在浮动菜单内,选择Properties,打开LUT的内部结构,分析其内部结构。

思考与练习2-3 :请说明采用LUT实现逻辑功能的原理,并说明与使用传统逻辑门实现逻辑功能的优势。

:下面将以Intel公司Cyclone 10 GX系列的FPGA为例,详细说明FPGA内集成的各种逻辑资源。

2.3.2 逻辑阵列块和自适应逻辑块

逻辑阵列块(Logic Array Block,LAB)由基本构建块——自适应逻辑模块(Adaptive Logic Module,ALM)构成。通过配置LAB,可以实现逻辑功能、算术功能和寄存器功能。

Cyclone 10 GX器件中大约有1/4的LAB可用作存储器LAB(Memory LAB,MLAB),并且某些器件提供了更多的MLAB资源。

1.ALM结构和功能

LAB为可配置的逻辑块,由一组逻辑资源构成。每个LAB包含用于将控制信号驱动其ALM的专用逻辑。MLAB是LAB的超集,包含LAB的所有特性。Cyclone 10 GX器件中ALM的内部结构如图2.12所示。从图2.12中可知,每个ALM由上、下两部分组成,上、下两部分包含的逻辑设计资源如下。

① 1个4输入LUT;

② 2个3输入LUT;

③ 2个可编程寄存器;

④ 1个加法器;

⑤ 进位输入。

在Cyclone 10 GX器件中,ALM的高层次架构如图2.13所示。每个ALM包含基于LUT的不同资源,可以分割为两个组合自适应LUT(Adaptive LUT,ALUT)和4个寄存器。从图2.13可知,两个ALUT可以实现最多8个输入的不同逻辑组合,这种适应性允许ALM与4输入的LUT架构完全向后兼容。一个ALM可以实现两个函数的不同组合,可以实现具有最多6个输入和某些7个输入功能的任何函数。

2.LUT的工作模式

每个ALM内的LUT可以工作在下面模式中的任何一种,即普通模式、扩展模式、算术模式和共享算术模式。

图2.12 Cyclone 10 GX器件中ALM的内部结构

1)普通模式

在该模式中,允许在一个ALM中实现两个函数,或者6输入的一个函数。来自LAB本地互联的最多8个数据输入可以作为组合逻辑的输入。ALM可以支持完全独立功能的某些组合,以及具有共同输入的各种功能组合。Quartus Prime编译器自动选择LUT的输入。在普通模式下,ALM支持寄存器打包。

2)扩展模式

当实现7输入函数时,则使用扩展模式。通过使用下面的输入,即dataa、datab、datac、datad、datae0、datae1和dataf0/dataf1,可以在单个ALM内实现一个7输入的函数。如果使用dataf0,则输出可以驱动register0/register;如果使用dataf1,则输出可以驱动register2/register3。

3)算术模式

在算术模式下,ALM使用2组2个4输入的LUT和2个专用的加法器。专用的加法器允许LUT进行预加法逻辑。因此,每个加法器可以对2 个4 输入的函数进行加法操作。ALM支持同时使用加法器的进位输出和组合逻辑输出。在这个操作中,忽略加法器的输出。

图2.13 Cyclone 10 GX器件中ALM的高层次结构

使用包含组合逻辑输出的加法器,可以为使用这个模式的功能节省最多50%的资源。算术模式也提供时钟使能、计数器使能、同步向上和向下控制、加减控制、同步清除和同步加载。

4)共享算术模式

在共享算术模式中,ALM可以实现3输入的加法运算。该模式用4个4输入的LUT配置ALM。每个LUT用于计算3个输入的和或3个输入的进位。通过共享算术链的连接,进位计算的输出可送到下一个加法器。

具有6输入和2输出逻辑功能的Verilog HDL描述,如代码清单2-2所示。

代码清单2-2 top.v文件

:读者可以定位到本书提供资料的\intel_dsp_example\example_2_2 路径,用Quartus P rime P ro 2019.4集成开发环境打开该设计。

使用Quartus Prime Pro 2019.4对该设计执行完Analysis Synthesis后,通过Technology Map Viewer(Post-Mapping)打开综合后的网表结构,如图2.14所示。

图2.14 一个具有6输入和2输出的逻辑函数综合后的网表结构

3.寄存器和锁存器

每个LAB包含用于将控制信号驱动到其ALM的专用逻辑,并有2个独特的时钟源和3个时钟使能信号。

通过使用2个时钟源和3个时钟使能信号,LAB控制块能生成最多3个时钟。一个反相的时钟可以看作单个的时钟源。每个时钟和时钟使能信号相关联。当时钟使能信号无效时,将关闭对应LAB宽度的时钟,如图2.15所示。

图2.15 Cyclone 10 GX器件的LAB宽度控制信号

LAB行时钟[5:0]和LAB本地互联产生LAB宽度的控制信号。MultiTrack互联本身的低抖动特性允许分配时钟和控制信号。MultiTrack互联由不同长度和速度连续的,以及性能优化的布线行组成,用于设计之间和设计内的块连接。

LAB宽度的控制信号控制逻辑用于寄存器的清除信号。ALM直接支持一个异步清除功能。在Quartus Prime软件中,寄存器预置用于非门回推逻辑(NOT-gate push-back)。每个LAB支持最多两个清除信号aclr[1:0]。

Cyclone 10 GX器件提供了一个器件宽度的复位引脚DEV_CLRn,它可用来复位器件内所有的寄存器。在编译设计之前,设计者可通过Quartus Prime软件来使能DEV_CLRn引脚。器件宽度的信号覆盖其他所有控制信号。

每个寄存器的端口包含数据、时钟、同步和异步复位,以及同步加载。全局信号、通用I/O(General Purpose I/O,GPIO)或任何的内部逻辑可以用来驱动ALM寄存器的时钟使能信号,以及时钟和清除控制信号。对于单纯的组合逻辑而言,可以旁路掉寄存器,LUT的输出可以直接驱动ALM的输出。

1)寄存器

带有异步复位寄存器的Verilog HDL描述,如代码清单2-3所示。

代码清单2-3 top.v文件

:读者可以定位到本书提供资料的\intel_dsp_example\example_2_3 路径,用Quartus P rime P ro 2019.4集成开发环境打开该设计。

使用Quartus Prime Pro 2019.4对该设计执行Analysis Synthesis,通过Technology Map Viewer(Post-Mapping)打开生成的网表结构如图2.16所示。

2)锁存器

图2.16 带有异步复位寄存器综合后的网表结构

需要注意,ALM内的触发器不能用作锁存器。在ALM内实现锁存器,仍然需要使用LUT资源。锁存器是一个带有环路的组合逻辑,它将保存信号的值直到为锁存器分配新的值。

当设计者不打算使用锁存器时,综合工具可以从HDL代码中推断出锁存器。如果设计者打算让综合工具推断出锁存器,则必须正确推断它以确保正确的器件操作。

:在设计中尽量不要使用锁存器。

包含置位和复位功能锁存器的Verilog HDL描述如代码清单2-4所示。

代码清单2-4 top.v文件

使用Quartus Prime Pro 2019.4对该设计执行Analysis Synthesis,通过Technology Map Viewer(Post-Mapping)打开生成的网表结构,如图2.17所示。

图2.17 带有置位和复位锁存器综合后的网表结构

:读者可以定位到本书提供资料的\intel_dsp_example\example_2_4 路径,用Quartus P rime P ro 2019.4集成开发环境打开该设计。

4.LAB的互联架构

一个LAB中有10个ALM,每个ALM有4个输出,因此每个LAB能驱动40个ALM输出。通过直接链路互联,两组20个ALM输出可以直接驱动相邻的LAB。通过直接链路连接功能,可以将使用的行和列互联降低到最小,因此提供了更高的性能和灵活性。

通过使用行和列互联,以及同一个LAB内的ALM输出,本地互联驱动相同LAB内的ALM。

通过使用直接链路连接,来自左侧或右侧相邻的LAB、MLAB、M20K块或数字信号处理(Digital Signal Processing,DSP)模块也能驱动LAB的本地互联,如图2.18所示。

图2.18 Cyclone 10 GX内LAB和ALM的资源布局

很明显,这种布线资源为分段结构。

5.分布式存储器

本部分将介绍嵌入式存储器的性能,重点介绍了MLAB的原理,以及使用MLAB实现RAM的方法。

1)嵌入式存储器的类型

Cyclone 10 GX器件提供两种类型的存储器块,包括:

(1)20KB M20K块。专用的块存储器资源,该资源是较大存储器阵列的最理想选择,同时仍然提供了大量独立的端口。

(2)640位的存储器逻辑阵列块(Memory Logic Array Block,MLAB)。每个MLAB支持最大640位(比特)的简单双端口SRAM,由两用的LAB配置为增强的存储器块。MLAB是宽数据位和低深度存储器阵列的理想选择。MLAB针对DSP应用和滤波器延迟线的移位寄存器实现进行了优化。每个MLAB由10个ALM组成。

在Cyclone 10 GX器件中,可以将这些ALM配置为10个32×2的模块,每个MLAB可以提供一个32×20的简单双端口SRAM模块。

2)嵌入式存储器的配置

嵌入式存储器块所支持的存储模式如表2.3所示。

表2.3 嵌入式存储器块所支持的存储模式

续表

3)嵌入式存储器时钟模式

在不同嵌入式存储器配置模式下,所支持的时钟如表2.4所示。

表2.4 每个存储器模式所支持的存储器模块时钟

:在MLAB块内,不支持时钟使能信号用于写地址、字节使能和数据输入寄存器。

4)嵌入式存储器块的字节使能

嵌入式存储器块支持字节使能控制,包括:

(1)字节使能用于屏蔽输入的数据,这样只写入指定字节的数据。未写入的字节将保留以前写入的值。

(2)写使能(wren)信号和字节使能(byteena)信号,一起控制RAM块的写操作。默认情况下,byteena信号为高电平(使能),并且只有wren信号控制写入。

(3)字节使能寄存器没有清除端口。

(4)如果使用奇偶校验,则在M20K块,字节使能功能控制8个数据位和2个奇偶校验位;在MLAB上,字节使能功能控制最宽模式下的所有10位。

(5)byteena信号的LSB与数据总线的LSB相对应。

(6)字节使能信号为高电平有效。

5)使用MLAB实现RAM

在Quartus Prime Pro 2019.4集成开发环境中,MLAB支持下面的64深度模式,包括64(深度)×8(宽度)、64(深度)×9(宽度)和64(深度)×10(宽度)。

使用MLAB实现一个16(深度)×4(宽度)存储器的Verilog HDL描述如代码清单2-5所示。

代码清单2-5 top.v文件

:(1)在该设计中,使用了属性ramstyle="mlab",强制RAM使用MLAB资源。

(2)读者可以定位到本书提供资料的\intel_dsp_example\example_2_5 路径,用Quartus P rime P ro 2019.4集成开发环境打开该设计。

使用Quartus Prime Pro 2019.4集成开发环境对该设计执行Analysis Synthesis,通过 Technology Map Viewer(Post-Mapping)打开生成的网表结构,如图2.19所示。

图2.19 综合后的网表顶层结构

思考与练习2-4 :双击图2.19中名字为“mem_rtl_0”的元器件符号,观察其内部结构。

6)使用MLAB实现移位寄存器

为了推断FPGA中的移位寄存器,综合工具检测一组具有相同的移位寄存器,并将其转化为一个Intel FPGA移位寄存器IP核。为了检测到它,移位寄存器必须具有以下特征:

(1)使用相同的时钟和时钟使能;

(2)没有其他第二级信号;

(3)相同间距的抽头,至少间隔3个寄存器。

:编译器无法为使用移位使能信号的移位寄存器使用MLAB存储器资源进行实现;取而代之的是,编译器使用专用的RAM块。通过使用ramstyle属性,控制实现移位寄存器的存储器结构。

一个串入/串出16位长度移位寄存器的Verilog HDL描述如代码清单2-6所示。

代码清单2-6 top.v文件

:(1 )在 “Advanced Analysis&Synthesis Settings”对话框中,将 “Allow Any Shift Register Size For Recognition”设置为On。

(2 )读者可以定位到本书提供资料的\intel_dsp_example\example_2_6 路径,用Quartus P rime P ro 2019.4集成开发环境打开该设计。

使用Quartus Prime Pro 2019.4集成开发环境对该设计执行Analysis Synthesis,通过Technology Map Viewer(Post-Mapping)打开生成的网表结构,如图2.20所示。

图2.20 串入/串出16位长度移位寄存器综合后的网表结构

2.3.3 块存储器

Intel Cyclone 10 GX FPGA集成了M20K(每个M20K的容量为20KB)存储器块阵列,其布局结构如图2.21所示。当把块存储器配置为真正的双端口RAM时,其原理符号如图2.22所示。

图2.21 Cyclone 10 GX 内M20K存储器块的布局

图2.22 真正的双端口RAM的原理符号

带有一个时钟真正双端口RAM的Verilog HDL描述如代码清单2-7所示。

代码清单2-7 top.v文件

:读者可以定位到本书提供资料的\intel_dsp_example\example_2_7 路径,用Quartus P rime P ro 2019.4集成开发环境打开该设计。

使用Quartus Prime Pro 2019.4集成开发环境对该设计执行Analysis Synthesis,通过Technology Map Viewer(Post-Mapping)打开生成的网表结构,如图2.23所示。

图2.23 块存储器综合后的网表结构

2.3.4 时钟网络和相位锁相环

Intel Cyclone 10 GX器件内提供了不同的时钟网络和锁相环资源,以满足不同的应用需求。

1.时钟网络类型

Cyclone 10 GX器件内包含以下时钟网络,它们按层次化结构组织。

1)全局时钟(Global Clock,GCLK)网络

GCLK网络用于功能块(如ALM、DSP、嵌入存储器和PLL)的低偏移时钟源。Cyclone 10 GX的I/O元器件(I/O element,IOE)和内部逻辑也能驱动GCLK,以创建内部生成的全局时钟和其他高扇出信号,如同步或异步清除和时钟使能信号。

Cyclone 10 GX器件提供GCLK,其可以穿越整个器件,如图2.24所示。GCLK涵盖器件中的每个SCLK主干区域,如图2.25所示。通过符号GCLK网络图中指示的方向,可以访问每个GCLK。

图2.24 10CX220YU484E5G的全局时钟域

图2.25 10CX220YU484E5G的主干时钟域

2)区域时钟(Regional Clock,RCLK)网络

RCLK网络为单个RCLK区域内的逻辑提供低时钟插入延迟和偏移。Cyclone 10 GX的IOE和给定区域内的内部逻辑也可以驱动RCLK,以创建内部生成的区域时钟和其他高扇出信号。

Cyclone 10 GX器件提供RCLK,它能穿越芯片的水平方向驱动,如图2.26所示。RCLK覆盖器件内同一行中所有的SCLK主干区域。

3)外设时钟(Periphery Clock,PCLK)网络

它由小外设时钟网络(Small Periphery Clock,SPCLK)网络和大外设时钟(Large Periphery Clock,LPCLK)网络构成。

PCLK网络提供了最低的插入延迟和与RCLK网络相同的偏移。

① 每个高速串行接口(High-Speed Serial Interface,HSSI)或I/O组有12个SPCLK。SPCLK覆盖HSSI组中的一个SCLK主干区域,以及同一行中彼此相邻的I/O组中的一个SCLK主干区域,如图2.27所示。

图2.26 10CX220YU484E5G的区域时钟域

② 每个HSSI或I/O组有2个LPCLK。与SPCLK相比,LPCLK有更大的网络覆盖空间,如图2.28所示。LPCLK覆盖HSSI组中的一个SCLK主干区域和同一行中彼此相邻的I/O组中一个SCLK主干区域。

图2.27 10CX220YU484E5G的小外设时钟域

图2.28 10CX220YU484E5G的大外设时钟域

2.层次化时钟结构

Intel Cyclone 10 GX器件覆盖了3级时钟网络层次,如图2.29所示。

图2.29 Cyclone 10 GX器件的3级时钟网络层次

每个HSSI和I/O列包含时钟驱动器,如图2.30所示,用于将共享总线驱动到相对应的GCLK、RCLK和PCLK时钟网络。

在每个时钟链接到时钟布线用于每个HSSI和I/O组之前,Cyclone 10 GX时钟网络(GCLK、RCLK和PCLK)通过SCLK布线,SCLK的设置是透明的。根据GCLK、RCLK和PCLK网络,Quartus Prime软件工具自动布线SCLK。每个SCLK主干都具有一致的高度,与HSSI和I/O组相匹配。在器件中,SCLK主干的数量取决于HSSI和I/O组的数量。

图2.30 10CX220YU4845G版图中HSSI和I/O列的布局

在Cyclone 10 GX器件的一个SCLK主干区域中,可以提供最多33个SCLK网络。在每个行时钟区域中,SCLK网络可以驱动6个行时钟。行时钟是器件核心功能块、PLL、I/O接口和HSSI接口的时钟源。6个行时钟信号能布线到每个行时钟区域。驱动每个SCLK的多路选择器的连接模式将时钟源限制为SCLK主干区域。每个SCLK可以从GCLK、RCLK、LPCLK或SPCLK线中选择时钟资源。

如图2.31所示,在每个SCLK主干区域中,由GCLK、RCLK、PCLK或GCLK和RCLK反馈时钟网络驱动SCLK。GCLK、RCLK、PCLK,以及GCLK和RCLK的反馈时钟共享相同的SCLK布线资源。为了保证Quartus Prime适配过程的成功,时钟资源总数不要超过每个SCLK主干区域对SCLK数量的限制。

图2.31 SCLK主干中的层次化时钟网络

3.时钟控制块

每个GCLK、RCLK和PCLK网络都有自己的时钟控制模块,其提供了下面的特性:

(1)时钟源选择(动态选择仅适用于GCLK);

(2)时钟断电(使能/禁止静态或动态时钟仅适用于GCLK和RCLK)。

1)GCLK控制块

通过使用内部逻辑,设计者可以静态或动态地为GCLK选择时钟源,以驱动多路复用器的选择输入,如图2.32所示。

图2.32 Cyclone 10 GX器件中的GCLK控制块

当动态选择时钟源时,可以选择PLL输出(比如C0或C1)或时钟引脚或PLL输出的组合。

通过Quartus Prime软件中的ALTCLKCTRL IP核,可以为GCLK网络多路选择器设置输入时钟源和clkena信号。当使用ACTCLKCTRL IP核动态选择时钟源时,使用CLKSELECT[0..1]信号选择输入。

:只能从相同的I/O或HSSI组中切换专用时钟输入。

2)RCLK控制块

设计者只能使用Quartus Pime软件生成的配置文件(.sof或.pof)中的配置位设置静态控制RCLK选择块的时钟源选择,如图2.33所示。

图2.33 Cyclone 10 GX器件中的RCLK控制块

3)PCLK控制块

PCLK控制块驱动SPCLK和LPCLK网络。驱动HSSI PCLK,选择HSSI输出、fPLL输出或时钟输入引脚;驱动I/O时钟,选择DPA时钟输出、I/O PLL输出或者时钟输入引脚。在Cyclone 10 GX器件中,用于HSSI列的PCLK控制块如图2.34所示;用于I/O列的PCLK控制块,如图2.35所示。

图2.34 用于HSSI列的PCLK控制块

图2.35 用于I/O列的PCLK控制块

在设计中使用时钟网络的Verilog HDL描述如代码清单2-8所示。

代码清单2-8 top.v文件

该设计是典型的异步时钟网络。此外,可以在Quartus Prime集成开发环境的“Assignment Editor”标签页中设置时钟clk1和clk2使用的资源,如图2.36所示。

图2.36 “Assignment Editor”标签页

:读者可以定位到本书提供资料的\intel_dsp_example\example_2_8 路径,用Quartus P rime P ro 2019.4集成开发环境打开该设计。

使用Quartus Prime Pro 2019.4集成开发环境对该设计执行适配过程后,通过Technology Map Viewer(Post-Fitting)打开生成后的网表结构,如图2.37所示。

图2.37 包含两个时钟异步系统适配后的网表结构

从图2.37中可知,输入时钟经过IO_IBUF后传递给CLKCTRL,然后送给触发器的时钟输入端CLK。clk2使用的CLKCTRL块如图2.38所示;clk1使用的CLKCTRL块如图2.39所示。

图2.38 用于clk2的CLKCTRL块

图2.39 用于clk1的CLKCTRL块

4.相位锁相环

在Cyclone 10 GX器件中,其提供最高密度的6个fPLL和6个I/O PLL。

PLL为器件时钟管理、外部系统时钟管理和高速I/O接口提供强大的时钟管理与综合。Cyclone 10 GX有两类PLL,如下所示。

1)fPLL

fPLL可用作小数PLL或整数PLL。fPLL位于HSSI组中收发器块的附近。每个HSSI组包含两个fPLL。在传统的整数模式或者小数模式下,设计者可以独立配置每个fPLL。在小数模式下,fPLL可以使用三阶Δ-∑调制。在每个fPLL中,有4个C计数器输出和一个L计数器输出。

经过优化,fPLL可用作收发器的发送PLL,以及合成参考时钟频率,其架构如图2.40所示。

图2.40 fPLL的架构

可以按下面方式使用它:

① 减少电路板上所需振荡器的数量;

② 从单个参考时钟源合成多个时钟频率,减少FPGA中使用的时钟引脚;

③ 补偿时钟网络延迟;

④ 用于收发器的发送时钟。

2)I/O PLL

I/O PLL只能用作整数PLL。I/O PLL位于I/O组中的硬件存储器控制器和LVDS串行化器/解串行化器(SERDES)块的附近。每个I/O组包含一个I/O PLL,它工作在传统的整数模式。每个I/O PLL有9个C计数器输出。在一些指定的器件封装中,可以在I/O组中使用未在设计中绑定的I/O PLL。

经过优化,I/O PLL可用于存储器接口和LVDS SERDES,其架构如图2.41所示。

可以按下面方式使用它:

① 减少电路板上所需的振荡器数量;

② 从单个参考时钟源合成多个时钟频率,减少FPGA中使用的时钟引脚;

③ 简化外部存储器接口和高速LVDS接口的设计;

④ 由于I/O PLL与I/O紧密耦合,因此可以简化时序收敛;

⑤ 补偿时钟网络延迟;

⑥ 零延迟缓冲。

图2.41 I/O PLL的架构

时钟反馈模式补偿时钟网络延迟,使PLL时钟输入上升沿与时钟输出的上升沿对齐。在设计中,选择用于时序关键时钟路径的补偿类型。

当然,并不是总是需要PLL补偿。除非确定需要补偿,否则应将PLL配置为直接(无补偿)模式。直接模式可提供最佳的PLL抖动性能,避免对补偿时钟资源不必要的消耗。默认,时钟反馈模式是直接补偿模式。

包含两个PLL的Verilog HDL描述如代码清单2-9所示。

代码清单2-9 包含两个PLL的Verilog HDL描述

:读者可以定位到本书提供资料的\intel_dsp_example\example_2_9 路径,用Quartus P rime P ro 2019.4集成开发环境打开该设计。

使用Quartus Prime Pro 2019.4集成开发环境对该设计执行Analysis Synthesis过程后,通过Technology Map Viewer(Post-Mapping)打开生成后的网表结构,如图2.42所示。

图2.42 包含锁相环设计综合后生成的网表结构

思考与练习2-5 :单击图2.42中名字为“u0”和“u1”的锁相环元器件符号,查看其内部结构。

2.3.5 I/O块

在Intel Cyclone 10 GX内,I/O组在I/O列内的分布如图2.43所示,I/O支持的特性包括:

图2.43 I/O组在I/O列内的分布

(1)单端、非参考电压和电压参考的I/O标准;

(2)低电压差分信号(Low-Voltage Differential Signaling,LVDS)、RSDS、mini-LVDS、HSTL、HSUL和SSTL I/O标准;

(3)串行化器/解串行化器(SERDES);

(4)可编程的输出电流强度;

(5)可编程的摆率;

(6)可编程的总线-保持;

(7)可编程的弱上拉电阻;

(8)可编程的预加重LVDS标准;

(9)可编程的I/O延迟;

(10)可编程的差分输出电压( V OD );

(11)开漏输出;

(12)片上串行端接(R S OCT),包含/不包含标定;

(13)片上并行端接(R T OCT);

(14)片上差分端接(R D OCT);

(15)带有动态断电的HSTL和SSTL输入缓冲区;

(16)用于所有I/O组的动态片上并行端接。

1.I/O组的排列

通用I/O(General Purpose I/O,GPIO)由LVDS I/O和3V I/O组构成。

1)LVDS I/O组

支持高达1.8V的差分和单端I/O标准。LVDS I/O引脚构成一对真差分LVDS通道。每一对支持两个引脚之间的并行输入/输出端接。设计者可以将每个LVDS通道仅作为发送器或接收器。每个LVDS通道支持传输SERDES,并通过DAP电路接收SERDES,如设计者可以使用24个通道中的10个通道作为发送器。在剩余的通道中,可以使用13个通道作为接收器,使用一个通道作为参考时钟。

:484引脚封装的器件不包含3B和3A I/O组,672引脚封装的器件不包含3B I/O组。

Cyclone 10 GX器件支持所有LVDS I/O组上的LVDS,包括:

(1)所有LVDS I/O组支持带有R D OCT真LVDS输入和真LVDS输出缓冲区;

(2)器件不支持对LVDS通道的模拟;

(3)器件支持驱动SERDES的I/O PLL单端和差分I/O参考时钟。

2)3V I/O组

支持高达3V的单端和差分SSTL、HSTL和HSUL I/O标准。除以下情况外,在该I/O组中的单端I/O支持所有可编程的I/O元器件(I/O Element,IOE),即可编程的预加重、R D 片上端接、校准的R S 和R T OCT,以及产生内部V REF

Cyclone 10 GX器件中的I/O引脚分组排列,称为模块化I/O组,其中:

(1)模块化I/O组具有独立的电源,允许每个组支持不同的I/O标准。

(2)每个模块化I/O组都可以支持使用相同电压的多个I/O标准。

2.I/O电气标准

Cyclone 10 GX器件的所有封装均可以和不同电源电压的系统连接,其中:

(1)I/O缓冲区由 V CC V CCPT V CCIO 供电;

(2)每个I/O组都有自己的 V CCIO 供电,并且仅支持一个 V CCIO 电压;

(3)在所有的I/O组中,除2.5V和3.0V外,可以使用任何列出的 V CCIO 电压;

(4)仅在3V的I/O组上支持2.5V和3.0V V CCIO 电压。

3.I/O架构和特性

每个I/O组包含它自己的PLL、DPA和SERDES电路。在每个I/O组中,有4个I/O通道(Lane),每个通道有12个I/O引脚。不同于I/O通道,每个I/O组有专用的电路,包括I/O PLL、DPA块、SERDES、硬核存储器控制器和I/O序列器。

1)I/O缓冲器和寄存器

I/O寄存器由用于处理从引脚到内核数据的输入路径,用于处理从内核到引脚数据的输出路径,以及用于处理OE信号到输出缓冲区的输出使能路径构成。这些寄存器允许更快的源同步寄存器到寄存器的传输和重新同步。通过GPIO,使用这些寄存器实现DDR电路。输入和输出路径包含以下块。

(1)输入寄存器。支持从外设到FPGA内核的半速率/全速率的数据传输,并支持从I/O缓冲区捕获双/单数据率数据。

(2)输出寄存器。支持从FPGA内核到外设的半速率/全速率数传输,并支持到I/O缓冲区的双速率/单速率数传输。

(3)OE寄存器。支持从FPGA内核到外设的半速率/全速率数据传输,并支持将单速率数据传输到I/O缓冲区。

输入和输出路径也支持下面的特性,包括时钟使能、同步/异步复位、用于输入和输出路径的旁路模式,以及在输入和输出路径上的延迟链。Cyclone 10 GX内IOE的架构如图2.44所示。

图2.44 Cyclone 10 GX内IOE的架构

一个寄存器的Verilog HDL描述如代码清单2-10所示。

代码清单2-10 top.v文件

:(1 )读者可以定位到本书提供资料的\intel_dsp_example\example_2_10路径,用Quartus P rime P ro 2019.4集成开发环境打开该设计。

(2)在该设计中,在Quatus软件的“Advanced Fitter Settings”对话框中,将“Optimize IOC Register Placement for Timing”设置为“Pack All IO Registers”。

使用Quartus Prime Pro 2019.4集成开发环境对该设计执行适配后,通过 Technology Map Viewer(Post-Fitting)打开生成后的网表结构,如图2.45所示。

图2.45 设计适配后的网表结构

通过观察可知,设计中的触发器使用了I/O内的触发器资源。因此,改善了时序,并节省了所使用的ALM资源。

2)I/O引脚特性

I/O引脚特性包括开漏输出、总线保持和弱上拉电阻。

(1)开漏输出。每个I/O引脚可选的开漏输出相当于集电极开路输出。如果将其配置为开漏,则输出的逻辑值为高阻或逻辑低。因此,需要使用一个外部电阻将信号拉到逻辑高电平。

(2)总线保持。每个I/O引脚提供一个可选的总线保持特性,仅在配置后才有效。当器件进入用户模式时,总线保持电路捕获配置结束后出现在引脚上的值。

总线保持电路使用一个带有标称电阻值(RBH)的电阻,大约为7kΩ,它将信号电平弱拉至引脚最后的驱动状态。总线保持电路保持这个引脚状态,直到出现下一个输入信号。因此,当公共总线是三态时,不需要外部上拉或下拉电阻来保持信号电平。

(3)弱上拉电阻。在用户模式下,每个I/O引脚提供了一个可选的上拉电阻。例如,上拉电阻为25kΩ,将I/O弱保持在 V CCIO 电平。Cyclone 10 GX器件支持可编程的弱上拉电阻仅用于用户I/O引脚,而不在专用配置引脚、专用时钟引脚或JTAG引脚。

4.可编程的IOE特性

可编程的IOE特性,包括可编程的电流强度、可编程的压摆率控制、可编程的IOE延迟、可编程的开漏输出、可编程的预加重、可编程的差分输出电压。

1)可编程的电流强度

使用可编程的电流强度,可以以减轻由长传输线或传统背板引起的高信号衰减的影响。通过在Quartus Prime软件中指定当前的强度分配值来使用可编程的电流强度。

2)可编程的压摆率控制

因为每个I/O引脚都包含压摆率控制,因此设计者可以为每个引脚设置压摆率。对于每个常规和双功能I/O引脚输出缓冲器中可编程的压摆率控制,允许配置的值如下。

(1)Fast:为高性能系统提供高速跳变;

(2)Slow:降低系统噪声和串扰,但会在上升沿和下降沿增加延迟。

3)可编程的IOE延迟

设计者可以激活可编程的IOE延迟,以确保零保持时间,最小化建立时间或者增加时钟到输出的时间。这个特性有助于读取和写入的时间余量,因为它可以最大限度地减少总线中信号之间的不确定性。

每个引脚可以具有预引脚到输入寄存器不同的输入延迟或从输出寄存器到输出引脚值得延迟,使得总线内的信号具有进出器件的相同延迟。

4)可编程的开漏输出

当输出缓冲区的逻辑为高电平时,可编程的开漏输出在输出端提供高阻态。如果输出缓冲区的逻辑为低电平,则输出为低电平。

可以将几个开漏输出连接到一个线。这种连接类型类似于逻辑“或”功能,通常称为低有效线或电路。如果输出中至少有一个为逻辑“0”状态(有效),则电路吸收电流并使线路进入低电压。

如果要将多个设备连接到总线,则可以使用漏极开路输出。例如,可以将开漏输出用作系统级控制信号,这些信号可以由任何器件置为有效或作为中断。

5)可编程的预加重

V OD 的设置和驱动器的输出阻抗设置高速传输信号的输出电流限制。在高频率时,压摆率可能不够快,无法在下一个边沿之前达到 V OD 电平,从而产生与模式相关的抖动。通过预加重,在切换期间瞬间提升输出电流,以提高输出压摆率。

预加重增加了输出信号高频分量的幅度,因此有助于补偿在传输线上与频率相关的衰减。由额外电流引入的过冲仅发生在状态切换变化期间,以增加输出压摆率并且没有振铃,这不像由信号反射引起的过冲。所需要的预加重的数量取决于沿传输线的高频分量衰减。

6)可编程的差分输出电压

通过设置可编程的 V OD ,允许设计者调整输出眼图开度,以优化走线长度和功耗。一个较高的 V OD 摆幅可改善接收器端的电压余量,较少的 V OD 摆幅可较低功耗。在Quartus Prime集成开发环境中,通过“Assignment Editor”设置 V OD 来静态调整差分信号的 V OD

5.片上端接

使用Cyclone 10 GX器件内的片上端接,可以显著减少FPGA芯片外使用端接元器件的数量,以及降低了PCB的布线难度。

串行(R S )和并行(R T )OCT提供了I/O阻抗匹配和端接功能。OCT可以保证信号的质量,节省电路板空间并降低外部元器件的成本。

Cyclone 10 GX器件支持所有FPGA I/O组中的OCT。对于3V I/O,I/O仅支持OCT而无须校准。

6.SERDES和DPA

Cyclone 10 GX器件内提供的高速差分I/O接口和DPA功能优于单端I/O的优势,并有助于实现系统整体的带宽。Cyclone 10 GX器件支持LVDS、mini-LVDS和降低摆幅差分信号(Reduced Swing Differential Signaling,RSDS)的差分I/O标准。

1)SERDES架构

Cyclone 10 GX器件内的每个LVDS I/O通道都有内建的串行器/解串行器(SERDES)电路,支持高速LVDS接口。串行器负责将FPGA内部的并行数据转换为串行数据,解串行器负责将接收到的串行数据转换为并行数据。设计者可以配置SERDES电路以支持源同步的通信协议,如RapidIO、XSBI、SPI和异步协议。

2)差分发送器

Cyclone 10 GX差分发送器包含专用的电路,以支持高速差分信号。差分发送器缓冲区支持下面的特性:

(1)LVDS信令,支持驱动LVDS、mini-LVDS和RSDS信号;

(2)可编程的VOD和可编程的预加重。

发送器模块是专用的电路,它由一个真正的差分缓冲区、一个串行器和I/O PLL构成,可以在发送器和接收器之间共享它。串行器从FPGA架构中得到高达10位宽的并行数据,然后在时钟的作用下送到加载寄存器,并且在将数据送到差分缓冲区之间,使用由I/O PLL时钟驱动的移位寄存器将其串行化。

:① 首先发送并行数据的MSB。

② 驱动LVDS SERDES通道的PLL必须工作在整数模式。如果旁路掉串行器,则不需要PLL。

3)差分接收器

接收器有可以在发送器和接收器之间共享的差分缓冲器和I/O PLL、DPA块、同步器、数据重对齐块和解串行化器。差分缓冲器可以接收LVDS、mini-LVDS和RSDS信号电平。在Quartus软件中,可以将接收器引脚静态设置为LVDS、mini-LVDS或者RSDS。

:用于驱动LVDS SERDES通道的PLL必须工作在整数PLL模式。如果旁路掉解串行器,则不需要PLL。

在SDR和DDR模式下,来自IOE的数据宽度分别为1位和2位。解串行器包括移位寄存器和并行加载寄存器,并且将最宽10位的数据发送给FPGA的内部逻辑。

(1)DPA块。DPA模块从差分缓冲器接收高速串行数据,并从I/O PLL生成的8个相位(0°、45°、90°、135°、180°、225°、270°和315°)中选择其中一个相位来采样数据。DPA选择最接近串行数据相位的相位。接收数据和所选择相位之间最大的相位偏移是1/8单位间隔,这是DPA的最大量化误差。

:单位间隔是指运行在串行数据率的时钟周期。

DPA模块持续监视输入串行数据的相位,并在需要时选择新的相位。通过设置用于每个通道可选的rx_dpa_hold端口来阻止DPA选择新的时钟相位。

DPA电路不要求固定的训练模式来锁定8个相位中最佳的相位。在复位或上电后,DPA电路要求接收到的数据有跳变以锁定最佳相位。可选的输出端口rx_dpa_locked用于指示在复位或上电后初始DPA锁定条件达到了最佳相位。使用数据检查器,如循环冗余校验(Cyclic Redundancy Check,CRC)或对角交织奇偶校验(DPI-4)来验证数据。

一个单独的复位端口rx_dpa_reset用于复位DPA电路。在复位后,必须重新训练DPA电路。

:在非DPA模式下,旁路DPA块。

(2)同步化器。同步器是1比特宽度和6位深度的FIFO缓冲区,用于补偿dpa_fast_clock(DPA模块选择的最佳时钟)与I/O PLL产生的fast_clock之间的相位差。同步器只能补偿数据和接收器输入参考时钟之间的相位差,而不是频率差。

可选的端口rx_fifo_reset用于内部逻辑对同步器复位。当DPA首次锁定到输入的数据时,同步器会自动复位。当数据检查器指示接收的数据已经损坏时,Intel建议使用rx_fifo_reset复位同步器。

:在非DPA和软-CDR模式下旁路同步器。

(3)数据重对齐模块(位滑动)。传输数据中的偏斜以及链路添加的偏斜导致接收到的串行数据流上的信道-信道偏斜。如果使能DPA,则在每个通道上用不同的时钟相位捕获所接收到的数据。这种差异可能导致从通道到通道的接收数据不对齐。为了补偿这种通道到通道的偏移,并在通道建立正确的接收字边界,每个接收器通道都有专用的数据重对齐电路,通过在串行数据流中插入位延迟来重对齐数据。

一个可选的rx_bitslip_ctrl端口控制每个接收器的位插入,它来自内部逻辑的独立控制。在rx_bitslip_ctrl上升沿时,数据滑动一位。rx_bitslip_ctrl信号的要求包含以下条目:

① 最小脉冲宽度是逻辑阵列中并行时钟的一个周期;

② 脉冲之间的最小低电平时间是并行时钟的一个周期;

③ 信号是边沿触发的信号;

④ 在rx_bitslip_ctrl的上升沿后,有效数据在4个并行周期可用。

(4)解串行化器。在Quartus Prime集成开发环境中,可以将解串行化因子静态设置为×3、×4、×5、×6、×7、×8、×9或×10。IOE包含两个可在DDR或SDR模式下运行的数据输入寄存器。通过旁路解串行器,以支持DDR(×2)和SDR(×1)操作。通过Intel提供的GPIO IP核,支持旁路解串行器。

在旁路解串行器的SDR模式下,其特性包括:

① IOE数据宽度为1位;

② 寄存的输入路径要求一个时钟;

③ 数据直接通过IOE传递。

在旁路解串行器的DDR模式下,其特性包括:

① IOE数据宽度位2位;

② GPIO IP核要求一个时钟;

③ rx_inclock驱动IOE寄存器,时钟必须同步到rx_in;

④ 必须控制数据到时钟的偏移。

2.3.6 DSP块

Intel FPGA内集成了大量可以实现浮点运算的DSP块阵列,显著增强了FPGA在实现复杂数字信号处理任务的能力。

1.DSP块特性

在Intel Cyclone 10 GX FPGA内,提供的可变精度DSP块支持定点运算和浮点运算。

1)定点运算的特点

(1)高性能、功耗优化和完全寄存的乘法操作。

(2)18位和27位字长。

(3)每个DSP模块有两个18×19乘法器或27×27乘法器。

(4)内建加法、减法和64位双累加寄存器,用于组合乘法结果。

(5)当禁止预加法器时,级联19位或27位;当预加法器用于生成滤波器应用的抽头延迟线时,级联18位。

(6)级联64位输出总线,将输出结果从一个块传到下一个块,而不要外部逻辑支持。

(7)硬件预加法器支持19位和27位模式,用于对称滤波器。

(8)用于实现滤波器的18位和27位模式的内部系数寄存器组。

(9)具有分布式输出加法器的18位和27位脉动有限冲激响应(Finite Impulse Response,FIR)滤波器。

(10)支持偏向的舍入支持。

2)浮点运算的特点

(1)完全硬化的架构,支持乘法、加法、加法、乘法-加法和乘法-减法。

(2)具有累加功能的乘法和动态累加器复位控制。

(3)具有级联求和功能的乘法。

(4)具有级联减法功能的乘法。

(5)复杂的乘法。

(6)直接矢量点积。

(7)脉动FIR滤波器。

2.DSP块架构

用于定点算术18×19模式的可变精度DSP块的内部架构如图2.46所示。

用于定点算术27×27模式的可变精度DSP块的内部架构如图2.47所示。

用于浮点算术模式的可变精度DSP块的内部架构,如图2.48所示。

图2.46 用于定点算术18×19模式的可变精度DSP块的内部结构

图2.47 用于定点算术27×27模式的可变精度DSP块的内部结构

图2.48 用于浮点算术模式的可变精度DSP块的内部结构 5NWOXmGek1/3G76zQiBq8DulKWppuEMaMxKJShxzThaenv4y8mFu5hH/thIh7F6V

点击中间区域
呼出菜单
上一章
目录
下一章
×