FPGA数字信号处理设计流程-System Generator入门与提高759_第1页
FPGA数字信号处理设计流程-System Generator入门与提高759_第2页
FPGA数字信号处理设计流程-System Generator入门与提高759_第3页
FPGA数字信号处理设计流程-System Generator入门与提高759_第4页
FPGA数字信号处理设计流程-System Generator入门与提高759_第5页
已阅读5页,还剩754页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章FPGA硬件结构1.1FPGA的可编程技术1.2FPGA的内部结构1.3XILINX公司主流产品介绍与器件选择1.4本章小结 1.1FPGA的可编程技术

1.1.1基于SRAM的FPGA器件

这类产品是基于SRAM结构的可再配置型器件,上电时要将配置数据读入片内SRAM中,配置完成就可进入工作状态。掉电后SRAM中的配置数据丢失,FPGA内部逻辑关系随之消失。这种基于SRAM的FPGA可以反复重新编程,这使得系统的“在线升级”变得非常容易。1.1.2反熔丝FPGA

反熔丝FPGA内部具有反熔丝阵列开关结构,其逻辑功能的定义由专用编程器根据设计实现所给出的数据文件,对其内部的反熔丝阵列开关进行烧录,烧录后形成实际的逻辑电路。这种器件的缺点是只能一次可编程;优点是具有高抗干扰性和低功耗,适合于要求高可靠性、高保密性的定型产品。1.1.3基于Flash的FPGA

在这类FPGA器件中集成了SRAM和非易失性EEPROM两类存储结构。其中SRAM用于在器件正常工作时对系统进行控制,而EEPROM则用来配置SRAM。由于这类FPGA将EEPROM集成在基于SRAM工艺的现场可编程器件中,因而可以充分发挥EEPROM的非易失特性和SRAM的重配置性。掉电后,配置信息保存在片内的EEPROM中,因此不需要片外的配置芯片,有助于降低系统成本、提高设计的安全性。

1.2FPGA的内部结构

每一个FPGA的生产厂商都有自己的FPGA内部结构体系,但各个厂商设计的基本原理都大同小异。下面以XILINX公司的产品为例介绍FPGA的内部结构。如图1.2.1所示为XILINX公司一典型FPGA的内部基本结构,这一结构由可配置逻辑模块(CLB)、可配置I/O模块、块存储器(BlockRAM)以及数字时钟管理器(DCM)和乘法器模块(Multiplier)等基本模块构成。图1.2.1XILINX公司FPGA基本结构1.2.1可配置逻辑模块(CLB)

可配置逻辑模块(CLB)包含了FPGA的可编程逻辑。如图1.2.2所示为XILINX公司Spartan-3系列一个典型的CLB结构,它由4个Slice和附加逻辑构成,用于实现组合逻辑和时序逻辑。4个Slice通过一个内部互联线实现内部互联并与相邻的CLB连接。开关矩阵用来传递CLB中Slice的使能信号。其中右边两个Slice为逻辑型,简称Slicel。其内部包含了寄存器、进位逻辑、查找表和算术逻辑。左边两个Slice则为存储型,简称Slicem。其内部除了具有逻辑型Slice所有结构外,还增加了基于查找表的16×1位分布式存储器RAM和16位的移位寄存器。图1.2.2CLB结构图

CLB细分后的Slice模块中包含有4输入函数发生器,可以用于实现4输入查找表(LUT)、分布式存储器RAM和16位基于查找表的移位寄存器(SRL16),Slice内部结构如图1.2.3所示。时序逻辑可配置为D触发器或锁存器。进位逻辑包括两条快速进位链,用于提高CLB模块的算术处理速度。算术逻辑包括一个异或门和一个加速乘法运算的“乘累加”逻辑门。每个CLB模块既可以配置成分布式ROM,也可以配置成分布式RAM。图1.2.3Slice结构图查找表(Look-UpTable)简称为LUT,LUT本质上就是一个可配置的RAM。目前FPGA中大多使用4输入的LUT,所以每一个LUT可以看成一个有4位地址线的的RAM。当用户通过原理图或HDL语言描述了一个逻辑电路以后,EDA软件会自动计算逻辑电路的所有可能的结果,并把结果写入LUT。这样,每输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出地址对应的内容,然后输出存到RAM里对应的结果。

如图1.2.4所示,一个LUT可以随意实现任意4输入逻辑功能。图1.2.4LUT功能实现图1.2.5两个LUT组合实现5输入逻辑功能1.2.2可配置I/O模块

可配置I/O模块的作用是将外来信号输入到芯片内部,或将信号输出芯片。图1.2.6为Spartan-3E可配置I/O模块的内部结构,主要分三部分:输入通道、输出通道和三态门通道。图1.2.6可配置I/O模块这三个通道都包含分别由时钟双沿控制的触发器对,因此可以在单个IOB上实现DDR(Double-DataRate)输入、输出及三态控制。在DDR方式设计中,需要提供两个占空比为50%的时钟,分别提供给一对触发器。DDR时钟可以将一个时钟反向后生成,也可以通过时钟管理器输出。

在输入通道中,外部输入信号都必须经过一个可编程延时模块,该模块可保证输入信号满足建立时间(SetupTime)和保持时间(HoldTime)的要求。当使用LVCMOS和LVTTL标准输入时,Spartan-3E器件可以设置2mA、4mA、6mA、8mA、12mA、16mA和24mA七种输出电流,为信号传输提供了多种电平选择,从而改善板级信号的传输质量。

Spartan-3E器件的IOB支持如下单端信号传输标准:

Low-VoltageTTL(LVTTL),电压为3.3V。

Low-VoltageCMOS(LVCMOS),电压为3.3V、2.5V、1.8V、1.5V或1.2V。

33MHz的PCI,电压为3V(部分Spartan-3E器件PCI为66MHz)。

HSTLⅠ和HSTLⅢ,电压为1.8V。

SSTL,电压为1.8V和2.5V。

Spartan-3E器件的IOB还支持下面几种差分传输标准:

LVDS。

BusLVDS。

Mini-LVDS。

RSDS。

DifferentialHSTL,电压为1.8V。

DifferentialSSTL,电压为2.5V或1.8V。

LVPECL,电压为2.5V。在输出通道中,来自FPGA内部的信号经过一对触发器共同作用后,信号具有更充裕的保持时间,然后由三态门控制输出。

在FPGA系统设计中,悬空的引脚容易接受外界电磁干扰;悬空的总线则会增加系统内的噪声、增加功率的损耗,并且具有产生潜在的不稳定性的可能。在IOB模块中,上拉/下拉电阻可将未使用的引脚固定接VCC或者接地,避免了引脚悬空带来的不稳定。1.2.3块存储器(BlockRAM)

