You are on page 1of 79

分类号:TP391

学 号:2019420063

专 业 学 位 硕 士 论 文

基于 UVM 的卷积神经网络加速器验证平台
设计与实现

Design and Implementation of Verification Platform


for Convolutional Neural Network Accelerator Based
on UVM

研 究 生 姓 名 :郁添林

指 导 教 师 :隋金雪 副教授

专 业 学 位 类 别 :工程硕士(0852)

专 业 学 位 领 域 :电子与通信工程(085208)

论 文 提 交 日 期 :2022 年 6 月 2 日

万方数据
万方数据
山东工商学院硕士学位论文

摘要

人工智能对数据处理的需求不断上升,通用的图形处理单元不能为特定任务发
挥最优的性能和功耗,而人工智能专用芯片,尤其是特定应用场景的加速器,由于
能提供并行性和定制运行流程,达到最佳能效,已成为当前移动终端产品主流的解
决方案。另一方面,由于设计规模的与日俱增和制造工艺节点的提升,人工智能加
速器芯片的功能日趋复杂,设计出错的可能性大大增加,芯片验证的准确性、完备
性和稳定性成为芯片研发的重点。卷积神经网络的硬件实现大多通过高级语言生成
寄存器转化级电路,该方法对可综合 RTL 的支持比较有限,在产品的迭代和工程复
用性等方面也带来很大的挑战,而本文以硬件描述语言为基础,研究并设计实现了
具备卷积神经网络前向运算功能的硬件加速器,完成 UVM 仿真和 FPGA 板级验证,
确保功能的正确性,也便于卷积神经网络的开发和应用,快速地部署到嵌入式平台。
本文结合硬件验证语言 SystemVerilog 和 UVM 验证方法学的优势,对通用验证
方法学的平台结构、核心机制和寄存器模型等多方面进行分析,并介绍了接口协议,
为制定验证测试用例的激励时序提供参考。研究并设计了一款物联网终端应用中的
卷积神经网络硬件加速器,并以此为验证对象,完成了仿真验证平台和原型验证平
台的搭建。在此之前,先介绍了这一类神经网络的特点,分析其前向传播的工作流
程,然后研究分析加速器模块数据流、卷积计算等功能,常用算法模型的卷积层参
数适配,以及各个模块寄存器的功能配置。
根据 UVM 验证方法学思想和设计规格,构建平台的通用验证组件,实现组件之
间通信,生成与待测试模块寄存器相对应的寄存器模型,完成了硬件加速器模块的
验证平台搭建。重点进行了测试用例的开发、寄存器模型的读写访问操作、参考模
型的实现和记分板的结果自动比对。通过大量的测试用例对加速器模块进行全面的
仿真验证和覆盖率收集,并对仿真验证平台的代码进行优化,进而缩短了仿真时间,
提高了验证平台的可重用性。
接着,进行了板级测试环境的搭建,以仿真验证平台测试用例产生的激励为基
础,用调试器将数据转换为 JTAG 协议灌入加速器模块运行,进而验证仿真平台的正
确性。在加速器多通道数据读取时,采用一种固定优先级轮询仲裁器,解决仲裁的
公平性问题,节省 FPGA 的资源和功耗。
仿真验证和板级测试结果表明,专用硬件加速器设计合理,验证正确,完成所

万方数据
摘要

有的功能点测试,代码覆盖率达到 100%,所有测试用例的计算结果比对正确,符合
设计预期,设计代码综合成门级电路,并进行优化,生成基于工艺库的网表文件。

关键词:通用验证方法学;卷积神经网络加速器;验证平台;板级测试;电路综合

II

万方数据
山东工商学院硕士学位论文

Abstract

The demand for data processing by AI (Artificial Intelligence) is rising. General graph-
ics processing units cannot exert optimal performance and power consumption for specific
tasks, while some specific chips, especially accelerators for specific application scenarios,
can provide parallelism and customized operation process, to achieve the best energy effi-
ciency, has become the mainstream solution for current mobile terminal products. On the
other hand, due to the increasing design scale and the improvement of manufacturing pro-
cess nodes, the functions of AI accelerator chips are becoming more and more complex, and
the possibility of design errors is greatly increased. The accuracy, completeness and stabil-
ity of chip verification have become the focus of the research and development of chips.
The hardware implementation of CNN (Convolutional Neural Network) mostly generates
register transfer level circuits through high-level synthesis language. However, this method
has the limitation on the support for synthesizable RTL, and also brings great challenges in
product iteration and engineering reusability. Based on the hardware description language
SystemVerilog, the CNN accelerator with the forward operation function is investigated,
designed and implemented. Both the UVM simulation and FPGA board-level verification
are provided to ensure the correctness of the function and facilitate the development and
application of the CNN, and rapid deployment to embedded platforms.

Combining the advantages of SystemVerilog and UVM verification methodology, this


paper analyzes the platform structure, core mechanism and register model of the general ver-
ification methodology, and introduces the interface protocol to provide reference for formu-
lating the excitation sequence of verification test cases. This paper investigates and designs
a CNN accelerator in the terminal application of the IoT (Internet of Things), and applies
this accelerator as the verification object to set up the simulation verification platform and
the prototype verification platform. This papaer also introduces the characteristics of CNN,
analyzes its forward propagation workflow, and then studies and analyzes the functions of
the accelerator module data flow, convolution calculation, etc., the parameter adaptation of
the convolution layer of the commonly used algorithm model, and function configuration of
each module register.

III

万方数据
ABSTRACT

According to the UVM verification methodology and design specifications, the gen-
eral verification components of the platform are constructed, the communication between
components is realized, the register model corresponding to the register of the module to
be tested is generated, and the verification platform of the hardware accelerator module is
builded. The development of test cases, the read and write access operations of the register
model, the realization of the reference model and the automatic comparison of the results
of the scoreboard are focused in the analysis. Through a large number of test cases, the ac-
celerator module is fully simulated and verified and the coverage is collected, and the code
of the simulation verification platform is optimized, thereby shortening the simulation time
and improving the reusability of the verification platform.

Moreover, the board-level test environment is set up. Based on the excitation generated
by the test cases of the simulation verification platform, the debugger is used to convert the
data into the JTAG protocol, and then pour all the data into the accelerator module to run,
which finally verify the correctness of the simulation platform. When the multi-channel
data of the accelerator is read, a fixed-priority polling arbiter is applied to solve the fairness
problem of the arbitration and save the resources and power consumption of the FPGA.

The simulation verification and board-level test results show that the design of the
proposed hardware accelerator is reasonable and the build verification platform is efficient
and correct. All function point tests are completed, and the code coverage rate reaches
100%. The calculation results of all test cases are compared which show correctness and
meet the design expectations. Design codes are synthesized to gate-level circuits, which are
optimized to generate a netlist file based on the process library.

Key Words: UVM; Convolutional Neural Network Accelerator;Verification platform;


Board level test; Circuit synthesis

IV

万方数据
山东工商学院硕士学位论文

目录

摘要 ............................................................................................................. I

Abstract ....................................................................................................... III

第1章 绪论 ........................................................................................... 1
1.1 课题的研究背景与意义 ............................................................................... 1

1.2 国内外研究现状 ........................................................................................... 2

1.2.1 卷积神经网络硬件加速器设计研究现状 ........................................ 2

1.2.2 芯片验证技术发展现状 .................................................................... 4

1.3 本文的主要研究内容 ................................................................................... 5

第2章 UVM 验证方法学 ..................................................................... 7


2.1 SystemVerilog 验证语言 ............................................................................... 7

2.2 通用验证方法学 ........................................................................................... 8

2.2.1 UVM 验证平台基本架构 .................................................................. 9

2.2.2 UVM 的核心机制 .............................................................................. 10

2.2.3 UVM 的寄存器模型 .......................................................................... 13

2.3 接口协议 ....................................................................................................... 15

2.3.1 APB 总线协议 .................................................................................... 15

2.3.2 Lint 协议 ............................................................................................. 16

2.3.3 JTAG 协议 .......................................................................................... 16

2.4 本章小结 ....................................................................................................... 17

第3章 卷积神经网络加速器的硬件结构设计 ................................... 18


3.1 卷积神经网络前向运算 ............................................................................... 18

3.2 硬件加速器整体结构设计 ........................................................................... 20

3.2.1 加速器数据流设计 ............................................................................ 20

万方数据
目录

3.2.2 卷积层并行运算分析 ........................................................................ 21

3.2.3 参数适配分析 .................................................................................... 22

3.3 加速器模块的寄存器配置 ........................................................................... 24

3.3.1 模块使能配置寄存器 ........................................................................ 24

3.3.2 卷积功能配置寄存器 ........................................................................ 24

3.3.3 激活及池化配置寄存器 .................................................................... 26

3.4 本章小结 ....................................................................................................... 27

第4章 UVM 仿真验证平台设计与实现 ............................................. 28


4.1 UVM 验证平台搭建 ..................................................................................... 28

4.1.1 仿真验证环境 .................................................................................... 28

4.1.2 验证平台的执行流程 ........................................................................ 29

4.2 UVM 验证平台实现 ..................................................................................... 30

4.2.1 验证 IP 的整体结构 ........................................................................... 30

4.2.2 接口的设计与实现 ............................................................................ 31

4.2.3 代理的封装 ........................................................................................ 32

4.2.4 序列器的激励产生 ............................................................................ 33

4.2.5 参考模型 ............................................................................................ 34

4.2.6 记分板 ................................................................................................ 35

4.2.7 寄存器模型 ........................................................................................ 36

4.3 测试用例设计 ............................................................................................... 38

4.4 功能仿真结果 ............................................................................................... 39

4.5 覆盖率分析 ................................................................................................... 42

4.6 验证仿真优化 ............................................................................................... 43

4.7 本章小结 ....................................................................................................... 45

第5章 卷积神经网络加速器板级测试与电路综合 ........................... 46


5.1 原型验证硬件平台资源 ............................................................................... 46

VI

万方数据
山东工商学院硕士学位论文

5.2 板级测试整体结构设计 ............................................................................... 47

5.2.1 单通道环境搭建 ................................................................................ 48

5.2.2 多通道环境搭建 ................................................................................ 49

5.2.3 测试步骤 ............................................................................................ 51

5.3 板级验证结果分析 ....................................................................................... 52

5.3.1 单通道验证结果 ................................................................................ 52

5.3.2 多通道验证结果 ................................................................................ 54

5.4 RTL 级综合优化与分析 ............................................................................... 56

5.5 本章小结 ....................................................................................................... 59

第6章 总结与展望 ............................................................................... 60


6.1 本文工作总结 ............................................................................................... 60

6.2 展望 ............................................................................................................... 61

参考文献 ..................................................................................................... 62

攻读学位期间发表论文与研究成果清单 ................................................. 68

致谢 ............................................................................................................. 69

VII

万方数据
山东工商学院硕士学位论文

第1章 绪论

1.1 课题的研究背景与意义

经过计算机硬件和数据存储技术的长足发展,深度学习在人机验证、智能安防、
数据风控模型等多个人工智能领域引发变革。人工智能 (Artificial Intelligence,AI) 早
已在棋类比赛中击败了人类,2020 年 12 月,DeepMind 提出了 MuZero,该算法结合
基于树的搜索与模型学习,在极具挑战性的复杂视觉领域展现出良好的性能,这种
人工智能模型掌握更多复杂的游戏,向着替代人类工作的目标前进。深度学习近十
年的发展奠定了未来的基础,部署到实际应用是人工智能技术的研究热点。深度学
习在应用中无处不在,包括目标检测、图像视频分类和自然语言处理,比如谷歌的
第四代张量处理单元 (Tensor Processing Unit,TPU) 达到了每秒 10 万万亿次的运算。
尽管深度学习算法已成功应用于许多实际产品中,此类算法快速、精准和低功耗的
硬件实现仍然是一项具有挑战性的任务,特别是对于物联网 (Internet of Things,IoT)
自动驾驶汽车和智能无人机等移动系统[1] 。

卷积神经网络 (Convolutional Neural Networks,CNN) 是深度学习结构中关键的


算法分支,传统的图像处理方式面临数据量过大和准确率不高等问题,而 CNN 能将
图像降维并有效的保留图片的特征,直至可以训练。典型的卷积网络利用卷积来模拟
特征区分,并通过权值共享以及局部连接,降低网络参数量级,完成分类等任务,实
质是处理现实世界中的数据差异[2] 。面对大量的数据集,需要高速低功率的 CNN 处
理,既要减少深度学习处理中的存储器访问时间以及乘法和累加运算所需的功率[3] ,
还要兼顾计算复杂度与算法模型的深度。为了解决以上这些问题,开发高效的 CNN
专用加速器,实现未来革命性 AI 芯片的前沿技术,并应用于下一代嵌入式人工智能
的处理场景具有重要意义。

随着集成电路先进制程工艺发展放缓,通用型处理器无法满足高性能计算复杂
度的算法变化和大内存的数据移动,图形处理单元 (Graphics Processing Unit,GPU)
的应用场景相对受制于设备体积和功耗,半定制电路的现场可编辑逻辑门阵列 (Field
Programmable Gate Array ,FPGA) 适用于多样化的场景[4] ,灵活应用特定集成电路可
以解决这些挑战,但量产成本过高。在相对低水平的能耗下,定制化的专用集成电
路 (Application Specific Integrated Circuit,ASIC) 对车载信息的数据处理速度提升更

万方数据
第 1 章 绪论

快,随着自动驾驶级别的提升,芯片定制化需求增加,ASIC 专用芯片才是最优选择。
因此设计一种支持高并行度和优化数据流的专用芯片加速模块至关重要,这样底层
硬件可重新配置以应对尽可能多模型的层次结构,从而进一步提高能效。专用加速
器芯片可以充分使用硬件资源,对特定的任务优化电路结构、数据流传输,推动人
工智能芯片理论研究的不断发展,满足相关行业的迫切需求。

产品化的芯片设计完成之后,至少需要经过功能仿真、板级测试和电路综合的
验证才能最终完成。在集成电路架构设计日趋复杂的情况下,芯片的验证工作已经
超过整个研发周期的一半以上,验证平台的完善和验证流程的优化能提高验证的效
率,而复杂 IP(Intellectual Property) 的完备性验证可以避免系统级的验证场景出现不
可预知的功能缺失或测试错误[5] 。

本文针对专用卷积神经网络加速器,结合 UVM(Universal Verification Methodol-


ogy) 验证方法学和 FPGA 技术,设计了卷积神经网络硬件加速器的验证方案,证实
其逻辑的正确性。

目前一些公司和研究团队已经开展了卷积神经网络专用处理器研究工作,并运
用到实际的工业产品中。然而目前采用的验证方式都不够灵活,面对卷积神经网络日
益多样化的需求,底层架构设计变动后,为了缩短 ASIC 的开发周期,对 RTL(Register-
Transfer Level) 代码的功能型验证与板级验证以及功耗、时序、面积等测试分析的流
程应做到尽可能少的修改[6] 。因此,研究卷积神经网络硬件加速器的验证对人工智能
产品的落地具有重要意义。

1.2 国内外研究现状

1.2.1 卷积神经网络硬件加速器设计研究现状

目前实现 AI 计算的芯片主要分为现场可编程逻辑门阵列 FPGA、通用型处理器


GPU 以及专用集成电路 ASIC 三个类别。

GPU 拥有庞大的并行计算能力和完善的生态系统,尤其是在云端智能应用方面
处于首要地位,粗粒度并行的图形处理计算表现为高密度的计算,而且计算所需的
数据之间基本不存在相对的关联性,GPU 能提供至上千个计算单元和充足的高速内
存,但是 GPU 有个明显的缺陷,它会屏蔽底层接口,降低了数据的迁移和运算效率,
导致能耗较高[7] ;FPGA 的半定制化使其在通用性和性能之间取得平衡,不依赖于指

万方数据
山东工商学院硕士学位论文

令和软件,能用硬件描述语言直接编译成晶体管的逻辑组合,但是在实际设计中,采
用 FPGA 综合后会存在部分冗余晶体管和连线,运行频率低以及开发门槛和量产成
本较高,这都限制了其应用[8] ;虽然 ASIC 现在不是很成熟且单次光刻掩膜成本高,
但随着软件、算法的成熟稳定,实现大规模量产,单颗的造价远低于 GPU 和 FPGA,
其性能和能效比是最优的,针对独特的应用场合进行设计以满足需求,ASIC 的计算
能力和效率也可以根据算法需要进行定制。目前很多公司和研究机构都在推进 ASIC
计算芯片的研发,有产业化的应用,如 Google 的标志性产品 TPU (Tensor Precessing
Unit),阿里的倚天 710 云计算芯片,也有偏向研究类型的,如中科院的神经网络加
速器 DianNao 系列,麻省理工学院提出的深度学习加速器 Eyeriss[9] 。

