《DSP与FPGA实时信号处理系统介绍.docx》由会员分享,可在线阅读,更多相关《DSP与FPGA实时信号处理系统介绍.docx(58页珍藏版)》请在三一办公上搜索。
1、FPGA应用文章实时信号处理系统 摘要:简要叙述了常用的信号处理系统的类型与处理机结构,介绍了正逐步得到广泛应用的处理机结构,在此基础上提出了一种实时信号处理的线性流水阵列,并举例说明了该结构的具体实现,最后分析说明了此结构的优越性。 关键词:实时信号处理 处理机结构 线性流水阵列 实时信号处理系统要求必须具有处理大数据量的能力,以保证系统的实时性;其次对系统的体积、功耗、稳定性等也有较严格的要求。实时信号处理算法中经常用到对图象的求和、求差运算,二维梯度运算,图象分割及区域特征提取等不同层次、不同种类的处理。其中有的运算本身结构比较简单,但是数据量大,计算速度要求高;有些处理对速度并没有特殊
2、的要求,但计算方式和控制结构比较复杂,难以用纯硬件实现。因此,实时信号处理系统是对运算速度要求高、运算种类多的综合性信息处理系统。 信号处理系统的类型与常用处理机结构 根据信号处理系统在构成、处理能力以及计算问题到硬件结构映射方法的不同,将现代信号处理系统分为三大类: 指令集结构()系统。在由各种微处理器、处理器或专用指令集处理器等组成的信号处理系统中,都需要通过系统中的处理器所提供的指令系统(或微代码)来描述各种算法,并在指令部件的控制下完成对各种可计算问题的求解。 硬连线结构系统。主要是指由专用集成电路()构成的系统,其基本特征是功能固定、通常用于完成特定的算法,这种系统适合于实现功能固定
3、和数据结构明确的计算问题。不足之处主要在于:设计周期长、成本高,且没有可编程性,可扩展性差。 可重构系统。基本特征是系统中有一个或多个可重构器件(如),可重构处理器之间或可重构处理器与结构处理器之间通过互连结构构成一个完整的计算系统。 从系统信号处理系统的构成方式来看,常用的处理机结构有下面几种:单指令流单数据流()、单指令流多数据流()、多指令流多数据流()。 结构通常由一个处理器和一个存贮器组成,它通过执行单一的指令流对单一的数据流进行操作,指令按顺序读取,数据在每一时刻也只能读取一个。弱点是单片处理器处理能力有限,同时,这种结构也没有发挥数据处理中的并行性潜力,所以在实时系统或高速系统中
4、,很少采用结构。 结构系统由一个控制器、多个处理器、多个存贮模块和一个互连网络组成。所有“活动的”处理器在同一时刻执行同一条指令,但每个处理器执行这条指令时所用的数据是从它本身的存储模块中读取的。对操作种类多的算法,当要求存取全局数据或对于不同的数据要求做不同的处理时,它是无法独立胜任的。另外, 一般都要求有较多的处理单元和极高的吞吐率,如果系统中没有足够多的适合 处理的任务,采用 是不合算的。 结构就是通常所指的多处理机,典型的系统由多台处理机、多个存储模块和一个互连网络组成,每台处理机执行自己的指令,操作数也是各取各的。结构中每个处理器都可以单独编程,因而这种结构的可编程能力是最强的。但由
5、于要用大量的硬件资源解决可编程问题,硬件利用率不高。 结构 随着大规模可编程器件的发展,采用结构的信号处理系统显示出了其优越性,正逐步得到重视。与通用集成电路相比,芯片具有体积小、重量轻、功耗低、可靠性高等几个方面的优势,而且在大批量应用时,可降低成本。 现场可编程门阵列()是在专用的基础上发展出来的,它克服了专用不够灵活的缺点。与其他中小规模集成电路相比,其优点主要在于它有很强的灵活性,即其内部的具体逻辑功能可以根据需要配置,对电路的修改和维护很方便。目前,的容量已经跨过了百万门级,使得成为解决系统级设计的重要选择方案之一。 结构最大的特点是结构灵活,有较强的通用性,适于模块化设计,从而能够
6、提高算法效率;同时其开发周期较短,系统易于维护和扩展,适合于实时信号处理。 实时信号处理系统中,低层的信号预处理算法处理的数据量大,对处理速度的要求高,但运算结构相对比较简单,适于用进行硬件实现,这样能同时兼顾速度及灵活性。高层处理算法的特点是所处理的数据量较低层算法少,但算法的控制结构复杂,适于用运算速度高、寻址方式灵活、通信机制强大的芯片来实现。 线性流水阵列结构 在我们的工作中,设计并实现了一种实时信号处理结构。它采用模块化设计和线性流水阵列结构(图)。 这种线性流水阵列结构具有如下特点: 接口简单。各处理单元()之间采用统一的外部接口。 易于扩充和维护。各个的内部结构完全相同,而且外部
7、接口统一,所以系统很容易根据需要进行硬件的配置和扩充。当某个模块出现故障时,也易于更换。 处理模块的规范结构能够支持多种处理模式,可以适应不同的处理算法。 每个的核心由芯片和可重构器件组成,另外还包括一些外围的辅助电路,如存储器、先进先出()器件及 等(图)。可重构器件电路与处理器相连,利用处理器强大的功能实现单元电路内部和各个单元之间的通信。从的角度来看,可重构器件相当于它的宏功能协处理器()。 中的其他电路辅助核心电路进行工作。和各自带有,用于存放处理过程所需要的数据及中间结果。 中存储了的执行程序和的配置数据。先进先出()器件则用于实现信号处理中常用到的一些操作,如延时线、顺序存储等。每
8、个单独做成一块,各级之间通过插座与底板相连。底板的结构很简单,主要由几个串连的插座构成,其作用是向各个提供通信通道和电源供应。可以根据需要安排底板上插座的个数,组成多级线性阵列结构。这种模块化设计的突出优点在于,它使得对系统的功能扩充和维护变得非常简单。需要时,只要插上或更换电路板,就可以实现系统的扩展和故障的排除。每一级中的都有通信端口与前级和后级电路板相连,可以很方便地控制和协调它们之间的工作。 应用实例 我们应用上述线性流水阵列结构实现了一个实时目标检测系统,该系统的任务主要是接收摄像头输出的灰度图象,经预处理、编码、直线拟合和目标识别后,输出结果到机显示。在这个任务中,预处理模块包括抽
9、样、卷积和编码等步骤,属于低层的处理,其运算数据量大,但运算结构较规则,适于用进行纯硬件实现;而直线拟合及目标识别等高层图象处理算法,所处理的数据量相对较少,但要用到多种数据结构,其控制也复杂得多,我们用编程来实现。 重构处理模块采用的是公司的系列芯片。这是一种基于的现场可编程门阵列。表给出了 系列的一些参数。表1 XC5200系列FPGA的一些参数器件XC5204XC5206XC5210XC5215逻辑单元48078412961936最大逻辑门6000100001600023000多功能块1012141418182222CLB120196324484触发器48078412961936I/O1
10、24148196244 系列逻辑功能的实现由内部规则排列的逻辑单元阵列()来完成,它是的主要部分。的核心是可重构逻辑块(),四周是一些输入输出块()。和之间通过片内的布线资源相连接。由配置代码驱动,和的具体逻辑功能及它们的互联关系由配置数据决定。整个模块的设计实现在公司的 开发平台上完成。该系统支持设计输入、逻辑仿真、设计实现(设计综合)和时序仿真等系统开发全过程。 在选用芯片时,主要应考虑性能能否满足快速判读算法的要求,具体说就是要求选择那些指令周期短、数据吞吐率高、通信能力强、指令集功能完备的处理器,同时也要兼顾功耗和开发支持环境等因素。表列出了一些常用微处理器的性能参数。 我们选择的是应
11、用广泛、性价比较高的芯片。它是美国公司推出的为满足并行处理需求的位浮点。主要特性如下:表2 常用微处理器对照表处理器类型DSP(Motorola)ADSPTMS3209600256156210202101C30C40C50字长/bit32163216323216指令周期/ns505050603325501024浮点FFT时间/ms1.042.330.962.072.361.933.42 外部时钟,内部时钟,所有指令均单周期完成,处理器内部采用高度并行机制,可同时进行多达项各类操作。 两套相同的外部数据、地址总线,支持局部存储器和全局共享存储器。 个高速并行通信口,采用异步传输方式,最大速率可达
12、。通过令牌传递可灵活实现数据双向传输,这种结构很适合之间的互连。 个通道,每个通道的最大速率可达。内部总线与的地址、数据、指令总线完全分开,避开了总线使用上的瓶颈。 从结构和功能上看,很适合与可重构器件互相配合起来构成高速、高精度的实时信息处理系统,并完全可以胜任图像信息的实时处理任务;此外,的开发系统也比较完备,支持语言和汇编语言编程,能够方便地进行算法移植和软硬件的协同设计。 衡量系统的整体性能不仅要看所使用的器件和所能完成的功能,还要看器件之间采用怎样的互连结构。可以完成模块级的任务,起到的协处理器的作用。它的可编程性使它既具有专用集成电路的速度,又具有很高的灵活性。内部结构的主要优势是
13、:所有指令的执行时间都是单周期,指令采用流水线,内部的数据、地址、指令及总线分开,有较多的寄存器。这些特征使它有较高的处理速度。具有硬件的高速性,而具有软件的灵活性,从器件上考察,能够满足处理复杂算法的要求。同时,的个通信口和个通道使其能够在不被中断的情况下比较从容地应付与外界大量的数据交换。 从内部互连来看,使用了专用的通信口完成与的互连,能够保证在任何情况下与的数据通道的畅通。另外,和各自都有输入端口,使得系统的处理结构多样化。比如,可以作为处理流程中的一个模块,独立完成某项功能,也可以作为的协处理器,通过的调用来完成特定的子函数。底板将互连性延伸到之间,使得多个电路板能够组成多处理机系统
14、。前级的既可以与下一级的通信,也可以将数据发送到下一级的。 综上所述,本文提出的基于的线性流水阵列结构,为设计中如何处理软硬件的关系提供了一个较好的解决方案。同时,该系统具有灵活的处理结构,对不同结构的算法都有较强的适应能力,尤其适合实时信号处理任务。在测控系统中用IP核实现D/A转换 摘要:采用数字化技术、在测控系统中用IP核实现D/A转换,并且在1片可编程逻辑器件中实现。它不受温度的影响,既可保持高分辨率,又可降低对电路精度和稳定度的要求,并减少元件的数量。 关键词:IP D/A VHDL 可编程逻辑器件在各类电子系统中,数字电路所占比重越来越大。这主要是因为数字电路相对于模拟电路有一些突
15、出的优点,例如:*数字电路中的有源器件工作在饱和区与截止区,工作状态稳定;*数字电路处理的是二值信号,易于存储和再生;*数字电路是由大量相同的基本单元,如门、触发器等所组成,易于大规模集成,易于自动化设计工具的应用等。由于数字电路的以上特点,再加上数字计算机和数字信号处理技术的迅速发展,使得数字电路从集成规模、应用范围及设计自动化程度等方面大大超过了模拟电路,越来越多的由模拟电路实现的功能转由数字电路实现,进入了电子系统数字化的时代。在测控系统采用数字化技术,将原来由模拟电路实现的D/A由数字电路实现。1 IP核介绍IP(知识产权)核将一些在数字电路中常用,但比较复杂的功能块,如FIR滤波器、
16、SDRAM控制器、PCI接口等设计成可修改参数的模块。IP核的重用是设计人员赢得迅速上市时间的主要策略。随着CPLD/FPGA的规模越来越大,设计越来越复杂(IC的复杂度以每年55%的速率递增,而设计能力每年仅提高21%),设计者的主要任务是在规定的时间周期内完成复杂的设计。调用IP核能避免重复劳动,大大减轻工程师的负担,因此使用IP核是一个发展趋势。IP核包括硬IP与软IP。可配置IP是参数化后的可重定目标IP,其优点是可以对功能加以裁剪,以符合特定的应用。这些参数包括总线宽度、存储器容量、使能或禁止功能块。硬IP最大的优点是确保性能,如速度、功耗等。然而,硬IP难以转移到新工艺或集成到新结
17、构中,是不可重配置的。软IP是以综合形式交付的,因而必须在目标工艺中实现,并由系统设计者验证。其优点是源代码灵活,可重定目标于多种制作工艺,在新功能级中重新配置。不过目前大多数库是收费的,但也可以从网上下载一些免费的IP核。2 用IP核实现的D/A转换器的功能及特点数字到模拟转换器(DACs)将一个二进制数转换为与之对应的电压值,目前常用的D/A转换器都是由电阻或电容加权网络、受码元控制的开关和基准电压或电流源组成。当D/A转换器需要转换的信号每次取样字长很长时,对这些电路的精度要求很高,并且还必须在整个温度范围和整个使用寿命期间内保持电路参数的稳定。例如,一个16位的D/A转换器,其MSB的
18、精度必须在1/2 16以内,这是很困难的。所以,需寻求一种中保持高分辨率又可降低对电路精度和稳定度要求的方法。可综合的Delta-Sigma DAC(术语Delta-Sigma分别指算术差与和,即-DAC),是Xilinx公司提供的免费IP核,可从网上下载得到。Delta-Sigma DAC使用数字技术,因而它不温度的影响,并且能在一片可编程逻辑器件中实现。避免在D/A转换器中使用匹配电阻,不仅能更便宜,而且,其转换是线性的。Delta-Sigma DAC实际上是高速单个位的DAC,用数字反馈技术,在输出端产生一串脉冲。脉冲串中信号为高电平的时间部分与二进制输入成比例,当这个脉冲串通过一个模拟
19、低通滤波器后就得到一个模拟输出信号。图1是一个典型的可编程逻辑器件实现的DAC的顶层电路图,输入信号有复位信号、时钟信号以及二进制数据总线。输出DACoutDrvr驱动一个外部的低通滤波器Vout能从0VVcco。这里Vcco是FPGA I/O块的供电电压。输入/输出详细说明如表1所列。表1 输入输出描述表信 号方 向描 述DACOUT输出驱动外部低通滤波器的脉冲串(通过一个输出驱动器)DACIN输入数字输入总线,值必须设置成钟的正沿clk输入正沿有效Reset输入复位信号初始化SigmaLatch和输出D触发器 DAC的二进制输入是一个无符号数。“0”代表最低电压,输出的模拟电压也只有正的。
20、“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 A
21、dder将它原来的输出(保存在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能够产生在0VVcco之间可变的电压,具
22、体的值由DACIN的位宽和输入的数值决定。Delta-Sigma DAC适合需要相对高精度的低频应用。在这种应用中,电压不会很快地变化,因此,RC的时间常数可以很大,以减小噪声。这种DAC最广泛的应用就是产生通常直流电压。这包括电压控制振荡器、电压控制运算放大器、I/O参数电压、可编程电压源、波形发生器(正弦、三角等)、A/D转换中的参考电压等。Delta-Sigma DAC是一个例子,说明高速可编程逻辑器件能用于混合信号系统,以减少元件的数量。可编程逻辑器件的速度和密度使它们成为模拟信号产生和处理方面理想的元件。3 用VHDL语言编写的程序library ieee;use ieeestd_l
23、ogic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity dac_ds isport(reset :in std_logic;clk :in std_logic;din :in std_logic_vector(7 downto 0);-Signed integerdout :out std_logic;);end dac_ds;architecture arch_dac_ds of dac_ds issignal error :std_logic_vector(9 downto 0);-
24、Error accumulator is 2 bits largerconstant zeros:std_logic_vector(7 downto 0):=(others=0);beginprocess(reset,clk,din)variable val :std_logic_vector(9 downto 0);beginif reset=1thenerror0);dout=0;elsif clkevent and clk=1 then-val:=din+error;din is sign extended to nbits+2val:=(din(dinhigh)&din(dinhigh
25、)&din)+error;if val(valhigh)=0thendout=1;error=val+(11& zeros);elsedout=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的输入二进制信号为缓变信号。对于这种低频应用
26、,可以将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)传输协议,其速度远远超过了目前使用IE
27、EE1394接口进行视频传输的400Mbps,达到了480Mbps;而且具有即插即用的PnP(Plug And Play)、可进行菊花链式的级联(通过USB HUB进行外围扩展)、可串连多达127个USB设备等优点。应用该协议可支持实时语音、音频和视频数据的传输。本文针对高速数据传输需求,根据USB2.0的协议规范,利用VHDL语言实现符合该协议的功能控制器,在视频压解系统中使数据在PC与外设之间高速传输。如图1所示由视频A/D采集的原始视频数据,在Philips公司生产的TM1300专用视频处理器中压缩后,通过USB控制器送至PC机。PC机的整个通过USB控制器传输到TM1300,解压后发送
28、至视频D/A。1 控制器结构原理USB2.0控制器结构框图如图2所示。控制器主要由两个部分组成,其一为与外设的接口,另一个是内部协议层逻辑PL(Protocol Layer)。内部存储器仲裁器实现对内部DMA和外部总线对存储器访问之间的仲裁。PL则实现USB的数据I/O和控制。接口有三种:一种是与微控制器之间的功能接口;一种是与单口同步静态存储器(SSRAM)之间的接口;另外一种是与物理层之间的接口。这里符合UTMI(USB Transceiver Macrocell Interface)规范定义。2 控制器实现控制器接口的信号框图如图3所示。存储器采用标准的单口SRAM,其信号接口由32位数
29、据线SRAM_DATA、15位地址线SRAM_ADDR及读写信号(SRAM_WE和SRAM_RD)组成,系统所需SRAM的容量为2 1532bit=128KB。而与微控制器之间的接口信号包括32位数据线DATA、18位地址线ADDR以及DMA请求和响应信号(DMA_REQ和DMA_ACK)。由于要支持到128KB,需要17位地址线,另外还需要一根地址线来选通SSRAM和USB控制器内部的寄存器,总共需要18根地址线addr17:0。定义如下:USB_RF_SEL = !addr17;USB_MEM_SEL =addr17;第18位地址addr17为高时选择缓冲存储器,否则选择内部寄存器。地址a
30、ddr16: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通过管
31、脚MODE0和MODE1决定收发器的工作模式,共有4种工作模式:MODE1:0为“00”时,收发器处于断开状态;为“01”时处于全速(Full Speed)模式(此时USB带宽为12Mb/s);为“10”时是高速(High Speed)模式(此时USB最大带宽是480Mb/s);为“11”时是HS chirp模式。UTMI接口通过译码MODE1:0来控制ISP1501在HS和FS之间转变。If mode_hs=1thenMODE=10Elsif mode_hs=0thenMODE=01End if;2.2 协议层控制器的核心逻辑位于PL(Protocl Layer)模块,负责管理所有USB数据
32、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 thensram_out=din;sram_adr=addr;
33、sram_we=req AND we;elsesram_out=mdin;sram_adr=maddr;sram_we =mwe;end if;由控制逻辑可看出,内部DMA操作的优先级比外部总线高。协议引擎(Protocol Engine)处理所有标准的USB握手信号和控制通信。分组组装器组装分组并送入输出FIFO,先组装分组头,插入适当的PID(分组标识)和校验和,然后加入数据域。分组拆装器先解码出PID和序列号以及校验和,再从8位PID取低4位(或高4位取反)得到PID3:0,通过USB2.0协议的PID类型定义译码出PID名,判断是Token分组(OUT、IN、SOF和SETUP)还是D
34、ATA分组(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=token06:0;Token_endp=token12:0 & token07;Token_crc5=
35、token17:3;对于特殊的Token须进行特殊的处理,本文实现的控制器只对SOF这一特殊Token进行操作,解出PID后的11位帧号及5位CRC5校验码。Frame_no=token12:0 & token0;Token_crc5=token17:3;检验校验码是否出错,如果出错等待下一个Token,否则将地址、端点号和帧号等放入相应寄存器。Token类型如果是IN,则执行组装分组并发送寄分组;如果是OUT则拆卸接收到的数据分组。对于其他不支持的Token则视为错误处理:Pid_ERROR=pid_ACK OR pid_NACK OR pid_STALL OR pid_NYET OR pi
36、d_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),其格式如图
37、6所示。本文使用addr8:27根据地址线来访问这些寄存器,addr8:4用来选择端点号,其值(16进制)从4到19分别表Epn(n=0.15)。addr3:2指定寄存器类型:“00”代表CSR(Control Status Register);“01”代表中断寄存器;“10”指向Buffer0;“11”代表Buffer1。这两个Buffer用来作临时数据存储,Buffer0和Buffer1分别作为专用的输入/输出缓冲器来提高USB的数据吞吐能力。双Buffer能够减少微控制器和驱动软件之间的延迟。其中端点的CSR寄存器指定端点的工作模式并且向控制器报告指定端点的状态。Ep_CSR31:30必
38、须初始化为“00”(最初使用Buffer0),通过读这2位可以知道下次所要处理的缓冲器;为“01”时,指定Buffer1。Ep_CSR27:26和Ep_CSR25:24分别指定端点类型和传输类型,其类型编码参见表1。Ep_CSR21:18指定端点号,总共可以有16个端点。Ep_CSR15时DMA使能位,为“1”时允许外部DMA操作,否则不允许DMA操作。表1 类型编码表Ep_CSR27:26端点类型Ep_CSR25:24传输类型 00控制端点00中断传输01IN端点01同步传输10OUT端点10块传输11保留11保留当控制器收到中断时,读中断源寄存器(Ep_INT6:0)来判断中断源和产生的原
39、因。可自定义中断源,如Ep_INT2定义为该控制器接收到不支持的PID而产生的中断:Ep_INT2=Pid_ERROR。Ep_INT4和Ep_INT3分别表示Buffer1和Buffer0的满或空的状态位。Ep_BUF31(标记缓冲器是否被使用过)在使用后被控制器置“1”,在清空或重填充该缓冲器后,控制器清除该位。该闰初始化时为“0”。Ep_BUF30:17指定缓冲器能容纳的字节数。Ep_BUF16:0缓冲器的指针,装载存储器SRAM中数据的地址。控制端点(Endpoint0)比较特殊,由于它既要接收也要发送数据,因此对于控制端点,Buffer0用于OUT缓冲器,Buffer1则是IN缓冲器。
40、从SETUP和OUT分组来的数据,写入Buffer0,IN分组的数据则是从Buffer1中获取。2.4 DMA操作DMA操作允许控制器与功能接口之间数据的透明传输。一旦设置了DMA操作,则不需要微控制器的干预。每个端点有一对DMA_REQ和DMA_ACK信号。当CSR寄存器中DMA使能信号位(Ep_CSR15)被置位时,USB控制器使用DMA_REQ和DMA_ACK这两个信号来进行DMA的流控制。当缓冲区有数据或为空需要填充时发送DMA请求信号DMA_REQ,每传输4字节,响应一个DMA_ACK信号。由于USB2.0协议定义的事务操作以8bit为单位,因此完成一次32bit的DMA操作需要进行
41、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状态。在操作过程中,使用计数器ad
42、r_cb对传输字节数进行计数,通过addr_cb1: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字节轮流
43、使用Buffer0和Buffer1缓冲区:if(NOT adr_cb2) AND mackthen Buffer0=SRAM_DATA_I;elsif (adr_cb2 AND mack)then Buffer1=SRAM_DATA_I;end if;在MEM_RD3状态判断是否还需要读下一个数据,如果需要再进入状态MEM_RD2,否则在传输完所有字节后,返回到IDLE状态。在发送数据过程中,使用14bit计数器sizd_c决定传输字节数,取自Ep_BUF30:17,每发送1字节数据,它的值减1。在图7中的各个状态中,由于超时、CRC校验错误或得到的数据发生错误时,PE产生的Abort信号会使
44、当前状态都回到IDLE。文中阐述了USB2.0功能控制器的一种实现方案。 其VHDL语言实现代码,已在XILINX公司的FPGA Virtex XVV3006fg456中通过了Xilinx ISE的仿真、综合及布局布线。FPGA的规模是32万门,1536个CLB(可配置逻辑单元)。该控制模块占用2050个Slice(66%),使用了1697个Slice触发器(27%)和3047个4输入LUT表(49%)。整个FPGA的速度可达到56.870MHz,完全满足视频数据的高速传输(对32bit数据操作,达到480Mb/s的速度时钟只需15MHz)。该方案实现的控制器便于修改且易于实现,可作为一个功能
45、模块嵌入到SOC中,可使不同情况最大限度地灵活设计片上系统。 用FPGA器件实现UART核心功能的一种方法串行外设都会用到RS232-C异步串行接口,传统上采用专用的集成电路即UART实现,如TI、EXAR、EPIC的550、452等系列,但是我们一般不需要使用完整的UART的功能,而且对于多串口的设备或需要加密通讯的场合使用UART也不是最合适的。如果设计上用到了FPGA/CPLD器件,那么就可以将所需要的UART功能集成到FPGA内部,本人最近在用XILINX的XCS30做一个设计的时候,就使用VHDL将UADT的核心功能集成了,从而使整个设计更加紧凑,更小巧、稳定、可靠,下面就谈谈设计方法。 - 分析UART的结构,