Spartan-3E系列器件除了提供用CLB资源实现的存储器之外,还提供了块存储器(BlockRAM)结构。块存储器可以让FPGA设计人员很方便地对大量数据进行实时读写操作,为数字信号处理提供了存储空间的保证。每个块存储器为一个18K×1位的可配置、同步、全双端口存储器。该块存储器可配置成带数据校验位的存储器,包括16K的数据位和2K的奇偶校验位。不同型号的器件其存储器的列数以及每列的块数都不一样,如表1.2.1所示。表1.2.1Spartan-3EBlockRAM资源数图1.2.7双端口模式图1.2.8单端口模式两种模式下的端口定义如下:

WE(包括WEA、WEB):BlockRAM读/写控制信号。当EN(ENA、ENB)信号为高时,WE(WEA、WEB)=1表示对目标地址进行写操作,WE(WEA、WEB)=0表示对目标地址进行读操作,其读数据的方式由WRITE_MODE来设置。

EN(包括ENA、ENB):BlockRAM使能信号。当该控制脚为低时,写入和读出操作无效,DO和DOP保持原有状态和数据。

SSR(包括SSRA、SSRB):BlockRAM的同步置位和复位控制信号,当SSR(包括SSRA、SSRB)和EN(包括ENA、ENB)控制信号为高时,其DO和DOP的输出为“1”或“0”,这取决于参数SRVAL。该控制信号不会影响存储器内容和其他端口的操作。

CLK(包括CLKA、CLKB):BlockRAM的A口/B口时钟控制信号。时钟的极性可以选择,既可以用时钟的上升沿,也可以用时钟的下降沿。

ADDR[r-1:0](包括ADDRA[rA-1:0]、ADDRB[rB-1:0]):BlockRAM地址输入信号。用于读/写块存储器内部数据。地址线的宽度与配置的数据位数有关。

DI[W-P-1:0](包括DIA[W-PA-1:0]、DIB[W-PB-1:0]):BlockRAM的数据输入。如果时钟的使能信号(EN)和写使能信号(WE)为高电平,在时钟信号(CLK)上升沿时,将该输入端的数据写入到地址线所指定的存储器中。

DIP[P-1:0](包括DIPA[PA-1:0]、DIPB[PB-1:0]):BlockRAM输入数据的校验信号。如果时钟的使能信号(EN)和写使能信号(WE)为高电平,在时钟信号(CLK)上升沿时,将该输入端的校验位数据写入到地址线所指定的存储器中。

DO[W-P-1:0](包括DOA[W-PA-1:0]、DOB[W-PB-1:0]):BlockRAM的数据输出。在读操作和时钟信号有效时,输出数据。数据的读模式可以设置。

DOP[P-1:0](包括DOPA[PA-1:0]、DOPB[PB-1:0]):BlockRAM输出数据的校验位信号。在读操作和时钟信号有效时,输出校验位数据。数据的读模式可以设置。

双口模式下块存储器的读写操作如图1.2.9所示。图1.2.9双端口块存储器的读写操作在图1.2.9中,方式1为对A口用相同地址进行的同步读和写操作;方式2为对B口用相同地址进行的同步读和写操作;方式3为用独立的口地址对A口进行的写操作,B口用另一个地址进行读操作,并且两个口的数据宽度可以不一样;方式4与方式3操作相同,只是数据流方向不同。在使用CoreGenerator(核生成工具)或对源代码例化时,需要对块存储器的一些参数进行设置。其中比较重要的参数设置如下:

GSR:全局的置位和复位控制信号。该信号是FPGA器件的控制信号,块存储器本身没有这个控制端。当该信号有效时,块存储器的输出为初始(INIT)值。该信号不会改变存储器的内容。

INIT_xx、INITP_xx:INIT_xx为数据的初始化值,INTP_xx为校验位的初始值。

在同时读写BlockRAM的同一地址时,WRITE_MODE有三种处理模式。在设计时,可以用ISE8.2设计工具的模块设计、约束设计和CoreGenerator来设置。

WRITE_FIRST(写优先)模式:也称为透明模式,为默认状态。在WRITE_FIRST模式下,同时读写BlockRAM同一地址时,读出的数据与写入的数据相同,如图1.2.10所示。图1.2.10WRITE_FIRST模式操作和时序

READ_FIRST(读优先)模式:在READ_FIRST模式下,同时读写BlockRAM的同一地址时,先将该地址所指定缓冲器的数据读出,在写操作时不影响该数据,如图1.2.11所示。图1.2.11READ_FIRST模式操作和时序

NO_CHANGE(输出不变)模式:在NO_CHANGE模式下,同时读写BlockRAM的同一地址时,数据仅写入相应的缓冲器,而不影响输出,输出缓冲器保持上一次读操作时的数据,如图1.2.12所示。图1.2.12NO_CHANGE模式操作和时序1.2.4数字时钟管理器(DCM)

Spartan-3E系列器件的DCM由三部分组成:数字延迟锁相环(DLL)、数字频率合成器(DFS)和数字移相器(DPS),如图1.2.13所示。图1.2.13Spartan-3EDCM模块结构

1.数字延迟锁相环(DLL)

XILINX的FPGA器件都采用数字延迟锁相环技术来消除时钟相位的偏移,改变时钟的频率(倍频或分频),调整时钟输出的相位等。DLL主要由可变延迟线、控制逻辑和时钟分配网络构成,如图1.2.14所示。时钟分配网络提供了处理后的时钟信号(倍频或分频、相移等)图1.2.14DLL模块原理图输出和时钟反馈控制信号(CLKFB),控制逻辑根据输入时钟和输出反馈时钟信号的比较结果调整可变延迟线。通过在输入时钟和反馈时钟之间插入延时,使输入时钟和输出时钟相位对齐。当输入时钟信号上升沿和反馈时钟信号上升沿相位一致时,时钟延迟锁相环将被锁定,从而达到控制时钟相位偏移的目的。

DLL的输出和输入信号及控制信号说明如下:

CLKIN:DLL输入时钟信号,通常来自输入全局缓冲器(IBUFG)或内部全局缓冲器(BUFG)。

CLKFB:DLL的时钟反馈信号,该反馈信号通常由CLK0或CLK2X输出,并通过BUFG相连或通过芯片外部由IBUFG返回。

CLK0:DLL输出时钟信号,与CLKIN输入时钟同相。

CLK90:DLL输出时钟信号,与CLKIN输入时钟相位相差90°,在高频模式没有输出。

CLK180:DLL输出时钟信号,与CLKIN输入时钟相位相差180°,在高频模式下仍有输出。

CLK270:DLL输出时钟信号,与CLKIN输入时钟相位相差270°,在高频模式下没有输出。

CLK2X:DLL输出时钟信号,是CLKIN输入时钟频率的2倍频时钟信号,在高频模式下仍然有输出。

