# zg_fpga **Repository Path**: i540113104/zg_fpga ## Basic Information - **Project Name**: zg_fpga - **Description**: git练习仓库 - **Primary Language**: Verilog - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-08-03 - **Last Updated**: 2024-06-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # readme ## Introduction 该仓库的制定了一个标准的仿真平台,实现了基于原始红外图像(**raw**)的rtl仿真和仿真结果的对比。 文件结构如下图所示: ![image-20240227105700153](assets/image-20240227105700153.png) 其中: **assets**-文档中的图片; **doc**-环境配置相关文档; **rtl**-待仿真模块; **sim**-testbench和Makefile脚本; **tools**-用于仿真数据处理的tcl脚本、Python脚本、batch脚本; ## how-to-use 该工具解决的问题是一键式建立一个图像处理算法的仿真环境。根据配置文件,自动将二进制格式的原始数据转换为testbench能够读入的文本数据,并将RTL算法处理结果写入文件,在仿真结束后,自动比对与上位机处理结果间的差异。如果完全一致,提示pass,不通过则fail,并将两者的差异存储到diff.log文件。 ### 环境设置 该工具使用Makefile脚本调用Python脚本实现相关功能。 在Windows系统下,需要配置make环境和Python环境。按照以下文档下载、安装相关软件,并添加到环境变量即可。 [python环境设置](doc/Python_enviroment_configuration) [make环境配置](doc/make_enviroment_configuration.md) 将以下代码保存到`pull_repo.bat`文件,双击执行即可从gitee上拉取工具。 ```batch @echo off setlocal :: 设置GitHub仓库的URL set "repo_url=http://192.168.100.181/guideir/hisp_fpga.git" :: 设置本地目录的名称,用于存储克隆的仓库 set "local_dir=.\\hisp_fpga" :: 使用git克隆仓库 git clone %repo_url% %local_dir% :: 检查克隆是否成功 if %errorlevel% equ 0 ( echo Repository cloned successfully to %local_dir% ) else ( echo Cloning failed. ) endlocal ``` ### step 该仿真平台以Makefile脚本为主要接口完成所有功能的执行, ![image-20240314093009538](assets/image-20240314093009538.png) 以`./sim/sub0-grad/image_cfg.json`为配置文件 ![code](assets/code.png) 详细说明:[关于json文件的说明](doc/关于json文件的说明.md) **首先需要修改makefile里的软件安装包路径。** 该平台的运行逻辑为: 1、以`*.raw`文件为源文件,存放在`sim/data`目录下。该文件可以是单帧图像,也可以是连续多帧图像(rtl仿真的话,只会截取中间某一帧); 2、修改配置项,配置测试平台。在`image_cfg.json`文件中修改tb对象,根据实际需要,修改像素时钟*pixel_clock*,帧频*frame_rate*,图像宽度*width*,图像高度*height*。然后执行`make init`指令,即可将上面的配置项自动写入到tb文件中,无需再修改tb文件; ![code2](assets/code2.png) 3、生成仿真数据。在`image_cfg.json`文件中修改*image*对象,该对象定义了格式为.raw的仿真源数据的相对路径和文件名字,定义*image_number*为连续帧图像中的第几帧,如果是单帧图像,该项配置为1;该路径下可以有多个raw文件,以文件名区分,执行`make gentxt`,将`sim/data/src.raw`文件转换为`output/modelsim_src.txt`; 4、调用Modelsim进行仿真。在`image_cfg.json`文件中修改*modelsim*对象,该对象定义了使用modelsim进行图像处理后的数据存储路径、名字和数据类型。执行`make sim`,进行仿真,以下模块将*dut*中指定的输出图像保存在`output/modelsim_post.result`文件中。 ![code2](assets/code3.png) 5、处理仿真数据。执行`make genraw`,根据`image_cfg.json`文件中修改*modelsim*对象指定的文件名字,将仿真后的`sim/output/modelsim_post.result`转换为`sim/output/modelsim_post.raw`格式文件,且存储的数据类型为16bit。该过程调用的脚本为`tools/simulation.tcl`,只识别`sim/output`目录下后缀为`.result`的文件,且不限文件个数和文件大小; 6、显示仿真后数据。执行`make show`,显示仿真后的图像; 7、比较原图像和仿真后图像。执行`make compare`,该过程调用的脚本为`tools/demo_compare.py`,需要强调的是,仿真的目的是为了验证RTL设计与算法设计之间是否一致,所以,在进行比较的时候,需要自行实现算法代码或者由算法同事提供上位机使用同一个源文件运行算法后的raw格式文件,数据应该完全对齐。 如下图: Modelsim仿真结果与算法仿真结果不一致时,输出`simulation failed!!!`,并将两者不同像素点的坐标值和差值输出到`sim/output/diff.log`文件中; ![image-20240227151052216](assets/image-20240227151052216.png) ![diff.log](assets/code4.png) Modelsim与算法仿真结果对齐时,可以认为RTL模块实现了算法功能,仿真通过。 ![image-20240227151722286](assets/image-20240227151722286.png) ## 其他须知 1、一般使用场景下,使用`init.bat`拉取整个库即可; 2、配置文件中*tb-tb_mode:simple*表示非图像算法仿真,tb.v文件较为简单; 4、工作流简单,但是脚本较多,有bug可提issue;