首先,本书中的所有FPGA设计文件,都存放在配套资料的2_FPGA_Sim文件夹中,并与章节一一对应,FPGA设计文件目录,如图2.17所示。
其次,图2.18所示为本书约定的视频流时序格式。本书中所有采用Verilog设计的图像处理模块,都遵循此时序格式。其也是常用的并口视频的时序格式,除了像素时钟与复位外,由场同步信号、行同步信号,以及视频数据组成。
图2.17 FPGA设计文件目录
图2.18 本书约定的视频流时序格式
关于RGB转YCbCr的理论,以及算法的定点化计算,我们已经有了清晰的理论,也已经用MATLAB实现了RGB转YCbCr算法,并且已经准备好了源数据及MATLAB执行结果的对比数据。关于FPGA设计的代码实现,就简单多了。
本节在配套资料2_FPGA_Sim\2_VIP_RGB888_to_YCbCr444目录下,新建VIP_RGB888_YCbCr444.v文件,其输入、输出接口定义如下所示。其中per_*表示准备处理的数据流;post_*表示处理完的数据流。
由于RGB转YCbCr比较简单,因此我们直接用代码进行介绍,具体步骤如下。
(1)耗时1个clk,并行进行9个乘法的计算,如下。
在Verilog中直接写了乘法“*”,以Altera(Intel)/Xilinx(AMD)的IDE为例,会自动用数字信号处理器硬件单元替代。如果是国产FPGA,还在完善IDE,可能需要人为地进行乘法单元的替代。为了后续提升代码的可移植性,暂不指定某家FPGA的IP,而采用“*”实现。
(2)耗时1个clk,将乘法后的结果,进行加减法运算,如下。
(3)耗时1个clk,将数据缩小1/256,截取有效数据。这一步可以采用移位,但直接取高8bit相对更直接,也更节省资源,具体实现如下。
(4)由于(1)~(3)的计算,累计耗费了3个clk,因此我们要把vsync、href同步延时3拍,将时序重新对齐,具体实现如下。
整体流程和MATLAB处理流程类似,只不过FPGA每个clk可以并行地进行 Y 、Cb、Cr的计算,因此累计花3个clk计算就可以得到结果,从整体视频流上看约等于零延时,这就是FPGA进行并行流水线计算的优势。
完成RGB转YCbCr的FPGA设计后,需要对其功能进行仿真验证,以确保设计功能与预期的一致。为了进行仿真验证,需要搭建一个testbench仿真平台,用于提供仿真激励和对仿真结果进行校验。RGB转YCbCr算法的仿真框架,如图2.19所示。
图2.19 RGB转YCbCr算法的仿真框架
testbench中有两个任务,分别为image_input任务和image_result_check任务。其中,image_input任务从MATLAB仿真目录下的TXT文本中读取分辨率为640×480的图像数据并按照一定的时序产生视频激励;image_result_check任务从MATLAB仿真目录下的TXT文本中读取YCbCr图像数据,用于对ModelSim仿真结果进行对比校验,当发现MATLAB和ModelSim仿真结果不一致时,会将错误数据的图像行、列位置;ModelSim仿真结果和MATLAB仿真结果打印出来,可协助分析定位问题。完整的testbench内容详见配套资料.\2_FPGA_Sim\2_VIP_RGB888_to_YCbCr444\sim\testbench.sv文件。
设计编码和仿真编码完成后,借助仿真平台,对RGB转YCbCr的RTL设计进行仿真。首先,将ModelSim安装目录下的ModelSim.ini拷贝到.\2_FPGA_Sim目录下,并将ModelSim.ini的只读属性去掉,否则会报错,如图2.20和图2.21所示。
图2.20 拷贝ModelSim.ini到2_FPGA_Sim目录
图2.21 去掉ModelSim.ini的只读属性
再用编辑器(如notepad++)打开.\2_FPGA_Sim\2_VIP_RGB888_to_YCbCr444\sim\design_ver.f,添加需要进行仿真的Verilog设计文件,design_ver.f添加Verilog设计文件,如图2.22所示。
图2.22 design_ver.f添加Verilog设计文件
然后双击.\2_FPGA_Sim\2_VIP_RGB888_to_YCbCr444\sim\run.bat,开始执行仿真。如果仿真过程中出现错误,那么将出现类似于图2.23所示的ModelSim仿真打印信息。
图2.23 ModelSim仿真打印信息
最后双击.\2_FPGA_Sim\2_VIP_RGB888_to_YCbCr444\sim\read_wave.bat,打开仿真波形文件,添加相关信号,通过分析波形的时序及计算结果,可定位BUG的原因和对设计进行修改。RGB转YCbCr算法的ModelSim仿真结果,如图2.24所示。
图2.24 RGB转YCbCr算法的ModelSim仿真结果