基于FPGA的视频图像处理器的串行通信设计
扫描二维码
随时随地手机看文章
摘 要: 提出了一种在FPGA上实现视频图像处理器分系统与系统之间的数据串行通信设计方法,采用UART串行数据传输协议,传输波特率可设置调整,采用视频场同步信号作为发送器发送控制信号,实现视频图像处理的实时性要求。串口采用双口RAM实现与视频图像处理部分的异步通信。设计中大量采用参数化设计,使用灵活、通用性强,可实现FPGA与一般串口通信系统通信。设计程序下载到FPGA芯片中,通信数据完全正确,电路工作稳定、可靠。
关键词: FPGA;Verilog HDL;UART;双口RAM;视频图像
在视频图像处理系统中,诸如图像相减等操作,处理的数据量很大,对处理速度的要求很高,但算法结构相对简单,适合用FPGA进行硬件实现。由于FPGA的开发具有很强的灵活性,因此,可以利用FPGA的资源,在芯片上实现视频图像处理的串口通信功能,从而简化了电路,缩小了体积,提高了可靠性,并且在使用上有很大的灵活性。
1 总体概述
在FPGA上实现视频图像处理器分系统与系统之间的数据串行通信,采用UART串行数据传输协议,通信的传输波特率、FPGA系统时钟频率均采用参数化设计,可满足不同系统主频和传输波特率要求。分系统发送接收有帧头、帧尾,用来判断数据接收的正确性。数据格式为一个起始位低电平0,8个数据位数,一个停止位高电平1,一个数据串为10位。总体结构如图1所示。
为解决串口与视频图像部分的异步通信问题,采用了在FPGA上产生双口RAM实现串口与视频图像处理部分的对接。双口RAM就是存储数据共享的存储器,配备两套独立的地址、数据和控制线,允许两个独立的CPU或控制器同时异步地访问存储单元,特别适合异步处理器之间的异步高速通信。双口RAM的存储空间大小和数据地址位数均采用参数化设计,使得双口RAM的存储空间大小可根据实际应用需要进行调整,增加了串口使用的灵活性和通用性。
在视频图像处理中,为满足实时性要求,一次图像处理在一场图像时间中完成,故可用视频场同步信号作为串口发送器发送控制信号。PAL电视制式规定,场扫描频率为50Hz,一帧图像分为奇数场和偶数场。
2 结构功能设计
2.1 波特率发生器
波特率发生器如图2所示。
rst_n:系统复位信号
clk:系统时钟频率
clk_16x:输出波特率(传输波特率时钟频率的16倍)
串口在接收数据时,理想的采样点是在数据位的中间。为了对串行数据位进行精确采样,可对数据位时间进行分段,分段数越大,则采样点越靠近中间点,但同时也增加了系统的开销。在设计应用中,采用了16倍时间分段。
串口的接收和发送是按照相同的波特率进行的,波特率发生器产生的时钟频率不是波特率时钟频率,而是波特率时钟频率的16倍(即一个传输位的宽度为16个clk_16x时钟周期)。可以根据给定的系统时钟频率和要求的波特率算出波特率计数值。假设系统时钟频率为40MHz,要求的传输波特率为115 200b/s,则可产生Counter=(Clk_frequency/(2*16*Baud_rate))-1,即对clk计数到Counter时对clk_16x进行翻转一次。在程序设计中,采用参数化设计,可根据应用要求改变波特率大小。
parameter Clk_frequency=40000000,
//系统时钟频率40MHz
Baud_rate=115200,
//要求传输波特率值115 200b/s
Counter=(Clk_frequency/(2*16*Baud_rate))-1,Width=7;
//能够存储Counter值的二进制形式所需的位数
2.2 带双口RAM的发送器
带双口RAM的发送器模块如图3所示。
Data_out:串行输出
Vs: 发送控制信号(视频场同步信号)
Cs: 双口RAM的片选信号
Wren: 双口RAM的写使能信号
Addr: 双口RAM的地址线
Data: 双口RAM的数据线
串口发送器采用双口RAM与视频图像处理部分对接,视频图像处理部分将并行数据发送到双口RAM中,然后,在发送控制信号(视频场同步信号)的控制下,由串口发送器将双口RAM中的并行数据读出来,并转为串行数据发送出去。
为简化串口发送器对双口RAM的控制,采用了将双口RAM和发送器做到一个模块中的方式。因此,对发送器而言,双口RAM就相当于一个内部存储器,可以直接对其进行读写操作,而不需要额外的存储器控制端口和数据传输接口。
视频图像处理部分对双口RAM的发送数据过程与对一般的存储器操作过程类似,就是根据控制端口将数据写到双口RAM中。部分程序如下(程序中采用参数化设计,可以改变双口RAM的大小):
parameter width=5,//发送器双口RAM地址位数
number=30;//发送器双口RAM存储字节大小
input[width-1:0] Addr;//发送器双口RAM数据的地址
reg[7:0] memory[number-1:0];//发送器双口RAM
always @(posedge Wren)//对双口RAM写入并行数据,wren为上升沿有效
begin
if(Cs==1′b0)
begin
memory[Addr]<=Data;
end
end
发送器从发送控制信号(场同步信号)Vs到来开始,隔16个clk_16x周期输出1位数据,顺序为1位起始位,8位数据位和1位停止位,数据位为从低位到高位发送形式。发送器采用状态机风格进行描述,共分为5个状态:空闲状态S0、开始状态S1、等待状态S2、移位状态S3、停止状态S4。
在状态机转换过程中,需要一位寄存器变量来判断要发送的数据是否已发送完, 以确保一个场同步信号只对双口RAM中的number字节数据发送一遍。
系统一旦复位,发送器就进入S0状态,同时对一位宽寄存器型变量num置0。
空闲状态S0:在此状态完成初始化工作,即对所要用到的寄存器赋初值(包括双口RAM的数据读出地址addr_cnt清0),且将串行输出Data_out置为高电平。当Vs有效(场同步期间)且num==0成立时,进入S1状态。在Vs无效期间,将num置0,且继续在S0状态。
开始状态S1:给出起始位低电平0,即将Data_out置0,同时将当前addr_cnt地址的数据从双口RAM中读出并存入发送移位寄存器shift_reg,系统进入S2状态。
等待状态S2:在此状态,每次等待16个clk_16x,即:保证每位的宽度位16个clk_16x时钟周期,包括起始位等待在内,要等待9次,其中,数据位等待为8次。若等待次数在9次以内,则转入S3状态,否则,转入S4状态。
移位状态S3:将shift_reg[0]赋给Data_out,同时实现从高位到低位移位。进入S2状态。
停止状态S4:给出停止位高电平1,即将Data_out置为高电平,且计满16个clk_16x。然后,判断是否已将memory[number-1:0]中的number个字节的数据都输出,若没有,就转入S1状态继续输出,否则,就进入S0空闲状态,同时将num置1。
2.3 带双口RAM的接收器
带双口RAM的接收器模块如图4所示。
Data_in 串行输入
Cs_rd 双口RAM的片选信号
Rd 双口RAM的读使能信号
addr_rd 双口RAM的地址线
Data_rd 双口RAM的数据线
串口接收器采用双口RAM与视频图像处理部分对接,接收器将接收到的串行数据转换为并行数据并将其存储到双口RAM中。视频图像处理部分在进行数据处理时则可根据双口RAM的控制端口将并行数据读出并进行处理,其读出数据过程与在发送器中写数据过程类似。
在接收一个串行数据帧的起始位时,是由逻辑1转为逻辑0来判断的。为了避免毛刺(周期很短)的影响,能够得到正确的起始位信号,必须要求接收到的起始位至少有1/4都是属于逻辑0才可认定接收到的是起始位。因为波特率发生器产生的时钟频率为接收串行数据波特率的16倍,所以计数4次就可以去除毛刺的影响。
接收器采用状态机风格进行描述,共分为5个状态:开始状态S0、延迟状态S1、等待状态S2、移位状态S3、停止状态S4。
系统复位后,对所要用到的寄存器初始化,进入S0状态。
开始状态S0: 如果串口输入Data_in为0且维持4个clk_16x,就判断起始位信号(低电平)到来,进入S1状态。
延迟状态S1:计数4次clk_16x,再加上S0状态已经计数的4次,共8次。因为接收器采用的时钟clk_16x为波特率的16倍,所以一个串行位有16个clk_16x 时钟周期,则计数8次可以保证采样点在起始位电平的中间。进入S2状态。
等待状态S2:计数16次clk_16x,即:采样点在下一个串行位的中间。然后,判断是否已经移位了8次,若没有,则转入S3状态;否则,转入S4状态。
移位状态S3:将串行输入Data_in赋给内部移位寄存器的最高位shift_reg1[7],同时实现shift_reg1从高位向低位移位一次。进入S2状态。
停止状态S4:将shift_reg存到双口RAM中。判断是否已将需要接收的数据个数接收完,若没有,则在双口RAM中的存储地址自动累加,否则,双口RAM中的存储地址清0。进入S0状态。
3 仿真验证
在实验中,选用了Altera公司的Cyclone系列EP1C12024017芯片,采用Verilog HDL语言进行描述,用QuartusII5.1进行综合、仿真。仿真中,先进行各个模块的仿真,然后采用自发自收方式仿真,即将发送器的发送输出串口和接收器的接收输入串口直接连接,比较接收到的数据是否和发送的一样。仿真结果表明,串口的接收和发送工作完全正确。图5、图6给出了波特率发生器仿真波形和自发自收方式仿真波形。将程序下载到芯片中运行,通信数据完全正确,电路工作稳定、可靠。
本设计采用双口RAM实现串口与视频图像处理部分的异步通信。设计中大量采用参数化设计,双口RAM的存储空间大小、传输波特率和系统主频均可根据实际使用要求灵活调整;通用性强,只需将发送器的场同步发送控制信号改为所要求的发送控制信号,就可实现FPGA与一般串口通信系统通信。
参考文献
[1] 王诚,吴继华.Altera FPGA/CPLD设计.北京:人民邮电出版社,2005.
[2] 张兆扬.工业电视.北京:科学出版社,1982.
[3] 苏光大.微机图像处理系统.北京:清华大学出版社,2000.
[4] 贺前华.基于FPGA的视频转换系统的实现.微电子学与计算机,2003,(5).
[5] Henry Chang,Larry Cooke.Surviving the SOC Revolution-AGuide to Platform-Based Design.Kluwer Academic Publishers,1999.