《电子技术应用》
您所在的位置:首页 > 可编程逻辑 > 设计应用 > 基于FPGA的视频图像处理器的串行通信设计
基于FPGA的视频图像处理器的串行通信设计
郑 勇1,雷 霖1,刘先志2
摘要: 芯片及解决方案,站点首页,芯片,网络与通信,EDA及可编程,多媒体
Abstract:
Key words :

    摘  要: 提出了一种在FPGA上实现视频图像处理" title="视频图像处理">视频图像处理器分系统与系统之间的数据串行通信设计方法,采用UART串行数据传输协议,传输波特率可设置调整,采用视频场同步信号作为发送器" title="发送器">发送器发送控制信号,实现视频图像处理的实时性要求。串口" title="串口">串口采用双口" title="双口">双口RAM实现与视频图像处理部分的异步通信。设计中大量采用参数化设计,使用灵活、通用性强,可实现FPGA与一般串口通信系统通信。设计程序下载到FPGA芯片中,通信数据完全正确,电路工作稳定、可靠。 

    关键词: FPGA;Verilog HDL;UART;双口RAM;视频图像

 

    在视频图像处理系统中,诸如图像相减等操作,处理的数据量很大,对处理速度的要求很高,但算法结构相对简单,适合用FPGA进行硬件实现。由于FPGA的开发具有很强的灵活性,因此,可以利用FPGA的资源,在芯片上实现视频图像处理的串口通信功能,从而简化了电路,缩小了体积,提高了可靠性,并且在使用上有很大的灵活性。 

1 总体概述

    在FPGA上实现视频图像处理器分系统与系统之间的数据串行通信,采用UART串行数据传输协议,通信的传输波特率、FPGA系统时钟频率" title="时钟频率">时钟频率均采用参数化设计,可满足不同系统主频和传输波特率要求。分系统发送接收有帧头、帧尾,用来判断数据接收的正确性。数据格式为一个起始位低电平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-A Guide to Platform-Based Design.Kluwer Academic Publishers,1999. 

此内容为AET网站原创,未经授权禁止转载。