CLKDV:DLL输出时钟信号,是CLKIN输入时钟的分频时钟信号。DLL支持的分频系数有1.5、2、2.5、3、3.5、4、4.5、5、5.5、6、6.5、7、7.5、8、9、10、11、12、13、14、15和16分频。

LOCKED:DLL状态信号,当该信号为高电平时,表示DLL已锁定输入时钟信号。

RST:DLL复位控制信号,控制DLL的初始化。当不用时,可以接地,DLL利用器件上电来进行复位。

2.数字频率合成器(DFS)

Spartan-3E系列器件在DLL模块基础上增加了数字频率合成器(DFS)功能,为系统提供了更加丰富的频率合成时钟信号。数字频率合成器共有CLKFX和CLKFX180两个输出时钟信号。输出时钟的频率由参数CLKFX_MULTIPLY和CLKFX_DIVIDE来决定。输入频率和输出频率之间的关系为:

例如,输入频率为100MHz,当M=5、D=11时,输出频率为45.45MHz。在DCM中,数字频率合成器是一个独立模块,可单独运用,也可以与DLL一起使用。

3.数字移相器(DPS)

XILINX的FPGA器件普遍采用的DLL模块可提供四个相位CLK0、CLK90、CLK180和CLK270的时钟输出信号。这种相移对DCM模块来说,是粗相移调整。通过DCM模块的控制组件——数字移相器,还可提供具有动态控制、高精度的相移时钟输出。控制信号和状态信号如下:

PSINCDEC:DCM控制信号。该信号控制输出时钟的相位动态调整方向。当其控制参数CLKOUT_PHASE_SHIFT=VARIABLE时,该控制信号有效。如果接高电平时,表示相位正调整;接低电平,表示相位负调整。如果CLKOUT_PHASE_SHIFT=NONE或CLKOUT_PHASE_SHIFT=FIXED,则该控制信号无效,需接地。

PSEN:DCM控制信号。该信号是输出时钟相位动态调整的使能信号。当控制参数CLKOUT_PHASE_SHIFT=VARIABLE时,该控制信号有效,否则该信号接地。

PSCLK:DCM的参考时钟信号。该信号是输出时钟相位动态调整的参考时钟。可以采用与CLKIN同源的时钟,也可以采用内部或外部其他的时钟信号。输入时钟频率范围为12~320MHz。当控制参数CLKOUT_PHASE_SHIFT=VARIABLE时,该控制信号有效,否则该信号接地。

PSDONE:DCM状态信号。该信号用于显示输出时钟相位动态调整是否正常。

STATUS[7:0]:DCM状态信号。该信号用于显示DCM的工作状态。STATUS[0]表示移向器的参数设置是否溢出。

1.2.5硬件乘法器模块(Multiplier)

为了提高数字处理能力,XILINX公司主流FPGA中通常嵌入硬件乘法器,Spartan-3E系列器件提供了大量的嵌入式18位×18位二进制带符号数乘法器。这些嵌入式硬件乘法器可实现18位×18位带符号二进制数高速乘法运算。硬件乘法器模块不仅可以通过交换矩阵与18Kb的块存储器配合使用,也可以单独使用。如图1.2.1所示,乘法器模块的物理分布与块存储器的物理分布是一致的,两个模块彼此相邻,这种结构非常适合高速的数字信号处理。比如利用乘法器和块存储器可方便可靠地完成读取、相乘、累加的多次迭代操作,非常适合实现高速的数字滤波器。

硬件乘法器模块可以配置成异步乘法结构,如图1.2.15所示;也可以配置成带锁存器的乘法结构,如图1.2.16所示。图1.2.15异步18位硬件乘法器图1.2.16带有锁存器的18位硬件乘法器

1.3XILINX公司主流产品介绍与器件选择

1.3.1主流FPGA产品

XILINX的主流FPGA产品分为两大类,一种侧重低成本应用,容量中等,性能可以满足一般的逻辑设计要求,如Spartan系列。这类FPGA一般应用在对性能要求不是很高的系统中,如工业控制、消费电子、汽车电子等领域。另外一种侧重于高性能应用,容量大,性能能满足各类高端应用,如Virtex系列。这类FPGA一般应用在对性能要求比较高的系统中,如通信、图像处理等领域。用户可以根据自己的实际应用要求,综合考虑设计中对FPGA的容量、功耗、封装类型等指标对器件进行选择。一般来说,在技术指标都可以满足的情况下,优先选择低成本器件。

Spartan-3/3L:新一代FPGA产品,结构与Virtex-2类似,全球第一款90nm工艺FPGA,1.2V内核,于2003年开始陆续推出。表1.3.1为Spartan-3/3L器件资源表。

Spartan-3E:XILINX推出的低成本FPGA,基于Spartan-3/3L,对性能和成本进一步优化,性价比很高,具有良好的市场。本书中涉及到的实验都是在Spartan-3E上完成调试的。表1.3.2为Spartan-3E器件资源表。

Virtex-5:最新的FPGA产品,65nm,在工艺、架构、硬IP、封装方面都有创新。核电压降低为1.0V,使得动态功耗降低了35%左右。

Virtex-4:XILINX新一代高端FPGA产品,包含三个子系列:LX、SX和FX。

Virtex-4各项指标比上一代Virtex-2均有很大提高,获得2005年EDN杂志最佳产品称号,是未来几年XILINX在高端FPGA市场中的最重要的产品。

Virtex-4SX:侧重数字信号处理,DSP模块比较多,2006年年初开始量产。表1.3.3为Virtex-4SX系列器件资源表。

Virtex-4LX:侧重普通逻辑应用,2005年年底开始量产。表1.3.4为Virtex-4LX系列器件资源表。

Virtex-4FX:集成PowerPC和高速接口收发模块,2006年年初开始量产。表1.3.5为Virtex-4FX系列器件资源表。

Virtex-2:2002年推出,0.15μm工艺,1.5v内核,大规模高端FPGA产品。表1.3.6为Virter-2系列器件资源表。

Virtex-2Pro:基于Virtex-2的结构,内部集成CPU和高速接口的FPGA产品。在高速数据接口处理方面性能卓越,可实现系统级芯片。表1.3.7为Virtex-2Pro系列器件资源表。

Virtex-2Pro是XILINX第一款集成PowerPC和高速收发模块的FPGA,由于Virtex-4FX器件的推出,推荐使用Virtex-2Pro的用户转到Virtex-4FX器件上。1.3.2器件的选择

面对众多FPGA型号,选择一块适合自己设计需要的FPGA非常重要。FPGA内部结构的知识和项目设计的要求是考虑选择哪一款FPGA用于设计的判断标准。在做出决定的时候,一般应该考虑下面几个方面的问题:

