FPGA应用文章
DSP+FPGA实时信号处理系统
摘要:简要叙述了常用的信号处理系统的类型与处理机结构,介绍了正逐步得到广泛应用的DSP+FPGA处理机结构,在此基础上提出了一种实时信号处理的线性流水阵列,并举例说明了该结构的具体实现,最后分析说明了此结构的优越性。
关键词:实时信号处理 处理机结构 线性流水阵列
实时信号处理系统要求必须具有处理大数据量的能力,以保证系统的实时性;其次对系统的体积、功耗、稳定性等也有较严格的要求。实时信号处理算法中经常用到对图象的求和、求差运算,二维梯度运算,图象分割及区域特征提取等不同层次、不同种类的处理。其中有的运算本身结构比较简单,但是数据量大,计算速度要求高;有些处理对速度并没有特殊的要求,但计算方式和控制结构比较复杂,难以用纯硬件实现。因此,实时信号处理系统是对运算速度要求高、运算种类多的综合性信息处理系统。
1 信号处理系统的类型与常用处理机结构
根据信号处理系统在构成、处理能力以及计算问题到硬件结构映射方法的不同,将现代信号处理系统分为三大类:
·指令集结构(ISA)系统。在由各种微处理器、DSP处理器或专用指令集处理器等组成的信号处理系统中,都需要通过系统中的处理器所提供的指令系统(或微代码)来描述各种算法,并在指令部件的控制下完成对各种可计算问题的求解。
·硬连线结构系统。主要是指由专用集成电路(ASIC)构成的系统,其基本特征是功能固定、通常用于完成特定的算法,这种系统适合于实现功能固定和数据结构明确的计算问题。不足之处主要在于:设计周期长、成本高,且没有可编程性,可扩展性差。
·可重构系统。基本特征是系统中有一个或多个可重构器件(如FPGA),可重构处理器之间或可重构处理器与ISA结构处理器之间通过互连结构构成一个完整的计算系统。
从系统信号处理系统的构成方式来看,常用的处理机结构有下面几种:单指令流单数据流(SISD)、单指令流多数据流(SIMD)、多指令流多数据流(MIMD)。
·SISD结构通常由一个处理器和一个存贮器组成,它通过执行单一的指令流对单一的数据流进行操作,指令按顺序读取,数据在每一时刻也只能读取一个。弱点是单片处理器处理能力有限,同时,这种结构也没有发挥数据处理中的并行性潜力,所以在实时系统或高速系统中,很少采用SISD结构。
· SIMD结构系统由一个控制器、多个处理器、多个存贮模块和一个互连网络组成。所有“活动的”处理器在同一时刻执行同一条指令,但每个处理器执行这条指令时所用的数据是从它本身的存储模块中读取的。对操作种类多的算法,当要求存取全局数据或对于不同的数据要求做不同的处理时,它是无法胜任的。另外,SIMD 一般都要求有较多的处理单元和极高的I/O吞吐率,如果系统中没有足够多的适合SIMD 处理的任务,采用SIMD 是不合算的。
器件 | XC5204 | XC5206 | XC5210 | XC5215 |
逻辑单元 | 480 | 784 | 1296 | 1936 |
最大逻辑门 | 6000 | 10000 | 16000 | 23000 |
多功能块 | 10×12 | 14×14 | 18×18 | 22×22 |
CLB | 120 | 196 | 324 | 484 |
触发器 | 480 | 784 | 1296 | 1936 |
I/O | 124 | 148 | 196 | 244 |
XC5200系列FPGA逻辑功能的实现由内部规则排列的逻辑单元阵列(LCA)来完成,它是FPGA的主要部分。LCA的核心是可重构逻辑块(CLB),四周是一些输入/输出块(IOB)。CLB和IOB之间通过片内的布线资源相连接。LCA由配置代码驱动,CLB和IOB的具体逻辑功能及它们的互联关系由配置数据决定。整个FPGA模块的设计实现在Xilinx公司的Foundation 2.1i开发平台上完成。该系统支持设计输入、逻辑仿真、设计实现(设计综合)和时序仿真等系统开发全过程。
在选用DSP芯片时,主要应考虑性能能否满足快速判读算法的要求,具体说就是要求选择那些指令周期短、数据吞吐率高、通信能力强、指令集功能完备的处理器,同时也要兼顾功耗和开发支持环境等因素。表2列出了一些常用微处理器的性能参数。
我们选择的是应用广泛、性价比较高的TMS320C40芯片。它是美国TI公司推出的为满足并行处理需求的32位浮点DSP。主要特性如下:
表2 常用微处理器对照表
处理器类型 | DSP(Motorola) | ADSP | TMS320 | ||||
96002 | 56156 | 21020 | 2101 | C30 | C40 | C50 | |
字长/bit | 32 | 16 | 32 | 16 | 32 | 32 | 16 |
指令周期/ns | 50 | 50 | 50 | 60 | 33 | 25 | 50 |
1024浮点FFT时间/ms | 1.04 | 2.33 | 0.96 | 2.07 | 2.36 | 1.93 | 3.42 |
·外部时钟40MHz,内部时钟20MHz,所有指令均单周期完成,处理器内部采用高度并行机制,可同时进行多达11项各类操作。
·两套相同的外部数据、地址总线,支持局部存储器和全局共享存储器。
·6个高速并行通信口,采用异步传输方式,最大速率可达20Mb/s。通过令牌传递可灵活实现数据双向传输,这种结构很适合C40之间的互连。
·6个DMA通道,每个通道的最大速率可达20Mb/s。DMA内部总线与CPU的地址、数据、指令总线完全分开,避开了总线使用上的瓶颈。
从结构和功能上看,C40很适合与可重构器件互相配合起来构成高速、高精度的实时信息处理系统,并完全可以胜任图像信息的实时处理任务;此外,C40的开发系统也比较完备,支持C语言和汇编语言编程,能够方便地进行算法移植和软/硬件的协同设计。
衡量系统的整体性能不仅要看所使用的器件和所能完成的功能,还要看器件之间采用怎样的互连结构。XC5200可以完成模块级的任务,起到DSP的协处理器的作用。它的可编程性使它既具有专用集成电路的速度,又具有很高的灵活性。C40内部结构的主要优势是:所有指令的执行时间都是单周期,指令采用流水线,内部的数据、地址、指令及DMA总线分开,有较多的寄存器。这些特征使它有较高的处理速度。FPGA具有硬件的高速性,而C40具有软件的灵活性,从器件上考察,能够满足处理复杂算法的要求。同时,C40的6个通信口和6个DMA通道使其能够在不被中断的情况下比较从容地应付与外界大量的数据交换。
从PU内部互连来看,C40使用了专用的通信口完成与FPGA的互连,能够保证在任何情况下FPGA与C40的数据通道的畅通。另外,FPGA和C40各自都有输入端口,使得系统的处理结构多样化。比如,FPGA可以作为处理流程中的一个模块,完成某项功能,也可以作为C40的协处理器,通过C40的调用来完成特定的子函数。底板将互连性延伸到PU之间,使得多个电路板能够组成多处理机系统。前级的C40既可以与下一级的C40通信,也可以将数据发送到下一级的FPGA。
综上所述,本文提出的基于DSP+FPGA的线性流水阵列结构,为设计中如何处理软硬件的关系提供了一个较好的解决方案。同时,该系统具有灵活的处理结构,对不同结构的算法都有较强的适应能力,尤其适合实时信号处理任务。
在测控系统中用IP核实现D/A转换
摘要:采用数字化技术、在测控系统中用IP核实现D/A转换,并且在1片可编程逻辑器件中实现。它不受温度的影响,既可保持高分辨率,又可降低对电路精度和稳定度的要求,并减少元件的数量。
关键词:IP D/A VHDL 可编程逻辑器件
在各类电子系统中,数字电路所占比重越来越大。这主要是因为数字电路相对于模拟电路有一些突出的优点,例如:
*数字电路中的有源器件工作在饱和区与截止区,工作状态稳定;
*数字电路处理的是二值信号,易于存储和再生;
*数字电路是由大量相同的基本单元,如门、触发器等所组成,易于大规模集成,易于自动化设计工具的应用等。
由于数字电路的以上特点,再加上数字计算机和数字信号处理技术的迅速发展,使得数字电路从集成规模、应用范围及设计自动化程度等方面大大超过了模拟电路,越来越多的由模拟电路实现的功能转由数字电路实现,进入了电子系统数字化的时代。
在测控系统采用数字化技术,将原来由模拟电路实现的D/A由数字电路实现。
1 IP核介绍
IP(知识产权)核将一些在数字电路中常用,但比较复杂的功能块,如FIR滤波器、SDRAM控制器、PCI接口等设计成可修改参数的模块。IP核的重用是设计人员赢得迅速上市时间的主要策略。随着CPLD/FPGA的规模越来越大,设计越来越复杂(IC的复杂度以每年55%的速率递增,而设计能力每年仅提高21%),设计者的主要任务是在规定的时间周期内完成复杂的设计。调用IP核能避免重复劳动,大大减轻工程师的负担,因此使用IP核是一个发展趋势。
IP核包括硬IP与软IP。可配置IP是参数化后的可重定目标IP,其优点是可以对功能加以裁剪,以符合特定的应用。这些参数包括总线宽度、存储器容量、使能或禁止功能块。
硬IP最大的优点是确保性能,如速度、功耗等。然而,硬IP难以转移到新工艺或集成到新结构中,是不可重配置的。
软IP是以综合形式交付的,因而必须在目标工艺中实现,并由系统设计者验证。其优点是源代码灵活,可重定目标于多种制作工艺,在新功能级中重新配置。
不过目前大多数库是收费的,但也可以从网上下载一些免费的IP核。
2 用IP核实现的D/A转换器的功能及特点
数字到模拟转换器(DACs)将一个二进制数转换为与之对应的电压值,目前常用的D/A转换器都是由电阻或电容加权网络、受码元控制的开关和基准电压或电流源组成。当D/A转换器需要转换的信号每次取样字长很长时,对这些电路的精度要求很高,并且还必须在整个温度范围和整个使用寿命期间内保持电路参数的稳定。例如,一个16位的D/A转换器,其MSB的精度必须在1/2 16以内,这是很困难的。所以,需寻求一种中保持高分辨率又可降低对电路精度和稳定度要求的方法。
可综合的Delta-Sigma DAC(术语Delta-Sigma分别指算术差与和,即Δ-∑DAC),是Xilinx公司提供的免费IP核,可从网上下载得到。
Delta-Sigma DAC使用数字技术,因而它不温度的影响,并且能在一片可编程逻辑器件中实现。避免在D/A转换器中使用匹配电阻,不仅能更便宜,而且,其转换是线性的。Delta-Sigma DAC实际上是高速单个位的DAC,用数字反馈技术,在输出端产生一串脉冲。脉冲串中信号为高电平的时间部分与二进制输入成比例,当这个脉冲串通过一个模拟低通滤波器后就得到一个模拟输出信号。
图1是一个典型的可编程逻辑器件实现的DAC的顶层电路图,输入信号有复位信号、时钟信号以及二进制数据总线。输出DACoutDrvr驱动一个外部的低通滤波器Vout能从0V~Vcco。这里Vcco是FPGA I/O块的供电电压。输入/输出详细说明如表1所列。
表1 输入输出描述表
信 号 | 方 向 | 描 述 |
DACOUT | 输出 | 驱动外部低通滤波器的脉冲串(通过一个输出驱动器) |
DACIN | 输入 | 数字输入总线,值必须设置成钟的正沿 |
clk | 输入 | 正沿有效 |
Reset | 输入 | 复位信号初始化SigmaLatch和输出D触发器 |
DAC的二进制输入是一个无符号数。“0”代表最低电压,输出的模拟电压也只有正的。“0”输入产生0V输出,输入端全“1”,则输出近似达到Vcco。
图2是Delta-Sigma DAC的原理框图,二进制输入的位宽是可变的。为简单起见,电路原理图描述了一个8位二进制输入的DAC。
在这个器件中,二进制加法器用来产生和,也用来产生差。尽管Delta Adder的输入是无符号数,两个加法器的输出却都是有符号数。Delta Adder计算DAC输入和当前DAC输出的差,并用一个二进制数表示。因为DAC的输出是一个单个的位,因此它不是1就是0。如图2所示,当输入加上由Sigma Latch的输出的两个拷贝与0构成的10位数,就产生差值,这也补偿了DACIN是无符号数的事实。Sigma Adder将它原来的输出(保存在Sigma Latch中)与当前的Delta Adder的输出相加。
图1中输出电压与输入电压的关系为
VOUT=(DACIN/(2MSBI+1))×VCCO
式中单位为V。
例如,对于一个8位DAC(MSBI=7),最后的输出是这样:DACIN输入是0,则输出也是0;DACIN输入是十六进制数FF时,输出值为最大(255/256)×Vcco。
阻容低通滤波器适合多数应用需要,一个简单的阻容低通滤波器就能工作得很好。
Vs的定义是:DAC输入增加或减少时,在Vout端产生变化的绝对值。对一个8位DAC,Vs等于(1/256)×Vcco。
Vout能够产生在0V~Vcco之间可变的电压,具体的值由DACIN的位宽和输入的数值决定。
Delta-Sigma DAC适合需要相对高精度的低频应用。在这种应用中,电压不会很快地变化,因此,RC的时间常数可以很大,以减小噪声。
这种DAC最广泛的应用就是产生通常直流电压。这包括电压控制振荡器、电压控制运算放大器、I/O参数电压、可编程电压源、波形发生器(正弦、三角等)、A/D转换中的参考电压等。
Delta-Sigma DAC是一个例子,说明高速可编程逻辑器件能用于混合信号系统,以减少元件的数量。可编程逻辑器件的速度和密度使它们成为模拟信号产生和处理方面理想的元件。
3 用VHDL语言编写的程序
library ieee;
use ieeestd_logic_11.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity dac_ds is
port(reset :in std_logic;
clk :in std_logic;
din :in std_logic_vector(7 downto 0);--Signed integer
dout :out std_logic;
);
end dac_ds;
architecture arch_dac_ds of dac_ds is
signal error :std_logic_vector(9 downto 0);--Error accumulator is 2 bits larger
constant zeros:std_logic_vector(7 downto 0):=(others=>'0');
begin
process(reset,clk,din)
variable val :std_logic_vector(9 downto 0);
begin
if reset='1'then
error<=(others=>'0');
dout<='0';
elsif clk'event and clk='1' then
--val:=din+error;din is sign extended to nbits+2
val:=(din(din'high)&din(din'high)&din)+error;
if val(val'high)='0'then
dout<='1';
error<=val+("11"& zeros);
else
dout<='0';
error<=val+("01"&zeros);
end if;
end if;
end process;
end arch_dac_ds;
4 芯片的选择和配置
选择MAX7000S系列可编程逻辑器件,编译后由MAX+PLUS II软件自动配置进EMP7032SLC44芯片,将生成的目标文件通过编程电缆对器件进行编程。
将该IP核实现的D/A转换器用于新型智能电阻炉温度控制仪中,因为调节炉温的信号不要求变化很快,因此DAC的输入二进制信号为缓变信号。对于这种低频应用,可以将RC时间常数取得较大,以减小噪声。这样,可综合的VHDL语言Delta-Sigma DAC模块配置进EMP7032芯片后,达到了预期的效果。
基于FPGA的USB2.0控制器设计
摘要:介绍了一种用VHDL设计USB2.0功能控制器的方法,详术了其原理和设计思想,并在FPGA上予以实现。
关键词:USB VHDL FPGA
在视频存储和图像宽带领域中,经常遇到实时高速数据传输的要求。2000年4月,由Intel、Microsoft、NEC、Compaq、Lucent、Phillips等公司共同制订的USB2.0(Universal Serial Bus)传输协议,其速度远远超过了目前使用IEEE1394接口进行视频传输的400Mbps,达到了480Mbps;而且具有即插即用的PnP(Plug And Play)、可进行菊花链式的级联(通过USB HUB进行外围扩展)、可串连多达127个USB设备等优点。应用该协议可支持实时语音、音频和视频数据的传输。
本文针对高速数据传输需求,根据USB2.0的协议规范,利用VHDL语言实现符合该协议的功能控制器,在视频压解系统中使数据在PC与外设之间高速传输。如图1所示由视频A/D采集的原始视频数据,在Philips公司生产的TM1300专用视频处理器中压缩后,通过USB控制器送至PC机。PC机的整个通过USB控制器传输到TM1300,解压后发送至视频D/A。
1 控制器结构原理
USB2.0控制器结构框图如图2所示。控制器主要由两个部分组成,其一为与外设的接口,另一个是内部协议层逻辑PL(Protocol Layer)。内部存储器仲裁器实现对内部DMA和外部总线对存储器访问之间的仲裁。PL则实现USB的数据I/O和控制。
接口有三种:一种是与微控制器之间的功能接口;一种是与单口同步静态存储器(SSRAM)之间的接口;另外一种是与物理层之间的接口。这里符合UTMI(USB Transceiver Macrocell Interface)规范定义。
2 控制器实现
控制器接口的信号框图如图3所示。存储器采用标准的单口SRAM,其信号接口由32位数据线SRAM_DATA、15位地址线SRAM_ADDR及读写信号(SRAM_WE和SRAM_RD)组成,系统所需SRAM的容量为2 15×32bit=128KB。
而与微控制器之间的接口信号包括32位数据线DATA、18位地址线ADDR以及DMA请求和响应信号(DMA_REQ和DMA_ACK)。由于要支持到128KB,需要17位地址线,另外还需要一根地址线来选通SSRAM和USB控制器内部的寄存器,总共需要18根地址线addr[17:0]。定义如下:
USB_RF_SEL <= !addr[17];
USB_MEM_SEL <=addr[17];
第18位地址addr[17]为高时选择缓冲存储器,否则选择内部寄存器。地址addr[16:2]直接用于存储器SSRAM的地址。
2.1 UTMI接口
UTMI接口信号包括:与发送数据相关的信号(TxValid、TxReady等),与接收数据相关的信号(RxActive、RxValid、RxError等)以及16位双向数据线。
在物理层,该控制器需要一个外部的USB收发器(Transceiver),本文采用的是Philips公司的ISP1501芯片。该芯片用作USB2.0的模拟前端,从USB电缆来的差分信号进行反转不归零码(NRZI)解码和位解填充转换成16位并行数据;反之,16位并行数据通过一个差分驱动电路经过串行化、位填充和NRZI编码输出到USB电缆上。ISP1501通过管脚MODE0和MODE1决定收发器的工作模式,共有4种工作模式:MODE[1:0]为“00”时,收发器处于断开状态;为“01”时处于全速(Full Speed)模式(此时USB带宽为12Mb/s);为“10”时是高速(High Speed)模式(此时USB最大带宽是480Mb/s);为“11”时是HS chirp模式。
UTMI接口通过译码MODE[1:0]来控制ISP1501在HS和FS之间转变。
If mode_hs='1'then
MODE<='10'
Elsif mode_hs='0'then
MODE<='01'
End if;
2.2 协议层
控制器的核心逻辑位于PL(Protocl Layer)模块,负责管理所有USB数据I/O和控制通信,其结构如图4所示。
DMA和存储器接口提供随机存储器访问和DMA操作。该模块使PL和外部微控制器采用DMA方式访问SSRAM。当外部总线有访问SRAM的请求时,且PL没有请求访问存储器,控制逻辑如下:req、ack分别对应外部总线和存储器之间的请求和响应信号,din、addr和we分别是外部总线给出的数据、地址和写信号,mreq是内部DMA向存储器发送的请求信号,mdin、maddr和mwe分别是内部DMA给出的数据、地址和写信号。
sel <=(req OR ack_r) AND(NOT mreq);
if sel='1' then
sram_out<=din;
sram_adr<=addr;
sram_we<=req AND we;
else
sram_out<=mdin;
sram_adr<=maddr;
sram_we <=mwe;
end if;
由控制逻辑可看出,内部DMA操作的优先级比外部总线高。
协议引擎(Protocol Engine)处理所有标准的USB握手信号和控制通信。分组组装器组装分组并送入输出FIFO,先组装分组头,插入适当的PID(分组标识)和校验和,然后加入数据域。分组拆装器先解码出PID和序列号以及校验和,再从8位PID取低4位(或高4位取反)得到PID[3:0],通过USB2.0协议的PID类型定义译码出PID名,判断是Token分组(OUT、IN、SOF和SETUP)还是DATA分组(DATA0、DATA1、DATA2和MDATA)。
Pid_Token<=pid_OUT OR pid_IN OR pid_SOF OR pid_SETUP;
Pid_DATA <=pid_DATA OR pid_DATA1 OR pid_DATA2 OR pid_MDATA;
如果是Token分组(格式定义如图5所示),则将后续的16bit数据分别放入两个8bit临时Token寄存器token0和token1,然后取出分组中的7位地址、4位端点号及5位CRC校验码。
Token_fadr<=token0[6:0];
Token_endp<=token1[2:0] & token0[7];
Token_crc5<=token1[7:3];
对于特殊的Token须进行特殊的处理,本文实现的控制器只对SOF这一特殊Token进行操作,解出PID后的11位帧号及5位CRC5校验码。
Frame_no<=token1[2:0] & token0;
Token_crc5<=token1[7:3];
检验校验码是否出错,如果出错等待下一个Token,否则将地址、端点号和帧号等放入相应寄存器。Token类型如果是IN,则执行组装分组并发送寄分组;如果是OUT则拆卸接收到的数据分组。对于其他不支持的Token则视为错误处理:Pid_ERROR<=pid_ACK OR pid_NACK OR pid_STALL OR pid_NYET OR pid_PRE OR pid_ERR OR pid_SPLIT OR pid_PING;如果出错则不进行Token的解码,而等待下一个Token的到来。
如果是DATA分组,则紧接着PID的是最大载荷为1024字节的数据和16位CRC16校验码。对数据的处理先写入端点寄存器,然后通过DMA操作写入SSRAM。下面详细介绍端点寄存器和DMA操作
2.3 端点操作
数据的传输实际上通过端点(Endpoint)进行,控制器通过写端点的寄存器来配置端点,该控制器最多可有16个端点,每个端点有相应的4个寄存器:Epn_CSR、Epn_INT、Epn_BUF0和Epn_BUF1(这里n=0、1、2或3),其格式如图6所示。本文使用addr[8:2]7根据地址线来访问这些寄存器,addr[8:4]用来选择端点号,其值(16进制)从4到19分别表Epn(n=0...15)。addr[3:2]指定寄存器类型:“00”代表CSR(Control Status Register);“01”代表中断寄存器;“10”指向Buffer0;“11”代表Buffer1。这两个Buffer用来作临时数据存储,Buffer0和Buffer1分别作为专用的输入/输出缓冲器来提高USB的数据吞吐能力。双Buffer能够减少微控制器和驱动软件之间的延迟。其中端点的CSR寄存器指定端点的工作模式并且向控制器报告指定端点的状态。Ep_CSR[31:30]必须初始化为“00”(最初使用Buffer0),通过读这2位可以知道下次所要处理的缓冲器;为“01”时,指定Buffer1。Ep_CSR[27:26]和Ep_CSR[25:24]分别指定端点类型和传输类型,其类型编码参见表1。Ep_CSR[21:18]指定端点号,总共可以有16个端点。Ep_CSR[15]时DMA使能位,为“1”时允许外部DMA操作,否则不允许DMA操作。
表1 类型编码表
Ep_CSR[27:26] | 端点类型 | Ep_CSR[25:24] | 传输类型 |
00 | 控制端点 | 00 | 中断传输 |
01 | IN端点 | 01 | 同步传输 |
10 | OUT端点 | 10 | 块传输 |
11 | 保留 | 11 | 保留 |
当控制器收到中断时,读中断源寄存器(Ep_INT[6:0])来判断中断源和产生的原因。可自定义中断源,如Ep_INT[2]定义为该控制器接收到不支持的PID而产生的中断:Ep_INT[2]<=Pid_ERROR。Ep_INT[4]和Ep_INT[3]分别表示Buffer1和Buffer0的满或空的状态位。
Ep_BUF[31](标记缓冲器是否被使用过)在使用后被控制器置“1”,在清空或重填充该缓冲器后,控制器清除该位。该闰初始化时为“0”。Ep_BUF[30:17]指定缓冲器能
Copyright © 2019- 99spj.com 版权所有 湘ICP备2022005869号-5
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务