0%

FPGA图像处理之硬件加速引擎与仿真验证平台介绍

本节主要介绍了FPGA图像处理的准备知识,包括什么是硬件加速引擎?如何用脚本的方式运行modelsim?

CPU体系结构简介

  • 冯诺依曼体系结构CPU,是一种将程序指令和数据合并在一起的存储器结构。该结构中程序指令和数据共用一条总线,通过时分复用的方式进行读写操作,结构相对简单,总线面积较小,但缺点是效率低,无法同时取程序指令和数据,成为执行的瓶颈。

    image-20241023202415398

  • 哈佛结构是一种将程序指令和数据分开的存储器结构。该结构由于程序指令和数据存储在两个独立的存储器,各自有独立的访问总线,因此提供了更大的存储器带宽,减轻了程序运行时访问内存的瓶颈。但相应的也需要独立的存储器,以及更大的总线面积。

    image-20241023202438046

  • 改进的哈佛结构,指令和数据还是一起存储在主存储器中,但CPU有额外的指令存储器和数据存储器。在主存储器带宽足够的前提下,使CPU可以同时取指令和数据

    image-20241023202940395


什么是硬件加速引擎

  • 如果将某些复杂耗时的计算,采用专用芯片实现,完成计算后,将结果返回给CPU,这样就实现了专用的加速引擎。

  • 硬件加速引擎也称为硬件加速器,其原理是采用专用的加速芯片/模块,替换CPU完成复杂耗时的大算力操作,其过程不需要或者仅少量需要CPU的参与

  • 典型的硬件加速引擎有GPU(图形运算单元)、DSP、ISP(图像信号处理器)、NPU(神经网络处理器)

    image-20241023203153070


FPGA软件仿真环境介绍

1.filelist常见写法

  • +define+<define_name>

    • 相当于在filelist.f中的每个文件都加入了`define define_name
  • +incdir+<dir_path>

    • filelist中每个文件中的include都会在dir_path路径下搜索
  • 库文件的搜索

    • 添加某个目录下的多个文件到库文件(告诉工具在指定的目录下搜索以 .v 为扩展名的 Verilog 文件)

      1
      -y /home/yuxiang/proj/sim_libs/unisims+libext+.v
    • 添加一个文件中的多个module到库文件

      1
      -v /home/yuxiang/proj/tsmc_lib/tsmc13.v

2.do脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#run.do文件中#代表注释

transcript file new_transcript_file.log ;# 设置新的 transcript 文件名

#退出当前仿真功能
quit -sim
#清除命令行显示信息
#.main clear

#vlib为创建库
vlib ./lib/
vlib ./lib/Sim_work/
#映射逻辑库名,将逻辑库名映射库路径
vmap sim_file ./lib/Sim_work/

#vlog -work代表编译到指定的库文件中
vlog -work sim_file -f ../filelist.f

#vsim为启动仿真
#-t 运行仿真的时间精度是ns
#-L 是链接库关键字
vsim -t ns -voptargs=+acc -L sim_file sim_file.tb_mealy

#用虚拟信号表示状态信息
virtual type {
{01 S1}
{02 S2}
{04 S3}
{08 S4}
{10 S5}
{20 S6}
} vir_new_signal

#add wave用来添加波形
#-divider用来分组
add wave -divider {tb_mealy_1}
add wave tb_mealy/*
add wave -divider {mealy}
#顶层/例化的名字/* 其中*号是通配符,匹配所有信号
add wave tb_mealy/mealy_inst/*
#创建一个vir_new_signal 类型的信号,也就是把Currt_st进行类型转换
virtual function {(vir_new_signal)tb_mealy/mealy_inst/Curr_st} new_state
add wave -color red tb_mealy/mealy_inst/new_state

run 1us
  • 仿真平台文件架构:

    image-20241024161137421 image-20241024161048062
  • run.do文件中要注意:因为run_do.bat中把路径切换至sim_log,所以在run.do中用到文件路径的地方,记得当前是在sim_log目录下的。

2.批量处理脚本

  • run_do.bat

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    @echo off
    title %cd%

    if exist sim_log (
    rem 删除所有子文件夹
    for /d %%d in (sim_log\*) do (
    rd /s /q "%%d"
    )

    rem 删除除了以.wlf和.do为后缀以外的文件
    for %%f in (sim_log\*) do (
    if /I not "%%~xf"==".wlf" if /I not "%%~xf"==".do" (
    del /q "%%f"
    )
    )
    ) else (
    rem 如果需要重新创建 sim_log 文件夹
    md sim_log
    )

    cd ./sim_log

    vsim -do ../run.do
  • read_wave.bat

    1
    2
    3
    4
    @echo off
    title %cd%
    cd ./sim_log
    vsim -view vsim2.wlf -do wave.do

Reference

  • 《基于MATLAB与FPGA的图像处理教程》图书及其配套资料
欢迎来到ssy的世界