器件中CLB的数目:它将决定该器件能够容纳多大规模的逻辑电路,以及把设计装载到器件时的容易程度。可以先估计系统需要的逻辑门数,并保证系统具有较好的可扩展性和可升级性,一般应留出一定的资源裕量。在评估所需逻辑门数的时候,需要注意的问题是:FPGA逻辑门的利用率并不能完全达到100%,通常只有60%~80%。

I/O引脚的数量和类型:显然,在系统设计中,所选的FPGA应该能支持所需要的I/O引脚的数量。另外,还要确定在这些引脚里有多少是通用的I/O引脚;有多少是用于特殊的功能,例如时钟输入、主复位端等专用引脚。

输入/输出电压及功耗:系统设计还需要考虑电压匹配问题;移动设备或不便提供电源的系统对功耗有很高的要求,所以需要充分考虑所选FPGA的功耗问题。一般FPGA的核电压越低,动态功耗就越小。

时钟输入端的数目:时钟信号只能由特殊的引脚驱动输入。如果设计系统有几个时钟作用区域,那么就需要一种具有多个时钟输入引脚的FPGA。内部嵌入的硬IP资源:丰富的硬IP资源使用得当,不仅可以缩短系统设计周期,而且可以提高系统性能。所以我们要根据设计系统对硬IP资源的需求,选择不同型号的FPGA。

反熔丝编程与SRAM编程的比较:哪一种技术对本次设计更有意义?是需要反熔丝器件的高可靠性和低功耗?还是需要SRAM器件的可重复编程性?

从设计的角度考虑好以上几个因素后,在保证设计对FPGA的要求情况下就需要考虑价格的因素了,目前高端的FPGA价格还是比较昂贵的。如果低端FPGA能满足设计需要,尽量选择低端FPGA,这样可以大大节约设计成本。 1.4本章小结

要做出一个好的FPGA设计,必须对FPGA内部结构有一定的了解。本章先简单介绍了几种可编程技术的特点,使读者对目前FPGA可编程技术分类有一个大概的了解。接下来以XILINX公司FPGA为例,着重介绍了FPGA内部结构,包括可配置CLB、可配置I/O、块存储器、时钟管理器以及硬件乘法器。通过对这些内部最基本模块的介绍,可以让初学者对FPGA内部结构有一个初步的了解。本章还对目前XILINX主流产品进行了一些资源数据统计与性能分析,并给出了一些在FPGA选型方面的建议,为读者在选用不同FPGA型号时提供了一定的参考。第2章数字信号处理的基本知识2.1模拟/数字转换和数字/模拟转换2.2离散傅立叶变换(DFT)与快速傅立叶变换(FFT)2.3滤波器2.4本章小结2.1模拟/数字转换和数字/模拟转换

2.1.1模拟/数字转换在进行模拟/数字转换时,因为输入的模拟信号在时间上是连续的而输出的数字信号是离散的,所以转换只能在一系列选定的瞬间对输入的模拟信号采样,然后再把这些采样值量化为数字量输出。

1.采样定理为了能正确无误地用采样信号表示模拟信号,采样信号必须有足够高的频率。我们列举一个简单的例子,如图2.1.1所示。图2.1.1对输入信号的模拟采样为了保证能将原来的被采样信号恢复,必须满足:(2.1.1)公式(2.1.1)中,fs为采样频率,fi(max)为输入模拟信号的最高频率分量的频率,这就是采样定理。每次采样的时间间隔称之为采样周期ts(=1/fs)。在满足采样定理的条件下,可以用低通滤波器将采样信号还原为模拟信号。这个低通滤波器的电压传输系数在低于fi(max)的范围内应保持不变,而在fs-fi(max)以前,应迅速下降为零,如图2.1.2所示。图2.1.2还原采样信号所用滤波器的频率特性因此,A/D转换器工作时的采样频率必须满足fs≥2fi(max)。采样频率提高以后,转换的时间也相应地缩短了,这就要求转换电路必须具备更快的工作速度。因此,不能无限制地提高采样频率,通常取fs = (3~5)fi(max)来满足要求。

一般说来,采样频率还要取决于采样对象的参数,例如对于控制系统,采样频率一般取在10Hz,对于生物信息的采样在100Hz左右,对音频信息的采样,一般在1000Hz左右,而对于数字信号前端信息的采样,一般在1MHz左右。

通过ADC可以将模拟信号转换为相应的数字信号,如图2.1.3所示。图2.1.3通过ADC将模拟信号转换为数字信号

2.量化和编码

数字信号不仅在时间上是离散的,而且数值大小的变换也是不连续的,这就是说,任何一个数字量的大小只能是规定的最小数量单位的整数倍。在进行A/D转换时,必须把采样电压表示为这个最小单位的整数倍。这个转换过程叫做量化,所取的最小数量单位叫做量化单位,用表示。显然,数字信号最低有效位(LSB)的1所代表的数量大小就等于。把量化的结果用数码(可以是二进制,也可以是其他进制)表示出来,称为编码。这些数码就是A/D转换的结果。由于模拟电压是连续的,电压值不一定能被整除,因此量化过程便不可避免地出现误差。这种误差称为量化误差。以二进制为例,将模拟电压信号划分为不同的量化等级时,通常有两种方法,如图2.1.4所示。图2.1.4划分量化电平的两种方法图示两种量化电平的方法是以0~1V的模拟电压信号转换成3位二进制代码为例,图2.1.4(a)所示为取Δ=1/8V,并规定所有数值在0~1/8V之间的模拟电压都当作0×V对待,用二进制“000”表示;数值在1/8~2/8V之间的模拟电压都当作1×Δ对待,用二进制数“001”表示,依此类推。由此可以看出,这种量化方法可能带来的最大量化误差为Δ,也就是1/8V。图(b)是对图(a)的改进,即取量化电平Δ=2/15V,并将输出数码“000”对应的模拟电压范围规定为0~1/15V,即0~1/2Δ,这样可以将量化误差减小到1/2Δ,即1/15V。2.1.2数字/模拟转换

在数字信号处理中,数模转换的过程是一个将数字信号恢复为原有模拟信号的过程。完全恢复为原有的模拟信号是不可能的,在工程上,常用的是零阶保持器、一阶保持器和高阶保持器。这里我们只讨论零阶保持器及一阶保持器的效果。所谓的零阶保持,就是在两个采样值之间令输出保持上一个采样值,这种方法除了在采样率远高于信号中最高频率的情况下效果不错之外,通常带来很大的误差,如图2.1.5所示。图2.1.5数字信号通过DAC转换恢复为模拟信号一阶保持器是一个基于相邻两个采样值的线性外推规律恢复离散信号的保持器。利用这种方法的信号恢复结果如图2.1.6所示。图2.1.6使用零阶保持器及一阶保持器恢复模拟信号的效果对比2.2离散傅立叶变换(DFT)与快速傅立叶变换(FFT)

2.2.1离散傅立叶变换(DiscreteFourierTransform,DFT)