典型的硬件处理引擎 (HardWare Processing Engines,HWPE) 采用专用的内存耦


合加速器,可以放入并行超低功耗处理平台的片上系统 (System on Chip,SoC) 或集群
中,以提高其在特定任务中的性能和降低功耗[10] 。与传统的加速器不同的是 HWPE
不依赖 DMA(Direct Memory Access) 为其提供输入并提取输出,也不一定绑定到单
个内核,并且与集群中的其他元素共享内存。HWPE 的控制是内存映射的,通过外
围总线或互联结构进行访问。这种异构协处理器的设计方法具备灵活的配置和良好
的性能,一方面使用流水线和并行结构,可以及时更新算法以及性能的需求变化,另
一方面还能为处理器和系统存储器提供低延迟接口,通过有效的数据复用,降低对
权重和数据的重复访问,从而降低了整体的功耗[11] ,这样的结构更有利于做低功耗
的端侧加速。

大多数的 ASIC 加速器以 CNN 模型为基础,致力于视觉和图像方面的产品落地。


对于卷积神经网络的特点,设计了独立的输入图层和输出图层数据通道,用作数据
重整以适应乘累加器 (Multiplier and Accumulation,MAC) 阵列的运算特点,同时包
含单独的线性整流函数 (Rectified Linear Unit,Relu) 负责激活层以及池化等专用化模
块[12] 。有些加速器更注重能效,通过 PE(Processing Elements) 的一维运算和多种数据
发送模式,达到更好的数据复用来降低 CNN 模型的功耗[13] ,提高了单位算力的能效
比。

对于车载芯片,长远来看,拥有稳定升级迭代的算法后,ASIC 是未来自动驾驶
量产芯片的唯一解决方案[14] 。究其原因,主要有以下几个方面的考量,第一是因为
传感器面临大量的冗余数据处理的问题,导致自动驾驶终端算力的需求较高,而且
在车速越快的情况下,要求计算能力也更高;第二是自动驾驶需要计算的实时性,超

万方数据
第 1 章 绪论

过一定范畴的延迟,极易引起事故的发生,因此终端必须承担自动驾驶的核心计算
与决策功能;第三是新能源车辆对能效也有需求,车辆的长续航才能保证良好的驾
驶体验,高能耗引起的热量可能降低芯片运行的稳定性。如支持 L4 的 NVIDIA Drive
Pegasus 功耗高达几百瓦,这种只能应用于自动驾驶的研究,而不是落地的产品[15] ;
第四是车规级芯片需要满足可靠性,面对严寒酷暑、风雨交加或长时间运行等恶劣
条件下,都有稳定的计算表现。

综合上述分析,专用硬件加速器的灵活配置可以迎合当前各个细分应用场景对
AI 计算的不同需求。而专用芯片支持的算法比较局限,对芯片的设计及验证都提出
了很高的要求。

1.2.2 芯片验证技术发展现状

验证是芯片设计阶段极为关键的流程,如今 EUV(Extreme Ultra-violet) 芯片的晶


体管已达百亿量级,面对复杂 IP 以及大规模的 SoC,需要应用验证语言和验证方法
学建立高效的验证平台,缩短验证周期,保证完备性和准确性[16] 。为了缩短验证周
期,相对于传统的仿真验证而言,又出现了很多新的验证方法,如软件驱动的验证
(Software Driven Verication,SDV)、总线功能模型 (Bus Function Model,BFM) 等,以
及基于 FPGA 的原型验证技术[17] 。

System Verilog 作为当前验证技术中的通用语言,解决了兼容性、仿真工具限制


等方面的问题。作为 Verilog 设计语言的扩展集,它具有面向对象 (Object Oriented
Programming,OOP) 语言的特性:封装、继承与多态,还提供了约束和覆盖率等特
性[18] 。

验证方法主要由三大 EDA(Electronic Design Automation) 厂商 Synopsys、Mentor


和 Cadence 支持,Accellera 研究提出的通用验证方法学 UVM 成为了工业界主流的验
证方法[19] ,指明了验证方法学的发展方向。UVM 分别继承了 OVM(Open Verification
Methodology) 的 factory 机制和 phase 机制,VMM(Verification Methodology) 中的组件
规则、断言和寄存器等解决手段。使用 UVM 验证方法学搭建的仿真验证平台拥有
很好的复用性和明确的结构层次,极大程度上提高了验证工作的效率[20] 。

国内外对硬件加速器的研究已经取得了一些成果,有些学者和厂商已经推出了
原型产品[21] ,随之而来的是 ASIC 的迭代。为了加快研发进程和确保功能正确性,因
此,针对硬件加速器有必要搭建一个基于 UVM 的硬件加速器平台和支持灵活配置

万方数据
山东工商学院硕士学位论文

的板级验证平台,实现完备的卷积神经网络加速器的功能型验证。

1.3 本文的主要研究内容

本文基于卷积神经网络硬件加速器,设计了可复用的 UVM 验证平台和板级测


试平台,该平台根据硬件加速的特性,对卷积、激活、池化、步长、并行滑框、地址
偏移、乒乓缓存、旁路模式、突发传输长度以及数据类型和数据预存预取等验证其
功能正确性,并完成板级测试和综合成门级网表分析时序、面积和功耗。除此之外,
本文还研究了该类 IP 的接口时序问题,便于后续快速融入到 SoC 平台中运用[22] 。

本文以实验室现有的硬件加速器 IP 核为基础,对待测试模块 (Design Under Test,


DUT) 的 RTL 代码顶层设计实例化,用虚拟接口连入 UVM 框架中,在 UVM 的组
件中产生大量激励,灌入 DUT 和参考模型 (Reference Model),结果输出至日志自动
化比对。然后用 JTAG 协议实现上位机传输数据,搭建 FPGA 测试平台,通过移植
RTL 代码到 FPGA 来验证 ASIC 的功能,完成板级验证。随后对设计模块做 RTL 级
综合,首先将 HDL(Hardware Description Language) 的描述转换成一个与工艺独立的
RTL 级网表(网表中 RTL 模块通过连线互联)
,以 22nm 的工艺库为源文件,把 RTL
级网表映射到 globalfoundries 的工艺库,然后按照设计所需的延时、面积和功耗等约
束条件,对门级网表进行相应的优化。

本文共分为六章,各个章节的核心内容如下:

第 1 章介绍本文的研究背景与意义,分析当前国内外学者及厂商对卷积神经网
络硬件加速器的研究现状,同时阐述了随着芯片集成度和复杂度的提高,对芯片的
功能验证提出了更高的挑战和要求,也证明验证对当今大规模数字集成电路设计的
重要意义,最后提出本文的研究内容和采用的研究方法。

第 2 章围绕 UVM 验证平台的基本组件结构和特性,分析并论证 UVM 验证平台


和 SystemVerilog 的优势,还介绍了设计模块接口的总线协议,为后续搭建卷积神经
网络加速器的 UVM 和 FPGA 验证平台提供理论基础。

第 3 章针对卷积神经网络特性,分析卷积神经网络的前向运算,设计卷积神经
网络加速器整体数据流框架,分析卷积层的并行性以及适配算法模型的参数,最后
说明设计模块中的寄存器功能。

第 4 章搭建了基于 UVM 的卷积神经网络硬件加速器的验证平台,实现卷积神


经网络硬件加速器的仿真与验证。平台设计中包括针对卷积神经网络和接口协议定

万方数据
第 1 章 绪论

制的通用验证平台组件 (Universal Verification Component)、寄存器模型、objection、


phase 和 TLM(Transaction Level Modeling) 通信等机制。为了保证设计的正确性,还
要进一步分解测试点,制定验证计划,比对输出数据和收敛覆盖率,并为后续板级
验证采集样本。

第 5 章搭建了卷积神经网络加速器的 FPGA 测试环境并对设计模块进行电路综


合。基于 FPGA 的原型验证由 JTAG(Joint Test Action Group)、存储器及存储控制器、
桥接器、仲裁器和 HWPE 组成,最后实现 RTL 级到门级网表的逻辑综合及优化,完
成前端验证。

第 6 章归纳总结本文所做的工作内容,分析当前验证平台中存在的不足之处,并
对后续改进提出相应建议以及未来工作的展望。

万方数据
山东工商学院硕士学位论文

第2章 UVM 验证方法学

传统的验证方法逐渐变成研究高度复杂的电子系统和芯片开发的主要难关。加
强验证的可靠性、完备性、可重用性和提高验证效率能有效解决验证中存在的问题,
硬件验证语言和通用验证方法学相结合基本上弥补了以往验证技术手段的不足[23] 。
本章将对 SystemVerilog 和 UVM 验证方法学进行深入的研究,并探讨 UVM 验证方
法学的各种机制、寄存器模型等功能的运用。最后分析 APB (Advance Peripheral Bus)、
Lint 和 JTAG 协议,为测试激励的添加提供参考。

2.1 SystemVerilog 验证语言

SystemVerilog 是由 Accellera 标准组织提出的用于硬件描述和验证的语言,也是


对 Verilog 语言的扩展,于 2005 年成为 IEEE P1800-2005 的标准。作为一种硬件设计
验证语言,SystemVerilog 具备事务级、行为级和门级的建模方式,完全满足验证对
语言的要求。SystemVerilog 的标准化获得了各大 EDA 厂商的一致认可,并广泛运用
到实际项目中。国外知名调查机构 Wilson 对近十年来用于构建测试平台的验证语言
的趋势进行统计,分析与预测如图2.1所示,可以看出 SystemVerilog 的应用量几乎接
近验证语言使用量的 80%,并且每年仍然呈现上升趋势[24] 。

图 2.1 验证语言近十年使用情况

SystemVerilog 在 Verilog HDL 的基础上,保留硬件描述语言中面向硬件的特性,


同时也借鉴了 C++ 面向对象的特性,形成一种设计和验证通用的语言[25] 。总的来说,
SystemVerilog 有如下优点:

(1)引入了面向对象编程的特性,继承了 OOP 的特性,拥有重载、封装、多态

万方数据
第2章 UVM 验证方法学

和继承等方法,可以为验证提供较好的复用性[26] ;
(2)包含 char、int、byte、logic、void 等多种数据类型,实现了队列的插入、删
除和动态数组分配空间等常用方法,为了在更抽象的层系上建模硬件提供基础;
(3)增加随机化参数的方法,运用受约束的随机激励,通过改变随机种子,保证
激励在一定范围内随机产生,避免出现测试向量覆盖面不足和大量无用的穷举的问
题[27] ;
(4)接口既简化了模块间接口的连接,又实现了各模块间的通信。SystemVerilog
的虚拟接口可以将设计和验证平台分离,保证接口不受设计改变的影响;
(5)通过功能覆盖组和覆盖点收集功能覆盖率,用于判断测试向量是否覆盖待
测试模块的某些特定组合,代码覆盖率和功能覆盖率是判断验证是否完善的主要依
据[28] 。
此外,SystemVerilog 还有断言、内存自动管理机制等特性,其具备的诸多优点符
合当前集成电路对验证的需求,尽管单纯的验证语言本身也能完成验证任务,但面
对复杂的功能模块和系统,高效的层次化验证平台是验证技术发展的必然结果。因
此 EDA 厂商在 SystemVerilog 硬件描述的基础上开发出了多种验证方法学[29] 。

2.2 通用验证方法学

为了解决验证方法学的兼容问题,验证技术的开源成为行业的趋势,由 Accellera
提出了验证方法学统一的规范 UVM,继承了 OVM 和 UVM 的优点,获得了 EDA 工
具厂商三巨头 Synopsys、Mentor 和 Cadence 的拥护。如图2.2所示,Wilson 对近十年
来验证方法学的使用进行了统计,2020 年的使用率已接近 80%,表明 UVM 成为行
业标准的验证方法学[30] 。

图 2.2 验证方法学使用情况

万方数据
山东工商学院硕士学位论文

2.2.1 UVM 验证平台基本架构

图2.3是一个典型的 UVM 验证平台的基本框图,UVM 通过 factory 机制对包含的


成员类和宏实现注册和管理[28] ,
搭建验证平台需要的通用验证组件 UVC。其中 driver、
monitor、sequencer、agent、reference model 和 scoreboard 等组件都是由 uvm_component
派生的,而 uvm_object 是 UVM 中最基本的类,包括 uvm_component 等所有的类都
继承自 uvm_object。transaction 和 sequence 也都是由 uvm_object 派生而来,它们不
属于 UVM 平台的基本组件,只是作为组件之间实现通信的信息载体[31] 。

图 2.3 典型的 UVM 验证平台结构

验证组件各个模块的基本功能如下:
(1)驱动器 driver:接收来自 sequencer 的激励,并转化为 transaction,使用虚拟
接口把激励驱动发送给 DUT;
(2)序列发生器 sequencer:sequencer 是启动测试序列产生事务级激励的组件,
为 driver 和 sequence 提供协同调度,完成数据的产生和传送[32] ;
(3)检测器 monitor:对 DUT 外部接口的信号进行监测,根据接口时序采集数
据,完成原始信号数据到 TLM 数据的转换,自动化打印并传送到记分板;
(4)代理器 agent:将 driver、sequencer、monitor 封装在内,旨在提高平台的可
移植性。代理器 agent 有主动和被动模式,主动模式下实例化上述的所有组件;被动
模式下只对 monitor 进行例化,达到监测 DUT 输出的作用[33] ;
(5)参考模型 reference model:根据待测试模块的信号变化和寄存器状态,模拟
DUT 内部行为产生的结果,将生成的数据打包发送给记分板;

万方数据
第2章 UVM 验证方法学

(6)记分板 scoreboard:接收参考模型和待测试模块的数据,比对两者的输出值
是否完全一致,根据需求可以打印详细信息。scoreboard 中可以运用打印信息,即
UVM 支持 UVM_ERROR 达到一定数量结束仿真,提高验证效率[34] ;
(7)环境 environment:容器类将 agent、reference model 和 scoreboard 等组件一
并封装,其自身包含可定制的拓扑结构和行为配置属性,便于组件进行实例化,提
高验证平台的纵向可重用性。

2.2.2 UVM 的核心机制

一个完备的验证平台由相应的组件实现基本的功能,而 UVM 中提供了很多特


有的机制,可以保证验证平台中组件及其他组成部分自动、可靠、高效地完成验证
工作。本小节将对 UVM 常见的机制进行简单的论述[35] 。
(1)Field_automation 机制
Field_automation 机制定义各种不同的 transaction 操作规则,采用 uvm_field 系列
宏以 uvm_object_utils_begin 与 uvm_object_utils_end 来完成 transaction 对 factory 注
册,完成宏注册后可以直接对 transaction 调用 copy、compare、print 等函数,极大的
简化了 driver、monitor 等组件[36] 。
(2)Config_db 机制
所有 config 直接由 uvm_object 派生,config_db 机制在验证平台中主要用于传递
参数、接口等。set 函数和 get 函数的代码格式分别是:
uvm_config_db#(Type)::set(this, “inst_path”, “field”,value);
uvm_config_db# (Type)::get(this, “”, “field”,field);
config_db 的 set 函数的第二个参数是字符串,UVM 本身不对这个字符串表示的
路径检查,所以使用 get 函数前一般会进行判断,确保参数传递无误。UVM 的层级
越靠近顶层,优先级更高。本文实际运用时只在顶层将 virtual interface 传递到各个组
件中,避免使用绝对路径访问类中的成员变量[37] 。
(3)Phase 机制
UVM 中 phase 的设计是在不同的时间自动执行各自的事务,有效的解决了代码
错乱可能引起的问题,便于验证平台的自动化管理[38] 。
如图2.4所示按是否消耗仿真时间分为 function_phase 和 task_phase 两个步骤,其
中 build_phase(例化)、connect_phase(连接)等属于不消耗仿真时间,用函数来实

10

万方数据
山东工商学院硕士学位论文

现,run_phase、main_phase 等属于消耗仿真时间,用于向 DUT 施加激励和检测输出,


最后由任务实现。本文也在组件中都用到了 build_phase、connect_phase、run_phase、
reset_phase 等常用 phase 机制。直至验证平台中的 phase 全部执行完毕,仿真进程自
动结束。

图 2.4 UVM 中 phase 运行顺序

(4)Objection 机制

Raise_objection 和 drop_objection 是 objection 机制中负责 UVM 仿真验证平台开


关,当验证进入某一 task_phase 时,UVM 实时监测并收集所有提出的 objection,直
至所有 objection 都撤销后,退出进入下一个 phase。所有 phase 结束后,调用 $finish
关闭整个验证平台。

Objection 与 phase 机制的协同使用,实现了验证环境中每个 phase 的自动运行,


避免浪费不必要的运行时间[39] 。

(5)Sequence 机制

Sequence 机制由 sequence 和 sequencer 两部分构成,sequence 不属于验证平台,在


