kaiyun官方注册
您所在的位置: 首页> 可编程逻辑> 设计应用> 基于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网站原创,未经授权禁止转载。
Baidu
map