首先,了解一下离散傅立叶级数。对于周期信号来说,所有的时域特征信息都在一个周期内反映出来了,因此,响应的频域特征信息也可以通过一个周期的信号进行分析。根据傅立叶理论,一个周期为的离散信号可以展开为个复正弦信号的叠加形式,即离散傅立叶级数如下:(2.2.1)其中是傅立叶系数,其计算公式如下:(2.2.2)可以证明公式(2.2.1)和公式(2.2.2)都满足周期为的特性,即,,所以,傅立叶系数也具有周期性特征。公式(2.2.1)说明一个周期为的离散信号可以用个复正弦函数的线性加权表示,而加权系数就是傅立叶系数。从频域来看,公式(2.2.1)说明周期信号共有如下个频率成分:k=0~N -1(2.2.3)(2.2.5)(2.2.6)图2.2.1由8个频域采样点形成离散频谱X(k),k=0~7将公式(2.2.6)离散频率点带入公式(2.2.5)得到信号的离散频谱:(2.2.7)见上式左边以简约形式X(k)表示,则上式成为DFT变换式公式(2.2.4)。因此,离散傅立叶变换的含义是求有限长信号的离散频谱,严格地说,是在0~2π一个周期内的离散值。离散傅立叶的反变换(InverseDiscreteFourierTransform,IDFT)公式如下:(2.2.8)上式包含两层意思,一是可以根据N个离散傅立叶变换所表示的离散傅立叶频谱值X(k)恢复原始信号x(n);二是长度为N的有限长信号可以用N个频率分量的正弦信号的叠加来构成,这也就反映了信号的频谱一定是N个离散值。它说明任何一个段式分布的信号(有限长)都可以通过正弦信号来合成。在实际应用中,大部分情况下是运用DFT正变换分析信号的频谱特征的,需要IDFT反变换进行信号恢复和重构的场合主要是通信和数据压缩领域。(2.2.9)定义(2.2.10)则公式(2.2.9)可以转化为:(2.2.11)图2.2.28点DFT分解成两个4点DFT图2.2.34点DFT分解成两个2点DFT图2.2.42点DFT分解图2.2.5基于时选的8点FFT算法图2.2.6基于时选的FFT算法的改进形式(2.2.12)令,则上式成为:(2.2.13)(2.2.14)(2.2.15)图2.2.78点DFT分解成两个4点DFT图2.2.84点DFT的进一步分解图2.2.9基于频选的8点FFT算法 2.3滤波器

2.3.1无限脉冲响应数字滤波器(IIR)

1.直接Ⅰ型

IIR滤波器的系统函数为(2.3.1)对应的差分方程为图2.3.1N阶IIR系统直接Ⅰ型流图(2.3.2)

2.直接Ⅱ型

直接Ⅱ型结构又称为典范型结构。前文讨论的直接I型结构的系统函数可被看成是两个独立的系统函数的乘积,结构上为两个子系统的级联。对于一个线性时不变系统,若交换其级联子系统的次序,系统函数是不变的,即总的输入/输出关系不变。对于图2.3.1,如果把零点和极点实现的次序对换一下,即先实现极点再实现零点,且把延时单元合并成一个公用的,则构成了图2.3.2所示的形式,称为直接Ⅱ型结构。图2.3.2N阶IIR系统直接Ⅱ型流图

3.级联型

如果将N阶IIR系统函数分解成二阶因式连乘积,则可得到级联结构:(2.3.3)这样,整个系统将由M个二阶系统级联构成。具体地,将公式(2.3.1)的分子和分母都进行因式分解,得到:(2.3.4)(2.3.5)(2.3.6)式中,N3表示的最大整数,且(2.3.7)称为滤波器的二阶基本节。图2.3.3二阶子系统的直接Ⅱ型实现

4.并联型

IIR滤波器的并联机构形式是基于对H(z)的部分分式展开来实现的。对公式(2.3.4)的H(z)用部分分式展开,有:(2.3.8)(2.3.9)图2.3.4IIR系统的并联结构形式

5.转置型

如果将网络中所有支路的方向加以反转,支路增益保持不变,并将输入x(n)和输出y(n)相互交换,则网络的系统函数不会改变。

利用网络的转置定理,将以上讨论的几种结构进行转置,可以得到几种新的网络结构,例如,对图2.3.1的直接Ⅱ型结构转置得到如图2.3.5所示的结构,画成输入在左,输出在右的习惯形式,则如图2.3.6所示。图2.3.5直接Ⅱ型的结构转置图2.3.6将图2.3.5画成输入在左,输出在右的习惯形式2.3.2有限脉冲响应数字滤波器(FIR)

FIR是一种非递归系统,其冲激响应h(n)是有限长序列,其系统函数的一般形式为:(2.3.10)式中:h(k)为因果序列;H(k)是的N-1次多项式,它的N-1个极点全部位于z=0处,所以一个FIR系统始终是稳定的。它的零点分布可以处于有限z平面内的任何位置,当全部零点都位于单位圆内部时,就成为最小相位系统。H(n)是有限时宽序列,因而还可以用DFT技术来实现滤波。FIR系统的最大特点就是能够做成严格的线性相位,这在图像处理等应用领域中非常重要。

1.直接型

式(2.3.10)对应的FIR系统的差分方程为:由式(2.311)可以画出FIR系统的直接型结构形式,如图2.3.7所示。可以看出,公式(2.3.11)就是线性时不变系统的卷积和公式,所以直接型结构又称为卷积型结构,有时还称为横截滤波器结构。将转置定理用于图2.3.7,可得到图2.3.8的转置直接结构形式。图2.3.7FIR系统的直接型结构图2.3.8FIR系统的转置直接结构

2.级联型

图2.3.9FIR系统的级联型结构2.3.3IIR滤波器与FIR滤波器的比较

下面对IIR和FIR两种滤波器进行比较,以便在实际应用中选用它们,如表2.3.1所示。 2.4本章小结

本章对数字信号处理的一些基本知识做了简要回顾,主要包括A/D转换与D/A转换、DFT与FFT、IIR与FIR滤波器三方面的内容。事实上,数字信号处理本身已形成一套完整的理论体系,这些理论主要包括信号的采集、离散信号、系统分析、信号处理的算法、滤波技术、信号的估值、建模、信号处理的特殊算法、技术实现及应用等。在这里本章不做过多介绍,仅针对本书需要,抽取其中几个知识点进行简要介绍,有兴趣的读者可参考其他有关数字信号处理方面的书籍。第3章SystemGenerator概述3.1软件需求3.2软件安装3.3编译XILINX硬件描述语言库3.4FPGA器件需求3.5使用FPGA进行数字信号处理的优势3.6用SystemGenerator进行系统级建模 3.1软件需求

在安装和使用SystemGenerator8.2版之前在PC机上首先必须安装有如下软件。