sequencer 的帮助下,才能把产生的 transaction 传送到 driver,它里面的 transaction 全部
输出后才会结束。Sequencer 本质上就是个 uvm 的组件,sequence 是由 uvm_object 基
类拓展而来,
sequence 与 transaction 都有其各自的生命周期[40] ,
它的周期比 transaction
更长一些,它里面的 transaction 全都传输结束后,才会结束。

验证平台启动 sequence 产生事务,sequencer 一方面监测 driver 是否接收到新的


transaction,另一方面还要检查 sequence 是否有发送新事务的请求,从而协调 sequence
和 driver 的工作。

11

万方数据
第2章 UVM 验证方法学

(6)TLM 通信机制

TLM 通信是在 uvm_component 之间通信,尤其是在常用组件 scoreboard 与 mon-


itor 之间,最便捷的方法是使用全局变量,而滥用全局变量会造成不可预知的后果。
config 机制需要从 uvm_object 派生出一个参数类 config_object,在此类中有 monitor
要传给 scoreboard 的变量,但这种方法显得有些笨拙。SystemVerilog 中自带的一些
机制,如 Semaphore、Mailbox,再结合其余的一部分技术也能完成,但是这样做的问
题在于通信方式表现得极度复杂,需要花费许多时间编写通信有关的代码。解决这
个问题最好的办法就是建立专门的通道,而 TLM 能实现 component 之间 transaction
级别的通信[41] ,同时赋予通道阻塞和非阻塞等特性。

图2.5展示了 A 和 B 两个模块通过端口通信,通信本质上也是调用函数或任务来
实现的。例如图中 A.port 的 put 调用 B.export 的 put 操作,继而调用 import 的 put,
import 会调用 B 模块的 put。UVM 将整套复杂的机制封装在表面简单的端口中,只
需在 connect_phase 中将端口连接起来就好。每个端口可以做 put、get、peek、transport
操作,对着 port、export、import 三种类型的端口,并且都支持阻塞和非阻塞[42] 。

图 2.5 blocking_put 操作

此外,analysis 端口也被用于组件之间通信,一般 analysis 端口用于 monitor,score-


board 用 import 编写对应的函数完成通信,而 scoreboard 一般需要接收来自不止一个
组件的数据。为了解决端口大量定义的问题,UVM 还引入 FIFO(First In First Out) 通
信方式,其本质是两侧端口都是 import,中间存放数据,有效地完成组件之间的信息
传递[43] 。

(7)Factory 机制

工厂机制可以自动创建类的实例,并调用其任务或函数,将组件加入 factory 机
制后,还可以使用 type_id::create() 和 override 等库函数。factory 的重载功能可用于
transaction、sequence 和任意的 component。重载的优势是一个子类的指针以父类的
类型传递,其表现出的行为仍然是子类的行为。验证后期修改或添加代码时,在不

12

万方数据
山东工商学院硕士学位论文

改变原有调用关系的前提下,可以替换原有的函数,并衍生出新的类,降低编译出
错的概率,实现重载的效果[44] 。重载功能极大地提高验证效率,减轻验证工作量。

这些机制确保了验证平台的正常运行并产生了期望的激励,大大简化了验证平
台的开发过程,缩短了 ASIC 的整体研发周期,同时也为后续基于 UVM 的硬件器验
证平台的设计和搭建奠定了扎实的理论基础。

2.2.3 UVM 的寄存器模型

DUT 的寄存器模块与验证环境的寄存器模型两个模块包含的寄存器信息是高度
一致的。属于验证环境的寄存器模型也可以抽象出层次化的寄存器列表,该列表包
含的地址、域、属性等信息与 DUT 一侧的寄存器内容一致。而由软件来建立的寄存
器模型对软件开发和功能验证都有帮助。从功能验证角度来讲,可以将总线访问寄
存器的方式抽象为寄存器模型访问的方式[45] ,这种处理方法对寄存器后期的地址修
改(例如基地址更改)或域的添加都不妨碍现有激励的输出,进而提升现有测试序
列的复用率。

寄存器的读写可以实现处理器配置硬件中各模块功能和访问状态的目的,而寄
存器的硬件实现就是触发器,每个比特位的触发器对应着寄存器的功能描述。寄存
器一般由 32 比特位构成,单个寄存器可以分为多个域,不同的域分为只写 (Write-
Only,WO)、只读 (Read-Only,RO) 和可读可写 (Read and Write,RW)。

图 2.6 寄存器模型结构

如图2.6所示,寄存器模型最小标准单位是 uvm_reg_field,状态寄存器包含四个

13

万方数据
第2章 UVM 验证方法学

域:empty、full、overflow、underflow。uvm_reg 比 uvm_reg_field 指代范围更广,但是


仍然不是很大的单位。在单个寄存器中至少包含一个 uvm_reg_field。uvm_reg_block
是包含相对较多内容的单位,这中间可以加入大量的 uvm_reg,还能添加一部分
uvm_reg_block。与之类似的是一个寄存器模型中至少有一个 uvm_reg_block。每个
寄存器在寄存器模型中都有对应的地址,uvm_reg_map 用于存储这些地址,并转换
成可以实际访问的物理地址(寄存器模型中的寄存器地址一般都是偏移地址,而不是
绝对地址)。在寄存器模型通过前门访问的方法来完成读或写操作时,uvm_reg_map
会自动把偏移地址转换成绝对地址,再启动一个读写的 sequence,并把结果返回[46] 。
在每个 reg_block 内部,至少要有一个 uvm_reg_map。
如图2.7所示,通过前门访问在寄存器模型上进行读写操作,通过总线 UVC 实现
总线上的物理时序访问,是对 DUT 的真实物理操作,能正确的反映时序关系。而从
实际运用的方式上来讲,只要是没有通过 DUT 的总线对 DUT 内的存储器或者寄存
器进行存取操作的都算后门访问[47] 。后门访问能完成前门访问不能完成的事情,通
过 UVM DPI(Direct Programming Interface) 关联硬件寄存器信号路径,直接读取或修
改硬件,不需要访问时间,零时刻响应,能直接给只读寄存器赋予初值。

图 2.7 前门访问读写操作流程

后门访问与前门访问相比,其不花费仿真时间,且运行周期更短。在大型芯片
验证中,更适合配置数量繁多的寄存器。本文研究的验证平台只是针对单个 IP 的功
能验证,不存在特殊的寄存器访问需求,后门访问虽然较前门访问更快捷,但后门

14

万方数据
山东工商学院硕士学位论文

访问不受硬件时序控制,对硬件进行后门访问也许会发生时序冲突。前门访问可以
在波形文件中找到总线信号变化的波形及操作记录,而后门访问无法在波形文件中
找到操作痕迹,只能依靠验证平台中输出的打印信息,增加了调试难度[48] 。

2.3 接口协议

2.3.1 APB 总线协议

APB 作为 AMBA 系列的总线,可与任何低带宽,无需高性能流水线接口的外设


相连[49] 。APB 是非流水线协议,信号的转换只在时钟的上升沿发生,简化了 APB 外
围设备的设计流程,APB 每次传输至少需要两个周期,能更好的将 APB 外设集成到
其他设计中,可通过 APB 来访问外围设备的寄存器。APB 读写传输分为无等待和有
等待。主要区别在于使用 PREADY 信号来延长数个周期。用 PSLVERR 来指示 APB
传输错误。APB 的外部设备不会强制要求支持 PSLVERR 引脚,只要在不使用该引
脚时,将其置低就可以。APB 的状态机定义如图2.8所示:

图 2.8 APB 传输状态图

(1)IDLE:APB 的初始状态,没有任何传输操作,也未选中任何从模块;

(2)SETUP:当需要传输时,总线进到 SETUP 状态,总线仅在这个状态保持一

15

万方数据
第2章 UVM 验证方法学

个时钟周期,在后一个时钟上升沿移至 ACCESS 状态;

(3)ACCESS:使能信号 PENABLE 被置位,其他信号保持稳定,APB slave 的


PREADY 信号控制 ACCESS 状态。只要 PREADY 一直保持低电平,那么总线就一直
停留在 ACCESS 状态;驱动为高电平,退出 ACCESS 状态。如果不需要传输,返回
IDLE 状态;后面紧跟下一次传输,则移动到 SETUP 状态。

APB 一般作为 IP 的配置接口,对低速外设 I2C、UART、I2S 和 DDR、PCIE、


Ethernet、AXI 等高速 IP,实现 CPU 对外设 IP 的寄存器配置[50] ,在 SoC 设计中一般
会实现一个 AXI2APB 或 AHB2APB 的转接器将 APB 接口的 IP 挂载在系统上,本文
主要是用 APB 协议完成待测试模块的寄存器配置。

2.3.2 Lint 协议

Lint 总线并不是一种广泛使用的标准总线,它是为硬件加速 IP 专用的一种总线


协议,可用于一主多从模式,可连接随机存取存储器,I/O 接口或者 UART、SPI 等
串行总线。表2.1给出了 Lint 总线信号的具体描述:

表 2.1 Lint 总线信号功能


信号 来源 描述
CLK 时钟源 时钟
RESET 系统复位 全局复位信号,低有效
req 主机 请求信号,握手信号,高有效
ack 从机 从机响应信号,握手信号,高有效
add 主机 读写操作地址
wen 主机 读写使能信号 (1 是读,0 是写)
be 主机 位使能信号,与 APB 总线中的 PSTRB 功能相同
wr_data 主机 写数据
rd_data 从机 读数据
r_valid 从机 读有效信号

Lint 总线协议的通信方式相对简单,req-ack 握手协议以同步的方式完成,旨在


完成模块之间的数据移动[51] 。硬件加速器 IP 需要大量的数据运算,这种简单高效的
数据协议极大地降低电路功耗。

2.3.3 JTAG 协议

JTAG 作为一种国际标准的通用测试协议,主要用于芯片内部的测试。图2.9是
一个基本的 JTAG 端口同步器,其相关的 JTAG 接口定义为:tclk_i 是测试时钟输入,

16

万方数据
山东工商学院硕士学位论文

trst_ni 是复位测试输入,低电平有效,数据经过 tdi_i 引脚输入 JTAG 接口、再从 tdo_o


获得测试数据的输出,tms_i 是测试模式选择,用于设置 JTAG 接口处在哪种指定的
测试模式下[52] 。JTAG 为本文后续的板级测试激励输入和功能调试提供有效的方法。

图 2.9 基本的 JTAG 端口同步器

2.4 本章小结

本章首先说明了 SystemVerilog 验证语言和 UVM 验证方法学在数字集成电路中


应用的优势,然后分析 SystemVerilog 作为验证语言的优点,接着分析 UVM 的基本
结构、核心机制和寄存器模型,分析前门访问与后门访问的优缺点,为后文搭建硬
件加速器 IP 的 UVM 验证平台提供理论基础,本章最后对卷积神经网络加速器外部
接口协议进行分析,也为制定仿真验证策略和板级测试激励提供参考。

17

万方数据
第 3 章 卷积神经网络加速器的硬件结构设计

第 3 章 卷积神经网络加速器的硬件结构设计

本章将论述卷积神经网络的运算原理,针对卷积层、激活层、池化层和数据位
宽截取等功能进行分析,指出了硬件设计中差异化并行的优势,为后续硬件加速器
的设计提供理论基础。

3.1 卷积神经网络前向运算

神经网络运算通常包含前向运算和和反向传播。本文研究的是 ASIC 卷积神经


网络硬件加速器,只注重卷积神经网络的前向运算过程,即只考虑已训练好模型的
推理,不讨论卷积神经网络的训练过程[53] 。

卷积神经网络是具备卷积计算和深度结构的前馈神经网络,作为深度学习典型
的算法之一,拥有表征学习的能力,以各个阶层结构对输入信息进行平移不变分类
的操作。图3.1是典型的 CNN 模型 VGG19,和大部分卷积神经网络模型类似,该模
型主要是由卷积层、池化层、激活层和全连接层组成。各层相互级联形成一个完整
的卷积神经网络模型,不同的功能层有相应映射的运算关系[54] 。其中卷积层是对图
片中每个特征的局部感知,再进行综合操作,得到全局信息;激活层是对卷积输出结
果的非线性映射,解决梯度消失问题;而池化层又称下采样,主要作用是特征降维,
压缩数据量和参数化,有效防止过拟合,也提高模型的容错性;全连接作为输出层,
将多维特征输入映射为二维的特征输出,起到分类器的作用[55] 。

图 3.1 VGG19 网络模型结构示意图

图3.2所示为卷积运算的整个流程,包括输入图层、输出图层以及卷积核。先将
原始图像信息预处理后送入卷积层进行特征提取,利用卷积核矩阵对原始图像数据
中隐含的关联性抽象化,卷积计算公式表达如下:

18

万方数据
山东工商学院硕士学位论文

∑∑
K−1 I−1 ∑
J−1
Y l (m, n) = X k (m, n) ∗ H kl (m, n) = X k (m + i, n + j)H kl (i, j) (3.1)
k=0 i=0 j=0

上述公式中,假定卷积层中 Xk 表示第 K 个输入通道的二维特征图,Yl 表示第


L 个输出通道,所以需要 K*L 个卷积核实现通道数目转换,Hkl 表示第 K 个卷积核
的第 L 个通道。卷积过程中边界填充可以避免图片边界处信息丢失,设置步长大小
能成倍缩小尺寸,压缩部分信息,卷积层的优势在于局部连接和权值共享[56] 。

图 3.2 卷积层运算整体过程

常用的激活函数是 ReLU,又叫线性整流器,对卷积层线性变换的特征做非线性
映射。与其他非线性函数 tanh 和 Sigmoid 相比,表明 ReLU 在大部分情况下性能都
是最好的[57] 。表达公式如下:



 0, x⩽0
f (x) = (3.2)

 x, x>0

池化层的提出是为了缓解卷积层对位置的过度敏感性,按操作类型分为最大池
化 (Max Pooling)、求和池化 (Sum Pooling) 以及均值池化 (Average Pooling)[58] 。一般
来说,最大值池化能降低卷积层参数误差引起的估计均值的偏移,平均值池化能改
善邻域大小限制引起的估计值方差变大的问题。从某种角度来考虑,池化就是卷积
中的特例,能在保持重要信息的同时降低特征图的维度,减小下一层输入的参数,降

19

万方数据
第 3 章 卷积神经网络加速器的硬件结构设计

低计算量,防止过拟合[59] 。

全连接层的主要作用是将提取的特征结合并分类,它在输出层使用 softmax 激
活函数。卷积、池化、激活等功能层的计算操作是把初始数据映射到隐藏层的特征
空间,全连接层是把分布式的特征表示映射到样本标记空间[60] 。

以上即为各功能层的运算方式和作用,将这些映射到硬件设计中,可有效加速
运算速度。本文接下来就要对神经网络的整体硬件架构进行分析,有效发挥 ASIC 的
灵活性和复用性。

3.2 硬件加速器整体结构设计

3.2.1 加速器数据流设计

基于异构的 GPU 和 FPGA 加速器以及直接硬件化算法的 ASIC 都存在内存访问


和带宽限制,由于大规模神经网络的特点,DMA 的方式无法达到理想加速的效果。
针对内存的使用,改善加速器的架构设计和控制,实现高吞吐率和低功耗传输[61] 。
ASIC 的硬件资源有限,在主频一定的情况下,需要考虑计算模式对带宽、存储单元
以及外部数据访问的影响。

图 3.3 加速器数据流框架

本文设计的卷积神经网络硬件加速器可实现图层之间的并行乘加计算,整体架
构如图3.3所示,可实现卷积、激活、池化和全连接等功能,首先从存储器中获取的
数据由选择器判断进入数据预取缓冲器或者权重缓冲器,将二维的图像矩阵转化为
串行可连续读取的一维数组数据,放入 MAC 阵列完成卷积计算。卷积运算结果通过

20

万方数据
山东工商学院硕士学位论文

比较器设置阈值范围实现激活层的效果,激活值需要先放入缓冲器中,存满一定的
列数才能开始池化运算[62] ,最后数据根据地址映射从缓冲器输出至外部存储器。

硬件加速器 IP 的卷积、激活和池化的功能模块是级联模式,并且根据寄存器值
可选择旁路模式,全连接层可以通过卷积计算模块的复用来完成,按照数据流划分
各个独立工作的模块,保证数据高速处理时各级流水线之间的连续性,提高了电路
的运行效率。

3.2.2 卷积层并行运算分析

卷积层详细数据流如图3.4所示,输入数据缓存负责将图像的原始数据按不同图
层,写入相应通道的数据缓冲器,缓冲器的个数可配并按图像的列数存储;每个像
素点数据进入预取模块,保证像素点的个数不小于卷积核的大小;再用行缓冲器将
预加的数据整合成二维的图像矩阵,每次进行计算输出数据模块就反馈一次数据移
位信号,更新图像矩阵[63] 。权值缓冲器的数据量相对较小,数据流的控制方式基本
类似。PE 阵列计算的输出结果按相同通道进行累加后存入缓冲器,完成卷积运算。

