FPGA模块化设计(精选7篇)
FPGA模块化设计 篇1
0 引言
随着电子计算机技术,尤其是嵌入式技术的大力发展和广泛应用,UART(Universal Asynchronous Receive Transmitter)也得到了相当广泛的应用,它允许串行链路上进行全双工通信。一般使用通用的UART接口芯片,但这种芯片存在电路复杂,成本高,降低了系统的可靠性和稳定度,由于结构和功能的相对固定,因而我们不能根据自己的设计需要去进行剪裁和移植。而日益成熟的SOPC(System On Programmable Chip)技术要求将整个设计功能集成到一块或几块芯片中,本文通过对UART功能的分析,提出了在FPGA上集成UART功能模块,增强了设计的灵活性,简化了电路,并通过有限状态机来描述核心功能控制逻辑,从而提高了整个系统稳定性和可靠度。
1 UART通信原理
UART是异步通信方式,最基本的UART通信只需要两条信号线(RXD,TXD)就可以完成数据的相互通信,接收和发送是全双工的,在接收端,串行的数字信号转化成并行的信号,才能进行处理数据,在发送端,并行的信号转化成串行信号才能被发送到另一个设备中使用。
UART帧格式(也就是发送数据的格式),是以一个起始位开始的,并以停止位结束。起始位后是数据位,可以是5、6、7、8位,再加一个奇偶校验位(可选),本设计没有设置奇偶校验位,最后是停止位(1位、1.5位或2位)。其帧格式如图1所示。当无数据发送或接收时,各引脚置高电平,以保证开始位来临之前为高电平。
2 UART的FPGA实现
本设计中包括三个模块:波特率发生模块,接收器模块,发送器模块。
2.1 波特率发生模块
波特率发生器实际上就是一个分频器,具体是通过一个计数器实现。本设计采用16倍频采样的方案,也就是采用16倍于波特率的时钟,即若系统波特率为9600,则波特率发生器的输出时钟为9600×16;因为本系统的外部晶振为50MHZ,所以分频器对晶振的分频数为326,每一计数周期周期使输出电平高、低变化,即可得到9600波特率对应的UART的时钟。图2为波特率发生器的仿真波形。
2.2 接收器模块
接收模块从捕捉到数据串的第一个0开始工作,也就是验证起始位的到来,验证完后,开始接收8位数据,并进行串并转换,随后检测停止位,正确则输出。接收器状态转换如图3所示。
接收器状态机共包含四个状态:空闲状态(IDLE)、检测起始位(START)、数据采样(SHIFT)、停止位检测(STOP)。接收机复位进入IDLE状态,等待开始位到来,当RXD发生从1到0跳变,进入START状态检测到起始位,开始对采样时钟计数,当计数到8时,进入SHIFT状态。在SHIFT状态,开始数据采样,每16采样时钟采集一位串行数据,并进行串/并转换,当采样到有8位数据时,进入STOP状态。在STOP状态,检测停止位是否为1,如果为1则输出串/并转换的8位数据,如果是0,则不能输出,回到IDLE状态。由于UART的帧发送格式为,先发送低位,再发送高位,所以如果串行输入为10011000,则并行输出为00011001。
仿真结果如图4所示。
2.3 发送器模块
发送器的功能实际上就是对并行数据的缓存,并进行并/串转换,然后将数据输出,功能原理和接收器相似。图5为发送器状态转换图。
发送器状态机包含的四个状态:STATE0:当UART复位进入此状态,输入使能,若检测到高电平,则进入STATE1状态。STATE1:发送起始位0。保持TX为低电平16个采样周期后,进入STATE2状态,否则保持本状态。STATE2:发送8位数据。每一位数据占用16个采样周期。发送完毕,进入STATE3状态。STATE3:检测并发送停止位。将TX置为高电平,保持16个采样周期。返回STATE0状态。
仿真结果如图6所示。
3 实验结果
本设计使用Verilog语言,并在Alera的DE2-70平台上加以验证并通过串口调试助手证实数据能够正确收发。实验结果如图7。
4 结束语
使用FPGA实现UART模块,使系统体积更小,降低了功耗,提高了稳定度。而对于收发的数据帧和波特率能较容易的改变,大大增加了系统设计的灵活性。另外,本设计还可以作为一个IP核,灵活的移植进其它FPGA嵌入式系统中,通用性增强。
参考文献
[1]王伟.VerilogHDL程序设计与应用.北京人民邮电出版社,2005.
[2]冼进.VerilogHDL数字控制系统设计实例.北京:中国水利水电出版社,2007.
[3]杨宗国,李艳萍.基于FPGA的UART模块的设计.现代电子技术,2009,(2):19-22.
[4]杨夏,王平,张军.基于FPGA的简化UART电路设计.微计算机信息(嵌入式与SOC)2008,24:276-277、279.
[5]赵延,葛利嘉,双涛.基于FPGA的UART设计实现及其验证方法.现代电子技术,2008,17:162-164.
基于FPGA的UART模块设计 篇2
一般来说UART通信需要使用专门的接口协议芯片, 但是这种协议芯片存在体积较大、接口复杂且成本较高的缺点。此外, 这种芯片的结构与功能相对固定, 在设计中缺乏灵活性。本文介绍了利用FPGA实现UART通讯的方法, 将原来UART专用协议芯片的功能集成到了FPGA中, 提高了设计的灵活性与可靠性。
1 UART通讯原理
支持UART的串行接口目前比较常用的有RS232、RS422、RS485等, 它们之间的区别主要表现在电气特性上, 但最基本的通讯原理是一样的。UART模块接收/发送的都是符合TTL (或CMOS) 标准的逻辑电平, 与外设之间还需要经过专门的转换芯片将通讯数据转化为符合RS232、RS422或RS485标准的电平。
UART作为一种异步串行通讯方式, 数据在通讯过程中是字节为单位按位传输, 一般从最低有效位 (LSB) 开始。典型的UART通讯数据格式如图1所示。
2 UART的FPGA实现
UART通讯模块内部逻辑结构如图2, 可分为控制模块、接收模块和发送模块, 各个模块的主要功能如下:
控制模块:根据CPU写入的数据配制UART通讯参数, 并根据接收、发送模块回送的指令产生相应中断上报给CPU, 对接收、发送模块状态进行监控、管理;
接收模块:该模块主要用于将接收到的串行数据转化为并行数据, 再以本地总线形式发送给CPU。此外, 该模块还将接收过程中的参数上报给控制模块, 用于监控管理以及接收中断、错误中断的产生。
发送模块:该模块主要用于将CPU要发送的数据在控制逻辑的调度下转化为串行数据后发送出去, 此外该模块还将发送过程中的参数上报给控制模块, 用于监控管理以及发送中断、错误中断的产生。
2.1接收模块的设计
该模块的数据接收过程通过一个状态机来实现, 其状态转移图如图3所示, 状态转移所用的时钟是波特率时钟16倍频clk16x。整个工作流程如下:
2.1.1系统复位后
状态机进入idle状态等待起始位, 当接收端电平由高变为低 (RXD值由1变为0) 时即为检测到了一个起始位, 状态机进入start状态;
2.1.2 start状态下
等待8个clk16x周期后再判断一次RXD的值, 若不为0, 则说明之前接收到的是由于线上干扰而引起的虚假起始位, 状态机返回idle状态;若仍为0则再等待8个clk16x周期后状态机进入shift状态;
2.1.3 shift状态下
模块每隔16个clk16x周期从RXD上读取1bit的数据进行移位操作, 直到读完全部8bit数据后, 若奇偶校验被使能, 则状态机进入parity状态, 否则直接进入stop状态;
2.1.4 parity状态下
模块等待16个clk16x周期从RXD上读取1bit的奇偶校验位的值, 之后状态机进入stop状态;
2.1.5 stop状态下
模块等待16个clk16x周期从RXD上读取1bit的停止位的值, 之后状态机进入done状态, 停止位值经取反操作后用做帧错误校验位;
2.1.6 done状态下
若奇偶校验被使能, 且奇偶检验与帧校验均正确, 或奇偶校验未被使能, 但帧校验正确时, 移位寄存器中的8bit数据被存入接收FIFO中, 否则该数据被丢弃。状态机将在1个clk16x周期后返回idle, 等待新数据。
2.2发送模块的设计
该模块的数据发送过程通过一个状态机来实现, 其状态转移图如图4所示, 状态转移所用的时钟是波特率时钟16倍频clk16x。整个工作流程如下:
2.2.1系统复位后
状态机进入idle状态等待发送FIFO中写入数据, 当FIFO的非空标志被置位时状态机进入start状态;
2.2.2 start状态下
模块先发送一个数据起始位, 同时从FIFO中读取一个字节的数据放入发送移位寄存器, 然后状态机进入shift状态;
2.2.3 shift状态下
模块按照LSB在前, MSB在后的顺序, 每间隔16个clk16x周期从移位寄存器中移出1bit的数据, 直到移完全部8bit数据后, 若奇偶校验被使能, 则状态机进入parity状态, 否则直接进入stop状态;
2.2.4 parity状态下
模块等待16个clk16x周期从TXD上发出1bit的奇偶校验位, 之后状态机进入stop状态;
2.2.5 stop状态下
模块等待16个clk16x周期从TXD上发出1bit的停止位 (TXD上为1) , 之后状态机进入done状态;
2.2.6 done状态下
表示一个字节数据发送完成, 状态机在1个clk16x周期后直接回到idle状态, 等待发送新的数据。
2.3控制模块的设计
控制模块的主要作用是根据CPU写入的参数对UART进行配制, 此外还能根据接收/发送模块的工作状态产生中断, 并上报给CPU。该模块内部结构由一个波特率时钟发生器、三个寄存器以及中断仲裁逻辑组成。
波特率时钟发生器能对输入的系统时钟进行分频操作, 从而产生相应的波特率16倍频后的时钟clk16x。
三个寄存器分别是控制寄存器 (conreg) 、中断使能寄存器 (int_en_reg) 以及状态寄存器 (statusreg) 。其中conreg和int_en_reg是只写存储器, 它们分别用于存储CPU写入的UART配制参数以及中断使能条件, UART即按照这两个寄存器中被写入的参数进行工作;statusreg是只读存储器, 存储了UART工作时的状态数据, CPU通过读取这些状态信息来做出相应的操作。
控制模块在中断被使能的前提下, 根据中断仲裁逻辑, 向CPU发送三种中断:错误中断、接收中断、发送中断。这三种中断的产生条件如下:
(1) 错误中断。当接收数据时, 若奇偶校验或帧校验错误, 则在接收端RXD上的串行数据全部移入移位寄存器后, 该中断即被置位;
(2) 接收中断。在接收到新数据, 并且接收到的数据被保存至接收FIFO后, 该中断即被置位;
(3) 发送中断。在发送数据时, 当发送FIFO中的数据被发送移位寄存器读空以后, 该中断即被置位。
3结论
本文提出了一种基于FPGA设计和实现UART的方法, 通过利用FPGA片上逻辑资源来实现UART的基本功能, 其通讯波特率、校验方法、中断方式均可根据实际需要进行配制。此外, 利用FPGA的可重配置性, 还可以在FPGA上方便的实现多路UART通讯扩展, 与传统设计相比, 能有效减少系统的PCB面积, 降低系统的功耗, 提高设计的稳定性和可靠性, 并可方便地进行系统升级和移植。
参考文献
[1]何健标, 王宏远, 林静宜, 等.基于最佳接收的UART的设计与实现[J].电子技术应用, 2006 (8) :55-58.
[2]何慧珠, 秦丽, 张会新.基于FPGA的UART IP设计与实现[J].微计算信息, 2008, 24 (1) :223-224.
[3]陈小琴.基于Verilog HDL的多功能信号发生器的设计与实现[J].仪器仪表学报, 2008, 29 (4) :322-324.
[4]季雄, 段继海, 胡媛媛, 等.基于Verilog HDL的UART设计[J].微计算机信息, 2006, 6 (2) :230-232.
FPGA模块化设计 篇3
一般来说, 无线电台通信采用半双工通信方式, 一方在发送话音信号的同时, 不能接收另一方的话音信号。因此电台的通信接口分为两部分, 一部分为话音信号接口, 用于发送接收话音, 另一部分为PTT控制信号接口, 用于控制电台的发送接收状态。然而, 目前有许多通信设备, 如民航、海事、铁路交通的内部通信以及应急通信等, 为了实现电台的远程遥控, 并且节省信道资源, 将PTT控制信号调制成已知的单频信号与话音信号一起发送, 确保PTT控制信号传输的可靠性。当内通设备与电台直接相连时, 接口不兼容。因此需要设计一种电台接口转换模块, 能够将单频信号与话音信号分离开来, 实现电台与内通设备的通信。
现代的大规模FPGA既能处理过去DSP处理器领域的功能, 同时又大大地降低专用集成电路方案的风险和前期成本, 因此采用FPGA作为核心芯片和先进的数字信号处理技术来开发将为开发带来诸多的优势[1]。
1设计原理
基于FPGA的电台接口转换模块是基于数字信号处理技术, 将设备的话音信号通过模/数转换器转化为数字信号传输到输入缓冲区, 数字话音信号一方面经过FIR (Finite Impulse Response) 带阻滤波器, 滤除某一已知的单频信号, 发送到输出缓冲区, 再通过数模转换器转化为话音信号, 传输给电台;另一方面, 通过时频变换、阈值检测以及稳定处理三个步骤, 检测出单频信号, 据此产生PTT (Push-to-Talk) 控制信号输出, 其接口转换模块功能框图如图1所示。
2FFT处理器设计
在Altera可编程逻辑器件中数字信号处理系统设计需要能够同时具有高速运算以及硬件语言描述的开发工具。Altera DSP Builder集成了这些工具。 Altera公司的DSP Builder大大缩短了DSP开发周期, 在友好开发环境里它能帮助使用者生成一个有关DSP设计的高级硬件描述语言。IP中的FFT MegaCore function是一个具有良好性能, 高度参数化的快速傅里叶变换的进程。该设计采用DSP Builder模型这个共享开发平台中的Megacore functions完成FFT处理器和FIR陷波滤波器的设计[2,3,4,5,6,7,8]。
I/O数据流结构的设计如下:
在FFT MegaCore宏功能模块中主要的参数指标就是数据流相应的时序规则, 下面简要介绍一下流结构的时序原理图, 如图2所示。
在图2中, sink_valid是FFT模块的输出信号, 它表示FFT处理器是否做好接收数据的准备。sink_ready和sink_valid都处于高位时, FFT开始运行, 等待sink_sop信号置位开始输入数据, 只要这两个信号中任一个信号置低位, 就表明FFT还未准备好, FFT将处于等待状态, 直到这两个信号都处于高位才开始运行。sink_sop是一帧信号传输的起始信号, sink_eop表示一帧信号传输结束信号。
3FIR陷波滤波器的设计
窗函数设计法在设计常用FIR数字滤波器中有非常广泛的应用, 正确的选择窗函数可以提高所设计的数字滤波器的性能, 或者在满足技术指标的条件下, 减少FIR数字滤波器的阶数。窗函数设计法主要目标是获得最窄的主瓣宽度和尽可能大的旁瓣衰减[9]。若阻带衰减不高, 则滤除不干净, 衰减过高, 可能将有用信号也一并滤除。据资料可知, 矩形窗、汉宁窗的阻带衰减很低, 海明窗较好一点, 布莱克曼窗应该是最恰当的。
图3是加布莱克曼窗后的陷波滤波器, 采用Matlab工具产生, 横坐标为频率范围, 纵坐标为各频率点上的幅度。
由图3可知, 陷波滤波器在频率为2 kHz的地方幅度最低, 达-60 dB, 其过渡带宽200 Hz, 大体上能满足设计的需求。
4Cordic算法实现求模
目前实现Cordic算法主要有两种基本的结构:较为简洁的状态机和高速全流水线处理器。在此采用高速全流水线处理器。在流水线结构中, 各阶段数据处理不影响后面数据的输入, 在每个时钟周期到来是将各阶段的数据不断前移, 后面的数据不断输入, 犹如一个FIFO缓冲期, 在每个时钟周期到来时地址不断向前移一位, 后来的数据不断的往里输, 在各时钟周期不同地址间数据不会相互影响。这就保证了实时系统的数据能不断地流入而不会导致冲突。图4所示为5级迭代快速Cordic流水线结构:
如图5所示, 采用QuartusⅡ的SignalTap采集的数据, 经计算其准确率高达98%以上, 能够满足设计的需求。根据图5所示计算mmsource_exp信号, 此信号是指数修正信号, 是有符号型, 将其转换成十进制数的-2。先计算头二组mmsource_real信号和mmource_imag信号数据。它们也是有符号数, 因此将其转化为十进制数, 转换结果为{-1, -80;-2, -17;-11, -53;26, -51}, 而根据Cordic算法得出的结果从图5中读出, 依次为{5 209;1 113;3 517;3 723}。而实际经模修改后得到的标准值分别为{5 120;1 088;5 317;3 648}。
5稳定处理
FFT阈值法的原理是先对原始信号做FFT处理, 适当预设滤波阈值, 将低于该阈值的频带设定为无效信号, 定义为接收器没有接收到信号。当然阈值以下, 并不能代表该周期产生了单频信而由于信道上或者硬件本身的干扰, 单检测周期的测量值超过阈值或者在号或没产生。仅凭单检测周期的阈值检测而产生PTT控制信号会带来话音控制的不稳定性[10]。
设计的算法能极大地提高阈值测试的稳定性。具体处理如下, 流程如图6所示。
为实现该功能, 需自定义一个计数器, 初始值为0, 计数器值定义在0到T (T>0) 之间。若在加操作中使计数器值大于T, 则将计数器值饱和到T;若在减操作中使计数器小于0, 则将计数器值饱和到0。
第一步, 检测测量值是否过阈值。若过阈值, 计数器值加m, 进行第二步;若不过阈值, 计数器值减n, 进行第四步。
第二步, 若计数器值大于T, 则饱和到T值。进行第三步。
第三步, 检测计数器值, 若计数器值等于T, 则启动输出PTT控制信号, 结束流程;若计数器值小于T, 则维持上一次的PTT控制信号输出状态, 结束流程。
第四步, 若计数器值小于0, 则饱和到0值。进行第五步。
第五步, 检测计数器值, 若计数器值等于0, 则取消输出PTT控制信号, 结束流程;若计数器值大于0, 则维持上一次的PTT控制信号输出状态, 结束流程。
在流程中, m, n值的选择取决于信道上或者硬件本身干扰的大小。若没有单频信号而误检出单频信号的错误概率比较大, 则m的取值应较小;反之, 若没有单频信号而误检出单频信号的错误概率比较小, 则m的取值可以较大。同理, 若有单频信号而未检出单频信号的错误概率比较大, 则n的取值应较小;反之, 若有单频信号而未检出单频信号的错误概率比较小, 则n的取值可以较大。
图7所示, 在CycloneⅢ实验板运行时采用SignalTapⅡ对状态机的各项内容进行验证, 保证状态机运行良好。将相关程序下载到CycloneⅢ芯片里, 实时采集音频数据对状态机进行分析。
在图7中, mmod在一个采样周期结束后ostart信号被触发, 其获得的总能量为1 427, 比预设阈值要低, 因此ocounter1的状态不变, 仍保持在第0状态, 而ocounter2的状态则由第3状态跳到第2状态, 这实践的结果和理论都是保持一致的, 可以说明程序的正确性, 状态机运行正常。
6结语
本文可以用于一切需要PTT信号端的设备上, 应用极其广泛, 如:对讲机、飞机场指挥塔的应答系统以及目前已在美国推出的PTT手机业务等均运用到该技术。而在做该课题时遇到一些问题, 如:陷波滤波器其阻带带宽偏大, 需要寻求一种更好的算法来解决其带宽问题;其次, FIR消耗内存较大, 这样会消耗大部分的FPGA逻辑资源, 会导致较大系统的资源不够, 因此需要设计更好的数据流结构和算法来处理这个问题。这将是笔者以后需要继续研究学习的。
参考文献
[1]马维祯.快速傅里叶变换FFT的发展现状[J].华南理工大学学报, 1995, 23 (5) :37-43.
[2]Altera.FFT MegaCore function user guide[M].San Jose, CA, USA:Altera Corporation, 2006.
[3]李旭.基于IPCore的FFT处理器的设计与实现[J].船舰电子工程, 2007, 27 (2) :121-123.
[4]马壮, 齐林.基于FPGA IP核的FFT实现[J].电子技术, 2008 (7) :161-163.
[5]窦秀美, 赵振纲.基于IP核的FPGA FFT算法模块的设计[J].无线电工程, 2008, 38 (18) :29-31.
[6]陈方晖.分布式算法FIR滤波器在FPGA上的实现[J].科技信息, 2007 (10) :29-31.
[7]ZHAO Hui, YU Jue-bang.A novel neural network-basedapproach for designing 2-D FIR filter[J].IEEE Trans.onCASII, 1997, 44 (11) :1095-1099.
[8]ZHAO Hui, YU Jue-bang.A novel neural network-basedapproach for designing digital filter[J].Journal of Electron-ic&Information Technology, 1998, 20 (3) :397-403.
[9]董绍平, 陈世耕, 王洋, 等.数字信号处理[M].哈尔滨:哈尔滨工业大学出版社, 2004.
FPGA模块化设计 篇4
目前基于FPGA和DSP结构的软件无线电技术被广泛应用在数字接收机设计中,雷达接收机领域的数字化技术也在日趋发展,如何借助数字化的软硬件优势设计出易实现、灵活,并满足不同性能指标和目的的数字接收机成为工程设计的焦点。本文结合某连续波测速雷达数字接收机的设计实现,给出了一种基于模块化的FPGA设计方案,并在此基础上重点讨论了信号处理模块的设计。
1 雷达接收机概述
雷达接收机的任务是通过适当的滤波将天线上接收到的微弱高频信号从伴随的噪声和干扰中选择出来,并经过放大和检波后,送至显示器、信号处理器或由计算机控制的雷达终端设备。雷达接收机可以按应用、设计、功能和结构等多种方式来分类。但是,一般来说可以将雷达接收机分为超外差式、超再生式、晶体视放式和调谐高频式等4种类型,其中超外差式雷达接收机具有灵敏度高、增益高、选择性好和适用性广等优点,实际中在很多的雷达系统中都获得应用。
超外差式雷达接收机的简化方框图如图1所示。
2 数字中频接收机原理
由于受器件水平的制约,数字接收技术目前还难以在射频频段直接实现,一般在中频进行数字化。目前所说的数字测速即是利用中频数字锁相环来完成多普勒频率的提取及测量。数字中频接收机主要由数字化正交处理单元、数字载波锁相环和自动增益控制(AGC)环组成。
中频经A/D采样后的数字信号与数控振荡器(NCO)产生的数字正交信号分别进行数字混频,各经过FIR数字低通滤波器,得到I﹑Q两路数字窄带信号。I、Q两路信号分别作为数字信号的实部和虚部,做FFT分析,估算出多普勒信息,输出频率控制码控制NCO输出,实现快速载波频率引导。I路信号再经过低通滤波器(LF1)完成数字滤波,控制NCO的输出频率,从而构成数字锁相环,在频率引导成功后实现对载波信号的快速捕获与跟踪。环路锁定后从环路滤波器输出可以提取出多普勒信息。Q路信号经过一个低通滤波器(LF2),通过I、Q提取输入信号的幅度信息,实现信号的AGC控制。
3 模块化设计在FPGA的具体应用
本接收机主要功能是完成连续波雷达的测速和测角任务,设计时在保证指标的前提下,贯彻简洁至上的原则;并且尽量采用先进、成熟的数字处理技术和软件无线电技术,贯彻模块化、通用化、系列化、组合化设计原则,确保系统先进、稳定、可靠。中频数字接收机是整个接收机部分的核心,设计时遵循简洁、灵活的特点,尽量减少硬件电路的功能,使其结构简洁,降低设计和实现的难度,而把复杂的处理交由软件完成。
3.1 FPGA模块组成
FPGA是整个数字中频接收机的通信枢纽,同时还参与部分信号处理工作,FPGA由时钟产生模块、时间解码模块、信号处理模块和通信控制模块四部分组成,分别完成四大基本功能,如3.2节所述。
3.2 FPGA各个模块的基本功能
3.2.1 时钟产生模块
时钟产生模块利用系统基准信号为整个系统提供时钟信号,保证系统的同步运行,具体如下:为ADC提供采样信号;为DSP提供时钟信号;为信号处理模块提供时钟信号;为时间解码模块提供时钟信号;为通信控制模块提供时钟信号。其中,后3类时钟信号为FPGA内部信号,无需输出。
3.2.2 时间解码模块
时间解码模块利用时间码信号和时钟产生模块送来的时钟信号为整个系统提供时间信息和时基信号,保证系统在时间上的同步运行,具体如下:接收时间码信号,解码得到时间信息;产生与时间码信号对准的时基信号。
3.2.3 信号处理模块
信号处理模块接收ADC数据,完成信号处理,包括以下内容:信号的下变频处理;信号的滤波抽取处理。
3.2.4 通信控制模块
通信控制模块其外部完成与DSP单元、外部设备的通信;其内部完成与时钟产生模块、时间解码模块、信号处理模块的通信。
3.3 FPGA各个模块设计原理及解决方法
3.3.1 各模块组成
(1)时钟产生模块。时钟信号的产生利用PLL和分频器,对基准信号进行处理得到,设计时应注意ADC采样信号同相,同时保证信号处理模块时钟信号和FPGA接收的ADC数据相差要求的固定值。
(2)时间解码模块。时间解码模块由编码器、解码器和分频链组成,时间码解码器的主要作用是译码得到秒信号和时间信息,分频链路的主要作用是产生与译码秒同步的分频信号。
(3)信号处理模块。信号处理模块由A、B两个通道组成,两个通道结构相同,分别处理两个点频的中频信号;每个通道又由和信号和差信号两个子通道组成,两个子通道都是数字下变频器(DDC),其结构相同,分别处理和/差两路信号。原理框图如图4所示。
对于每个通道而言,和信号的处理结果分为一次抽取结果和二次抽取结果(每个结果又包含同相和正交两路),分别用于信号频谱识别和环路跟踪;差信号的处理结果为二次抽取结果,同相和正交两路信号分别对应于方位和俯仰角误差信号。
子通道实质上是一个数字接收信号处理器,原理图如图5所示。其基本功能是数字下变频和数据降速率处理,它由数控振荡器、数字下变频器和两级积分梳状抽取滤波器组成。信号进入后,首先进行下变频,得到正交的两路基带信号I和Q,然后分别对这两路信号进行滤波和抽取,降低数据速率,以满足后续处理的要求。
信号处理模块一共有4个子通道,共形成8个数据准备好信号,但考虑到各个子通道由同一个时钟信号同步,并且在复位信号(ACLR)过后开始工作,因此选择通道A的和信号子通道一次和二次抽取数据准备好信号作为整个信号处理模块数据准备好信号。
3.3.2 数控振荡器(NCO)
NCO产生两路正交的正弦波信号(本振信号),其频率和相位可控。
NCO的实现采用查表法,将正弦表预先存入ROM中,频率积分后加上初始相位得到瞬时相位,作为正弦表地址数据输入,ROM输出为正弦幅度信号。由于受到FPGA RAM容量的限制,相位到地址的转换需要做截断处理,同时只存储了1/4周期+1个单元的正弦幅度信息,查表时根据正弦信号的周期性做调整。
3.3.3 数字下变频器和积分梳状(CIC)抽取滤波器
数字下变频功能由有符号整数乘法器实现。CIC抽取滤波器包括两级,结构分别为2阶和5阶。CIC抽取滤波器传递函数和频率响应分别为:
其中为阶数,为抽取比,为输入数据速率。CIC抽取滤波器原理框图如图7(以2阶CIC为例,5阶类似):
CIC抽取滤波器由积分器、抽取器、梳状器和比例器组成。单级积分器传递函数为,由加法器和延迟寄存器实现;单级梳状器传递函数为,由减法器和延迟寄存器实现;比例器放在最后,保证有效位数。图8是CIC2积分梳状抽取滤波器的频率响应和其直流附近的放大,可以看出其单边带5 dB处的带宽是符合设计要求的。
3.3.4 时序图
信号处理模块信号处理子通道处理时序如图9所示,处理过程中采用了流水线技术。NCO输出COS比FCW、PCW输入滞后5个时钟周期;下变频数据输出I比数据输入DIN滞后5个时钟周期。
3.3.5 通信控制模块
通信控制模块分为EMIF、UART、BUFFER和GPIO四个子模块,其中GPIO子模块负责FPGA与DSP之间状态与控制信号的传输;EMIF子模块负责FPGA与DSP之间的总线通信控制,将两者之间的通信转换到内部总线,分别连通UART子模块和BUFFRE子模块;UART子模块负责外部串口设备与EMIF子模块之间的双向通信,BUFFRE子模块负责信号处理模块输出数据与EMIF子模块之间的缓冲通信。
4 结论
本方案充分利用软件的处理能力和对FPGA模块化设计的思想,提高了中频数字接收机的灵活性,并使FPGA单元易于分块编写,易于分块调试,易于修改。基于该模块化FPGA的数字雷达接收机已调试成功,并已开始使用。
参考文献
[1]Buracchini E.The software radio concept[J].IEEE Communications Magazine,2000,38(9):138-143.
[2]Harris F J,Dick C,and Rice M.Digital receivers and transmitters using polyphase filter banks for wireless communications[J].IEEE Trans on Microwave Theory and Techniques,2003,51(4):1395-1412.
[3]刘星成,罗恒宏,张光昭.软件无线电中的关键技术及平台构建初探[J].无线电通信技术,2000,26(1):55~59.
[4]文智力,戴旭初.一种新型的全数字短波接收机[J].微型机与应用,2004,23(9):31~33.
[5]唐丽萍,牛大胜,汉晓东.基于DSP和FPGA的数字化中频处理平台[J].信息技术与信息化,2006(1):95-96.
[6]王旭,吴嗣亮,毛二可.正弦调频连续波雷达数字中频信号处理机的设计[J].电讯技术,2007,47(6):60-64.
[7]Skolnik M I.雷达系统导论[M].北京:国防工业出版社,1992.
FPGA模块化设计 篇5
(1)对比CCD和CMOS
(1)CCD有工艺复杂、成本高、耗电量大、像素提升难度大等问题。而CMOS由于制造工艺简单,因此可以在普通半导体生产线上进行生产,其制造成本比较低廉,并且本身体积小,重量轻,使整个系统小型化。
(2)CMOS数字图像传感器能直接输出数字图像信号和数据同步参考信号,便于数字图像低级处理和系统集成;综合这些本文决定采用CMOS图像传感器OV7670。
(2)本文在选用FPGA芯片上侧重低成本应用,容量够用,性能可以满足设计要求的。对比后选用了Altera公司生产的Cyclone III EP3C5E144C8N芯片,它拥有LAB/CLB数为321,逻辑元件/单元数为5136,RAM位总计为423936,输入/输出数为94,电源电压为1.15V~1.25V。[1]
(3)SDRAM存储器选用SAMSUNG公司生产的K4S641632C型号SDRAM芯片。K4S641632C是4M×16bit×4bank的SDRAM,电源电压3.3V,刷新周期:4000刷新周期/64ms。CAS潜伏期:2、3。突发长度可选用项:1、2、4、8、全页。
(4)外部显示LCD,选用的是3.5寸的QVGA真彩色液晶屏。
1 系统设计
本文设计的是基于FPGA的CMOS图像采集控制模块,是利用CMOS的图像传感器,由FPGA控制CMOS图片采集存储,LCD液晶显示器来完成图像的显示控制装置。首先系统先对CMOS图像传感器,FPGA和LCD模块进行初始化:CMOS图像传感器在接到FPGA的命令(SCCB协议)后开始配置CMOS传感器的内部寄存器采集图片信息,FPGA将采集到的图片数据信息存储在FPGA内部的SDRAM中,再对存储在SDRAM的数据进行处理,最后再通过FP-GA控制LCD显示器把图像信息传输到LCD显示器上面。[2]系统结构如图1所示,本方案将系统分为图片采集模块、存储模块和显示模块3部分。
2 CMOS图像采集模块
(1)根据CMOS图像传感器的输出时序,再利用FPGA内部设计的存储模块,实现对CMOS图像传感器输出数据实时采集和处理,包括:通过SCCB总线协议,实现FPGA对CMOS图像传感器OV7670进行初始化,然后通过SCCB配置OV7670内部寄存器采集的图像信号,再通过FIFO将其存储在FPGA内部模块SDRAM中,在接收数据同步信号,产生写RAM时序。图像传输电路设计是通过FPGA的8个I/O口与OV7670摄像头的8条图像数据线相连,在HREF、VSYNC、PCLK3个信号线的控制下,FPGA获取OV7670摄像头采集到格式为8位的图像数字信号。在这个采集过程中,需要克服图像采集数据量大,速度快,但是发送速度较慢的缺点,因此需要设计图像帧缓存电路,FPGA利用PCLK、HREF、VSYNC3个信号线,通过逻辑电路产生写信号、片选信号及地址信号来实现8位图像数据的存储。
PCLK和HREF的时序关系如图2所示。
由图2可知,当PCLK处在下降沿且HREF处在上升沿时开始工作,并且当PCLK处于低电平而HREF处于高电平时开始建立数据,当PCLK和HREF处在高电平时是数据保持时间。当HREF处于低电平时停止记数。在图像采集的过程中,要注意时序检测,FPGA检测CMOS采集的图像中,每一行的像素点个数以及每一场的有效行数。一方面,这是CMOS的工作时序,关系到对CMOS器件的认识和理解,另一方面,这一检测对于CMOS的控制至关重要。检测每行的像素个数:HREF高电平时,对PCLK上升沿计数;HREF低电平时,计数复位为0。T检测每场的有效行数:VSYNC低电平时,对HREF上升沿计数;VSYNC高电平时,计数复位为0。
(2)SCCB时序:对于CMOS图片传感器的配置是FPGA的输入/输出口通过SCCB协议的时序来实现的,其实SCCB是和I2C的传输协议非常相似。在写周期中,SCCB总线的第二个字节数据是要选择配置芯片中各个寄存器的地址,第三个字节数据是要写入与寄存器地址对应的数据。[3]状态机如图3所示。
3 SDRAM存储程序设计
3.1 SDRAM概述
在基于FPGA的图像采集系统中,常常会使用SDRAM这类价格低、体积小、容量大、速度快的存储器。SDRAM控制器一方面可以产生SDRAM芯片的读写控制程序,另一方面可以控制SDRAM读写数据域FPGA内其他模块之间的传输。
使SDRAM进入期望的工作模式需要正确的上电逻辑和模式设置。在访问特定的逻辑单元前必须先激活对应的存储块,并且锁定相应的行地址、列地址。为保持SDRAM上的数据不丢失,SDRAM要不断进行刷新。SDRAM的操作模式由引脚CS#、RAS#、CAS#、WE#和地址信号的不同状态来决定。[4]系统框图与接口如图4所示。
SDRAM器件的引脚通常分为以下几类。(1)控制信号:包括片选、时钟、时钟使能、行列地址选择、读写有效及数据有效。(2)地址信号:即时分复用引脚。(3)数据信号:双向引脚。通常一个SDRAM中包含若干个BANK,每个BANK的存储单元是按行和列寻址的。SDRAM的主要操作命令有芯片初始化、预充电、行有效、列读写、数据输出、数据输入、刷新等。
(1)SDRAM的初始化
在SDRAM芯片内部有一个逻辑控制单元,并且有一个模式寄存器为其提供控制参数。因此,每次开机时都要先对这个控制逻辑核心进行初始化。SDRAM在加电完成后等待100μs~200μs后,对所有BANK进行预充电,等待期间CKE保持高电平。预充电完成后进行自动刷新,然后进行模式寄存器设置。在这样的一个初始化过程后SDRAM进入正常工作状态。
(2)刷新和预充
SDRAM必须不断进行刷新才能保留住数据,刷新计数器决定了刷新的时间间隔,目前公认的标准是:行数量/64ms。刷新命令一次对一行有效,发送间隔随总行数而变化。SDRAM提供两种类型的刷新模式:自动刷新(AR)和自刷新(SR)。在自动刷新过程中所有L-Bank都停止工作,在每个刷新周期内所有工作指令只能等待无法执行,因此会占用系统资源,降低系统性能。而自刷新模式不需要依靠系统时钟工作,而是根据内部时钟进行刷新操作。两种模式相比,自动刷新简单易实现,自刷新不占用多余资源,功耗更小。
(3)操作控制
SDRAM的具体控制命令由引脚CS#、RAS#、CAS#、WE#和地址信号的不同状态来决定。CS#、RAS#、CAS#、WE#时钟上升沿触发,An地址线和L-BANK地址线在部分操作动作中作为辅助参数输入。根据系统要求,本设计选用SAMSUNG公司的K4S641632C型号SDRAM芯片。K4S641632C是4M×16bit×4bank的SDRAM,为使数据总线宽度为32bit,用两块K4S641632C实现位扩展。
3.2 SDRAM控制器总体设计
(1)初始化
上电后,Reset命令送达给SDRAM控制器,使其进入初始化状态。对SDRAM进行初始化需执行以下操作:完成上电、等待、预充电、自动刷新、模式寄存器设置。本文在进行Verilog程序设计时,则通过状态机来实现这一过程。
(2)自动刷新与预充电
为保持SDRAM上的数据不丢失,SDRAM必须定时进行刷新,本设计所选用的SAMSUNG-K4S641632 SDRAM芯片,共需进行4000次刷新周期/64ms,即每15.625μs刷新一次。采用的是33MHz的PCI总线时钟,即每420个时钟周期启动一次刷新命令。因此需在SDRAM控制器中设置一个定时器,来控制刷新指令。同时,刷新操作也由一系列SDRAM命令完成,每次启动刷新操作前需进行预充电,预充电后执行两个自动刷新命令,至此完成一次刷新操作。在Verilog程序设计时文本采用图5所示的状态机来实现自动刷新。
(3)读写控制逻辑
SDRAM采用行列地址采用复用技术,减少了地址总线的密度。SDRAM对于存储器单元的访问是基于页面的,而外部地址线总线是独立的,与SDRAM的地址线不能直接相连。因此需要SDRAM控制器提供一种地址映射,在外部地址和内部地址线之间建立对应的关系。[5]状态图如图6所示。
4 LCD显示模块
4.1 LCD控制信号
采集到的图像信号经过缓存将显示在LCD显示屏上。液晶显示的控制和驱动主要是通过液晶显示所需控制信号实现,控制信号设计主要是指行同步信号HSYNC、场同步信号VSYNC的设计,显示数据在控制信号的作用下输出至显示端口。
图7即为显示数据时序和控制信号的关系,HSYNC的每个周期由行同步低电平、行消隐前肩、行消隐后肩、行有效显示四个部分组成。其中行有效显示部分必须和显示行像素部分精准对齐。同样的,VSYNC每个周期由帧同步低电平、帧消隐前肩、帧消隐后肩、帧有效显示四个部分组成,帧有效显示部分要和显示的帧像素数据精准对齐。[6]
4.2 FIFO和显示驱动模块
时钟和图像数据显示的控制信号由摄像头提供,显示模块获取由采集模块提供的时钟和行、场同步信号,需要经过构建FIFO来实现显示和采集的同步。FIFO的写使能与采集模块的行同步信号相连,当行同步信号有效时开始写FIFO,当FIFO中存入数据时,空标志位为低电平,此时可以读取图像数据,FPGA控制SDRAM从FIFO中读取图像数据。LCD与SDRAM间也需要构建FIFO,显示模块读取SDRAM中的图像数据至FIFO然后送至LCD显示。QVGA液晶显示屏的分辨率可以达到320×240,它的驱动可以由SF-LCD模块完成。[7]
5 结束语
本文研究了利用FPGA和CMOS完成图像数据的获取、存储和显示,利用FPGA作为图像采集系统的控制核心,提升了数据传输和处理速度的同时,大大降低了成本。
参考文献
[1]熊文彬,蒋泉,曲建军,等.基于FPGA实现的视频显示系统[J].液晶与显示,2011,26(1):92-95.
[2]夏宇闻.Verilog数字系统设计教程[M].2版.北京:北京航空航天大学出版社,2005.
[3]Philips Inc,The I2C Bus Specification(Version 1.0)[Z].2003.
[4]邓学禹.基于FPGA的高速高阶流水线工作FFT设计[J].电讯技术,2005,45(4):124-128.
[5]王诚,吴继华,范丽珍,等.Altera FPGA/CPLD设计[M].北京:人民邮电出版社,2005.
[6]徐杰,杨虹,郭树旭,等.TFT-LCD周边驱动电路集成化设计[J].液晶与显示,2004,19(1):42-47.
FPGA模块化设计 篇6
关键词:FPGA,CameraLink
在靶场光学测量设备中, 其数字图像信号处理主要是由相机与图像传输显示系统组成, 相机作为其核心部件, 需要高帧频, 高精度, 能够实时输出数字图像。一般采用Camera Link接口的相机在实际应用中, 由于整个系统均处于恶劣的自然环境中, 经常转场运输颠簸, 会导致整个系统的损坏, 在实际使用时, 无法甄别是相机问题还是传输显示系统原因造成的, 由于相机昂贵, 无法备份, 常需要一套简单的设备来判断相机是否损坏。本文设计了一种以FPGA为核心, 对数字图像进行采集, 并转换成VGA格式的数据, 可方便的实时显示, 用于判断相机是否出现问题。当整个测量系统出现问题时, 接入设计的模块后, 能够显示出正常图像, 表示相机没有问题;不能够显示正常图像时, 则代表相机出现问题。
1 系统整体介绍
整个模块系统组成包括:Camera link接口Camera link解码电路, 电源, FPGA芯片 (EP1C12Q24017) 及其配置芯片 (EPCS4) , 晶振, 编码电路, 显示电路等。其中FPGA主要是实现以下三个功能: (1) 采集传感器生成的图像, 并进行相应的格式转换; (2) 对图像数据进行缓存; (3) 将图像数据进行处理, 并进行实时显示控制, 如图1所示。
2 系统各模块介绍
2.1 Camera Link接口简介及其联接方式
Camera Link协议是高速数字相机的串口数据和连接标准, 用于连接数字相机与数字采集卡, 此协议主要规范了相机控制信号与视频信号的传输, 使用低压差分信号传输。在Camera Link协议中, 共有26根线, 其中有4条地线, 4对用于并行传输相机控制的差分信号线, 2对用于相机与采集卡之间串行通信的差分信号线, 5对差分信号线用于传输视频数据信号, 由28位数据信号和1个时钟信号按7比1的比例转行成而成。4位视频控制信号和24位图像数据信号构成视频数据信号。4种控制信号分别为FVAL, LVAL, DVAL, CLOCK。FVAL:帧同步信号, 当为高时, 表示相机输出一帧有效;LVAL:行同步信号, 为高时, 表示相机输出的行数据有效;DVAL:数据有效信号, 用于判断信号可用性;CLOCK:像素时钟信号, 时钟信号一直处于有效的状态。
CC1, CC2, CC3, CC4这4对LVDS线缆可以实现对相机的控制。CC1是外部同步信号, 下降沿到来时, 读取数据;当CC2为低电平时, 像素重置;当CC3为高电平时有效, 低电平翻转, CC4为保留信号, 没有定义。
相机与图像采集卡之间的异步串行通信用2对LVDS线缆实现。这两个串行信号分别是Ser TFG, Ser TC;Ser TFG:相机串行输出端至图像采集卡串行输入端, Ser TC:图像采集卡串行输出端至相机串行输出端。由1位起始位、8位数据位、1位停止位构成通信格式。
Cameralink解码电路将相机输出的LVDS电平标准串行信号转换为FPGA可以识别的TTL信号, 编码电路将FPGA输出的并行信号转换为VGA图像。RS422接口主要接收相机上的其他控制信号, 比如相机焦距的调整, 曝光量的选择, 镜头盖开启的信号等。通过电平转换芯片转换成FPGA可识别的差分信号。
camera link数字图像通过NI半导体公司的ds90cr285完成TTL电平到LVDS电平的转换, 利用DS90LV047以及DS90LV048完成对相机控制信号的转换, 利用DS90LV019完成对相机外触发信号的电平转换。
2.2 配置电路
配置电路又称加载或下载, 是对FPGA的内容进行编程的一个过程。FPGA共提供了6中配置模式, 由模式选择引脚MSEL决定。本文使用JTAG模式, 通过IEEE的标准1194.1引脚实现配置。JATG接口是一个工业界的标准接口, 主要用于芯片测试等功能。JATG配置方式比其他任何一种配置方式的优先级都高。在JATG下载模式下, 采用主动串行模式其配置芯片为EPCS4, EPCS4具有系统可编程 (ISP) 、Flash存储访问接口、节省空间的小外形集成电路封装等特点, 是一种低成本, 大容量, 灵活性很强的带电可擦可编程存储器。
2.3 时钟电路
电路板中提供频率基准的元器件可分为有源晶振和无源晶振两类, 无源晶振内部需要振荡器, 起振电路决定晶振的信号电压, 但无源晶振通常信号质量和精度精度较差, 同时需要精确配备电阻、电感或者电容, 如需更换晶振同时要更换外围电阻或者电容的大小;有源晶振不需要芯片内部有震荡器, 信号质量也较无源晶振好。本系统采用的是40MHz的有源晶振作为FPGA芯片的时钟输入。
2.4 显示电路
显示电路主要用于输出VGA显示器所需要的RGB数据信号和控制信号, 根据输入时钟, 显示控制器可以产生VGA所需要的控制信号, 包括场同步、行同步和复合消隐信号等。
FPGA输出8个信号, 其中行同步HS和场同步VS送入VGA接口, 剩余信号介入转换芯片。其余6个信号分别为:VGA R[0.9], VGA G[0.9], VGA B[0.9], VGA CLOCK, VGA BLANK, VGA SYNC.其中VGA CLOCK为时钟信号, VGA BLANK为复合消隐控制信号, VGA SYNC.为复合同步信号。R、G、B是三基色信号。产生图像程序的主要过程是:系统时钟经过分频后得到VGA的时钟信号, 根据行计数和场计数产生相应的RGB颜色信息和同步信号 (行同步和场同步) 。
3 软件设计及仿真
软件功能主要是在FPGA内部实现对多路数据进行统一编码及解码, 由于通道中传输的信号种类较多, 各种数据流的所占带宽不同、实时性要求也不一样, 因此在FPGA内部引入了时分复用, 利用不同的时间片传输不同额数据流, 如图2。
FIFO:先入先出对垒, 是一种按序执行的方法, 先进入的指令先完成退出, 之后才执行第二条指令。当处理器在某段时间内无法完成程序时, 指令就会被安排在FIFO队列中。基于FIFO的队列结构, 可能会出现FIFO数据溢出的情况, 当FIFO中满时会出现上溢, 当FIFO出现空时, 有时就会出现下溢。
考虑相机输出时钟有可能受传输Camera Link输出线路或者供电等其他因素的影响, 致使像素时钟相位发生不同程度变化, 因此系统中采用双端口ram对图像进行缓冲, 为了使得图像延迟最小以及尽可能复原图像原始时序关系, 设计如下时序。根据图像输出场信号, 产生双端口ram的读写使能信号, 读写时钟和读写地址信号主要信号关系见图3。
从图3可知, 根据图像输出的FRAME信号, 产生双端口ram的读写使能信号, 即Rd_en和We_en信号, 时序中通过控制T1和T2两个时间参数达到调整读写缓冲时序的目的。
根据上述原理, 该模块经过Moderlsim仿真后的结果如图4所示, 其中wren为写使能时钟, data为输入数据流, wraddress为写入地址, rdaddress为读出地址, wrclock为写入时钟, rdclock为读出时钟, rden为读使能信号, q为输出数据流, 图4中可以看到看到图像数据memory缓存形成五行数据memory0、memory1、memory2、memory3、memory4, 在读写地址信号和时钟共同作用下发生的变化。
4 结束语
经过仿真实验表明, 该硬件模块设计能够实现对Camera Link图像的采集与显示。模块编程灵活, 体积小, 重量轻, 价格便宜, 能方便的用于判断相机是否出现问题。在数字图像的高速处理方面以FPGA为核心, 能够完成对高速数据流的采集与缓存, 充分发挥了FPGA功耗低, 开发周期短, 处理高速信号的优势。在诊断相机是否出现问题方面, 具有很强的实际应用价值。
参考文献
[1]Camera Link Specification V1.1.January 2004:5-10.
[2]任文平, 梁竹关, 李鹏等.EDA技术与FPGA工程实例开发[M].北京:机械工业出版社, 2013-09-01.
FPGA模块化设计 篇7
在应用FPGA开发数字信号处理(DSP)系统时,往往存在这样一种情况,了解DSP算法的人不知道如何将其映射到FPGA语言、熟悉FPGA语言的工程师则不能深入了解DSP算法本身,这样随着工程师的离开,其设计的模块通常需要重新设计和开发。另外,利用FPGA开发DSP对工程师本身的要求也相当高,只有深入了解了FPGA的开发环境、各种芯片的内部资源、DSP算法的特点等才有可能利用VHDL或Verilog语言进行熟练编程,而且通常开发出来的模块可移植性、通用性和设计效率等都需要经过反复测试才能满足要求。
Xilinx公司提供了System Generator是一种嵌入Matlab语言开发工具,该工具为我们利用FPGA开发DSP模块提供了捷径,它提供了各种基本的小模块用于构建一个大系统,这些基本的小模块可以自动转化成所需的VHDL或Verilog语言。这样对于DSP系统的设计而言,事实就是一些基本模块(加、乘、减)的重构,不同的重构方式就可以得到不同的DSP算法,而且这样设计的系统可以直接利用Matlab进行仿真和调试,而不需要像VHDL或Verilog语言开发时利用第三方的仿真工具进行仿真和调试。Matlab仿真和调试的优点在于精度高、数据输入输出格式便于调整、参数调整灵活、设计修改方便、时序设计简单。下面利用该软件对数字脉压的过程进行设计和开发。
1 系统实现的功能
设计一个通用的数字脉压处理模块,模块采用频域脉压实现,实现如下功能:
①脉压的点数可以实时调整。
②脉压数据长度可以实时调整。
③模块综合的频率≥60MHz。
2 系统实现方案
脉压的实现方式有两种:一是时域方式;二是频域方式。时域处理与频域处理虽然等同,但从硬件实现的角度两者是有差别的,一般时域处理采用FIR结构进行,而频域采用FFT结构进行。
时域脉压处理时,脉压的点数N,距离门数为M时,脉压输出点数为N+M-1点,然而各脉冲的数据是连续进入的,这样脉压的输出过程中中间有一段是数据是两个相邻脉冲重叠计算部分,这些重叠数据后续计算过程中是不能用的,即真正有效的数据为M-N+1,所以用于控制有效数据的时序很复杂。不同的系统,具有不同的脉压点数和数据长度,某些系统中存在多种脉压点数的情况,这就会给具体的系统实现带来麻烦。所以为了达到通用的目的,采用频域脉压,同时为了降低输出时序控制的复杂性,距离门数统一补零变换成2N个距离门的数据,这样输出时序控制就简化了很多。
通过上述的系统分析,设计的脉压方案如图1所示。
3 系统功能实现
根据图1的系统框图,利用XilinX System Gene-rator来具体实现各项的功能,得到如图2所示的FPGA硬件原理图。另外,图3是图2中的“Mult”模块详细原理图,图4是图2中“Control”原理图的一部分时序。
针对图2的说明如下:
①图2中的“Control”模块作用是时序的产生及控制,用于实现数据缓存、脉压点数控制、脉压后数据输出时序控制,图3是本模块中的一个子模块,目的是实现系统的一个全局时序,具体标注见图。
②图2中的“Mult”模块详细原理图为图4,“Add”模块是地址产生模块,用于产生读脉压系数及均衡系数的地址;“coef1”是脉压系数ROM库,用于存贮脉压系数的频域值,是512点FFT后的结果,位数12位;“coef2”是均衡系数RAM库,用来存贮TS201计算得到的均衡系数,均衡系数一般为64点或32点,这里存贮的是系数的FFT后的数据,长度也是512点,位数12位;“Mult1”模块用来实现频域数据、脉压系数和均衡系数的复数乘积(对应数据的点乘)。
③图2中的“FFT”和“IFFT”模块结构完全相同(就差一个控制信号),直接采用系统提供的FFT模块,模块的参数是以4为基的数据流I/O格式(Radix-4 Streaming I/O)的512点FFT,相位因子的精度为16位,需要注意的是FFT输入数据必须为-1~1之间的数,且“FFT”模块如果数据输入为16位,输出则为23位,如果输入为24位,则输出为31位,另外系统提供的一个BRAM空间为18Kbit。
④脉压前的数据位数是14A/D采样的结果,可以通过数据接口将其转化成浮点数,也可以在“FFT”模块中转化为16数(注意:转化过程采用移位法,而不能用除法),这里采用移位方式转化。这样“FFT”模块的输入数据为14位有符号的整点数,则“FFT”模块输出数据的精度为23位有符号小数,“coef1”和“coef2”模块输出为[-1,1]之间的12位小数,“Mult”的输出数据截取精度为24位有符号小数,则“IFFT”模块的输出数据为31位有符号小数;
⑤脉压的精度问题,由于脉压和均衡的过程均可以看成是相干积累过程,所以根据相干积累过程的位数扩展公式为
N1=log2[N/N0.5] (1)
式中N为相干积累的点数,N1为需要扩展的位数。由系统要求可知,脉压的点数小于128,而均衡的点数不超过64,所以脉压过程位数扩展为
N1=log2[128/1280.5]=3.5 (2)
另外,由于A/D采样过程中有效位是14位,如只考虑脉压时,脉压输出有效位数应为18位;如果再考虑均衡,则输出的有效位数21已经足够了,在系统中统一取了18位,主要是考虑到后续处理过程的乘法运算(系统提供的乘法器是18×18位)。
4 系统实验分析
本节对上节中设计的频域脉压FPGA模块进行仿真实验。对于FPGA模块:脉压前数据输入精度为16整点数(14位有效位),脉压后数据输出为18位浮点数,FPGA测试时没有计算均衡。
①数字脉压的FPGA数据测试
实验中“FFT”模块输入精度为16位,脉压系数为12位,“IFFT”模块输入精度为24位。
图5是采用图2进行实际测试的一个结果,脉压点数为40,图5和图6为脉压后的值与理论值的比,实验值为系统的输出数据,理论值为采用Matlab对原始数据进行脉压后的值。
②数字脉压的FPGA资源及性能测试
表1中列出了图2所示的FPGA脉压模块的资源评估情况,参数如下:“FFT”模块输入精度为16位,脉压系数为12位,“IFFT”模块输入精度分别为24位。表2中是采用Xilinx ISE6.2综合的结果,表中的芯片见XilinX手册。
从仿真实验中可以看出,采用图2所示的频域FPGA结构实现的脉压系统测试精度与理论值相当接近,速度也完全可以达到指标,从表中可知“FFT”和“IFFT”模块虽然结构相同,但由于输入数据精度不同导致两个模块占用的资源不同,“Mult”模块中虽然没有对均衡系数进行相乘,仍然用了8个嵌入式乘法器,原因在于系统提供的乘法器是18×18位,所以当数据位数大于18时,它需要多占用一个乘法器,这正是我们将脉压后输出精度定在18位的原因所在。但需要说明的是如果芯片资源允许,中间过程的精度应选高一些,后续应用中“IFFT”模块的输入精度选用24位。从最后一个实验可以看出采用DSP处理的结果较FPGA的精度要高,但运行的效率要低很多。
5 结束语
通过以上的描述,可以知道采用Xilinx公司提供了System Generator可以很方便设计所需的通用DSP处理模块,该设计方法简单、有效,而且设计方案的更改、测试、调整相当方便,避免了设计过程中的复杂的时序测试和调整过程,降低了系统开发和改进的工作量,更重要的是提高了系统工作的可靠性。
参考文献
[1]XilinX System Generator.XilinX.软件使用说明[Z].2004.
[2]刘凌,胡永生.数字信号处理的FPGA实现[M].北京:清华大学出版社,2003.
【FPGA模块化设计】推荐阅读:
FPGA控制模块05-17
模块化设计05-26
模块化设计方法06-23
城市景观模块化设计06-28
单元模块设计09-20
教学结构模块设计11-10
基于模块化设计的嵌入式软件测试方法07-17
网络教学系统模块设计07-24
教学设计模块心得体会08-15
发动机模块教学设计10-20