MathWorks公司的MATLAB两个版本中的任意一款:

MATLABv7.1.0/Simulinkv6.3(R14.3)ServicePack3;

MATLABv7.2/Simulinkv6.4(R2006a)。

注意:MATLAB的安装路径中不能包含有非英文字符和空格(如C:\MATLAB72)。

8.2.01(8.2ServicePack1)版本或以上的XILINXISEFoundation软件,包括相同版本的ISE仿真器。

包括8.2i_IP1或以上IP更新包的XILINXISE8.2COREGenerator。

部分SystemGenerator功能需要用到如下软件,开发人员可根据具体情况选择安装。逻辑综合编译软件,有如下两者可选:

XILINX公司的XST(XILINXSynthesisTechnology);

Synplicity公司的SynplifyProv8.5版或v8.6.1版。

硬件描述语言(HardwareDescriptionLanguage,HDL)仿真软件,仅在需要进行硬件描述语言协同仿真时使用,可选用:

XILINXISESimulator;

ModelSimXILINXEdition;

ModelTechnologyInc.公司的ModelSimPE或SE的6.1b及其以上版本。嵌入式处理器开发软件,仅在设计中用到嵌入式处理器时使用,可选用8.2版XILINXEmbeddedDevelopmentKit。

FPGA在线调试软件,仅在设计中用到ChipScope模块时使用,可选用8.2iServicePack1Release版的XILINXChipScopePro。

注意:Windows操作系统的环境变量必须要指定到PC机上ISE软件的安装路径。

注意:ISE软件包及其8.2i版的更新可到XILINX网站上下载:

/xlnx/xil_sw_updates_home.jsp 3.2软件安装

从XILINX网站上下载SystemGenerator的安装文件并安装。在安装前需要确认关闭所有MATLAB窗口,并且满足上节对软件的要求。

3.3编译XILINX硬件描述语言库

1.ModelSim的版本为PE或EE/SE

针对这些版本的ModelSim,ISE中提供了一个很有用的编译工具compxlib,位于ISE软件安装路径下“.\bin\nt\compxlib.exe”。按如下操作可将所有的XILINX的VHDL和Verilog语言的库都编译到ModelSimSE中。

(1)取消ModelSim软件安装路径下modelsim.ini文件的只读属性。

(2)在DOS命令提示符下输入如下命令:

compxlib-smti_se-archall-lall-dir<modelsim>-w

其中,<modelsim>为ModelSim软件的安装路径,如“C:\Modeltech_6.2b\”。

(3)完成编译后在此打开ModelSim,可在其Workspace中看到如图3.3.1所示框中的新加载的库,库名以“_VER”为结尾的是以Verilog为描述语言的库,否则为VHDL。图3.3.1ModelSim中加载的XILINX库注意:compxlib工具的使用方式可在ISE软件的使用手册中找到,XILINX网站提供下载:

/docsan/xilinx82/books/docs/sim/sim.pdf

2.ModelSim的版本为XE(XILINXEdition)

XE版本的ModelSim是XILINX公司和ModelTechnology公司联合开发的针对XILINXFPGA的版本,因而不需要对XILINX的库进行额外的编译,只需要从XILINX网站上下载相关更新包即可,最新的库位于/xlnx/xil_sw_updates_home.jsp?update=mxe_libs

将下载的更新包解压缩到ModelSim的安装路径下,如“C/Modeltech_XE/”。ModelSimXE会在此路径下搜索相关库,并自动加载,也不需要更改modelsim.ini文件属性。

3.4FPGA器件需求

目前支持SystemGenerator的器件有Virtex、VirtexE、Virtex-2、Virtex-2Pro、Virtex-4、Virtex-5、Spartan-2、Spartan-2E、Spartan-3、Spartan-3E、Spartan-3A。

3.5使用FPGA进行数字信号处理的优势

传统的数字信号处理系统大多使用DSP处理器实现,由于DSP处理器具有较高的系统时钟频率以及专用的乘加计算模块等资源,使得DSP处理器适于实现数字信号处理系统,DSP处理器实现机制如图3.5.1所示。图3.5.1DSP处理器执行机制但由于DSP处理器在运行时是按指令顺序执行的,且数据位宽也是固定的,因而资源的利用率不高,限制了处理器的数据吞吐量,还需要较大的存储空间。并且当信号频率和DSP处理器的系统频率比较接近时,难以实现较复杂的设计要求。

比如实现一个256拍的FIR滤波器,利用DSP处理器内部的乘加单元(MAC),由于一个时钟周期内DSP处理器仅能完成一次乘加运算,因此一次数据采样完成后DSP处理器需要256个时钟周期后才能给出相应的计算结果,对系统的采样率有极大影响,难以开发出高速的数字信号处理系统,如图3.5.2所示。图3.5.2串行乘加器根据大量的工程经验数据,可以得到如图3.5.3所示的曲线。算法的复杂程度可以通过算法用到的系数个数来体现。在使用同一个DSP处理器的情况下,算法越复杂,能够获得的最大采样率越低,并且一个中等复杂的算法对采样率的限制已经非常大。要提高处理速度最直观的方法就是采用多个处理器或选用时钟频率更高的器件,但效果并不明显,同时带来高成本、高能耗等问题。图3.5.3DSP处理器执行性能

FPGA处理数据的方式是基于硬件的并行处理方式,并且可以根据设计要求任意配置硬件结构。同样以实现一个256拍的FIR滤波器为例,假如采用如图3.5.4所示的硬件结构,采用并行的数据处理方式。256次乘加运算可以在一个时钟周期内完成,相对于之前用DSP处理器实现方式具有更大的数据吞吐量。图3.5.4并行乘加器

FPGA除了具有并行处理的优势之处,还具有极大的灵活性,可以开发出对设计要求非常具有针对性的硬件结构,如图3.5.5所示。同样实现Q=(A × B)+(C × D)+(E × F)+(G × H),可以有三种不同的硬件实现结构,如果设计具有较高的处理速度,可以选择图3.5.5中最左侧的结构;如果设计要求节省硬件资源,可以选择图3.5.5中最右侧的结构,开发人员可以根据系统的要求对设计进行优化。图3.5.5多种实现结构和优化指标不难发现,图3.5.5中最左侧的结构图中,第一级加法器可以比第二级加法器少一位位宽,在DSP处理器上开发人员无法改变数据位宽,但这一细节在FPGA上完全可以实现,从而节省资源,其优越性在图3.5.6中得到充分体现。图3.5.6改变数据位宽以节省资源

3.6用SystemGenerator进行系统级建模

数字信号处理系统设计的最初阶段,对所需完成的操作进行数学的描述,然后得出算法的硬件实现。但是硬件的具体实现很难做到和最初的描述完全相符合。一般来说,从使用SystemGenerator进行系统建模到完成设计包括以下几个步骤:

