今天给大侠带来基于fpga的数字视频信号处理器设计,由于篇幅较长,分三篇。今天带来第三篇,下篇,程序测试与运行。话不多说,上货。
之前也有图像处理相关方面的文章,这里超链接几篇,给各位大侠作为参考。
《冈萨雷斯数字图像处理matlab版》中文版(第二版) 电子版
荐读:fpga设计经验之图像处理
基于fpga的实时图像边缘检测系统设计(下)
fpga设计中 verilog hdl实现基本的图像滤波处理仿真
导读
图像是用各种观测系统以不同形式和手段观测客观世界而获得的,可以直接或间接作用于人眼进而产生视知觉的实体。
随着电子技术和计算机技术的飞速发展,数字图像技术近年来得到极大的重视和长足的发展,并在科学研究、工业生产、医疗卫生、通信等方面得到广泛的应用。
视频信号由一系列连续的图像组成。对视频信号的处理已经成为数字图像处理领域中重要的一部分。例如机器人模式识别的过程就是一个视频信号处理的过程,电视制导导弹识别目标就是充分利用视频信号处理技术不断判断目标是否和预先设定目标图像一致。本篇将讲解如何用 fpga 技术实现基本的视频信号处理。本篇的例子可以作为各位大侠进行视频信号处理时的一个参考,也可以在这个基础上根据需要进行扩展。
第三篇内容摘要:本篇会介绍程序测试与运行,包括测试程序、测试结果以及总结等相关内容。
五、程序测试与运行
由于整个 fpga 程序包括 3 部分:处于 top 的主体程序,控制其他各个部分程序的运行;视频图像数据采集程序,从 saa7113 获得数字图像数据并保存到 sram 中;sram 读写程序实现对 sram 的数据读写。测试程序需要仿真数据的全部流程。
5.1 测试程序
测试程序代码如下:
`include “timescale.v”moduletst_saa7113(error,dsprst,xreset,saareset,ardy,ed_o,ed_oen_o,sram_1_ea,sram_2_ea,sram_1_o_ed,sram_2_o_ed); //内部寄存器 reg reset; reg clk;//50mhz 时钟 reg llck;//saa7113 的时钟 reg [7:0] vpo;//来自 saa7113 的图像数据 reg capture;//采集数据标志 reg toggle;//总线切换标志 reg [1:0] rst; //输入 input error; input dsprst,xreset,saareset; input ardy; input [7:0] ed_o; input ed_oen_o; input [18:0] sram_1_ea; input [7:0] sram_1_o_ed; input [18:0] sram_2_ea; input [7:0] sram_2_o_ed; //来自 dsp 的信号 reg ce3_; reg are_; reg awe_; reg [21:2] ea; reg [7:0] ed_i; //to sram reg [7:0] sram_1_in_ed; reg [7:0] sram_2_in_ed; //wires //from saa7113 wire sram_ce_; wire sram_oe_; wire sram_we_; wire [18:0] la; wire [7:0] ld; //from dsp wire ce_sram; wire we_sram; wire oe_sram; wire [7:0] ed_sram; wire [18:0] ea_sram; //连接各个子程序 lwbsaa7113 l_saa7113 ( .reset(reset), .clk(clk), .llck(llck), .vpo(vpo), .rst(rst), .capture(capture), .error(error), .sram_ce_(sram_ce_), .sram_oe_(sram_oe_), .sram_we_(sram_we_), .la(la), .ld(ld) ); lwbdecode l_decode ( .reset(reset), .ce3_(ce3_), .are_(are_), .awe_(awe_), .ea(ea), .ed_i(ed_i), .ed_o(ed_o), .ed_oen_o(ed_oen_o), .ardy(ardy), .ea_sram(ea_sram), .ed_sram(ed_sram), .ce_sram(ce_sram), .we_sram(we_sram), .oe_sram(oe_sram), .dsprst(dsprst), .xreset(xreset), .saareset(saareset) ); lwbbuschange l_buschange ( .ea_sram(ea_sram), .ed_sram(ed_sram), .ce_sram(ce_sram), .we_sram(we_sram), .oe_sram(oe_sram), .la(la), .ld(ld), .sram_ce_(sram_ce_), .sram_we_(sram_we_), .sram_oe_(sram_oe_), .sram_1_in_ed(sram_1_in_ed), .sram_2_in_ed(sram_2_in_ed), .toggle(toggle), .sram_1_ea(sram_1_ea), .sram_1_o_ed(sram_1_o_ed), .sram_2_ea(sram_2_ea), .sram_2_o_ed(sram_2_o_ed) ); //产生时钟信号 always #10 clk=~clk; always #20 llck = ~llck; initial begin $display(“
status : %t testbench of saa7113 started!
”,$time); //initial value clk = 0; #7; llck =0; //reset reset = 1; //dsp 初始化 are_ = 1; awe_ = 1; ce3_ = 1; //初始化 capture = 0; toggle = 1; #2; reset = 0; repeat(20) @(posedge clk); reset = 1‘b1; // negate reset //dsp 读取数据内容 sram_1_in_ed = 8’h1d; sram_2_in_ed = 8‘h2d; //dsp 地址总线 ea[21:16] = 6’b000000; ea[15:7] = 9‘b000000000; ea[6:2]= 5’b00001; #5; ce3_ = 0; are_ = 0; //saa7113 输出内容 capture = 1; #5; @(posedge llck) vpo = 8‘haa; @(posedge llck) vpo = 8’hbb; @(posedge llck) vpo = 8‘hcc; @(posedge llck) vpo = 8’hdd; @(posedge llck) vpo = 8‘hee; //场同步信号 //1 @(posedge llck) vpo = 8’hff;//begin @(posedge llck) vpo = 8‘h00; @(posedge llck) vpo = 8’h00; @(posedge llck) vpo = 8‘b00100000;//sav //2 @(posedge llck) vpo = 8’hff;//begin @(posedge llck) vpo = 8‘h00; @(posedge llck) vpo = 8’h00; @(posedge llck) vpo = 8‘b00100000; //数据开始 @(posedge llck) vpo = 8’hff;//begin @(posedge llck) vpo = 8‘h00; @(posedge llck) vpo = 8’h00; @(posedge llck) vpo = 8‘b00000000; //data @(posedge llck) vpo = 8’h01;//cb @(posedge llck) vpo = 8‘h02;//yb @(posedge llck) vpo = 8’h03;//cr @(posedge llck) vpo = 8‘h04;//yr--1 @(posedge llck) vpo = 8’h05;//cb @(posedge llck) vpo = 8‘h06;//yb @(posedge llck) vpo = 8’h07;//cr @(posedge llck) vpo = 8‘h08;//yr--2 @(posedge llck) vpo = 8’h09;//cb @(posedge llck) vpo = 8‘h0a;//yb @(posedge llck) vpo = 8’h0b;//cr @(posedge llck) vpo = 8‘h0c;//yr--3 @(posedge llck) vpo = 8’h0d;//cb @(posedge llck) vpo = 8‘h0e;//yb @(posedge llck) vpo = 8’h0f;//cr @(posedge llck) vpo = 8‘h10;//yr--4 @(posedge llck) vpo = 8’h11;//cb @(posedge llck) vpo = 8‘h12;//yb @(posedge llck) vpo = 8’h13;//cr @(posedge llck) vpo = 8‘h14;//yr--5 @(posedge llck) vpo = 8’h15;//cb @(posedge llck) vpo = 8‘h16;//yb @(posedge llck) vpo = 8’h17;//cr @(posedge llck) vpo = 8‘h18;//yr--6 @(posedge llck) vpo = 8’h19;//cb @(posedge llck) vpo = 8‘h1a;//yb @(posedge llck) vpo = 8’h1b;//cr @(posedge llck) vpo = 8‘h1c;//yr--7 @(posedge llck) vpo = 8’h1d;//cb @(posedge llck) vpo = 8‘h1e;//yb @(posedge llck) vpo = 8’h1f;//cr @(posedge llck) vpo = 8‘h20;//yr--8 @(posedge llck) vpo = 8’h21;//cb @(posedge llck) vpo = 8‘h22;//yb @(posedge llck) vpo = 8’h23;//cr @(posedge llck) vpo = 8‘h24;//yr--9 @(posedge llck) vpo = 8’h25;//cb @(posedge llck) vpo = 8‘h26;//yb @(posedge llck) vpo = 8’h27;//cr @(posedge llck) vpo = 8‘h28;//yr--10 @(posedge llck) vpo = 8’h29;//cb @(posedge llck) vpo = 8‘h3a;//yb @(posedge llck) vpo = 8’h3b;//cr @(posedge llck) vpo = 8‘h3c;//yr--11 //数据结束 @(posedge llck) vpo = 8’hff;//ff @(posedge llck) vpo = 8‘h00;//00 @(posedge llck) vpo = 8’h00;//00 @(posedge llck) vpo = 8‘b01110000;//end of field 1 #20; are_ = 1; capture = 0; #200; //开始切换 toggle = 0; #100; are_ = 0; //开始采集数据 capture = 1; //vertical blanking stage //1 @(posedge llck) vpo = 8’hff;//begin @(posedge llck) vpo = 8‘h00; @(posedge llck) vpo = 8’h00; @(posedge llck) vpo = 8‘b00100000;//sav //2 @(posedge llck) vpo = 8’hff;//begin @(posedge llck) vpo = 8‘h00; @(posedge llck) vpo = 8’h00; @(posedge llck) vpo = 8‘b00100000; //data start @(posedge llck) vpo = 8’hff;//begin @(posedge llck) vpo = 8‘h00; @(posedge llck) vpo = 8’h00; @(posedge llck) vpo = 8‘b00000000; //data @(posedge llck) vpo = 8’h01;//cb @(posedge llck) vpo = 8‘h02;//yb @(posedge llck) vpo = 8’h03;//cr @(posedge llck) vpo = 8‘h04;//yr--1 @(posedge llck) vpo = 8’h05;//cb @(posedge llck) vpo = 8‘h06;//yb @(posedge llck) vpo = 8’h07;//cr @(posedge llck) vpo = 8‘h08;//yr--2 @(posedge llck) vpo = 8’h09;//cb @(posedge llck) vpo = 8‘h0a;//yb @(posedge llck) vpo = 8’h0b;//cr @(posedge llck) vpo = 8‘h0c;//yr--3 @(posedge llck) vpo = 8’h0d;//cb @(posedge llck) vpo = 8‘h0e;//yb @(posedge llck) vpo = 8’h0f;//cr @(posedge llck) vpo = 8‘h10;//yr--4 @(posedge llck) vpo = 8’h11;//cb @(posedge llck) vpo = 8‘h12;//yb @(posedge llck) vpo = 8’h13;//cr @(posedge llck) vpo = 8‘h14;//yr--5 @(posedge llck) vpo = 8’h15;//cb @(posedge llck) vpo = 8‘h16;//yb @(posedge llck) vpo = 8’h17;//cr @(posedge llck) vpo = 8‘h18;//yr--6 @(posedge llck) vpo = 8’h19;//cb @(posedge llck) vpo = 8‘h1a;//yb @(posedge llck) vpo = 8’h1b;//cr @(posedge llck) vpo = 8‘h1c;//yr--7 @(posedge llck) vpo = 8’h1d;//cb @(posedge llck) vpo = 8‘h1e;//yb @(posedge llck) vpo = 8’h1f;//cr @(posedge llck) vpo = 8‘h20;//yr--8 @(posedge llck) vpo = 8’h21;//cb @(posedge llck) vpo = 8‘h22;//yb @(posedge llck) vpo = 8’h23;//cr @(posedge llck) vpo = 8‘h24;//yr--9 @(posedge llck) vpo = 8’h25;//cb @(posedge llck) vpo = 8‘h26;//yb @(posedge llck) vpo = 8’h27;//cr @(posedge llck) vpo = 8‘h28;//yr--10 @(posedge llck) vpo = 8’h29;//cb @(posedge llck) vpo = 8‘h3a;//yb @(posedge llck) vpo = 8’h3b;//cr @(posedge llck) vpo = 8‘h3c;//yr--11 //数据结束 @(posedge llck) vpo = 8’hff;//ff @(posedge llck) vpo = 8‘h00;//00 @(posedge llck) vpo = 8’h00;//00 @(posedge llck) vpo = 8‘b01110000;//end of field 1 #20; //结束数据采集 capture = 0; #200; //测试程序结束 $finish; endendmodule
5.2 测试结果开始的“aa bb cc dd ee ff”是无效数据,“ff 00 20”表示场同步信号。
经过 fpga 处理后获得有效图像数据并产生相应的地址信号,由于只进行灰度运算,只取亮度信息,因此获得数据为“04 08 0c”,同时产生地址信号“00 01 02”。
仿真结果表明整个视频信号处理程序完成了预先设定的设计目标。
七、总结
本篇首先介绍了视频信号的基本原理、组成等,然后讲解了进行视频信号处理的基本过程和框架。接下来结合实例讲解用 fpga 及其他芯片组成视频处理的电路设计和 fpga 的程序实现。最后用 modelsim 仿真和测试了程序。本篇为各位大侠提供了一种视频信号处理的设计方案,仅供参考。
如何提高5G通讯电源可靠性
解析c++语言的Qt内省机制
AMD成台积电第一大7nm客户 成功超越苹果和海思
荣耀20 Pro曝光没有采用全面屏或许会采用升降式摄像头设计
移动卫星服务为欧洲卫星通讯领域翻开新篇章
FPGA设计中 Verilog HDL实现基本的图像滤波处理仿真
华为与马来西亚 JF科技合作生产高性能测试接触器
九号机器人推出一款运用半自动无人驾驶功能的滑板车T60
轻语音交互技术助力构建智能家居微网小生态
关于高压Buck电路的PCB改进
iphone8什么时候上市?iphone8或存在缺陷?iphone8重新设计发布延期
四川油库反无人机主动防御系统解决库区空域安全防控薄弱问题
电荷放大器频率特性_电荷放大器的特点
红魔3S将搭载90Hz刷新率屏幕 并暗示将支持风冷散热
限制操作过电压的防范措施
技术方案丨5G教育平板/学习机定制化生产方案
物联网产业崛起恰逢其时 又一个万亿美金市场可期
电机控制电路实物接线图(接触器控制电机正反转电路/双重连锁可逆控制电路/电磁抱闸制动控制电路)
不倒翁无叶风扇设计
将超声波和AT89C2051单片机相结合实现倒车防撞报警系统的设计