图 3.4 卷积核尺寸为 3、两输入两输出特征图的卷积运算过程

21

万方数据
第 3 章 卷积神经网络加速器的硬件结构设计

图 3.5 是运算核心中的乘加阵列,用于提高计算效率的加速模块,主要分为 Mac


streamer、Mac engine、Mac ctrl。模块通过 Mac streamer 转化图像数据通道和卷积核
通道的信息,在 Mac engine 中进行有符号的乘法和累加运算,再将计算结果从另一
个通道写出,而 Mac ctrl 负责控制整个模块的进程,包括寄存器配置、状态机控制以
及连续计算过程中基地址更新等。运算核心中除了卷积层之外,还支持激活和池化,
三个功能模块是级联模式。

图 3.5 MAC 阵列数据流结构

数据输出模块主要是传递数据通道的控制信号和累加输出,每个 PE 阵列输出一
个像素点的卷积和,输出结果进入对应的输出通道的接口,并在地址生成逻辑的驱
动下写回存储空间。

针对卷积神经网络的特点,设计了独立的数据重整模块以适应后续 MAC 矩阵
的运算特点,同时也有单独的 Relu 和 Activation 运算专用化模块,算力上可能不如
脉动阵列来得高[64] ,但这种硬件加速结构更注重能效,用 PE 的一维运算模式以及数
据复用,降低 CNN 模型的功耗,提高单位算力的能效比。

3.2.3 参数适配分析

越来越精确的深度学习模型面临两大挑战:计算密度越来越高;存储带宽越来
越大[65] 。解决此问题的可行方法之一就是降低数据位宽。这是因为较低的数据位宽
可以有效降低计算密度,同时减少计算时的功耗开销,而且也降低了存储需求。但
是,这里有个前提条件,那就是降低位宽不能损失模型性能,或者降低位宽带来的
收益远大于因此造成的模型性能损失,且损失是在可接受的范围之内。

实践证明,在某些 CNN 模型中,采用 INT8 和 INT16 与采用浮点数据相比,精


度损失更小;相比于 256bit 的总线位宽,128bit 的能节省大量的硬件资源。多比特计
算获得足够大规模的 CNN 计算能力,工艺的变化导致计算可靠性降低[66] 。表3.1是

22

万方数据
山东工商学院硕士学位论文

不同总线位宽综合后生成的报告,其中 128bit 的总线位宽更符合本设计对硬件资源


的期望。

表 3.1 不同总线位宽综合后消耗的硬件资源

FPGA 资源类型 64bit 总线位宽 128bit 总线位宽 256bit 总线位宽

Total power(W) 3.097 3.231 4.385


LUT 466679 562837 697466
FF 272780 315792 383219
BRAM 1094 1799 2812
DSP 64 64 64
LUTRAM 41476 41476 41476
IO 9 9 9
BUFG 26 27 29

对于不同的神经网络模型,卷积层的参数差异性较大[67] 。表3.2是典型的 CNN 模


型中卷积层的参数信息,不同的网络结构的卷积核尺寸、输入特征图尺寸、输入输
出通道个数的参数存在差别。这种结构上的差异性需要考虑各种卷积参数的可配置
性、可重用性,因此硬件加速器中的计算单元需要对不同的卷积层进行适配[68] 。

表 3.2 常用 CNN 模型卷积结构参数

卷积核大小 输入特征图大小 输入/输出通道数

VGG19 3×3 224,112,56,28,14 3,32,64,128,256,512


AlexNet 11 × 11,7 × 7,5 × 5, 224,55,27,13 3,48,96,256,384
3×3
ResNet 7 × 7,3 × 3 224,112,56,28,14 3,64,128,256,512
GoogLeNet 7 × 7,5 × 5,3 × 3, 112,56,28,14 3,64,192,256,480,
1×1 512,832,1024
YOLO v3 3 × 3,1 × 1 416,208,104.52,26 3,32,64.128,256,512

考虑到 ASIC 是定制电路,需要对于卷积核的尺寸以及多通道的个数进行选择。


针对不同运算设计不同的硬件通路,以重配置的形式完成不同类型的运算。为注重
硬件资源消耗、面积和单位时间算力等相互之间的平衡[69] ,本文研究的硬件加速器
选取最大的输入输出层数均为 64,卷积核尺寸有 3×3、5×5 两种。对超过输入输出
通道最大个数的功能层,采取复用的方式,提高资源利用率。对不同的卷积运算,使
用“填充”和“拼接”的方法完成硬件电路中不具备的卷积核尺寸的卷积运算,对卷

23

万方数据
第 3 章 卷积神经网络加速器的硬件结构设计

积核尺寸不满足 3×3 的,通过填充补零的手段,而卷积核尺寸大于 5×5 的,采用拼


接补零,实现运算单元的复用,提升硬件资源利用率。

这种可复用的硬件加速器设计可以从不同网络模型的差异运算中寻找共性,能
使不同计算参数功能层的硬件资源平均利用率保持在较高的水平,达到专用集成电
路硬件加速器可扩展的效果。

3.3 加速器模块的寄存器配置

从上一节介绍的加速器数据流框架可知,卷积加速器的功能模块分为图像通道
数据、卷积核通道数据、激活信息、池化信息以及模块使能配置信息等,每个部分都
有各自对应的寄存器。配置寄存器都是通过 32 位的 APB 总线进行读写,下面是配
置寄存器的详细说明。

3.3.1 模块使能配置寄存器

在硬件加速模块启动之前,需要确认是否开启激活和池化功能模块,具体的模
式根据实际算法模型完成配置。等到第一幅图像运算所需的寄存器配置完成后,使
能 trigger 寄存器,加速器模块开始卷积运算,具体的寄存器介绍如表3.3所示。

表 3.3 模块使能配置主要寄存器

寄存器名 位宽 寄存器功能说明

SOFT_TRIGGER 1bit 写 1 自清 0,启动信号


KERNEL_START 1bit 写 1 自清 0,卷积核读数据触发信号
POOL_ENABLE 1bit 池化模式使能,高有效
RELU_ENABLE 1bit 激活模式使能,高有效

3.3.2 卷积功能配置寄存器

图像数据通道寄存器有两组功能相同的寄存器,他们的配置序列是一样的,这
种乒乓缓存机制主要应用于数据传输速率大于数据处理速率的情况。

硬件加速模块配置图像数据通道寄存器前,先读取当前配置寄存器块的状态,
若 CONFIG_DONE 未拉高则可以开始当前乒乓 bank 的配置,先进行基础参数寄存
器配置,最后配置 CONFIG_DONE 表示当前 bank 配置完成,等待下次硬件触发或

24

万方数据
山东工商学院硕士学位论文

SOFT_TRIGGER 启动后,当前寄存器模块的 CONFIG_DONE 信号拉低,切换至另


一个数据通道的寄存器模块,每组乒乓 bank 配置寄存器相同。面对连续多幅图片计
算时,需要处理乒乓缓存冲突,完成后配置 config_done 标志位。本文设计的 pixel 支
持 INT8 和 INT16 两种数据类型的计算,每笔读数据的地址是根据上一次读数据的
地址和跳转地址来确定的,写数据的地址方式与读数据的地址方式相同。各个寄存
器的位宽和具体功能描述如表3.4所示。

表 3.4 图像数据通道寄存器

寄存器名 位宽 寄存器功能说明

CONV_CHANNEL_PARA 1bit 单个像素点数据位宽(0 表示 8bit,1 表示


16bit)
CONV_STEP_PARA 3bit 卷积步长(0 表示步长为 1,最大可配步长
为 8)
CHANNEL_RDADDR_BASE 32bit 输入图层对应每个通道的读起始地址
CHANNEL_WRADDR_BASE 32bit 输出图层对应每个通道的写起始地址
CHANNEL_STRIDE_BASE 32bit 每层输入对应的读写跳转地址,低 16 位
表示读,高 16 位表示写
CHANNEL_ENABLE 16bit 低 8 位表示输入有效层数,高 8 位表示输
出有效层数
KERNEL_ENABLE 5bit 并行滑框的个数
RD_CHANNEL_PIXEL 32bit 低 16 位是输入特征图一行像素点的个数,
高 16 位是输入特征图一列像素点的个数
RD_CHANNEL_LEN 32bit 低 16 位表示一次读请求发送的数据宽度,
高 16 位表示读数据缓存的深度
RD_CHANNEL_TIMES 32bit 以总线位宽为每笔数据的长度,低 16 位
表示图像每列数据读取的次数,高 16 位
表示最后读取的一笔数据的有效位宽
WR_CHANNEL_ PIXEL 32bit 低 16 位是输出特征图一行像素点的个数,
高 16 位是输出特征图一列像素点的个数
WR_CHANNEL_TIMES 32bit 低 16 位按照总线位宽,处理后的图像
每列数据的写出次数,高 16 位表示最后
写出的一笔数据的有效位宽
CONFIG_DONE 1bit 数据通道寄存器配置完成标志,写 1 清 0

每次卷积层计算的卷积核参数一般都是固定的,所以卷积核数据读取会先于图
像数据。卷积核寄存器配置是先对地址、数据有效宽度和读写次数等基本参数配置,
随后启动 KERNEL_START 寄存器,触发卷积核缓存从存储空间读取数据,直至卷积

25

万方数据
第 3 章 卷积神经网络加速器的硬件结构设计

核数据读取完成后,KERNEL_DONE 只读寄存器置高。具体的寄存器描述如表3.5所
示。

表 3.5 权重数据通道寄存器

寄存器名 位宽 寄存器功能说明

CONV_KERNEL_PARA 1bit 卷积核大小(0 表示 3×3,1 表示 5×5)


KERNEL_RDADDR_BASE 32bit 输入图层对应每个通道的读起始地址
KERNEL_STRIDE_BASE 32bit 卷积核缓存对应的读起始地址
KERNEL_RD_LEN 32bit 低 16 位表示一次读请求发送的数据宽度,
高 16 位表示读数据缓存的深度
KERNEL_RD_TIMES 32bit 以总线位宽为每笔数据的长度,
低 16 位表示卷积核所有参数数据读取的次数,
高 16 位表示最后读取的一笔数据的有效位宽
(卷积核有 3×3 和 5×5 两种情况)
KERNEL_DONE 1bit 只读寄存器,卷积核寄存器配置信息完成标志

3.3.3 激活及池化配置寄存器

激活、池化、移位和累加等功能的寄存器主要是在卷积计算处理完之后,根据
实际应用场景,选择累加和移位操作、激活的阈值范围以及池化的模式,具体的寄
存器名及其配置功能信息如表3.6所示。

表 3.6 激活池化移位功能部分寄存器

寄存器名 位宽 寄存器功能说明

POOL_MODE 2bit 池化层的功能模式选择,00 代表均值模式,


10 是最大值模式,11 是最小值模式
RELU_THRESHOLD 32bit 激活层的阈值范围,低 16 位是最小阈值,
高 16 位是最大阈值
PE_BASE 32bit 对应每个输入通道,低 27 位是先对卷积结果
的累加数据,高 5 位是累加后结果的移位
ACC_BASE 21bit 对应每个输出通道,低 16 位先对卷积结果的
累加数据,高 5 位是累加后结果的移位
PROCESS_OBSERVE 2bit 只读寄存器,低位表示模块的运行状态,高
有效;高位是乒乓缓存的另一个图像通道参
数寄存器配置,高有效

26

万方数据
山东工商学院硕士学位论文

3.4 本章小结

本章首先介绍了卷积神经网络前向运算的原理,包括卷积、激活、池化、全连
接的功能。然后对整个硬件加速器的架构进行系统性分析,主要分析了卷积层数据
流的结构、MAC 阵列的运算方式,本设计支持通道的并行计算,各个模块采用级联
的方式,避免了数据阻塞的问题,其次,对不同算法模型卷积层的差异性进行分析,
并提出了通道的复用和卷积核拼接的方案。接着,列举了加速器 IP 中用到的主要的
寄存器,为后面制定验证计划提供基础。最后完成卷积神经网络加速器功能模块的
硬件方案设计。

27

万方数据
第4章 UVM 仿真验证平台设计与实现

第4章 UVM 仿真验证平台设计与实现

仿真验证平台的搭建是模块级验证的关键,根据 DUT 特性构造的验证平台必须


具备规范性、可靠性和可移植性。UVM 作为 SystemVerilog 语言的基类库 (base class
libraries),提供了大量的工具包,便于验证 IP 的维护,提高了同类工程的复用,从而
组成一个完备的验证平台[70] 。本章将以设计的硬件加速器 IP 为 DUT,搭建针对卷
积神经网络硬件加速器的 UVM 验证平台,分析仿真结果,并优化验证平台。

4.1 UVM 验证平台搭建

硬件加速器验证平台是基于验证理论基础提出的验证平台架构设计开发的,使
用 SystemVerilog 语言完成与硬件加速设计模块相同的功能,在模块级验证上具有较
强的重用性。

4.1.1 仿真验证环境

基于 UVM 搭建的硬件加速器验证平台整体结构如图4.1所示,整个验证平台实
现自动化 python 脚本运行,可适用于不同类型 IP 的验证。图中配置文件的 Bootenv
初始化全局环境变量,define 文件中的宏定义参数值传递到整个工程,modulefile 管
理软件工具的版本,config 文件中会存放 IP 从备份 gitlab 仓库中的版本配置等相关
信息。Vmod 表示待验证的模块,存放设计原始的 RTL 代码。Verif 是与 DUT 相连的
UVM 验证平台,outdir 是文件经过预处理后,编译仿真执行产生的结果[71] 。

图 4.1 硬件加速器 IP 仿真验证平台的整体框架

28

万方数据
山东工商学院硕士学位论文

在平台开始运行 VCS 编译器模拟之前,会将代码通过脚本预处理后输出至新的


文件夹,减少例化等大量重复性工作产生的人为错误[72] 。每个测试用例的日志和波
形文件也会生成在新文件夹的路径下,便于快速定位平台运行大量测试用例的情况。
设计、验证和预处理后编译仿真的文件独立放置,结构化管理测试流程易于维护,能
更好的发现验证平台搭建及后期调试过程中存在的问题。

4.1.2 验证平台的执行流程

验证平台中的 sequence 一般在 uvm_test 中启动,uvm_test 派生出 base_test,所


有的测试用例都会基于这个 base_test。在 base_test 中的 build_phase 完成例化,con-
nect_phase 阶段实现 virtual_sequencer 和各个 agent 里 sequencer 的连接,
进入 run_phase
后,先获取测试用例名,根据类名创建一个 object 并转换类型后,提起 objection,自
建一个 initial_phase,在前期验证平台搭建时,完成冒烟测试,再启动相应的测试用
例,等待仿真完成,撤销 objection 结束仿真,退出 run_phase[73] 。

图 4.2 硬件加速器验证平台执行流程

图4.2是硬件加速器验证平台的运行流程,从编译器的角度来说,整个验证平台
的编译执行都是从顶层模块开始自上而下的运行。如图所示,在 top_testbench 模块中
通过调用 run_test() 函数启动验证平台,并实例化 testcase;同时负责 DUT 与验证平台

29

万方数据
第4章 UVM 仿真验证平台设计与实现

的连接,实例化了数据流 Lint 接口、寄存器配置 APB 接口;设置 IP 的主频以及 APB


接口的时钟频率,并通过调用 uvm_config_db::set() 函数将 virtual interface 的句柄传
递到验证平台各个层级的组件中[74] 。此外还设置生成 $fsdbDumpfile ("hwpe.fsdb") 的
代码,便于使用波形工具调试。

为保证验证完备性,验证平台需要运行大量的测试用例,测试用例名在 shell 脚
本中的 UVM_TESTNAME 后面以字符串的方式指定,字符串是测试用例的类名,在
利用 factory 机制注册后,UVM 可以自动识别字符串,实例化出相应的测试用例。在
编译完成后产生 simv 仿真文件,为所有的测试用例单独创建路径,并执行各自的指
令,保证所有的测试用例并行执行。虽然需要消耗大量的计算机内存和线程资源,但
是大大减小实际仿真耗费的时间,提高验证效率[75] 。

4.2 UVM 验证平台实现

4.2.1 验证 IP 的整体结构

图4.3是基于 UVM 构造的卷积神经网络硬件加速器的验证 IP,硬件加速器 IP 作