(1)用数字语言来描述算法。

(2)在设计环境中实现算法,开始时使用双精度。

(3)把双精度算法转换成定点算法。

(4)把设计转换成有效的硬件。第(1)、(2)步只要对对象的数学模型有充分了解通常都能顺利完成,大多是理论分析上的问题,在此不作讨论。

第(3)步可能发生错误是:由于一个有效的硬件执行工具通常需要足够高的定点数精度来描述一个结果。SystemGenerator不能自动完成这个步骤,需要开发人员来定义各信号和各模块的数据类型、位宽及小数点位置等。

第(4)步经常会发生错误,因为很难保证硬件与原始设计对应,SystemGenerator通过使用IP核来保证硬件实现的准确性。

Simulink提供了一个可以创建和仿真动态系统的可视化的环境,在此环境下可以很方便地进行系统级的设计。SystemGenerator作为一个工具箱包含在Simulink中,包括XILINXBlockset、XILINXReferenceBlockset和XILINXXtremeDSPKit三个库,由XILINX公司和MathWorks公司合作开发。使用SystemGenerator可以很方便地在Simulink中搭建系统模型并仿真,而且能根据设计模型生成对应的ISE工程及可下载FPGA的位流文件。SystemGenerator把在Simulink中定义的系统参数对应成硬件实现时的实体、结构体、输入/输出端口、信号和属性。此外,SystemGenerator自动地为FPGA的综合、HDL仿真和实现工具生成命令文件。因此,从系统的规范说明到硬件实现,用户都完全可以在可视化的环境中进行操作。

SystemGenerator库可以在Simulink的库浏览器中看到,而且其中元件可以与其他的库中的元件自由地结合使用,但需要SystemGenerator中的GatewayIn模块将双精度数转换成定点数。不过要注意的是只有那些代表XILINX块和由XILINXBlockset中的块构成的子系统才可以被SystemGenerator转换成硬件实现。整个生成过程被XILINXBlockset基本元件中的一个模块所控制,该块的名称为SystemGenerator,如图3.6.1所示。图3.6.1SystemGenerator模块

SystemGenerator块的参数设置里允许用户选择FPGA的目标器件、系统时钟周期和其他的一些工具选项。SystemGenerator通过把XILINXBlockset的元件对应成IP核库组件,从系统的参数设置(比如采样周期)中推断出控制信号和电路,并把Simulink的模型转换成ISE工程。此外,为了用CoreGenerator生成IP核网表,SystemGenerator也生成了一些必须的命令文件来激活CoreGenerator,并且为HDL仿真、综合、绘图、布线和位流生成了一些项目和脚本文件。为了保证对多速率系统汇编的有效,SystemGenerator还为执行工具生成了一些约束文件。为了证实已经生成的文件的有效性,SystemGenerator还可生成一个测试文件(testbench)及测试向量。此部分内容在后续章节中有详细说明。3.6.1MATLAB、Simulink和SystemGenerator的运行环境

MATLAB既是一个通用的目标程序语言又是一个科学和工程应用的描述语言,主要应用于矩阵的计算。MATLAB的程序接口与FORTRAN和C非常相似。例如:结果保存到变量中,以算术算子和逻辑算子来计算数值,用户可以自定义函数,内部带有函数库,内部的函数库是可以扩展的。因为矩阵是最基本的运算单位,因此可以很容易地进行很多复杂的计算。而另一方面,尽管有限时间序列可以用向量表示,但是MATLAB没有明确的时间概念,因此在为硬件建立模型时会有非常大的缺陷。

Simulink扩展了MATLAB工程应用描述范围,为建立动态系统模型提供了一个通用的环境。Simulink的图形编辑程序可以把模块组装成具有一定功能的模型,从而达到预期的仿真目标。Simulink支持离散时间系统的仿真,从而适合于建立硬件模型,包括数据采样系统中的并行行为。

SystemGenerator是一个可以扩展Simulink功能的软件,它为数字逻辑的DSP功能提供了准确的仿真。它还可以把Simulink的模型转换成硬件执行程序,转换后的硬件执行程序可以在XILINX公司的FPGA中运行。由XILINX公司提供的模块组成的模型在Simulink的环境中正常运行,它将会以同样的方式在硬件中执行。在Simulink环境中,由XILINX公司提供的模块可以和非XILINX公司提供的模块任意组合使用,从而建立一部分的系统模型,但是该模型不能在FPGA中运行。和众多的Simulink模块一样,XILINX的模块可以在MATLAB的命令窗口中设置参数后使用。

Simulink和MATLAB的数据分析和可视化也可以当作设计的一部分应用于SystemGenerator,而SystemGenerator仅仅将由XILINX模块构成的模型的一部分转换成硬件。在Simulink中计算的仿真向量将会在HDL测试中捕获SystemGenerator模型中的非XILINX块构成的部分的行为特征,这就使得一个模型在Simulink中的行为特性可以和产生的硬件中的行为特性相似。

SystemGenerator是在Simulink的环境下运行的,而Simulink又是在MATLAB的基础上运行的。如果设计者不熟悉MATLAB或是不熟悉Simulink,使用SystemGenerator会有较大的障碍。有关MATLAB/Simulink的使用在此不作详细介绍,有许多有关MATLAB方面的辅导性教材或参考指南都可作参考。3.6.2一般流程

为了建立一个SystemGenerator设计,并把它转换成硬件执行程序在XILINX的FPGA中运行,需要以下步骤:

(1)打开Simulink的库浏览器并建立一个新的Simulink模型。Simulink可以通过在MATLAB的命令窗口中输入Simulink来激活,也可以在MATLAB的工具栏中单击“SimulinkLibraryBrowser”按钮来打开。当SimulinkLibraryBrowser出现时,选择菜单栏中的“File→New→Model”建立一个新的模型。在浏览器中,XILINX库和其他Simulink库中的块都可以被选用。

(2)从浏览器中拖出XILINX模块和其他的Simulink块到新的模型中,每个XILINX模块都可以被用户自行设置使用,通过双击模块图标来设置模块的属性。

(3)每一个SystemGenerator设计需要一个SystemGenerator模块,可以在基本元件库中找到。这个模块将会控制硬件执行程序的生成。双击这个模块就可以看到它的控制属性。这个模块也可以定义Simulink的采样时间,采样时间是模型能够在Simulink中仿真的必须条件。

(4)在模型中可以将一个模块的端口和另一个模块的端口连接起来而成为一个整体。XILINX模块之间端口的相互链接可以从一个端口拖拽到另一个端口来完成,而XILINX模块和非XILINX模块的连接可以用Gateway模块来衔接。

