跟着红外勘探技能的开展及其在军事、工业等范畴的广泛运用,红外图画处理算法获得了广泛研讨。在实践嵌入式红外图画处理体系中,为了便利硬件调试和调查图画处理的作用,需求在体系中参加图画显现模块。一般视频数据流需求处理的数据量大,实时性要求高,所以需求高速大容量的存储器作为图画数据的缓存。用于图画数据缓存的存储器有3种:①同步动态随机存取存储器SDRAM(Synchronous Dynamic RAM),其容量大、速度快、体积小、价格低,但SDRAM的操控逻辑比较复杂,对时序要求也十分严厉,需求规划专门的SDRAM操控器以完结与SDRAM芯片的接口;②双口RAM,它能够一起对数据进行读写,时序简略,操作十分便利,可是容量相对较小,并且价格高;③静态随机存取存储器SRAM(Static RAM),它不只容量大、速度快、体积小、价格低,并且时序操控简略,可是数据不能一起读写,工程中多选用2片SRAM做乒乓操作来简化读写操控。针对实践工程中的体积小、成本低、开发周期短等要求,本文提出一种依据单片SRAM和FPGA的图画处理及显现计划,并在实践工程中得到了使用。
本文的初始规划是面向帧频为50帧/s、16 bit灰度、图画为320×256像素的红外图画输出显现,但其规划计划能够使用于不同帧频、灰度级及图画巨细的图画显现。
1 体系硬件结构和作业原理
体系硬件结构图如图1所示。本体系中,高速串行LVDS视频信号经Camera Link接纳芯片DS90CR285接纳转化为并行TTL电平后送给FPGA,一起,其他体系的高速串行LVDS格局数据也能够直接送至FPGA。这些视频数据经FPGA进行直方图计算,并存储在SRAM中。然后,FPGA在存储空隙读出SRAM内的有用像素数据,并选用直方图计算的参数对图画灰度拉伸,然后送至视频转化芯片ADV7123进行D/A转化显现。
2 各功用模块规划
2.1 Camera Link接口
本计划选用DS90CR285将Camera Link格局的4对串行LVDS图画信号转化成28 bit并行TTL/CMOS的数据。依据Camera Link根本协议,28 bit数据信号中包括3个数据端口:A口(8 bit)、B口(8 bit)、C口(8 bit),和4个视频操控信号FVAL(帧有用)、DVAL(数据有用)、LVAL(行有用)、SPARE(空,暂时未用)。通过Camera Link芯片转化后的时钟信号是整个相机的同步驱动信号,一切的数据和视频操控信号都和该时钟信号同步。数据转化后送入FPGA的时序如图2。
2.2 FPGA中心功用模块完结
本规划中视频数据的处理都在FPGA内完结,其内部功用框图见图3。
本文首要评论在FPGA内,使用视频数据的行场扫描空隙对单片SRAM进行读写操作然后完结模仿图画的显现功用。直方图计算功用在另文中描绘。
本体系中,视频信号时钟为20 MHz,PAL制式信号数据时钟选用13.5 MHz。为了让SRAM读写时刻愈加富余,运用了两个FIFO模块作为数据缓冲:FIFO_IN、FIFO_OUT。FIFO_IN用来做SRAM的输入缓冲器,FIFO_OUT用来做SRAM的输出缓冲器。FIFO能够通过IP核来完结,存储宽度为16 bit,存储深度设置为1.5倍行像素,本体系为1.5×320=480[1-2]。
2.2.1 FIFO_IN模块
为确保数据读写功率,此模块的读写方法需进行合理规划,详细为每次往FIFO中写一行数据,写完后马上从FIFO读一行数据并写入SRAM。像素时钟为FIFO的写时钟,行有用信号作为FIFO的写使能,FIFO读时钟为100 MHz,也是SRAM的读写时钟,通过判断行下降沿来生成一个320的计数器,并在计数器有用期间将FIFO读使能置为高。FVAL的上升沿作为FIFO的复位信号。此FIFO的读写时序图见图4。
2.2.2 FIFO_OUT模块
此模块首要是缓冲灰度拉伸后的视频数据用于输出显现。本体系要求输出规范的PAL制式的模仿视频,PAL制式视频场频为50 Hz,帧频为25 Hz。本计划选用专用的图画DA芯片ADV7123, 该芯片是一款高速的RGB D/A转化芯片,内部集成有3路10位精度的D/A转化器,别离用于RGB数字信号的D/A转化,数据吞吐率可到达330 MS/s,合适高分辩五颜六色视频生成。ADV7123提供有3路数字输入接口(RE9:0]、G[9:0]、B[9:0])以及CRT消隐和同步操控信号(BLANK、SYNC)。规范PAL制式的行场消隐信号和行场同步信号都是规范信号,在FPGA内很简略完结,本文不再论说。实践使用中只需求在需求显现图画的正确行场方位,将图画灰度数据送入G[9:0]通道,即可在lOG端口得到复合视频信号。一起这些正确行场方位标志信号作为FIFO的输出使能,输出时钟为13.5 MHz,输入时钟为100 MHz,输入使能为灰度拉伸模块的输出数据有用信号,输入数据为灰度拉伸模块的输出数据。FVAL的上升沿作为FIFO的复位信号。
2.2.3 SRAM读写操控模块
SRAM作为视频数据的缓冲区,依据上述时序其容量最好能大于2帧数据,一起为了便于今后扩展,本计划中选用SRAM为CY7C1472BV33,容量为4 M×18 bit。因为SRAM归于单向存储器,使用单片SRAM作存储的难点在于如何将读写操控分隔。此操控包括2部分:读写使能和读写地址改换。下面别离从读和写来阐明这2部分操控的完结。
FIFO_IN的读使能作为SRAM的写使能,写地址在写使能有用期间从SRAM的零地址顺次递加,即地址规模为0~81 919(320×256-1)。但因为本体系中视频信号20 ms一帧,PAL制式视频显现一帧需求奇场20 ms、偶场20 ms,共40 ms,所以在偶场显现时仍是在读SRAM中0~81 919部分的数据,此刻视频信号有必要写入SRAM的别的一部分空间,这就要求在奇场和偶场时写地址要进行切换;或许选用在奇场时数据写入SRAM,偶场时不写入,这样刚好做到显现完一帧图画,下一帧图画数据就能够覆盖上一帧图画的数据,这样写地址就一直是从0~81 919,不需求切换。本计划选用后者,其写使能及写地址的FPGA首要代码如下:
//SRAM写使能
always @(posedge SRAM_CLK)
if (!rst_n | (sram_write_counter==319))
ui_sram_write = 0;
else if(LVAL_fallage)
ui_sram_write = 1;//SRAM写地址切换
always @(posedge SRAM_CLK)
if (!rst_n | Hsync_odd_riseage)
ui_sram_write_add = 0;//开始地址
else if (ui_sram_write)
ui_sram_write_add = ui_sram_write_add + 1;
SRAM的写使能规划要避免与SRAM的读使能抵触。本计划在FIFO_OUT模块上规划了一个可编程空标志位program_empty,当fifo数据缺乏160个时,program_empty置高,PAL制式视频的行扫描周期为64μs,也便是FIFO_OUT每64 μs被读一次(一次读出320个数),这样只要在64 μs时刻内能够写入320个数就能够确保下次行扫描能够从FIFO_OUT取出数据。因为本体系中SRAM的写使能周期为16.5 μs,因而本计划是将SRAM读状况分2种状况,在FVAL信号有用期间,选用program_empty置高和SRAM的写使能下降沿的“与”操作作为SRAM读触发信号;在FVAL信号无效期间,SRAM无写操控,program_empty信号的上升沿将作为SRAM的读触发信号。然后依据读触发信号生成一个320的计数器,并在计数器有用期间将SRAM的读使能置为高。这样就能确保SRAM的读写不抵触,且数据也不会漏写,操控时序见图5。
PAL制式视频显现分为奇场和偶场,因而在奇场时,SRAM的读地址应该满意:第n行地址规模为320×(n-1)~319+320×(n-1)(n=1,2……128);偶场时,RAM的读地址应该满意:第n行地址规模320×n~319+320×n(n=1,2……128),其读使能及读地址的FPGA首要代码如下:
//////// sram的读标志位有2种状况:(1)奇场数据有用时////用写sram的下降沿‘与’fifo半行标志位。(2)奇场数据无效时用 fifo半行标志位发生上升沿
always @(posedge SRAM_CLK)
if (!rst_n)
ui_sram_read_flag = 0;
else begin
if ((FVAL_d | ui_sram_write_5d) Hsync_odd )
ui_sram_read_flag = ui_sram_write_fallage
fifo_sram_adv7123_prom_empty_d;
else
ui_sram_read_flag=fifo_sram_adv7123_prom_empty_riseage;
end
//// SRAM读地址切换
always @(posedge SRAM_CLK)
if (!rst_n | Hsync_odd_riseage)
ui_sram_read_add = 0;//奇场开始地址
else if (Hsync_odd_fallage)
ui_sram_read_add = 320;//偶场开始地址
else if (ui_sram_read_fallage)
ui_sram_read_add = ui_sram_read_add+320;
else if (ui_sram_read)
ui_sram_read_add = ui_sram_read_add+1;
最终通过下面的赋值给出了SRAM芯片的读写、片选及地址信号:
assign SRAM_read_write_en=~(ui_sram_write Hsync_odd);
//SRAM读写使能
assign SRAM_CE=~(ui_sram_read | ui_sram_write);
//SSRAM片选
assign SRAM_ADD=(ui_sram_write)?ui_sram_write_add:
ui_sram_read_add;//SSRAM地址
2.2.4 灰度拉伸
将SRAM的读使能和读数据送入灰度拉伸模块作为数据使能和输入数据。本计划中,图画灰度线性拉伸算法表达式为:
式(1)中:Y是拉伸后输出图画灰度值;X是SRAM中读出的数据,为原始图画16 bit二进制数灰度值;Xmin是输入图画数据直方图计算最小灰度值;Xmax是输入图画数据直方图计算最大灰度值。为确保精度,实践使用中将上述公式进行简略改换,能够记为:
Q值在上帧完毕前直方图计算模块现已得到,这样拉伸运算只需1次减法和乘法运算,得到积左移14 bit后,截取低10 bit就得到拉伸后的灰度值。需求留意的是,截取前要断定乘法是否溢出,假如溢出,成果置为最大灰度值210。本计划中首要通过调用乘法器IP核来完结乘法运算,不同硬件的乘法器推迟时刻不同,所以有必要要将输入数据使能信号作相应推迟后,成为输出使能与乘法器输出数据同步[3]。通过灰度拉伸后的图画数据送入FIFO_OUT模块用于图画显现,其间,灰度拉伸模块的输出使能及输出数据作为FIFO_OUT模块的输入使能和输入数据。
该图画处理计划以FPGA 作为中心操控芯片,选用单片SRAM完结了图画预处理、数据缓存、图画存储及显现的功用。跟着FPGA 功能的不断提高及其灵敏的可编程性,规划者能够进一步在FPGA内部完结各种其他的图画处理算法。这样,直接选用FPGA和单片SRAM的计划不光减小了PCB 尺度,降低了元件数量及PCB布线的难度,也降低了元件彼此连线带来的信号失真,然后增加了可靠性和稳定性。本计划已成功使用在本单位的图画收集和处理产品中。