为待测试模块与验证 IP 通过 virtual interface 进行信号传递,依靠 config_db 机制将
virtual interface 传送至验证平台的各个层级。验证 IP 的顶层是 environment,内部包括
master_agent、slave_agent、kernel_agent、register_agent、ctrl_status_agent,
register_model,
reference_model 和 convolution_scoreboard 等组件。agent 类中均包含 driver、monitor、
sequencer,通过类中的函数 (function) 和任务 (task) 完成 sequencer 的产生激励、driver
的输出激励和 monitor 检测信号数据。virtual sequencer 是一个中心化路由器,面向多
个 sequencer 的 sequence 群,在顶层的 connect 阶段将 virtual sequencer 中各 sequencer
句柄与底层 sequencer 实体对象逐一链接,对各个 agent 中的 sequencer 起到调度作
用。register_model 是一组高度抽象的类,对 DUT 中具有地址映射的寄存器和存储
器建模,完成不同寄存器间的交互。reference_model 可以直接使用高级语言的特性
来模拟 DUT,完成相同的功能。convolution_scoreboard 将 reference_model 的输出与
slave_monitor 监测到的数据结果做比较,判断 DUT 的正确性。

调用 UVM 库中 print_topology,在仿真运行后能得到整个仿真验证平台的拓扑
结构。硬件加速器验证平台的容器类型组件主要有 uvm_test、uvm_environment、ref-
erence_model、scoreboard 以及多个 agent。所有的测试用例都是基于 uvm_test 派生

30

万方数据
山东工商学院硕士学位论文

的其中一个类,uvm_test 派生的基础测试用例通过 uvm_component_utils 宏来完成


在 factory 中的注册,在 build_phase 阶段完成 uvm_env 的实例化,并设置 sequencer
的 default_sequence,控制平台的超时退出时间。uvm_env 文件实例化的组件也是在
build_phase 阶段使用 type_name::type _id::create 的方式,以及新建一些 fifo,便于在
connect_phase 阶段将端口连接用作存储信息[76] 。

图 4.3 硬件加速器验证 IP 的结构

4.2.2 接口的设计与实现

Verilog 语言块与块之间的通信用模块端口来指定,SystemVerilog 引入了接口的


概念,接口作为封装块与块之间通信的关键结构,便于改变模块间通信的建模抽象
层次。Interface 的封装包括模块的端口 (ports),信号的方向 (modports),同步关系
(clocking block) 以及函数 (function) 和任务 (task) 等[77] 。接口能简化模块间的连接,
但不能很好地适配基于 OOP 的测试平台,无法在程序中对 class 类进行实例化。

设计与验证接口连接如图4.4所示,virtual interface 作为 interface 的指针,是可以


在 class 中实例化的数据类型,无需层次结构的引用,消除了绝对路径,大大提高平

31

万方数据
第4章 UVM 仿真验证平台设计与实现

台的可移植性。SystemVerilog 的时钟控制块在 UVM 验证中可以用于准确及时地输


入激励驱动和输出采样,消除信号竞争问题。本文搭建的验证平台中在 testbench 顶
层文件利用 config_db 机制,将 virtual interface 传递到常用的验证组件, 用于等待时
钟上升沿,信号之间的赋值或者握手等功能。

图 4.4 设计与验证接口连接

为保证验证平台的驱动和采样与 DUT 的时序相同步,接口模块中加入了 clock-


ing 块,clocking 块中需要 modport 来指明信号输入输出的方向,并以模块的系统时
钟上升沿为条件,进行采样和驱动操作。

图4.5是激励从产生直至发送到 DUT 的整个过程,sequence 中是对寄存器的读写


操作,再将寄存器数据转化为 driver 可用的数据类型,经 interface 发送至 DUT,完
成寄存器配置。由于 DUT 的传输特性,必须在 req-ack 信号握手成功后,才能发送数
据,因此为加快仿真速度,简化验证平台,大量的传输数据都是在 driver 随机产生。

图 4.5 激励输入流程图

4.2.3 代理的封装

agent 的作用是封装更底层的组件,图4.6中默认 DUT 输入配置为主动模式,输


出为被动模式,主动模式在 build_phase 阶段例化出 driver、monitor 和 sequencer,而

32

万方数据
山东工商学院硕士学位论文

被动模式例化 monitor 只能用于检测信号数据的场景,两种情况都会例化出功能覆盖


组。agent 与外部组件通信通过 uvm_analysis_port,内部是 driver 的 seq_item_port 端
口和 sequencer 的 seq_item_export。

图 4.6 Agent 模式配置

验证平台中共有五个 agent,分别是模拟图像数据灌入 DUT 的 master_agent,接


收 DUT 计算结果的 slave_agent,包含权重信息的 kernel_agent,控制卷积触发的
ctrl_status_agent,与寄存器模型连接使用前门访问方式的 register_agent。

master_agent 中 master_driver 根据 sequence 中 uvm_send 宏发送经过实例化的


transaction,用 seq_item_port.get_next_item 的方式获取寄存器的配置信息产生相应数
量的数据,将数据由 virtual interface 传递到 DUT,同时 master_monitor 将检测到的
transaction 通过 uvm_analysis_port 传递到 reference_model。DUT 接收数据之前需要
确保协议握手成功,为加快仿真速度和优化验证组件功能,因此在数据请求信号和
响应信号握手成功后,产生随机数直接发送到 virtual interface。kernel_agent 的功能
与 master_agent 类似,目的是产生随机的权重数据,用于卷积层的计算。slave_agent
中 slave_monitor 就是从 interface 中获取 DUT 最后输出的结果,传递到 scoreboard 进
行地址和数据的比对。本文研究的大部分测试用例都是通过配置寄存器模型的值来
触发卷积,ctrl_status_agent 是为了验证硬件触发卷积的方式,通过 virtual interface 直
接将 DUT 触发卷积的信号置为有效,以此来验证设计中的功能点。

4.2.4 序列器的激励产生

图4.7给出了 sequence 配置寄存器的过程,具体的寄存器配置信息在上一章已经


阐述。由于本文设计的硬件加速器 IP 的特殊性,每个测试用例都是在 sequence 中对
寄存器模型中的配值,参数化配置和计算,设置单个像素点数据位宽、数据预取、旁
路模式、乒乓缓存、每列数据写入次数以及每次握手读取数据量,等到读取寄存器
配置有效信号置高后,触发卷积开始信号,调用 start 任务启动 sequence,再由 driver
通过 virtual interface 与 DUT 完成握手,产生图像和权重的数据,等待仿真输出结果。

33

万方数据
第4章 UVM 仿真验证平台设计与实现

图 4.7 sequence 内部配置寄存器过程

4.2.5 参考模型

本文前期搭建验证平台的大部分工作都在图4.8中的参考模型 (reference_model),
用于完成和 DUT 相同的功能,输出的结果可被 scoreboard 接收。下面将按照第二章
描述的卷积神经网络原理,详细介绍 reference_model 的具体过程。

图 4.8 参考模型数据流运行流程

从图4.8可以看出,参考模型在声明端口、宏注册、定义变量类型和构造 new 函
数后,进入 run_phase 机制中并行执行卷积核数据、图像信息、配置信息获取和卷
积计算输出结果等任务。为了便于验证平台的重用,数据获取的方式都会读取数据

34

万方数据
山东工商学院硕士学位论文

总线位宽和单个像素点的像素的宏定义,再进入不同判断条件的程序中执行相应的
代码。卷积核数据按照卷积输入通道个数、输出通道个数和卷积核大小三层 for 循
环嵌套,将其存入三维数组;图像数据直接在 while(1) 循环中不断获取,同样存入
三维数组;配置信息获取主要是指寄存器的状态值。整个卷积计算过程是先对图像
和权重数据按列依次乘加,在尽可能减小数据精度损失而保证数据不超出位宽的情
况下,对卷积层得到的数据进行移位,之后读取激活和使能状态,激活只要将数据
和配置的阈值做比较,池化必须满足的条件是激活处理后的数据列数除以步长大于
池化框的尺寸,最后将计算结果输出至 scoreboard,等待下一幅图像和权重数据的到
来。每个功能层的计算都是独立的级联模式,对不同的算法模型可以反复调用,直
至最后输出至全连接层。与一般参考模型不同的是需要配置信息是从 sequence 发送
的 transaction 获取,这样做的原因在于从寄存器模型中读取大量的寄存器数据花费
的时间不可控,而卷积计算具有的实时性,容易造成数据的错乱。

4.2.6 记分板

参考模型和待测试模块每次计算得到的数据都会存入 scoreboard,根据每个测试
用例的功能测试点,完成结果比对。scoreboard 用 uvm_blocking_get_port 将获取到的
地址及相应数据 transaction 存入文件,能够加快后续板级调试的进程。

图 4.9 scoreboard 数据流框图

如图4.9所示,scoreboard 中分为设计结果存取、验证结果存取和数据比较三个并
行功能模块。结果存取是将两边所有计算得到的地址和数据全部依次存入 log 文件
中,数据比较是把每笔获取的计算结果先存入两个队列,再将队列做对比,地址数据
相同的踢出队列,直至一幅图片计算完成后,任意队列不为空时直接打印 uvm_fatal,
停止仿真。当仿真报错后,可以结合上述的日志文件、打印信息和波形文件,查找设

35

万方数据
第4章 UVM 仿真验证平台设计与实现

计模块或者是验证平台中的问题,提高仿真验证的效率。

本文用图4.10所示通过 FIFO 来实现其他组件与 scoreboard 的通信,在 agent 和


scoreboard 之间添加一个 analysis fifo。uvm_tlm_analysis_fifo 的方式隐藏了 import 的
特性,简化了工作量。

图 4.10 scoreboard 与 monitor 的 FIFO 通信方式

以上描述了从 uvm_object 派生出的 uvm_component 在实际验证平台中的具体应


用,除此之外还有 uvm_sequence_item、uvm_config_db、register model 等也是验证平
台的重要组成部分。

4.2.7 寄存器模型

与 DUT 中的寄存器模块对应的是属于验证环境中的寄存器模型,这两个模块包
含的寄存器信息是高度一致的。寄存器模型抽象出层次化的寄存器列表,包括地址、
域、属性等信息。对功能型验证而言,总线访问寄存器的方式使得寄存器后期的地
址修改或域的添加不会对已有激励产生影响,提高了测试序列的复用性。

验证需要的 UVM 寄存器模型,由脚本实现转换,使用 SystemRDL 格式描述寄


存器模型,并使用开源工具 Ordt 生成寄存器模型,减少潜在的错误,降低后期调试
的难度。在脚本转换过程中还能通过语义检查发现寄存器描述文件违规的情况。如
果寄存器描述文件有更新,可以再次生成需要相关文件格式,便于流水化作业。

本文研究的硬件加速器仿真验证平台中有三个 uvm_reg_block_rdl,分别存放权
重和图像乒乓缓存的寄存器配置。乒乓缓存是设计中在对一幅图像做卷积时,配置
另一幅图像的寄存器信息,这也是下文测试用例中要覆盖到的功能点,双缓存机制
提高了硬件加速数据的吞吐量。

寄存器模型不能直接访问 DUT 寄存器接口,而依赖于与 DUT 寄存器接口一致


的 uvm_component,完成硬件级别的总线传输。图4.11是寄存器模型和总线 UVC 的

36

万方数据
山东工商学院硕士学位论文

桥接方式。从激励流向的角度来看,寄存器序列把包含目标寄存器的有关信息存入
uvm_reg_item 实例中,送到 adapter。adapter 从 uvm_reg_item 中得到可以提取出总线
UVC 需要的数据,并产生总线 UVC 所需的 bus_seq_item 数据类型。完成数据内容提
取和再次写入后,bus_seq_item 通过 adapter 传入总线 UVC。在 bus_seq_item 的传输
下,总线 UVC 得到读写地址、数据、操作模式等一系列数据后再启动对总线的读写
访问。以写访问为例,假设总线上有反馈信号表示请求有效,那就以总线 sequencer
按照 response item 的过程传至 adapter,转换器也会对这个响应信号完成相应的处理。
同样的,反馈路径进行读访问时,会把总线读取的数据传输至 adapter,并最终返回
至与寄存器操作相关的方法返回值[78] 。

图 4.11 寄存器模型的桥接转换

寄存器模型的前门访问,不论是读还是写操作,寄存器模型都会由 sequence 产
生一个 uvm_reg_bus_op 的变量,这个变量中存储着操作类型和操作地址。如果是写
操作,还会将写入的数据等信息经过一个转换器 (adapter) 转换后交给 bus_sequencer,
再传到 bus_sequencer,最终到达 DUT。图4.12是寄存器模型前门访问的写操作模式
流程,除了完成前门访问的读写操作,还通过自动预测来更新寄存器的镜像值和期
望值,跟踪 DUT 中存在的实时变更的寄存器值。

其中 adapter 实现对类型的强制转换功能,reg2bus 是将寄存器模型通过 sequence


发出的 uvm_reg_bus_op 型的变量转换成 bus_sequencer 能够接收的形式。bus2reg 是
在检测到总线上有操作时,将收集来的 transaction 转换成 uvm_reg_bus_op 类型的
变量,便于寄存器模型可以及时更新对应的寄存器值。uvm_sequence_item 是父类,
reg_transaction 是子类,子类传给父类需要用 $cast 强制转换。

37

万方数据
第4章 UVM 仿真验证平台设计与实现

寄存器模型同样也可以发起读操作,再将数值返回给寄存器模型,由于总线的
特殊性,bus_driver 以驱动总线发起读请求时,它能一并获得要读的数值,假如它把
该值存入由 bus_sequencer 得到的 bus_transaction 中时,那么 bus_transaction 中已存
在读取的数值,该值通过 adapter 中 bus2reg 函数的传递,最终寄存器模型得到此值。

图 4.12 寄存器模型前门访问写操作

4.3 测试用例设计

验证工作需要根据卷积神经网络硬件加速器的内容,分解测试点,根据测试点
设计对应的测试用例。测试用例分为基础测试、随机测试、错误测试和定向测试四
种类型。
(1)基础测试是对每个功能点 sequence 发送受约束的 transaction 做测试;
(2)随机测试是 sequence 发送不受约束的 transaction 测试;
(3)错误测试是指 sequence 发送一些不符合卷积神经网络硬件加速器原理的
transaction 给 DUT,观察 DUT 的运行结果是否会受影响;
(4)定向测试的目的是在测试后期收敛覆盖率,由于卷积神经网络的参数较多,
上百个测试用例也还是会存在参数交叉覆盖的遗漏的情况。

38

万方数据
山东工商学院硕士学位论文

基础测试是对 DUT 每个功能点的具体测试,确保步长、卷积核尺寸、卷积并


行滑框、地址偏移量、数据读写次数、输入输出层数以及各功能层计算等基本功能
运行不出错[79] 。当基础测试通过之后说明整个验证平台可以进行基本工作,开始启
动大量的 sequence 发送不受约束的 transaction 给 DUT,这个阶段能够大大提高覆盖
率,随机测试的所有 transaction 生成方式都是使用参数化随机方式,避免了人为定
义产生一些不必要的错误。错误测试是由 sequence 发送一些不符合硬件加速器规则
的 transaction,观察 DUT 能否按照预想的设计思路运行出结果,同时也会在 DUT 正
常运行时,发送一些异常信号,测试是否会影响 DUT 的正常工作。定向测试是为了
验证后期覆盖一些交叉功能点,发送受约束的随机 transaction,同时也是为了覆盖率
的收敛。表4.1是具体的功能测试点和覆盖次数。

表 4.1 硬件加速器总线验证平台测试点
测试点 寄存器配置 Hits/Bins
Bank_switch 0/1 791/2
Burst_len 2n̂(n<=8) 27/8
Hard_trigger/ Soft_trigger 0/1 539/2
Slide_num/step 1∼5 200/5
Buffer_threshold 8(default) 190/8
Pixel_width 8/16bit 539/16
Kernel_size 3*3/5*5 352/5
Stride_address 8bit 7934/8
Bypass_mode 0/1 37/2
Relu 0/1 203/2
Pooling 0∼2(average,min,max) 285/3

以上测试点是在分析了卷积神经网络硬件加速器原理之后,根据卷积各个功能
层的计算方式、数据流控制以及握手协议等特性来划分测试点,从测试结果来看基
本涵盖了硬件加速器的各个特性。

4.4 功能仿真结果

经过反复调试的验证平台,确认可以顺利运行后,按照测试功能点进行逐步验
证,排除 bug。仿真完成后每个测试用例都会产生对应的波形文件。
UVM 验证平台判定测试用例通过的主要方法是输出结果对比,日志信息查看,
波形的时序检查等。在芯片面对的实际应用场景中,电路可能会遇到一些极端情况。
本节具体分析的是卷积核大小 5×5、步长 1、单个像素位宽 16bit、图像大小 60×60、
输入输出层数为 1 的基础测试仿真波形,然后使用 gvimdiff 工具比对,如图4.13从

39

万方数据
第4章 UVM 仿真验证平台设计与实现

scoreboard 中打印的日志文件,从 2829 行到 2836 行是图像一列的处理结果,确定


DUT 与验证平台的输出结果完全一致。