(5)对模型进行仿真。因为模块的采样周期用户可自行设置,SystemGenerator可能会指出Simulink系统默认的采样周期和一些模块的设置不一致。系统周期会和实际生成硬件中的时钟周期相符合,而且在模型中根据模块的不同的采样周期做出相应的配置。SystemGenerator允许更新系统采样周期,使各个块的参数设置保持一致。

(6)为模块生成VHDL代码。在SystemGenerator模块参数设置对话框中,选择需要的FPGA系列、类型、时钟周期和综合工具等,指明生成执行代码的路径。如果需要一个VHDL测试文件,就选择“CreateTestbench”选项。最后,单击Generate按钮来生成设计。SystemGenerator将会生成一些可以在XILINX的ISE软件中综合和执行的文件,包括VHDL和EDIF文件、测试文件、一些约束文件和项目文件。3.6.3流程范例

在开始实验之前,请先将本书所配的光盘中的SG文件夹拷贝到读者所用PC机的C盘根目录下。

例1SystemGenerator设计简单流程

本例使用SystemGenerator设计实现信号延迟功能,说明SystemGenerator设计的流程。

(1)打开MATLAB。双击桌面MATLAB快捷方式,如图3.6.2所示。在开始菜单中启动MATLAB,如图3.6.3所示。图3.6.2MATLAB启动快捷方式图3.6.3在开始菜单中启动MATLAB

(2)更改路径。修改路径到:c:\SG\exercise\design_flow\。在命令窗口(CommandWindow)中输入:cdc:\SG\exercise\design_flow\,如图3.6.4所示。图3.6.4更改MATLAB工作路径

(3)打开Simulink。在命令窗口中输入Simulink或单击MATLAB工具栏中的SimulinkLibraryBrowser按钮,如图3.6.5所示。图3.6.5打开Simulink

(4)安装了SystemGenerator后可在打开的SimulinkLibraryBrowser左侧的工具箱中看到XilinxBlockset、XilinxReferenceBlockset、XilinxXtremeDSPKit和xPCTarget四个库,如图3.6.6所示。后面章节对这四个库有详细介绍,右击其中任意模块可查看其说明文档。图3.6.6查看模块帮助文档

(5)建立新模型。单击SimulinkLibraryBrowser工具栏中的Createanewmodel按钮,如图3.6.7所示。图3.6.7新建Simulink模型

(6)保存模型并命名。以design_flow.mdl为文件名保存在路径C:\SG\exercise\design_flow下,如图3.6.8所示。图3.6.8保存新建Simulink模型

(7)放置仿真模块并仿真。在SimulinkLibraryBrowser窗口中展开Simulink工具箱,展开Sources库,将其中的Constant模块和Sinks中的Scope模块放到design_flow.mdl窗口中,并连接其端口,如图3.6.9所示。此时的模型并未使用到SystemGenerator模块,因此还不是一个SystemGenerator设计。单击StartSimulink开始仿真,双击Scope模块查看仿真结果,如图3.6.10所示。图3.6.9进行Simulink仿真图3.6.10Simulink仿真结果

(8)放置SystemGenerator仿真模块并仿真。将XILINXBlockset工具箱中的SystemGenerator、Delay、GatewayIn和GatewayOut模块放到design_flow.mdl窗口中并按图3.6.11连接模块。将Format→Port/signalDisplays→PortDataTypes项选中,显示连接线上的数据类型。如果未能立即显示按键盘,按下“Ctrl+D”键即可。图3.6.11SystemGenerator模块仿真结构图注意:double为双精度数;Fix_16_14为带14位小数的定点16位二进制数。

单击StartSimulink开始仿真,双击Scope模块查看仿真结果,如图3.6.12所示。至此完成一个最简单的SystemGenerator设计,完成1秒延迟输出。图3.6.12Simulink仿真结果

(9)生成ISE工程。双击GatewayIn模块,在其Basic页中设定Outputtype为Boolean;在Implementation页中选中SpecifyIOBlocationconstraints,并设定IOBpadlocation为{'L13'},对应Spartan-3E开发板上的标号为SW0的开关。单击OK按钮,如图3.6.13所示。图3.6.13GatewayIn模块参数设定双击GatewayOut模块,选中SpecifyIOBlocationconstraints,并设定IOBpadlocations为{'F12'},对应Spartan-3E开发板上的标号为LD0的LED灯,如图3.6.14所示。图3.6.14GatewayOut模块参数设定双击SystemGenerator模块,设定Part为Spartan-3EXC3S500E-4FG320,对应到本书配套使用的Spartan-3E的开发板;FPGAclockperiod(ns)为20,对应Spartan-3E开发板上提供的50MHz的晶振;Clockpinlocation为C9,对应外部时钟管脚为C9,如图3.6.15所示。图3.6.15SystemGenerator模块参数设置对话框图3.6.16编译完成3.6.4几个重要特点

1.SystemGenerator中的信号类型

为了提高硬件仿真的精度,SystemGenerator中的模块采用了任意精度的定点数,最大支持4096位定点数,而在Simulink中基本的数据类型是双精度浮点型,因此Simulink中的连续时间信号必须经过GatewayIn模块采样后转换成定点数类型才可被SystemGenerator中的模块使用,进行相关处理后再用GatewayOut块来把定点数转换成双精度浮点数,实现SystemGenerator模块和Simulink中的其他功能模块的互联。SystemGenerator中共有如下4种信号类型,在Simulink中选择“Format→Port/signalDisplays→PortDataTypes”选项并按下“Ctrl+D”键可显示信号类型。

Boolean:布尔量数据,显示为“Bool”。

Signed:带符号数,显示为“Fix_N_n”,其中N表示数据位宽,n表示小数位。

Unsigned:无符号数,显示为“UFix_N_n”,其中N表示数据位宽,n表示小数位。

DSP48instruction:DSP48的指令信号,显示为“UFix_11_0”。DSP48为XILINXVirtex-4器件的一个针对数字信号系统的专用嵌入式模块,由一个18×18位的乘法器和一个48位的加法器和可编程的多路复用器构成,用于实现乘加运算。

2.Simulink系统时间和硬件时钟频率

了解SystemGenerator仿真中的时钟信号和生成的FPGA硬件中的时钟信号之间的关系是非常重要的。在Simulink中没有明确的时钟概念,虽然会要求开发人员定义系统时钟周期,但仿真时仅仅是在每个时钟周期内一些模块被激活,通过这样的方式来模拟时钟信号。FPGA的时钟信号周期也不等于仿真的时钟周期,而是由外部的时钟源及FPGA内部的数字时钟管理器(DigitalClockManager,DCM)共同决定的。在SystemGenerator中,开发人员可以在SystemGenerator模块的参数设置对话框中为Simulink系统周期和FPGA时钟频率指定具体的值,从而把Simulink采样周期和FPGA硬件时钟周期联系起来。一个正确的Simulink系统周期应该是模型中出现的采样周期的最大公因子,采样周期可以在设计中的具

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论