为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

DSP与FPGA实时信号处理系统介绍

2021-11-12 6页 doc 202KB 8阅读

用户头像 个人认证

xiaowu0912

多年轨道交通运输经验

举报
DSP与FPGA实时信号处理系统介绍FPGA应用文章DSP+FPGA实时信号处理系统   摘要:简要叙述了常用的信号处理系统的类型与处理机结构,介绍了正逐步得到广泛应用的DSP+FPGA处理机结构,在此基础上提出了一种实时信号处理的线性流水阵列,并举例说明了该结构的具体实现,最后分析说明了此结构的优越性。   关键词:实时信号处理处理机结构线性流水阵列   实时信号处理系统要求必须具有处理大数据量的能力,以保证系统的实时性;其次对系统的体积、功耗、稳定性等也有较严格的要求。实时信号处理算法中经常用到对图象的求和、求差运算,二维梯度运算,图象分割及区域特征提取等不...
DSP与FPGA实时信号处理系统介绍
FPGA应用文章DSP+FPGA实时信号处理系统   摘要:简要叙述了常用的信号处理系统的类型与处理机结构,介绍了正逐步得到广泛应用的DSP+FPGA处理机结构,在此基础上提出了一种实时信号处理的线性流水阵列,并举例说明了该结构的具体实现,最后分析说明了此结构的优越性。   关键词:实时信号处理处理机结构线性流水阵列   实时信号处理系统要求必须具有处理大数据量的能力,以保证系统的实时性;其次对系统的体积、功耗、稳定性等也有较严格的要求。实时信号处理算法中经常用到对图象的求和、求差运算,二维梯度运算,图象分割及区域特征提取等不同层次、不同种类的处理。其中有的运算本身结构比较简单,但是数据量大,计算速度要求高;有些处理对速度并没有特殊的要求,但计算方式和控制结构比较复杂,难以用纯硬件实现。因此,实时信号处理系统是对运算速度要求高、运算种类多的综合性信息处理系统。1信号处理系统的类型与常用处理机结构   根据信号处理系统在构成、处理能力以及计算问题到硬件结构映射方法的不同,将现代信号处理系统分为三大类:   ·指令集结构(ISA)系统。在由各种微处理器、DSP处理器或专用指令集处理器等组成的信号处理系统中,都需要通过系统中的处理器所提供的指令系统(或微代码)来描述各种算法,并在指令部件的控制下完成对各种可计算问题的求解。   ·硬连线结构系统。主要是指由专用集成电路(ASIC)构成的系统,其基本特征是功能固定、通常用于完成特定的算法,这种系统适合于实现功能固定和数据结构明确的计算问题。不足之处主要在于:周期长、成本高,且没有可编程性,可扩展性差。   ·可重构系统。基本特征是系统中有一个或多个可重构器件(如FPGA),可重构处理器之间或可重构处理器与ISA结构处理器之间通过互连结构构成一个完整的计算系统。   从系统信号处理系统的构成方式来看,常用的处理机结构有下面几种:单指令流单数据流(SISD)、单指令流多数据流(SIMD)、多指令流多数据流(MIMD)。   ·SISD结构通常由一个处理器和一个存贮器组成,它通过执行单一的指令流对单一的数据流进行操作,指令按顺序读取,数据在每一时刻也只能读取一个。弱点是单片处理器处理能力有限,同时,这种结构也没有发挥数据处理中的并行性潜力,所以在实时系统或高速系统中,很少采用SISD结构。   ·SIMD结构系统由一个控制器、多个处理器、多个存贮模块和一个互连网络组成。所有“活动的”处理器在同一时刻执行同一条指令,但每个处理器执行这条指令时所用的数据是从它本身的存储模块中读取的。对操作种类多的算法,当要求存取全局数据或对于不同的数据要求做不同的处理时,它是无法独立胜任的。另外,SIMD一般都要求有较多的处理单元和极高的I/O吞吐率,如果系统中没有足够多的适合SIMD处理的任务,采用SIMD是不合算的。    ·MIMD结构就是通常所指的多处理机,典型的MIMD系统由多台处理机、多个存储模块和一个互连网络组成,每台处理机执行自己的指令,操作数也是各取各的。MIMD结构中每个处理器都可以单独编程,因而这种结构的可编程能力是最强的。但由于要用大量的硬件资源解决可编程问题,硬件利用率不高。2DSP+ASIC结构   随着大规模可编程器件的发展,采用DSP+ASIC结构的信号处理系统显示出了其优越性,正逐步得到重视。与通用集成电路相比,ASIC芯片具有体积小、重量轻、功耗低、可靠性高等几个方面的优势,而且在大批量应用时,可降低成本。   现场可编程门阵列(FPGA)是在专用ASIC的基础上发展出来的,它克服了专用ASIC不够灵活的缺点。与其他中小规模集成电路相比,其优点主要在于它有很强的灵活性,即其内部的具体逻辑功能可以根据需要配置,对电路的修改和维护很方便。目前,FPGA的容量已经跨过了百万门级,使得FPGA成为解决系统级设计的重要选择之一。   DSP+FPGA结构最大的特点是结构灵活,有较强的通用性,适于模块化设计,从而能够提高算法效率;同时其开发周期较短,系统易于维护和扩展,适合于实时信号处理。   实时信号处理系统中,低层的信号预处理算法处理的数据量大,对处理速度的要求高,但运算结构相对比较简单,适于用FPGA进行硬件实现,这样能同时兼顾速度及灵活性。高层处理算法的特点是所处理的数据量较低层算法少,但算法的控制结构复杂,适于用运算速度高、寻址方式灵活、通信机制强大的DSP芯片来实现。3线性流水阵列结构   在我们的工作中,设计并实现了一种实时信号处理结构。它采用模块化设计和线性流水阵列结构(图1)。   这种线性流水阵列结构具有如下特点:   ·接口简单。各处理单元(PU)之间采用统一的外部接口。   ·易于扩充和维护。各个PU的内部结构完全相同,而且外部接口统一,所以系统很容易根据需要进行硬件的配置和扩充。当某个模块出现故障时,也易于更换。   ·处理模块的结构能够支持多种处理模式,可以适应不同的处理算法。   每个PU的核心由DSP芯片和可重构器件FPGA组成,另外还包括一些外围的辅助电路,如存储器、先进先出(FIFO)器件及FLASHROM等(图2)。可重构器件电路与DSP处理器相连,利用DSP处理器强大的I/O功能实现单元电路内部和各个单元之间的通信。从DSP的角度来看,可重构器件FPGA相当于它的宏功能协处理器(Co-processor)。   PU中的其他电路辅助核心电路进行工作。DSP和FPGA各自带有RAM,用于存放处理过程所需要的数据及中间结果。FLASHROM中存储了DSP的执行程序和FPGA的配置数据。先进先出(FIFO)器件则用于实现信号处理中常用到的一些操作,如延时线、顺序存储等。每个PU单独做成一块PCB,各级PU之间通过插座与底板相连。底板的结构很简单,主要由几个串连的插座构成,其作用是向各个PU提供通信通道和电源供应。可以根据需要安排底板上插座的个数,组成多级线性阵列结构。这种模块化设计的突出优点在于,它使得对系统的功能扩充和维护变得非常简单。需要时,只要插上或更换PU电路板,就可以实现系统的扩展和故障的排除。每一级PU中的DSP都有通信端口与前级和后级PU电路板相连,可以很方便地控制和协调它们之间的工作。4应用实例   我们应用上述线性流水阵列结构实现了一个实时目标检测系统,该系统的任务主要是接收摄像头输出的灰度图象,经预处理、编码、直线拟合和目标识别后,输出结果到PC机显示。在这个任务中,预处理模块包括抽样、卷积和编码等步骤,属于低层的处理,其运算数据量大,但运算结构较规则,适于用FPGA进行纯硬件实现;而直线拟合及目标识别等高层图象处理算法,所处理的数据量相对较少,但要用到多种数据结构,其控制也复杂得多,我们用DSP编程来实现。   重构处理模块采用的是Xilinx公司的XC5200系列FPGA芯片。这是一种基于SRAM的现场可编程门阵列。表1给出了XC5200系列FPGA的一些参数。表1XC5200系列FPGA的一些参数器件XC5204XC5206XC5210XC5215逻辑单元48078412961936最大逻辑门6000100001600023000多功能块10×1214×1418×1822×22CLB120196324484触发器48078412961936I/O124148196244   XC5200系列FPGA逻辑功能的实现由内部规则排列的逻辑单元阵列(LCA)来完成,它是FPGA的主要部分。LCA的核心是可重构逻辑块(CLB),四周是一些输入/输出块(IOB)。CLB和IOB之间通过片内的布线资源相连接。LCA由配置代码驱动,CLB和IOB的具体逻辑功能及它们的互联关系由配置数据决定。整个FPGA模块的设计实现在Xilinx公司的Foundation2.1i开发平台上完成。该系统支持设计输入、逻辑仿真、设计实现(设计综合)和时序仿真等系统开发全过程。    在选用DSP芯片时,主要应考虑性能能否满足快速判读算法的要求,具体说就是要求选择那些指令周期短、数据吞吐率高、通信能力强、指令集功能完备的处理器,同时也要兼顾功耗和开发支持环境等因素。表2列出了一些常用微处理器的性能参数。   我们选择的是应用广泛、性价比较高的TMS320C40芯片。它是美国TI公司推出的为满足并行处理需求的32位浮点DSP。主要特性如下:表2常用微处理器对照表处理器类型DSP(Motorola)ADSPTMS3209600256156210202101C30C40C50字长/bit32163216323216指令周期/ns505050603325501024浮点FFT时间/ms1.042.330.962.072.361.933.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片可编程逻辑器件中实现。它不受温度的影响,既可保持高分辨率,又可降低对电路精度和稳定度的要求,并减少元件的数量。   关键词:IPD/AVHDL可编程逻辑器件在各类电子系统中,数字电路所占比重越来越大。这主要是因为数字电路相对于模拟电路有一些突出的优点,例如:*数字电路中的有源器件工作在饱和区与截止区,工作状态稳定;*数字电路处理的是二值信号,易于存储和再生;*数字电路是由大量相同的基本单元,如门、触发器等所组成,易于大规模集成,易于自动化设计工具的应用等。由于数字电路的以上特点,再加上数字计算机和数字信号处理技术的迅速发展,使得数字电路从集成规模、应用范围及设计自动化程度等方面大大超过了模拟电路,越来越多的由模拟电路实现的功能转由数字电路实现,进入了电子系统数字化的时代。在测控系统采用数字化技术,将原来由模拟电路实现的D/A由数字电路实现。1IP核介绍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/216以内,这是很困难的。所以,需寻求一种中保持高分辨率又可降低对电路精度和稳定度要求的方法。可综合的Delta-SigmaDAC(术语Delta-Sigma分别指算术差与和,即Δ-∑DAC),是Xilinx公司提供的免费IP核,可从网上下载得到。Delta-SigmaDAC使用数字技术,因而它不温度的影响,并且能在一片可编程逻辑器件中实现。避免在D/A转换器中使用匹配电阻,不仅能更便宜,而且,其转换是线性的。Delta-SigmaDAC实际上是高速单个位的DAC,用数字反馈技术,在输出端产生一串脉冲。脉冲串中信号为高电平的时间部分与二进制输入成比例,当这个脉冲串通过一个模拟低通滤波器后就得到一个模拟输出信号。图1是一个典型的可编程逻辑器件实现的DAC的顶层电路图,输入信号有复位信号、时钟信号以及二进制数据总线。输出DACoutDrvr驱动一个外部的低通滤波器Vout能从0V~Vcco。这里Vcco是FPGAI/O块的供电电压。输入/输出详细说明如表1所列。表1输入输出描述表信 号方 向描    述DACOUT输出驱动外部低通滤波器的脉冲串(通过一个输出驱动器)DACIN输入数字输入总线,值必须设置成钟的正沿clk输入正沿有效Reset输入复位信号初始化SigmaLatch和输出D触发器 DAC的二进制输入是一个无符号数。“0”代表最低电压,输出的模拟电压也只有正的。“0”输入产生0V输出,输入端全“1”,则输出近似达到Vcco。图2是Delta-SigmaDAC的原理框图,二进制输入的位宽是可变的。为简单起见,电路原理图描述了一个8位二进制输入的DAC。在这个器件中,二进制加法器用来产生和,也用来产生差。尽管DeltaAdder的输入是无符号数,两个加法器的输出却都是有符号数。DeltaAdder计算DAC输入和当前DAC输出的差,并用一个二进制数表示。因为DAC的输出是一个单个的位,因此它不是1就是0。如图2所示,当输入加上由SigmaLatch的输出的两个拷贝与0构成的10位数,就产生差值,这也补偿了DACIN是无符号数的事实。SigmaAdder将它原来的输出(保存在SigmaLatch中)与当前的DeltaAdder的输出相加。图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-SigmaDAC适合需要相对高精度的低频应用。在这种应用中,电压不会很快地变化,因此,RC的时间常数可以很大,以减小噪声。这种DAC最广泛的应用就是产生通常直流电压。这包括电压控制振荡器、电压控制运算放大器、I/O参数电压、可编程电压源、波形发生器(正弦、三角等)、A/D转换中的参考电压等。Delta-SigmaDAC是一个例子,说明高速可编程逻辑器件能用于混合信号系统,以减少元件的数量。可编程逻辑器件的速度和密度使它们成为模拟信号产生和处理方面理想的元件。3用VHDL语言编写的程序libraryieee;useieeestd_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entitydac_dsisport(reset:instd_logic;clk:instd_logic;din:instd_logic_vector(7downto0);--Signedintegerdout:outstd_logic;);enddac_ds;architecturearch_dac_dsofdac_dsissignalerror:std_logic_vector(9downto0);--Erroraccumulatoris2bitslargerconstantzeros:std_logic_vector(7downto0):=(others=>'0');beginprocess(reset,clk,din)variableval:std_logic_vector(9downto0);beginifreset='1'thenerror<=(others=>'0');dout<='0';elsifclk'eventandclk='1'then--val:=din+error;dinissignextendedtonbits+2val:=(din(din'high)&din(din'high)&din)+error;ifval(val'high)='0'thendout<='1';error<=val+("11"&zeros);elsedout<='0';error<=val+("01"&zeros);endif;endif;endprocess;endarch_dac_ds;4芯片的选择和配置选择MAX7000S系列可编程逻辑器件,编译后由MAX+PLUSII软件自动配置进EMP7032SLC44芯片,将生成的目标文件通过编程电缆对器件进行编程。将该IP核实现的D/A转换器用于新型智能电阻炉温度控制仪中,因为调节炉温的信号不要求变化很快,因此DAC的输入二进制信号为缓变信号。对于这种低频应用,可以将RC时间常数取得较大,以减小噪声。这样,可综合的VHDL语言Delta-SigmaDAC模块配置进EMP7032芯片后,达到了预期的效果。基于FPGA的USB2.0控制器设计摘要:介绍了一种用VHDL设计USB2.0功能控制器的方法,详术了其原理和设计思想,并在FPGA上予以实现。关键词:USBVHDLFPGA在视频存储和图像宽带领域中,经常遇到实时高速数据传输的要求。2000年4月,由Intel、Microsoft、NEC、Compaq、Lucent、Phillips等公司共同制订的USB2.0(UniversalSerialBus)传输协议,其速度远远超过了目前使用IEEE1394接口进行视频传输的400Mbps,达到了480Mbps;而且具有即插即用的PnP(PlugAndPlay)、可进行菊花链式的级联(通过USBHUB进行外围扩展)、可串连多达127个USB设备等优点。应用该协议可支持实时语音、音频和视频数据的传输。本文针对高速数据传输需求,根据USB2.0的协议规范,利用VHDL语言实现符合该协议的功能控制器,在视频压解系统中使数据在PC与外设之间高速传输。如图1所示由视频A/D采集的原始视频数据,在Philips公司生产的TM1300专用视频处理器中压缩后,通过USB控制器送至PC机。PC机的整个通过USB控制器传输到TM1300,解压后发送至视频D/A。1控制器结构原理USB2.0控制器结构框图如图2所示。控制器主要由两个部分组成,其一为与外设的接口,另一个是内部协议层逻辑PL(ProtocolLayer)。内部存储器仲裁器实现对内部DMA和外部总线对存储器访问之间的仲裁。PL则实现USB的数据I/O和控制。接口有三种:一种是与微控制器之间的功能接口;一种是与单口同步静态存储器(SSRAM)之间的接口;另外一种是与物理层之间的接口。这里符合UTMI(USBTransceiverMacrocellInterface)规范定义。2控制器实现控制器接口的信号框图如图3所示。存储器采用的单口SRAM,其信号接口由32位数据线SRAM_DATA、15位地址线SRAM_ADDR及读写信号(SRAM_WE和SRAM_RD)组成,系统所需SRAM的容量为215×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.1UTMI接口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”时处于全速(FullSpeed)模式(此时USB带宽为12Mb/s);为“10”时是高速(HighSpeed)模式(此时USB最大带宽是480Mb/s);为“11”时是HSchirp模式。UTMI接口通过译码MODE[1:0]来控制ISP1501在HS和FS之间转变。Ifmode_hs='1'thenMODE<='10'Elsifmode_hs='0'thenMODE<='01'Endif;2.2协议层控制器的核心逻辑位于PL(ProtoclLayer)模块,负责管理所有USB数据I/O和控制通信,其结构如图4所示。DMA和存储器接口提供随机存储器访问和DMA操作。该模块使PL和外部微控制器采用DMA方式访问SSRAM。当外部总线有访问SRAM的请求时,且PL没有请求访问存储器,控制逻辑如下:req、ack分别对应外部总线和存储器之间的请求和响应信号,din、addr和we分别是外部总线给出的数据、地址和写信号,mreq是内部DMA向存储器发送的请求信号,mdin、maddr和mwe分别是内部DMA给出的数据、地址和写信号。sel<=(reqORack_r)AND(NOTmreq);ifsel='1'thensram_out<=din;sram_adr<=addr;sram_we<=reqANDwe;elsesram_out<=mdin;sram_adr<=maddr;sram_we<=mwe;endif;由控制逻辑可看出,内部DMA操作的优先级比外部总线高。协议引擎(ProtocolEngine)处理所有标准的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_OUTORpid_INORpid_SOFORpid_SETUP;Pid_DATA<=pid_DATAORpid_DATA1ORpid_DATA2ORpid_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_ACKORpid_NACKORpid_STALLORpid_NYETORpid_PREORpid_ERRORpid_SPLITORpid_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(ControlStatusRegister);“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中断传输01IN端点01同步传输10OUT端点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]指定缓冲器能容纳的字节数。Ep_BUF[16:0]缓冲器的指针,装载存储器SRAM中数据的地址。控制端点(Endpoint0)比较特殊,由于它既要接收也要发送数据,因此对于控制端点,Buffer0用于OUT缓冲器,Buffer1则是IN缓冲器。从SETUP和OUT分组来的数据,写入Buffer0,IN分组的数据则是从Buffer1中获取。 2.4DMA操作DMA操作允许控制器与功能接口之间数据的透明传输。一旦设置了DMA操作,则不需要微控制器的干预。每个端点有一对DMA_REQ和DMA_ACK信号。当CSR寄存器中DMA使能信号位(Ep_CSR[15])被置位时,USB控制器使用DMA_REQ和DMA_ACK这两个信号来进行DMA的流控制。当缓冲区有数据或为空需要填充时发送DMA请求信号DMA_REQ,每传输4字节,响应一个DMA_ACK信号。由于USB2.0协议定义的事务操作以8bit为单位,因此完成一次32bit的DMA操作需要进行4次写8bit。内部DMA采用高效的One-hot状态机设计方法,状态转换如图7所示。当需要将接收到的数据存储到SRAM(rx_dma_en=1)时进入WAIT_MRD状态,在该状态选中一个临时数据寄存器,并向存储器发送请求信号mreq,从存储器中预取4字节(当接收到的数据少于4字节时,保证有4字节的数据写入存储器)到该寄存器中,然后进入MEM_WR状态。当PL的分组拆装器接收到1字节数据时,将该字节写入临时存储器,转入下一状态MEM_WR1;当分组拆装器没数据给DMA仲裁器时则进入MEM_WR2状态,在此状态将临时存储器中的数据写入SRAM,然后回到IDLE状态。在操作过程中,使用计数器adr_cb对传输字节数进行计数,通过addr_cb[1:0]的值标识当前传输的是32bit中的哪个字节。计数器sizu_c每接收1字节数值加1。在需要读取SRAM中的数据(tx_dma_en=1)时,DMA仲裁器由IDIE状态进入MEM_RD1状态,读取4字节数据到发送缓冲区中,然后进入状态MEM_RD2,再读4字节进入状态MEM_RD3,这8字节轮流使用Buffer0和Buffer1缓冲区:在需要读取SRAM中的数据(tx_dma_en=1)时,DMA仲裁器由IDLE状态进入MEM_RD1状态,读取4字节数据到发送缓冲区中,然后进入状态MEM_RD2,再读4字节进入状态MEM_RD3,这8字节轮流使用Buffer0和Buffer1缓冲区:if((NOTadr_cb[2])ANDmackthenBuffer0<=SRAM_DATA_I;elsif(adr_cb[2]ANDmack)thenBuffer1<=SRAM_DATA_I;endif;在MEM_RD3状态判断是否还需要读下一个数据,如果需要再进入状态MEM_RD2,否则在传输完所有字节后,返回到IDLE状态。在发送数据过程中,使用14bit计数器sizd_c决定传输字节数,取自Ep_BUF[30:17],每发送1字节数据,它的值减1。在图7中的各个状态中,由于超时、CRC校验错误或得到的数据发生错误时,PE产生的Abort信号会使当前状态都回到IDLE。文中阐述了USB2.0功能控制器的一种实现方案。其VHDL语言实现代码,已在XILINX公司的FPGAVirtexXVV3006fg456中通过了XilinxISE的仿真、综合及布局布线。FPGA的规模是32万门,1536个CLB(可配置逻辑单元)。该控制模块占用2050个Slice(66%),使用了1697个Slice触发器(27%)和3047个4输入LUT表(49%)。整个FPGA的速度可达到56.870MHz,完全满足视频数据的高速传输(对32bit数据操作,达到480Mb/s的速度时钟只需15MHz)。该方案实现的控制器便于修改且易于实现,可作为一个功能模块嵌入到SOC中,可使不同情况最大限度地灵活设计片上系统。用FPGA器件实现UART核心功能的一种方法串行外设都会用到RS232-C异步串行接口,传统上采用专用的集成电路即UART实现,如TI、EXAR、EPIC的550、452等系列,但是我们一般不需要使用完整的UART的功能,而且对于多串口的设备或需要加密通讯的场合使用UART也不是最合适的。如果设计上用到了FPGA/CPLD器件,那么就可以将所需要的UART功能集成到FPGA内部,本人最近在用XILINX的XCS30做一个设计的时候,就使用VHDL将UADT的核心功能集成了,从而使整个设计更加紧凑,更小巧、稳定、可靠,下面就谈谈设计方法。----分析UART的结构,可以看出UART主要由数据总线接口、控制逻辑和状态接口、波特率发生器、发送和接受等部分组成,各部分间关系如图一。----了解了UART的各部分组成结构后,下面对各部分的功能进行详细的分析。我们假定所要设计的UART为:数据位为7位、8位可选,波特率可选,效验方式为奇、偶、无等效验方式,下面的分析都是在这个假定的基础上进行。一、波特率发生部分----从图一可以看出,UART的接收和发送是按照相同的波特率进行收发的(当然也可以实现成对的不同波特率进行收发),波特率是可以通过CPU的总线接口设置的。UART收发的每一个数据宽度都是波特率发生器输出的时钟周期的16倍,即假定当前按照9600bps进行收发,那么波特率发生器输出的时钟频率应为9600*16Hz,当然这也是可以改变的,我们只是按照UART的方法进行设计。----我们假定提供的时钟为1.8432MHz,那么可以很简单地用CPU写入不同的数值到波特率保持寄存器,然后用计数器的方式生成所需要的各种波特率,这个值的计算原则就是1843200/(16*所期望的波特率),如果希望输出9600Hz的波特率,那么这个值就是1843200/(16*9600)=12(0CH)。二、发送部分----这里应重点分析几个问题:首先是何时CPU可以往发送保持寄存器(THR)写人数据?也就是说CPU要写数据到THR时必须判一个状态,当前是否可写?很明显如果不判这个条件,发送的数据会出错,除非CPU写入THR的频率低于当前传输的波特率,而这种情况是极少出现的。其次是CPU写入数据到THR后,何时THR的数据传送到发送移位寄存器(TSR)并何时移位?即如何处理THR和TSR的关系?再次是数据位有7、8位两种,校验位有三种形式,这样发送一个字节可能有9、10、11位三种串行长度,所以我们必须按照所设置的传输情况进行处理。数据位、效验方式可以通过CPU写一个端口来设置,发送和接受都根据这个设置进行,由于这部分很简单,所以我就不给出程序了。----根据上面的分析,引进了几个信号:----bigin1、begin2:引入两个附加移位,目的是为送出起始位、停止位而加入串行长度。----txdone7、txdone8:分别表示7、8位的结束标志。Txdone<=txdone8when“8bit”elsetxdone7;----Paritycycle7、paritycycle8:分别表示7、8位下的校验位。Parity<=parity8when“8bit”elseparity7;----Writerdy:为0时表示CPU不能将数据写入THR,为1时可以写入。----这样就可以得到以下信息:在移位时钟的上升沿检测到txdone和writerdy都为高电平时,进入LOAD状态即将THR的数据LOAD到TSR,在下一个时钟就进入移位状态。在移位中同时进行校验位的运算,在需要送出校验位的时候将运算好的校验位送出,txdone=1的时候将高电平送出,其它时候移位输出。----最后还有一个小程序,那就是写出writerdy的状态,很明显没数据写入时为高,而当txdone为低时为低,注意这里也必须同时同步。图二给出了一个奇效验8bit数据的发送时序图。三、接受部分----对于接收同样存在9、10、11位三种串行数据长度的问题,必须根据所设置的情况而将数据完整地取下来。接收还有一个特别的情况,那就是它的移位的时钟不是一直存在的,这个时钟必须在接受到起始位的中间开始产生,到停止位的中间结束。接受到停止位后,必须给出中断,并提供相应的校验出错、FRAME错以及溢出等状态。----这样需引入hunt和idle两个信号,其中hunt为高表示捕捉到起始位,idle为高表示不在移位状态,利用这两个信号就可以生成接收所需要的移位时钟。----下面还有一个小程序,就是如何将接收的状态和标志表示出来。溢出标志很简单,那就是在idle从低变高,也就是说在接收到一个完整的串行序列后,去判一下当前的中断是否有效?(高有效,数据没有被读走)如果为高那么溢出,否则没有。在移位的时候,同时对接收的数据进行校验,这样就可以判断接收的数据是否有错,在接收完成时判一下当前的RX是否为高电平就可以知道FRAME是否有错,图三是一个8bit奇校验的接收时序图(假定接收正确,所以没有给出校验、溢出、帧出错信号)。----总结:我在用FPGA做一个设计的时候,由于还有资源而且正好用到UART,所以就根据对UART的认识进行了设计,全部用VHDL进行描述,用SPEEDWAVE进行语言级的仿真,用XILINX的F2.1进行顶层仿真,最后和PC的仿真终端进行联机,功能一切正常,整个UART所需要的触发器为80个左右,一般的PLD都可以完成。在测控系统中用IP核实现D/A转换 摘要:采用数字化技术、在测控系统中用IP核实现D/A转换,并且在1片可编程逻辑器件中实现。它不受温度的影响,既可保持高分辨率,又可降低对电路精度和稳定度的要求,并减少元件的数量。   关键词:IPD/AVHDL可编程逻辑器件在各类电子系统中,数字电路所占比重越来越大。这主要是因为数字电路相对于模拟电路有一些突出的优点,例如:*数字电路中的有源器件工作在饱和区与截止区,工作状态稳定;*数字电路处理的是二值信号,易于存储和再生;*数字电路是由大量相同的基本单元,如门、触发器等所组成,易于大规模集成,易于自动化设计工具的应用等。由于数字电路的以上特点,再加上数字计算机和数字信号处理技术的迅速发展,使得数字电路从集成规模、应用范围及设计自动化程度等方面大大超过了模拟电路,越来越多的由模拟电路实现的功能转由数字电路实现,进入了电子系统数字化的时代。在测控系统采用数字化技术,将原来由模拟电路实现的D/A由数字电路实现。1IP核介绍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/216以内,这是很困难的。所以,需寻求一种中保持高分辨率又可降低对电路精度和稳定度要求的方法。可综合的Delta-SigmaDAC(术语Delta-Sigma分别指算术差与和,即Δ-∑DAC),是Xilinx公司提供的免费IP核,可从网上下载得到。Delta-SigmaDAC使用数字技术,因而它不温度的影响,并且能在一片可编程逻辑器件中实现。避免在D/A转换器中使用匹配电阻,不仅能更便宜,而且,其转换是线性的。Delta-SigmaDAC实际上是高速单个位的DAC,用数字反馈技术,在输出端产生一串脉冲。脉冲串中信号为高电平的时间部分与二进制输入成比例,当这个脉冲串通过一个模拟低通滤波器后就得到一个模拟输出信号。图1是一个典型的可编程逻辑器件实现的DAC的顶层电路图,输入信号有复位信号、时钟信号以及二进制数据总线。输出DACoutDrvr驱动一个外部的低通滤波器Vout能从0V~Vcco。这里Vcco是FPGAI/O块的供电电压。输入/输出详细说明如表1所列。表1输入输出描述表信 号方 向描    述DACOUT输出驱动外部低通滤波器的脉冲串(通过一个输出驱动器)DACIN输入数字输入总线,值必须设置成钟的正沿clk输入正沿有效Reset输入复位信号初始化SigmaLatch和输出D触发器 DAC的二进制输入是一个无符号数。“0”代表最低电压,输出的模拟电压也只有正的。“0”输入产生0V输出,输入端全“1”,则输出近似达到Vcco。图2是Delta-SigmaDAC的原理框图,二进制输入的位宽是可变的。为简单起见,电路原理图描述了一个8位二进制输入的DAC。在这个器件中,二进制加法器用来产生和,也用来产生差。尽管DeltaAdder的输入是无符号数,两个加法器的输出却都是有符号数。DeltaAdder计算DAC输入和当前DAC输出的差,并用一个二进制数表示。因为DAC的输出是一个单个的位,因此它不是1就是0。如图2所示,当输入加上由SigmaLatch的输出的两个拷贝与0构成的10位数,就产生差值,这也补偿了DACIN是无符号数的事实。SigmaAdder将它原来的输出(保存在SigmaLatch中)与当前的DeltaAdder的输出相加。图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-SigmaDAC适合需要相对高精度的低频应用。在这种应用中,电压不会很快地变化,因此,RC的时间常数可以很大,以减小噪声。这种DAC最广泛的应用就是产生通常直流电压。这包括电压控制振荡器、电压控制运算放大器、I/O参数电压、可编程电压源、波形发生器(正弦、三角等)、A/D转换中的参考电压等。Delta-SigmaDAC是一个例子,说明高速可编程逻辑器件能用于混合信号系统,以减少元件的数量。可编程逻辑器件的速度和密度使它们成为模拟信号产生和处理方面理想的元件。3用VHDL语言编写的程序libraryieee;useieeestd_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entitydac_dsisport(reset:instd_logic;clk:instd_logic;din:instd_logic_vector(7downto0);--Signedintegerdout:outstd_logic;);enddac_ds;architecturearch_dac_dsofdac_dsissignalerror:std_logic_vector(9downto0);--Erroraccumulatoris2bitslargerconstantzeros:std_logic_vector(7downto0):=(others=>'0');beginprocess(reset,clk,din)variableval:std_logic_vector(9downto0);beginifreset='1'thenerror<=(others=>'0');dout<='0';elsifclk'eventandclk='1'then--val:=din+error;dinissignextendedtonbits+2val:=(din(din'high)&din(din'high)&din)+error;ifval(val'high)='0'thendout<='1';error<=val+("11"&zeros);elsedout<='0';error<=val+("01"&zeros);endif;endif;endprocess;endarch_dac_ds;4芯片的选择和配置选择MAX7000S系列可编程逻辑器件,编译后由MAX+PLUSII软件自动配置进EMP7032SLC44芯片,将生成的目标文件通过编程电缆对器件进行编程。将该IP核实现的D/A转换器用于新型智能电阻炉温度控制仪中,因为调节炉温的信号不要求变化很快,因此DAC的输入二进制信号为缓变信号。对于这种低频应用,可以将RC时间常数取得较大,以减小噪声。这样,可综合的VHDL语言Delta-SigmaDAC模块配置进EMP7032芯片后,达到了预期的效果。
/
本文档为【DSP与FPGA实时信号处理系统介绍】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索