图 4.13 工具比对结果示意图

图 4.14 是硬件加速器主要的接口时序,其中图 a 是整个仿真的波形,包括系统


时钟和复位、APB 接口的寄存器配置、IP 运行触发信号、图像数据读取通道、卷积
核数据读取通道和计算结果输出通道。

图 b 中的端口信号是根据 APB 的时序和寄存器的地址,完成对寄存器的读写。


由于对寄存器的读写速率要求并不是很高,因此这里给灌入 APB 的时钟频率是整个
IP 模块频率的十分之一。

图 c 是卷积核数据通道,卷积核模块发出数据请求信号,kernel_driver 将 ack 信
号置高,确认握手完成后,在卷积核读数据信号有效的情况下,向卷积核缓存发送
随机的有符号数据。

图 d 是卷积触发信号 soft_trigger 保持一个时钟周期的高电平后,模块运行状态


信号 global_process_in 在下一个时钟上升沿保持高电平,读数据通道同样在握手成
功后,读数据信号接收验证组件 master_driver 发送的随机数,卷积核数据和图像数
据输入至 MAC 阵列开始计算,在此期间如果有第二幅图片需要运算,会对图像通道
的另一个寄存器块进行配置,提高 IP 的运行效率。直至第一幅图像的数据运算完成
后,global_process_out 状态信号才会拉低,等待下一幅图像数据的到来。

图 e 作为最后运算结果的输出通道,在数据写出通道信号握手成功后,就会向
外发送数据结果,在实际验证平台中会发送到 scoreboard,与 reference_model 的结

40

万方数据
山东工商学院硕士学位论文

果进行比较。每笔发送的数据都需要进行握手,假设外部存储空间存满,没有及时
返回 wr_channel_ack 信号,数据结果会一直存在设计内部的 FIFO 中,FIFO 存满后,
也会停止读通道的读数据请求,形成反压效果。

(a) 仿真缩略图

(b) APB 接口的寄存器配置

(c) 卷积核通道写入权重数据

(d) 读数据通道写入数据与卷积触发

(e) 写数据通道输出运算结果

图 4.14 加速器随机测试用例仿真波形

每个测试用例仿真结束后,验证平台都会打印其详细的仿真报告。仿真报告中
包括验证平台执行的相关信息,输出结果的比较。验证平台的仿真报告是标准化打

41

万方数据
第4章 UVM 仿真验证平台设计与实现

印,UVM 自身提供了一些内建的函数和方法供开发者灵活运用。根据验证的不同需
求,设置相应的冗余度和安全级别,生成的仿真报告更清晰有条理,便于仿真后续
的调试工作。以上述某一随机测试用例的仿真日志为例,其仿真报告如图4.15所示。

图 4.15 测试用例的仿真报告

4.5 覆盖率分析

覆盖率是验证 DUT 的功能正确性与完整性的重要指标,分为代码覆盖率和功能


覆盖率。代码覆盖率是 VCS(Verilog Compiled Simulator) 图形化工具自动搜集编写的
RTL 代码,
包括行、条件、跳转、分支和状态机,
编译时加-cm line+cond+branch+tgl+fsm
参数选项,当仿真运行完成后,会自动创建相应的数据库。

功能覆盖率是对数据组合和行为序列的检查。在本文中功能覆盖率是通过编写
覆盖组、覆盖点和交叉覆盖主要是获得对寄存器配值的数据覆盖率,同时也是硬件
加速器各层功能的测试指标。由于功能覆盖率是人为定义的,即使达到 100% 也不一
定将所有的场景都能覆盖,需要不断对测试用例进行迭代。

覆盖率驱动的验证方式既可以量化验证进度,
还能确保验证的完备性。
从图4.16的
代码覆盖率统计情况,可以看出通过多种测试方式,覆盖了所有待验证的功能点,将
代码覆盖率提升到接近 100%,说明卷积神经网络硬件加速器验证平台功能完备,可
以完成对卷积神经网络前向运算的验证工作。

42

万方数据
山东工商学院硕士学位论文

图 4.16 代码覆盖率统计

4.6 验证仿真优化

随着设计复杂度与规模的增加,验证平台的复杂度也随之增加。优化验证组件,
加快验证平台的仿真速度成为验证过程中的重要问题。以下是本文在搭建验证平台
时采用的几种优化方法,可根据实际应用相互配合,达到优化 UVM 仿真平台的目
的。

(1)降低频繁的函数或任务调用的开销,例如单独的计数器比用 foreach 遍历方


式计数更快。编译器可以将简单调用的函数或任务内联以避免堆栈帧操作,考虑到
编译器性能等原因,复杂的调用以及函数或任务本身的循环调用通常不会内联,每
个函数或任务都把数据引用推送至调用堆栈,并处理任意指定的返回,极大地增加
了仿真时间。函数在大量数据点被调用,需要创建可能影响缓存命中的堆栈帧,可
以考虑使用宏加快循环计算。

(2)减少判断条件的嵌套,循环条件中不带简单计算,避免每次循环反复计算;
与循环因子无关的计算跳出循环;循环内尽可能不引用,在硬件中引用在运行时是
静态的,可预先计算分层引用。在 SystemVerilog 编写的 testbench 中,引用一般是指
同期遍历类实例层次结构和动态类型,所有这类操作都能够在仿真运行时间内修改。
所以模拟器必需遍历全部的引用才可获取数据,但这也必然降低效率。

(3)分解或简化 UVM 验证平台中带约束的随机参数。尽量减少创建多个 new 对


象以及深度拷贝动态对象,
避免堆管理开销引起低效内存,
导致严重的缓存缺失。调用
randomize() 等函数,可在条件成立后再用。设置打印信息级别,用 uvm_report_enabled
函数触发打印信息。在 UVM 平台中,driver 或 monitor 进行 port 传递时,以 port.size
为条件,减少不必要的数据打包次数。

(4)SystemVerilog 中 logic 类型包含了 wire 线存储和 var 变量存储,若未提出

43

万方数据
第4章 UVM 仿真验证平台设计与实现

显式声明,那么存储类型交由仿真器按照上下文判定。Logic 类型的语义在除 inout、


input 外的其他一切情况下,都被默认是变量存储。而 wire 类型,仿真器能够折叠成
同一对象,达到更快的仿真速度。

(5)使用 generate 语句会创建一个静态层次结构,对于跨层次结构的问题,仿真


器会进行优化,但不能很好的优化复杂的问题,造成隐藏的性能问题。对定义变量
的直接操作相比于对其多个 bit 循环操作会更快。ref 能直接对目标方式的内存完成
操作,极大地提高了资源利用率,特别是对于大量复杂的数据结构,例如包含上百
个字段的结构体、上百个元素的动态数组、联合数组和队列等。函数只要具备读取
大型数据对象的访问权限便可,不要求写入数据。

(6)
“动态数据结构”如队列、动态数组、联合数组是常见性能问题的来源,因
此尽可能使用静态数组而不是动态数组。即便数组位宽会有些许变化,可以提前设
定静态数组更大一些,并不是使用动态数组,减少内存和时间的开销。队列和动态
数组都有各自需求的使用场景,虽然他们的功能类似,但不建议随意混用。队列能
自动调整大小的前后操作,而动态数组便于随机插入、删除操作和查找,仿真器内
部具备对应它们各自的优化操作。用静态类代替动态类,避免同一组类被反复分配
内存和释放内存,保证仿真的整体内存占用保持一致,加快仿真速度。

(7)验证平台中常被调用的接口功能,放入接口而不是类中定义,更具仿真效
率。功能与接口存在一定的关联性,具备可重用性,另外,接口上操作的类具备和接
口关联的基本操作,保证对接口将来的任意操作都能使用该基本代码,但是 virtual
接口是没有权限引用此类代码的。

(8)SystemVerilog 中常用的功能是带有触发信号,如时钟或复位的 always 块,绝


大多数仿真器对这种静态进程都会做深度优化,然而在指定时间,越多的事件驱动
导致仿真器运行速度越慢,例如尽量避免动态任务或 function 函数、虚拟类的任务和
虚拟类接口功能等,可能会致使仿真器无法优化。

(9)断言的序列和属性尽量避免使用局部变量,虽然可能需要局部变量来操纵
序列和属性内部的数据,但仿真过程中也增加了开销。

(10)在覆盖率收集时,合并使用相同事件的采样过程,尽量使用特定事件触发
器,而不是系统时钟之类的通用事务,用于采样覆盖率、覆盖组共享共同表达式等
方式来缩短仿真运行时间。

表4.2是验证平台经过上述一系列优化后,再对同一测试用例进行仿真的时间对

44

万方数据
山东工商学院硕士学位论文

比,为降低其他因素的影响,验证平台使用的 RTL 代码一致。硬件加速器仿真验证


平台在测试方案参数是 64 输入输出层、256x256 图像大小、步长 1、单个像素点位
宽 16bit 以及激活池化都使能的边界条件下,仿真时间相比原来缩短 28.91%。

表 4.2 验证平台优化前后消耗仿真时间
验证平台 开始时间 结束时间 仿真消耗时长
初始化 Nov 25 08:21:12 2021 Nov 25 19:12:53 2021 10 时 51 分 41 秒
最终优化 Dec 13 21:34:03 2021 Dec 14 05:30:25 2021 7 时 56 分 22 秒

本文提出的编码层面的验证仿真提速策略,对于代码规模不大的验证任务,并
不是最有效的方式,甚至有的收益难以感知。但当验证规模到一定程度,包含大量
的仿真数据,如图像视频等数据流处理的场景,有明显的区别。

4.7 本章小结

本章根据硬件加速器 IP 的结构和寄存器配置说明,完成了 UVM 仿真验证平台


环境的搭建,并根据设计的需求,实现不同组件功能和组件之间的通信。按照功能
描述提取验证功能点,制定验证方案。在验证平台调试通过后进行仿真验证,从仿
真报告、波形时序和输出结果比对三方面进行分析,确定硬件加速器 IP 的设计功能
正常,能高效完成卷积、激活和池化运算,符合设计的预期。

45

万方数据
第 5 章 卷积神经网络加速器板级测试与电路综合

第 5 章 卷积神经网络加速器板级测试与电路综合

上一章对加速器模块的各个功能进行功能仿真,本章将对仿真通过的待测试设
计模块进行进一步的板级验证,板级验证前需要对待测试模块进行综合,完成板级
验证。本章搭建 FPGA 原型验证平台,并设计了待测试模块的外部环境,根据仿真
测试用例的激励,比对板级验证与仿真验证结果。完成 RTL 代码验证工作后,使用
DC(Design Compiler) 工具将逻辑电路转换到工艺库,并对设计的时序、面积等设置
约束条件,产生网表文件,供后端布局布线。

5.1 原型验证硬件平台资源

FPGA 原型验证已经是当前原型验证的主流且成熟的芯片验证方案,它将 RTL


移植到现场可编程门阵列来验证 ASIC 的功能,并可以在后续样片做回归测试时进行
驱动和应用开发。原型验证是一项壁垒颇高的技术,串联着芯片设计和终端应用,需
要极强的适用性和灵活度来适应发展迅速和多样性的芯片研发[80] ,FPGA 原型验证
平台的硬件设计应当研究 FPGA 内部可用的逻辑资源、应用资源、PCB(Printed Circuit
Board) 信号质量、调试难度、可扩展性、组态和成本等方面的因素,本文中使用的原
型验证系统使用的是基于 Xilinx 公司的开发板,扩展版是根据 IP 实际验证需求而采
用国内成熟产品的原型验证方案[81] 。

基于 FPGA 的原型验证主要有基于 Altera 和 Xilinx 的 FPGA 验证平台,从 RTL


仿真、编译综合、布局布线、下载调试等方面综合来说,Xilinx 在设计项目的开发中
具备更精细的控制和自动化。由于 SoC 芯片设计的时钟频率很高,为了让原型验证
平台尽可能和 SoC 芯片性能接近,让 FPGA 原型平台运行在尽可能高的频率上,而
门控时钟容易产生毛刺[82] ,因此在 FPGA 设计中使用时钟使能寄存器代替门控时钟。

图5.1展示了本文所采用的 FPGA 开发板,


该开发板的 Single KU115 Prodigy Logic
Module 采用 S2C 第六代原型技术,基于赛灵思 Kintex UltraScale XCKU115 FPGA 的
SoC 与 ASIC 原型系统,是面向物联网应用和其他子系统级模块设计的 FPGA 原型
验证的解决方案。它不仅有大容量与可扩展的资源,能更好的贴合计算密集型应用
的需求[83] ,还拥有 48 路高速收发器来满足高速数据的通信需求,这种通用且相对独
立的原型系统与原型子卡库集成,快速构建目标原型系统[84] 。

46

万方数据
山东工商学院硕士学位论文

图 5.1 FPGA 开发板

FPGA 作为芯片产品,
内部的信号无法直接观测。通常需要借助于 FPGA 的 debug
工具在生成 Bit 文件前选取要观察的信号。当 Bit 文件加载运行时,必须通过配套的
debug 工具观察指定的信号波形,受限于 Block RAM 的容量以及信号优化等原因,调
试的效率比较低。而本文采用图5.2的劳特巴赫 TRACE32 工具支持嵌入式市场上通
用的微处理器架构,工具硬件的模块化结构,提供了一个集成的调试环境。其调试
系统由调试模块和指定芯片架构的调试线缆组成,提供了标准的调试功能[85] ,如本
文中所用到的 JTAG 调试接口、程序运行控制、多路调试和高级语言调试等功能。

图 5.2 劳特巴赫调试器

5.2 板级测试整体结构设计

针对 Xlinx FPGA 内部资源,搭建的测试平台,如图5.3所示,该测试平台通过与


电脑主机进行交互,更便于直观地对 FPGA 芯片内部资源进行测试。

47

万方数据
第 5 章 卷积神经网络加速器板级测试与电路综合

图 5.3 测试平台框图

5.2.1 单通道环境搭建

本文构造了单通道的卷积神经网络硬件加速器测试环境,分别由 JTAG_Ctrl、
mem_ctrl、memory 模块、Lint2APB 以及 DUT 五个模块组成,如图5.4所示。

图 5.4 单通道测试环境整体结构

本文采用的 JTAG_Ctrl 模块实现将上位机与测试系统进行连接以及将 JTAG 协


议的数据转为 Lint 协议的数据传输给 mem_ctrl 模块,为适应不同总线位宽 IP 的调
试工作,该模块支持 32bit 数据的传输;mem_ctrl 模块通过寻址确定从哪个存储器中
读写数据以及从 apb interface 传输数据;Lint2APB 模块主要是将 Lint 协议转为 APB
协议,Lint 协议与 APB 协议均不支持突发传输,所以不需要额外的存储器,直接通
过桥接的方式,将寄存器的配置数据灌入 DUT。

48

万方数据
山东工商学院硕士学位论文

图5.5是 Lint2APB 桥接器的读写时序,APB 信号的跳变只与时钟上升沿有关,并


且每次传输至少需要两个周期,所以从 Lint 接口发出读写请求到 APB 接收到数据至
少需要三个时钟周期。JTAG 和 APB 总线位宽都是 32bit,所以从激励输入到最后转
换成 APB 接口的数据,不需要额外的 memory 来存储数据[86] 。

图 5.5 Lint2APB 读写时序图

板级测试的这些数据、地址及寄存器配置信息都来源于 UVM 验证平台中运行的


随机测试用例,
rd_channel_mem 主要用于存储需要处理的图像数据;
kernel_channel_mem
用于存储卷积核数据;wr_channel_mem 用于存储计算之后的数据,这些 memory 本
质上就是同步 FIFO,用先进先出的数据交互方式完成数据的传递以及不同数据接口
间数据匹配。对 FIFO 以及 Lint2APB 寻址范围如表5.1所示:

表 5.1 存储器模块的寻址范围

地址范围 存储器

0x2000_0000∼0x2000_1fff rd_channel_mem
0x0800_0000∼0x0800_1fff kernel_channel_mem
0x1000_0000∼0x1000_2fff wr_channel_mem
0x0000_0000∼0x0000_1fff lint2apb

5.2.2 多通道环境搭建

图5.6是多通道的卷积神经网络硬件加速器测试环境整体结构的示意图,从图中
可以看出多通道的加速器测试环境由 JTAG_Ctrl、mem_ctrl、memory 模块、Lint2APB、
arbiter 以及 HWPE 六个模块组成。相比单通道需要处理多个图层的数据分配问题,用

49

万方数据
第 5 章 卷积神经网络加速器板级测试与电路综合

arbiter 的仲裁功能来选择向每个图层对应的通道,从存储器中读取或写入数据。

图 5.6 多通道测试环境整体结构

仲裁器采用轮询调度 (Round Robin) 的仲裁方式,


一般的轮询仲裁会采用如图5.7综
合的电路,修改优先级的方式,定义一个基础的独热信号,当有且只有一位为 1 时,
表示对应的数据通道的请求信号优先级最高,直至握手成功和数据传输完成后,将
该请求信号优先级降至最低,它的高一位优先级变为最高,以此类推即可完成轮询
仲裁的功能[87] 。

图 5.7 轮询优先级仲裁器原理图

50

万方数据
山东工商学院硕士学位论文

但这样的设计存在面积和时序上优化不足的情况,所以本文利用屏蔽通路的方
式实现轮询仲裁机制。具体来说,采用了优先级不变的模式,当某一路请求信号握
手完成后,人为的把这个通路的请求信号屏蔽掉,只允许之前没有握手的通道参与
仲裁,等到所有的通道都处理完再把屏蔽打开。如图5.7所示,当还存在请求信号时,
选择上面的通路,否则选择未握手的信号通路,直至所有通道的握手完成。

相比于修改优先级实现遍历的轮询仲裁器,固定优先级并屏蔽通路的办法实现
的轮询仲裁器,在上述四通道的情况下综合出的电路相差不大,但在 64 通道的情况
下时序面积功耗上的优化更好。图5.8给出了轮询优先级仲裁器综合分析结果,从图
中对比的情况来说,时序、面积和功耗都有所降低,实际算法模型中通道数比较多
的情况下,尽可能在理想状态下将数据灌入 DUT,得到的测试结果更符合 ASIC 的
真实情况。同时 leakage power 也只有 1.5uW 左右,与动态功耗不同的是其本身和频
率无关,是电路没有跳变时电路的功耗,在 FPGA 灌入比特流文件并长时间不断电
的情况下,不会因为温度给芯片造成一定的负担[88] 。

图 5.8 轮询优先级仲裁器电路综合分析

5.2.3 测试步骤

图5.9给出了 FPGA 与调试器实物连接的测试平台示意图,可以看出,首先建立


上位机、调试工具以及 FPGA 板之间的连接,在所有设备通电后,为减少测试繁琐
的步骤,提高板级验证的效率,运行脚本预处理的数据文件。这些数据的来源都是
上一章节中 UVM 验证平台中产生的随机测试用例和定向功能点的测试用例,这样
可以达到 UVM 仿真平台与板级验证测试环境相互验证的效果。

51

万方数据
第 5 章 卷积神经网络加速器板级测试与电路综合

图 5.9 FPGA 与调试器实物连接的测试平台

上位机与 FPGA 连接完成后如图5.9所示,经过脚本处理的文件主要包含以下的


测试步骤:

(1)上位机往地址 0x800_2ff0 写入数据 1 置高 JTAG_en 信号,此时三块 mem 只


能通过 JTAG 进行读写操作;

(2)输入命令 Data.Set EMD:address %LE %Long data 将数据写入 rd_channel_mem


以及 kernel_channel_mem 中;

(3)上位机往地址 0x800_2ff0 写入数据 0 置低 JTAG_en 信号,此时三块 mem 只


能通过 ih_hwpe_top 模块进行读写数据;

(4)上位机将 ih_hwpe_top 需要的配置数据写入;

(5)上位机往地址 0x800_2ff0 写入数据 1 置高 JTAG_en 信号,此时可以通过


JTAG 来对 wr_channel_mem 的数据进行读取。

至此单次测试结束,接下来分析测试结果,并与 UVM 验证平台的仿真结果进行


对比,查看运行结果的一致性。

5.3 板级验证结果分析

5.3.1 单通道验证结果

单通道仿真测试时,往 DUT 模块中读数据通道写入的数据如图5.10所示,板级


验证时上位机往 read_channel_memory 中写入的数据是经过脚本预处理后,按照符合

52

万方数据
山东工商学院硕士学位论文

调试工具代码要求的方式,数据经劳特巴赫调试器转换成 JTAG 协议后,再按照每个


时钟周期 32bit 的数据量写入相应的存储器。

图 5.10 单通道脚本预处理数据写入调试器

上述写入的数据包括数据图像、卷积核和寄存器配置信息,可由调试工具运行
后,在赛灵思公司开发的集成设计环境 vivado 软件中,抓取对应信号通道的波形图,
确认由上位机写入的数据,经过调试器转换数据类型,最终进入设计 IP 外部接口的
激励一致。

图 5.11 单通道图像数据读入板级波形

图 5.12 单通道图像数据读入仿真波形

这些数据的来源都是上一章中仿真验证平台中的测试用例,图5.11是板级验证
工具 vivado 以读数据请求信号上升沿为触发条件抓取的波形,图5.12是在仿真验证
平台中用仿真工具 verdi 打开的波形图。保证了灌入的图像数据信息一致。

图5.13和图5.14分别是卷积核数据的板级和仿真波形,确认板级验证平台输入的
所有数据以及寄存器配置信息都一致后,再去对比卷积神经网络硬件加速器 IP 的结
果才有意义。

53

万方数据
第 5 章 卷积神经网络加速器板级测试与电路综合

图 5.13 卷积核数据读入板级波形

图 5.14 卷积核数据读入仿真波形

由于图中波形截取的限制,需要说明数据配置是单输入单输出,卷积核大小是
3x3,卷积核的数据位宽是 8bit,图像尺寸为 64x64,步长 1,图像的单个像素点位
宽是 16bit。将 IP 中卷积触发信号置为有效后,等待 FPGA 中 DUT 运行一段时间后,
可以得到图5.15中左边是调试工具从存储器中获取的数据,右边是仿真验证平台中
打印出的数据。图5.16是仿真验证平台中截取的数据结果,图5.15中地址和数据的完
全一致,可以判定板级验证与仿真验证平台的正确性。

图 5.15 单通道计算结果输出仿真波形

图 5.16 单通道仿真与板级测试结果对比

5.3.2 多通道验证结果

多通道仿真测试相比于单通道需要更大的数据存储空间,同时还添加了仲裁器。
图5.17的板级波形和图5.18中调试器写入脚本的数据一致,确保从上位机输入的激励

54

万方数据
山东工商学院硕士学位论文

到模块接口读取的数据完全相同,减少后期验证调试不必要的工作量。

图 5.17 多通道图像数据读入板级验证波形

图 5.18 多通道脚本预处理数据写入调试器

图5.19是卷积神经网络加速器模块卷积核接口读取的波形,它的输入数据也是
根据仿真验证产生的激励而来,与仿真中卷积核的数据相同。

图 5.19 卷积核数据读取板级验证波形

从图5.20可以看出写通道 0、1、2 的握手满足仲裁器的轮询机制,FPGA 的运行


结果与仿真验证平台的测试结果完全相同,波形中握手的时序以及数据的有效信号

55

万方数据
第 5 章 卷积神经网络加速器板级测试与电路综合

也完全正确。本文还配置 64 输入输出通道、图像大小 256×256 的边界测试用例,对


卷积神经网络硬件加速器 IP 进行验证。

图 5.20 多通道计算结果输出板级验证波形

图5.21是多通道仿真与板级测试结果得对比图,左边一栏是板级验证的结果从
write_channel_memory 中读取出来,经过调试器的数据类型转换,存入上位机。右边
是仿真计算结果的地址和数据,两者对比结果相同,说明多通道的基础测试完全正
确。以仿真验证的测试用例为参考,用同样的方法对设计进行大量的板级验证,因
此,可以得出卷积神经网络加速器模块功能符合设计预期的结论。

图 5.21 多通道仿真与板级测试结果对比

5.4 RTL 级综合优化与分析

Design Compiler 主要完成图5.22中把设计的 RTL 级描述转化为门级网表的过程,


将电路的数学运算和行为功能分别通过 HDL 语言特定的运算符和行为结构描述出
来,明确时序电路在每个时钟边沿的行为[89] 。在下面的描述中,将围绕综合进行具体
的分析。综合共包含转换、优化、映射三个阶段。转换是用综合工具将 HDL 语言描
述或者未映射的电路通过工艺独立的 RTL 级逻辑来实现,使用 gtech.db 库中的 RTL

56

万方数据
山东工商学院硕士学位论文

级单元组成中间网表;优化和映射就是对已有的网表分析,去除设计中的冗余单元,
对不满足限制条件的路径做优化,然后把优化之后的电路映射到实际的工艺库上。

图 5.22 DesignCompiler 综合示意图

因为触发器与锁存器两种不同时序单元的共存电路会增加调试复杂度,所以本
文综合的过程基本上采用同一种时序单元,为避免实际电路中产生锁存器,执行判
断语句前赋予默认的状态,即先对输出赋初值再进行判断,也可以选取 if…else、if
…else 的语法构造[90] 。

预综合流程意味着为综合编译进行准备工作,包含 DesignCompiler 的启动、设


置各种库文件、创建启动脚本文件、读入设计文件、确定 DC 中的设计对象、模块之
间的划分以及 verilog 编码等。

本文以 TCL(Tool Command Language) 脚本运行 dc_shell,它的功能强大,是目


前推荐使用的命令行方式。工艺库是综合后电路网表最终要映射到的库,由芯片制
造商提供,本文所用的工艺库是 GLOBALFOUNDRIES 的 22nm 的.db 格式文件,包
含了各个门级单元的行为、引脚、面积、时序以及功耗等方面的参数,DC 就是按照
库中单元电路的延迟信息来计算路径的延迟,并根据面积、延时以及驱动能力的差
异来选取符合的单元来完善电路。新版本的 DC 在实际使用时,需要用 InterraSystem
公司的 memory compiler 工具将 lib 文件转化为可识别的.db 文件格式[91] 。在 TCL 模
式下,可以设置如下约束:

create_clock -name cfclk [get_port clk] -period 1.25 //设置时钟频率

set_clock_uncertainty 0.375 cfclk

set DesignMaxArea 0 //面积

set DesignMaxCapacitance 1

set DesignMaxTransition 1.5

57

万方数据
第 5 章 卷积神经网络加速器板级测试与电路综合

set DesignMaxFanout 16 //单元扇出

set ClockGatingMinNum 4 //功耗

set high_fanout_net_pin_capacitance 0.001

set_host_options -max_cores 6 //内核数量

图5.23是 RTL 模块的综合示意,在 RTL 代码通过仿真和板级验证后,进行综合


时要设置约束和设计属性等操作,DesignCompiler 在此基础上把 RTL 综合成门级网
表,再对综合出的网表分析,若不符合预期需修改约束条件或者修改 RTL 代码。其
中约束大致有时序和面积、电路的环境属性、时序和负载在不同模块间的分配以及
时序分析。

图 5.23 RTL 模块综合示意图

在综合编译过程中,运用 DC 进行结构级、逻辑级和门级三个阶段的优化方式。
图5.24是这三个阶段的关系图,结构级是高层次的综合,可以采用 DesignWare IP 库
的选择、共享子表达式、资源共享以及运算符排序等方法优化;经过结构级优化电
路转化成与工艺无关的 GTECH 库的形式,本文在逻辑级优化时使用的是 DC 默认
的结构化方式来综合逻辑级电路,这样可以兼顾时序和面积的结果;最后门级优化
就是把 GTECH 的电路映射到工艺库,并在不影响时序和面积的前提下修正违反规
则的单元。

58

万方数据
山东工商学院硕士学位论文

图 5.24 DesignCompiler 优化的三个阶段

经过预综合和施加设计约束后,开始编译生成门级网表,在满足设计规则的条
件下运用上述的方法优化,最终综合出满足时序和面积的电路。表 5.2 是本设计在不
同频率下的综合结果,并与 Eyeriss 卷积神经网络加速相比较,本设计在逻辑门数量
是其 2 倍的情况下,功耗更低,延迟也符合设计要求。

表 5.2 不同频率下卷积神经网络加速器综合结果对比
frequency(Hz) 800M 1G 2G 200M(Eyeriss)
2
area(um ) 451814 452520 454869 250000
gate 2404289 2406634 2418399 1176000
Leakage power(uW) 76660.8 78692 96785
Total power(mW) 142.1858 145.4759 160.4868 236
Latency 0.83ns 0.69ns 0.34ns 5.2ms(total)

5.5 本章小结

本节首先对设计模块进行综合和实现,然后搭建单通道和多通道的验证环境,其
中单通道的验证环境需要将 Lint 协议转换为 APB 协议来配置寄存器,多通道的环境
中,面对多个通道的读数据请求,通过轮询优先级仲裁器实现仲裁请求的公平性。最
后基于 GLOBALFOUNDRIES 22nm 工艺库完成硬件加速器 DesignCompiler 逻辑综
合后时序、面积与功耗的优化。为确保验证的严谨性,板级测试与仿真验证的激励
和配置寄存器一致,再进行比较得出两者的验证结果相同,经过以上分析,本文设
计的卷积神经网络加速器满足设计要求,达到前端功能验证的交付标准。

59

万方数据
第 6 章 总结与展望

第 6 章 总结与展望

6.1 本文工作总结

CNN 是目前较为成熟的神经网络模型,有关硬件加速器 IP 的设计与验证已经成


为 SoC 研究的热点。本文根据卷积神经网络的原理,以经典的算法模型为参考,分
析各功能层的计算模式,按照 ASIC 标准的研发流程,完成卷积神经网络加速器的结
构设计后,分别进行仿真验证、板级验证以及电路综合验证。仿真验证平台对卷积
神经网络硬件加速器的各项功能进行了全面的测试,板级验证以仿真测试用例的数
据为基础,其验证结果与仿真输出结果一致,两者之间互相印证。然后通过优化综
合出实际电路,进而得出时序、面积和功耗的结果,完成卷积神经网络硬件加速器
芯片前端的验证工作。
本文做了以下的研究工作:
(1)讨论了卷积神经网络的原理,完成卷积神经网络前向传播运算的数据流结
构设计,并利用 SystemVerilog 的面向对象机制和产生受约束的随机变量等特性,完
成硬件加速验证模块的功能。
(2)分析了 JTAG、APB 和 Lint 的通信协议,包括 APB 的传输时序、握手机制和
突发传输以及 JTAG 协议的通道工作原理,为测试用例和验证方案的设计提供参考。
(3)研究了 UVM 验证方法学,通过分析 UVM 基类和常用类的功能,以及 UVM
的 phase 机制、config_db 机制、TLM 通信机制、sequence 机制和寄存器模型,进行
了后续 UVM 仿真验证平台的搭建。
(4)根据卷积神经网络和数据传输的功能点,搭建了一个基于 UVM 的卷积神经
网络硬件加速器验证平台,充分验证卷积神经网络硬件加速 IP 的各项功能,优化组
件之间的通信,避免读写寄存器延迟导致的仿真报错。该平台可以输出符合加速器
的各种激励,经过大量的测试保证验证工作的完备性,并具备一定的可扩展性和可
复用性。
(5)针对卷积神经网络硬件加速器 IP 搭建了 FPGA 测试环境,针对多输入多输
出的数据通道,设计固定优先级的轮询仲裁器,面对大量的数据通道,本文所搭建
的验证环境综合出的时序、面积和功耗等效果更好。
(6)通过对设计模块施加约束,完成了将 RTL 级代码综合出实际的电路,分析

60

万方数据
山东工商学院硕士学位论文

编译报告,调整优化的方法和策略,得到符合要求的约束结果。

6.2 展望

研究卷积神经网络硬件加速器和验证工作需要花费大量的时间和精力,本文通
过卷积神经网络验证平台的搭建及研究,在专用加速器验证方面取得一定成果,但
还有很多可以改善和进一步提高的地方,对未来可进行的研究工作规划总结如下:

(1)本文用实验室现有的卷积神经网络硬件加速器 IP,把研究的重点放在仿真
验证和板级验证,而接下来还需要测试实际算法模型的运行状况。

(2)本文中仿真验证平台完成了卷积神经网络硬件加速器 IP 的验证工作,但对
于相似类型的神经网络模型设计模块的验证环境搭建,可能还需要少量的代码修改,
并不能做到完全的可重用。

(3)由于芯片的研发周期较长,本文研究的课题中后续会包含 ASIC 流片之后进


行的回归测试,还需要进一步确认本文验证工作实际意义上的正确性。

61

万方数据
参考文献

参考文献

[1] Hong J, Arslan S, Lee T, et al. Design of Power-Efficient Training Accelerator for Convolution
Neural Networks [J]. Electronics, 2021, 10 (7): 787.

[2] Lin W, Adetomi A, Arslan T. Low-Power Ultra-Small Edge AI Accelerators for Image Recognition
with Convolution Neural Networks: Analysis and Future Directions [J]. Electronics, 2021, 10 (17):
2048.

[3] 许可. 卷积神经网络在图像识别上的应用的研究 [D]. 杭州: 浙江大学, 2012.

[4] Ahmadi M, Vakili S, Langlois J P. CARLA: A Convolution Accelerator With a Reconfigurable and
Low-Energy Architecture [J]. IEEE Transactions on Circuits and Systems I: Regular Papers, 2021,
68 (8): 3184–3196.

[5] 赵梦醒. 基于 FPGA 的卷积神经网络专用异构加速器的研究 [D]. 济南: 山东大学, 2020.

[6] 吴正文. 卷积神经网络在图像分类中的应用研究 [D]. 成都: 电子科技大学, 2015.

[7] Hsieh M-H, Liu Y-T, Chiueh T-D. A Multiplier-less Convolutional Neural Network Inference Ac-
celerator for Intelligent Edge Devices [J]. IEEE Journal on Emerging and Selected Topics in Cir-
cuits and Systems, 2021, 11 (4): 739–750.

[8] Lu L, Xie J, Huang R, et al. An efficient hardware accelerator for sparse convolutional neural net-
works on FPGAs [C]. In 2019 IEEE 27th Annual International Symposium on Field-Programmable
Custom Computing Machines (FCCM), 2019: 17–25.

[9] 曾成龙, 刘强. 面向嵌入式 FPGA 的高性能卷积神经网络加速器设计 [J]. 计算机辅助设计与


图形学学报, 2019, v.31 (09): 181–188.

[10] 龚豪杰. 基于 FPGA 的卷积神经网络加速方法研究与实现 [D]. 北京: 中国科学院大学 (中国


科学院国家空间科学中心), 2021.

[11] 况朝青. 基于 RISC-V 的智能边缘处理器研究及 FPGA 实现 [D]. 重庆: 重庆邮电大学, 2021.

[12] Shen Y. The Argus FPGA-Based CNN Accelerator Generator [D]. Long Island: State University
of New York at Stony Brook, 2021.

[13] Trippel T D. Developing Trustworthy Hardware with Security-Driven Design and Verification [D].
Ann Arbor: University of Michigan, 2021.

[14] Mayekar P A. Design and Verification of a DFI-AXI DDR4 Memory PHY Bridge Suitable for
FPGA Based RTL Emulation and Prototyping [D]. Rochester: Rochester Institute of Technology,
2019.

62

万方数据
山东工商学院硕士学位论文

[15] 何俊桦. 基于 FPGA 的深度学习计算平台设计与实现 [D]. 北京: 北京邮电大学, 2020.

[16] 张强. UVM 实战. 卷 1 [M]. 北京: 机械工业出版社, 2014.07.

[17] Piziali A. Functional verification coverage measurement and analysis [M]. New York: Springer,
2008.

[18] 克里斯·斯皮尔, 斯皮尔, 张春, et al. System Verilog 验证: 测试平台编写指南 [M]. 北京:
System Verilog 验证: 测试平台编写指南, 2009.

[19] 刘斌. 芯片验证漫游指南: 从系统理论到 UVM 的验证全视界 [M]. 北京: 电子工业出版社,


2018.04.

[20] Singh B P. Knowledge-Guided Methodology for Soft IP Analysis [D]. Cleveland: Case Western
Reserve University, 2015.

[21] 熊涛, 蒋见花. 基于 UVM 验证方法学的纵向可重用研究 [J]. 微电子学与计算机, 2016, 33 (04):


64–68.

[22] 翟社平, 邱程, 杨媛媛, et al. 基于 FPGA 的卷积神经网络加速器设计与实现 [J]. 微电子学与


计算机, 2019, 36 (8): 83–86.

[23] Nagesh K A, Shilpa D. Verification of SerDes Design Using UVM Methodology [C]. In Proceeding
of Fifth International Conference on Microelectronics, Computing and Communication Systems,
2021: 607–616.

[24] Zhao T, Qiao L, Chen Q. An FPGA-Based CNN Efficient Storage Processor [J]. IOP Conference
Series. Materials Science and Engineering, 2019, 569 (3).

[25] 王心弋. 基于 UVM 的自适应验证平台设计与实现 [D]. 成都: 电子科技大学, 2020.

[26] Moskala M, Kloczko P, Cieplucha M, et al. UVM-based Verification of Bluetooth Low Energy Con-
troller [C]. In 2015 IEEE 18th International Symposium on Design and Diagnostics of Electronic
Circuits & Systems (DDECS), 2015: 123–124.

[27] Ni W, Wang X. Functional coverage-driven UVM-based UART IP verification [C]. In 2015 IEEE
11th International Conference on ASIC (ASICON ), 2015.

[28] 李雨. 基于 UVM 的 SMBus 总线接口的验证 [D]. 西安: 西安电子科技大学, 2019.

[29] Fathy K, Salah K, Guindi R. A proposed methodology to improve UVM-based test generation and
coverage closure [C]. In Design & Test Symposium, 2016: 147–148.

[30] Stotland I, Shpagilev D, Starikovskaya N. UVM based approaches to functional verification of


communication controllers of microprocessor systems [C]. In East-west Design & Test Sympo-
sium, 2016.

[31] Gayathri M, Sebastian R, Mary S R, et al. A SV-UVM framework for Verification of SGMII IP core

63

万方数据
参考文献

with reusable AXI to WB Bridge UVC [C]. In 2016 3rd International Conference on Advanced
Computing and Communication Systems (ICACCS ), 2016.

[32] 彭楠. 基于 UVM 的 Flash 存储器功能验证 [D]. 西安: 西安电子科技大学, 2018.

[33] Khalifa K, Salah K. Implementation and verification of a generic universal memory controller based
on UVM [J]. IEEE, 2015: 1–2.

[34] 彭晓玉. 基于 UVM 的 SM4 算法模块验证研究 [D]. 西安: 西安电子科技大学, 2018.

[35] Conti E, Marconi S, Christiansen J, et al. Simulation of digital pixel readout chip architectures
with the RD53 SystemVerilog-UVM verification environment using Monte Carlo physics data [J].
Journal of Instrumentation, 2016, 11 (01): C01069.

[36] 陈绍辉. 基于 UVM 对 SOC 关键外设的验证 [D]. 合肥: 合肥工业大学, 2020.

[37] Marconi S, Conti E, Christiansen J, et al. Reusable SystemVerilog-UVM design framework with
constrained stimuli modeling for High Energy Physics applications [C]. In IEEE International Sym-
posium on Systems Engineering, 2015: 391–397.

[38] 赵经天. 基于 UVM 的 SAS 控制器模块验证 [D]. 杭州: 杭州电子科技大学, 2019.

[39] Priyanka B, Gokul M, Nigitha A, et al. Design of UART Using Verilog And Verifying Using
UVM [C]. In 2021 7th International Conference on Advanced Computing and Communication
Systems (ICACCS), 2021: 1270–1273.

[40] Ni W, Zhang J. Research of reusability based on UVM verification [C]. In 2015 IEEE 11th Inter-
national Conference on ASIC (ASICON), 2015: 1–4.

[41] 谢峥, 王腾, 雍珊珊, et al. 一种基于 UVM 面向 RISCCPU 的可重用功能验证平台 [J]. 北京大
学学报 (自然科学版), 2014, 50 (02): 221–227.

[42] Salah K. A UVM-based smart functional verification platform: Concepts, pros, cons, and opportu-
nities [J]. IEEE, 2015: 94–99.

[43] Goel A, Sundari B B T, Mathew S. UVM based Controller Area Network Verification IP (VIP) [C].
In 2020 International Conference on Smart Electronics and Communication (ICOSEC), 2020: 645–
652.

[44] 刘达, 倪伟, 徐春琳. 基于 UVM 的 AXI 总线验证 IP 设计 [J]. 微电子学, 2019, 49 (05): 680–685.

[45] 李世超. 基于 UVM 的 MC-SOC 中可重用验证平台的设计与实现 [D]. 成都: 电子科技大学,


2018.

[46] Melikyan V, Harutyunyan S, Kirakosyan A, et al. UVM Verification IP for AXI [C]. In 2021 IEEE
East-West Design & Test Symposium (EWDTS), 2021: 1–4.

[47] Peng X, Wang S, Wang H, et al. Function verification of SRAM controller based on UVM [C].

64

万方数据
山东工商学院硕士学位论文

In 2019 IEEE 13th International Conference on Anti-counterfeiting, Security, and Identification


(ASID), 2019: 1–5.

[48] Harshavardhan M, Hegde G. AHB Protocol Verification Using Reusable UVM Framework and
System Verilog [M] // Harshavardhan M, Hegde G. Computer Networks and Inventive Communi-
cation Technologies. Springer, 2021: 2021: 729–742.

[49] 李兆斌. 基于 UVM 的 AXI4 总线协议接口 IP 验证的研究与实现 [D]. 广州: 暨南大学, 2017.

[50] Chau C K. A Hierarchical Approach to Formal Modeling and Verification of Asynchronous Cir-
cuits [D]. Austin: The University of Texas at Austin, 2019.

[51] Bailey S. Rapid ASIC Design for Digital Signal Processors [D]. Berkeley: University of California,
Berkeley, 2018.

[52] Jiang S. Productive and Extensible Hardware Modeling, Simulation, and Verification Methodolo-
gies [D]. Ithaca: Cornell University, 2021.

[53] 王子潇. 基于异构计算平台的深度卷积神经网络加速方法研究 [D]. 北京: 北京交通大学,


2021.

[54] Ge F, Wu N, Xiao H, et al. Compact convolutional neural network accelerator for iot endpoint
soc [J]. Electronics, 2019, 8 (5): 497.

[55] 何鹏程. 改进的卷积神经网络模型及其应用研究 [D]. 大连: 大连理工大学, 2015.

[56] Li J, Jiang S, Gong S, et al. SqueezeFlow: A sparse CNN accelerator exploiting concise convolution
rules [J]. IEEE Transactions on Computers, 2019, 68 (11): 1663–1677.

[57] Zhao Y, Wang D, Wang L. Convolution accelerator designs using fast algorithms [J]. Algorithms,
2019, 12 (5): 112.

[58] 段萌. 基于卷积神经网络的图像识别方法研究 [D]. 郑州: 郑州大学, 2017.

[59] 高恒洋. 基于 CNN 的图像超分辨率重建研究及硬件实现 [D]. 杭州: 杭州电子科技大学, 2021.

[60] 陈贇. 可重配置的卷积神经网络加速器及 SOC 系统设计 [D]. 广州: 华南理工大学, 2020.

[61] Yantır H E, Eltawil A M, Salama K N. IMCA: An Efficient In-Memory Convolution Accelerator [J].
IEEE Transactions on Very Large Scale Integration (VLSI) Systems, 2021, 29 (3): 447–460.

[62] Mittal S, et al. A survey of accelerator architectures for 3D convolution neural networks [J]. Journal
of Systems Architecture, 2021: 102041.

[63] Ambalakkat S M. Optimization of Constrained Random Verification Using Machine Learning [D].
St. Paul: University of Minnesota, 2018.

[64] Bertoni F, Citti G, Sarti A. LGN-CNN: A biologically inspired CNN architecture [J]. Neural net-
works : the official journal of the International Neural Network Society, 2022, 145: 42–55.

65

万方数据
参考文献

[65] Ibraheam M, Li K F, Gebali F, et al. A Performance Comparison and Enhancement of Animal


Species Detection in Images with Various R-CNN Models [J]. AI, 2021, 2 (4): 552.

[66] 常亮, 邓小明, 周明全, et al. 图像理解中的卷积神经网络 [J]. 自动化学报, 2016, 42 (09): 1300–
1312.

[67] Zhang Y. Deep Convolutional Neural Network for Image Restoration and Synthesis [D]. Boston:
Northeastern University, 2021.

[68] Nelson J. Hardware Aware Optimization of Custom CNN Implementations and Benchmarking of
CNN Algorithms on FPGA [D]. Cookeville: Tennessee Technological University, 2021.

[69] Lee H, Eum S, Kwon H. ME R-CNN: Multi-Expert R-CNN for Object Detection [J]. IEEE trans-
actions on image processing : a publication of the IEEE Signal Processing Society, 2019, 29:
1030–1044.

[70] 李晨阳, 宋澍申, 王涛, et al. 一种基于 UVM 的高层次化验证平台设计 [J]. 微电子学与计算
机, 2019, 36 (06): 79–83.

[71] Shey J. Power Supply Analysis for Device Verification [D]. Baltimore: University of Maryland,
Baltimore County, 2020.

[72] S R, N M. UVM based verification of iAPX 186 processor modules [J]. Journal of Physics: Con-
ference Series, 2021, 1921 (1).

[73] Mohsin Y. Verification of a Single Port RAM Using UVM Methodology [D]. Kingsville: Texas
A&M University - Kingsville, 2021.

[74] Maksimovic D. Novel Directions in Debug Automation for Sequential Digital Designs in a Modern
Verification Environment [D]. Toronto: University of Toronto (Canada), 2015.

[75] Lnu N. Design and Verification of 1X3 Router [D]. Kingsville: Texas A&M University - Kingsville,
2018.

[76] Lin H. Algorithms for verification of analog and mixed-signal integrated circuits [D]. College Sta-
tion: Texas A&M University, 2016.

[77] 陈琳娜. 基于 UVM 的层次化验证平台研究 [D]. 杭州: 浙江大学, 2018.

[78] Lee P S. Automation of Simulation-Based Verification at the Register Transfer and Behavioral
Levels [D]. Irvine: University of California, Irvine, 2013.

[79] Kamireddy L S, K L S. UVM Based Reusable Verification IP for Wishbone Compliant SPI Master
Core [J]. International Journal of VLSI Design & Communication Systems, 2018, 9 (5).

[80] Ma Y. Hardware Acceleration of Deep Convolutional Neural Networks on FPGA [D]. Phoenix:
Arizona State University, 2018.

66

万方数据
山东工商学院硕士学位论文

[81] Kumar P, Kumar V, Pratap R. FPGA Based Design and HIL Verification of a Soft-Core Directional-
OCR [J]. Electric Power Components and Systems, 2019, 47 (14-15): 1423–1436.

[82] Krishnani A R. In-Situ Implementation and Training of Convolutional Neural Network on FP-
GAs [D]. Richardson: The University of Texas at Dallas, 2020.

[83] Kourfali A, Fricke F, Huebner M, et al. An Integrated on-Silicon Verification Method for FPGA
Overlays [J]. Journal of Electronic Testing : (JETTA), 2019, 35 (2): 173–189.

[84] Kim D. FPGA-Accelerated Evaluation and Verification of RTL Designs [D]. Berkeley: University
of California, Berkeley, 2019.

[85] 狄新凯, 杨海钢. 基于 FPGA 的稀疏化卷积神经网络加速器 [J]. 计算机工程, 2021, 0 (0): 1–9.

[86] Jabeen S. A Formal Verification Methodology for Real-Time FPGA [D]. Fargo: North Dakota State
University, 2017.

[87] Hale R B. Distributed Memory Based FPGA Debug [D]. Provo: Brigham Young University, 2020.

[88] Dua A. Hardware Acceleration of Video Analytics on FPGA Using OpenCL [D]. Phoenix: Arizona
State University, 2019.

[89] Bannon J. Reconfigurable Convolution Implementation for CNNs in FPGA [D]. Seattle: University
of Washington, 2018.

[90] Bai L, Zhao Y, Huang X. A CNN accelerator on FPGA using depthwise separable convolution [J].
IEEE Transactions on Circuits and Systems II: Express Briefs, 2018, 65 (10): 1415–1419.

[91] 张榜, 来金梅. 一种基于 FPGA 的卷积神经网络加速器的设计与实现 [J]. 复旦学报:自然科


学版, 2018, 57 (2): 236–242.

67

万方数据
攻读学位期间发表论文与研究成果清单

攻读学位期间发表论文与研究成果清单

68

万方数据
山东工商学院硕士学位论文

致谢

岁月如梭,三年一晃而过,我的研究生生涯即将结束。回首这三年来的经历,收
获很多宝贵经验和美好回忆,借论文完成之际,感谢给予帮助的老师和师兄弟们,也
感谢同学和同事们!

在此由衷地感谢我的导师隋金雪副教授,感谢他三年来的支持与理解,推荐我
去北大信息技术高等研究院学习芯片的设计与验证。其次,感谢张霞博士,在我实
习的两年半时间里,张老师在工作和生活上提供帮助,在论文方面给予悉心指导;还
要感谢我的师兄季永辉,在我遇到技术困难时,季永辉总是耐心讲解,也提高了我
的自主学习的能力,也要感谢高性能存储与计算实验室的其他成员等,我们一起工
作和学习,让我的实习生活充满乐趣。

最后感谢我的家人们,他们的关怀是我继续前进的动力,希望通过我不断的努
力获得成就来报答他们。

69

万方数据
版权声明

版权声明

任何收存和保管本论文的各种版本的单位与个人,未经本论文作者同意,不得
将本论文转借他人,也不得随意复制、抄录、拍照或以任何方式传播。否则,引起有
碍作者著作权之问题,将可能承担法律责任。

70

万方数据

You might also like