You are on page 1of 76

分类号:TN47 单位代码:10422

密级:公开 学 号:201932254

,∥ 篆只季
SHANDONG—UNIVERSITY

硕士学位一论’文
Thesis for M.aster Degree
(专业学位)
沦 文题
艮高 性 能硬件矢量加速器的设计与UVM验证
Design and UVM Verification of High Performance Hardware Vector

Accelerator

作者 姓 名 苗飞

培养 单 位 微电子学院

专业学位名称 集成电路工程

指导 教 师 田军教授

合作 导 师

2022年6周1 国

万方数据
JIIIJIIIIMIIJIII[111IlllIIIJIIIIIIIIIIJI l
Y3967567

分类号:7_『\『q 单位代码:10422

密级:公开 学 号

⑧ ,∥

SHANDoNG
乡幂 办 季
I心ⅡVERSITY

硕士学位论文 Thesis for Master Degree


(专业学位)

高。性能尿件矢量加速器勘最计j u小验证
』k留几及“u l/儿沈,萨伽≠i咖巧。协屯忍币r地洲够 欣彳以圯
Vador A呷ce砒r
作者姓名 .董堡
培养单位数鱼至望匦
专业名 称 集成电路工程

合作 导 师

土口1工年o 6月0/日

万方数据
原创性声明

本人郑重声明:所呈交的学位论文,是本人在导师的指导下,独

立进行研究所取得的成果。除文中已经注明引用的内容外,本论文不

包含任何其他个人或集体己经发表或撰写过的科研成果。对本文的研

究作出重要贡献的个人和集体,均已在文中以明确方式标明。本声明

的法律责任由本人承担。

论文作者签名: 董蛩 El期:塑兰:!皇:!!

关于学位论文使用授权的声明

本人完全了解山东大学有关保留、使用学位论文的规定,同意学

校保留或向国家有关部门或机构送交论文的复印件和电子版,允许论

文被查阅和借阅;本人授权山东大学可以将本学位论文的全部或部分

内容编入有关数据库进行检索,可以采用影印、缩印或其他复制手段

保存论文和汇编本学位论文。

(保密论文在解密后应遵守此规定)

论文作者签名:董坠导师签名:

万方数据
山东大学硕士学位论文

摘 要

随着以云计算和物联网为代表的现代电子信息技术的迅速发展,对各类智能终端的
要求日益提高,作为智能终端核心的MCU(Microcontroller Unit)所承担的数据吞吐压
力也随之增大,对于许多应用而言,无法完全依赖MCU来实现实时数据处理。对于需
要处理大量固定算子运算,需要低延时和即时反应的场景,为MCU附加常用的算子硬
件加速器是一种实现低成本、高性能嵌入式系统的有效手段,具有良好的工程应用前景。
随着集成电路的发展,硬件加速器在集成电路领域的研究一直是热点,也是难点,
同样它在实际应用中也具有极其重要的意义。本论文重点研究五个常用矢量算子(比较
算子、均值算子、矢量减法算子、复制算子和list算子)的硬件化,模块对内存的高速
读写操作以及通过搭建UVM(Universal Verification Methodology)验证平台对矢量加速

器进行UVM方法学的验证。对高性能硬件矢量加速器的研究具体包括以下几个方面:
(1)研究高级性能总线和ICB(Internal Chip Bus)总线,分析矢量加速器的功能
特性,画出设计框图,设计矢量加速器内部各个模块,并且将内部的内存读取模块、内
存写入模块、仲裁处理模块、硬件加速单元模块、操作数缓冲模块、数据格式转换模块、
接收数缓冲模块和寄存器模块的信号进行连接,设计出完整的高性能硬件矢量加速器。
(2)研究高性能硬件矢量加速器对比较算子、均值算子、矢量减法算子、复制算
子和list算子高速输入输出数据的读写操作,可以支持字节、半字、字数据的读写,支
持有符号和无符号数据的处理以及支持数据印第安序的读取和存放。

(3)研究UVM验证方法学和学习UVM的phase机制、objection机制、sequence
机制、field automation机制、config db机制、factory机制、TLM(Transaction Level

Modeling)机制和寄存器模型的知识,完成以代码覆盖率和功能覆盖率为导向的矢量加
速器自动化验证平台的设计。
(4)根据高性能硬件矢量加速器功能特性提取验证功能点,编写好测试用例和功

能覆盖率模型,通过perl脚本和makefile脚本实现自动回归测试。使用Cadence公司提
供的XCELIUMl909工具进行编译仿真,运行测试用例,通过verdi查看仿真波形,使
用IMC工具进行覆盖率收集,实现了代码和功能覆盖率都为100%,确定矢量加速器模
块的功能验证满足要求,达到预期目标。
关键词:矢量加速;UVM;功能验证;覆盖率

万方数据
ABSTRACT

With the rapid development of modem electronic information technology represented by

cloud computing and the Internet of Things,the requirements for various intelligent terminals

are increasing day by day.As the core of intelligent terminals,MCU(microcontroller unit)


also bears an increasing pressure on data throughput.For many applications,the MCU cannot

be completely relied on for real-time data processing.For scenarios that need to process a

and instant response,


large number of fixed operator operations and require low latency

to MCU is effective means to


adding commonly used operator hardware accelerators
all

embedded has
implement low.cost,high—performance systems,and good engineering

application prospects.

With the development of integrated circuits,the research of hardware accelerators in the

field of integrated circuits has always been a hot and difficult point.Similarly,it is also of

focuses on the hardwareization of five


great significance in practical application.This thesis

commonly used vector operators(compare operator,average operator,subtraction operator,

copy operator and list operator),the high—speed read and write operations of modules to

memory,and the vector accelerator is verified by building a UVM(Universal Verification

Methodology)verification platform.The research on high-performance hardware vector

accelerators includes the following aspects:

(1)Study the Advanced Hihg Performance Bus and ICB(Internal Chip Bus)bus,analyze

the functional characteristics of the vector accelerator,draw a design block diagram,design

the internal modules of the vector accelerator,and connect the signals of the internal memory

reading module,memory writing module,arbitration processing module,hardware

acceleration unit module,operand buffer module,data format conversion module,received

data buffer module and high-performance hardware vector


register module,A complete

accelerator is designed.
(2)Research high-performance hardware vector accelerators for high。speed input and

output data read and write operations of compare operators,average operators,subtraction

operators,copy operators and list operators,which can support byte,half-word,and word data・

Read and write,support the processing of signed and unsigned data,and support the reading

and storage of big—endian and little—endian.

and learn the knowledge of UVM’S phase


(3)Study UVM verification methodology

万方数据
山东大学硕士学位论文

mechanism,objection mechanism,sequence mechanism,field automation mechanism,

config_db mechanism,factory mechanism,TLM(Transaction Level Modeling)mechanism

and register model.Complete the design of vector accelerator automatic verification platform

guided by code coverage and function coverage.

(4)Extract verification function points according to the functional characteristics of

high・performance hardware vector accelerators.write test cases and functional coverage

models,and implement automatic regression testing through perl scripts and makefile scripts.

Use the XCELIUMl909 tool provided by Cadence to compile and simulate,run the test case,

view the simulation waveform through verdi,and use the IMC tool to collect coverage,

achieve 1 00%code and functional coverage,and confirm that the functional verification of

the vector accelerator module meets the requirements,to achieve the desired
goal.

Key words:Vector processing accelerator;UVM;Functional verification;Coverage analysis

III

万方数据
山东大学硕士学位论文

IV

万方数据
山东大学硕士学位论文

目 录

摘要……………………………………………………………………………………………………………………………I
ABSTRACT………………………………………………………………………………………………………………II

1绪{仑……………………………………………………………………………………………………………………….1
1.1研究背景及意义……………………………………………………………………..1
1.2国内外研究现状……………………………………………………………………一2
1.3课题来源与研究内容………………………………………………………………..3
1.4论文结构安排………………………………………………………………………一3
2矢量加速器设计与验证相关基础…………………………………………………………5
2.1高级高性能总线……………………………………………………………………一5
2.2 ICB总线协议…………………………………………………………………………6
2.3 SV验证语言概述…………………………………………………………………….7
2.4 UVM验证技术……………………………………………………………………….7
2.4.1 IⅣM验证平台…………………………………………………………………7
2.4.2 UVM树形结构介绍……………………………………………………………8
2.4'3 UVM的phase机制……………………………………………………………………………….9
2.4.4 UVM的objection机制…………………………………………………………………………l 0
2.4.5 UVM的sequence机制……………………………………………………………………….10
2.4.6 UVM的field automation机制………………………………………………10
2.4.7 UVM的config bd_1.… … … 制机
2.4.8 UVM的factory机制…………………………………………………………………………..11
2.4.9 UVM的TLM机制……………………………………………………………………………一1l
2.4.10 UVM的寄存器模型…………………………………………………………1l
2.4.1l覆盖率介绍…………………………………………………………………12
3矢量加速器设计的实现…………………………………………………………………..13
3.1矢量加速器的功能特性……………………………………………………………13
3.2矢量加速器设计框图和顶层接口…………………………………………………14
3.3矢量加速器设计……………………………………………………………………15
3.3.1内存读取模块设计…………………………………………………………一1 5
3.3.2内存写入模块设计…………………………………………………………..1 7
3.3.3操作数缓冲模块和接收数缓冲模块设计…………………………………。17
3.3.4仲裁处理模块设计…………………………………………………………一1 8
3.3.5数据格式转换模块设计……………………………………………………..19
3.3.6硬件加速单元模块设计……………………………………………………..1 9
3.3.7矢量加速器主要寄存器……………………………………………………..24
4矢量加速器模块验证平台的实现………………………………………………………一26
4.1验证方案…………………………………………………………………………….26
4.1.1矢量加速器的验证计划和流程步骤………………………………………一26
4.1.2矢量加速器的验证功能点…………………………………………………一27

万方数据
山东大学硕士学位论文

4.2 UVM验证平台的搭建………………………………………………………………28
4.2.1 UVM验证平台的top层设计……………………………………………….29
4.2.2 UVM的env层设计………………………………………………………….30
4.2.3 UVM的interface设计………………………………………………………………………….3 1
4.2.4 UVM验证平台的参考模型组件设计……………………………………….32
4.2.5 UVM的scoreboard组件设计……………………………………………….38
4.2.6 UVM的agent组件设计……………………………………………………..38
4,2.7 UVM的driver组件设计…………………………………………………….39
4.2.8 IⅣM的monitor组件设计…………………………………………………..40
4.2.9 UVM的sequencer组件设计…………………………………………………41
4.2.10 UVM的寄存器模型设计……………………………………………………41
4.2.1 1
UVM的reg retpad.24一… … 计设
4.3功能覆盖率模型……………………………………………………………………44
5矢量加速器验证结果与分析……………………………………………………………一45
5.1矢量加速器验证平台目录…………………………………………………………45
5.2 UVM验证平台执行流程……………………………………………………………45

5.3 UVM仿真验证环境…………………………………………………………………46
5.4测试用例……………………………………………………………………………47
5.4.I冒烟测试……………………………………………………………………一47
5.4.2矢量加速器寄存器测试……………………………………………………..48
5.4.3均值算子测试………………………………………………………………一49
5.4.4极值算子测试………………………………………………………………..50
5.4.5 Copy算子测试……………………………………………………………….5 1
5.4.6 List算子测试…………………………………………………………………52
5.4.7 Subtraction算子测试…………………………………………………………53
5.4.8异常测试用例………………………………………………………………..54
5.5覆盖率分析…………………………………………………………………………54
结论…………………………………………………………………………………………………………………………57
参考文献……………………………………………………………………………………..59
致谢…………………………………………………………………………………………………………………………64

VI

万方数据
山东大学硕士学位论文

CoNTENTS

Chinese abstract..............................….....…...….............……….............…...............................…....】[

English absl}t‘act..............…................…...….….............….…...…...…..….…........…...................….I】[
Chapter 1 Introduction.....…….…...........…...….............……..........…....…...............................…...1
】1.】【Research background and significance......................................................................,..】【
1..2 Research status at home and abroad..............................................................................:21

1.3 Subiect source and research content….............…….............….…..............................…...3

1.4 Thesis s缸ucnlre arrangement………………………………………一:…………………………………一3

Chapter 2 Fundamentals ofVector Accelerator Design and Verification...。.....….................…...5


2.1 Advanced High Performance Bus………………………………………………………………………5
2.2 ICB bus protocol……………………………………………………………………………………………..6

2.3 Overview of SV Verification Language………………………………………………………………7


2.4 I.ⅣM Verification Technology…………………………………………………………………………..7
2.4.1 IⅣM V撕fication Platform………………………………………………………………………7
2.4.2 Introduction to UVM tree s缸ucnlre……………………………………………………………8

2.4.3 Phase mechanism ofUVM……………………………………………………………………….9


2.4.4 Objection mechanism ofIⅣM……………………………………………………………….10
2.4.5 The sequence mechanism oflⅣM………………………………………………………….10
2.4.6 UVM’S field automation mechanism………………………………………………………..10

2.4.7 I.ⅣM’S config db mechanism…………………………………………………………………11


mechanism ofIⅣM……………………………………………………………..11
2.4.8 The factory
2.4.9 TUⅥmechanism ofIⅣM………………………………………………………………………11

2.4.10 UVM’S register model………………………………………………………………………….11


2.4.11 Introduction to Coverage.....….............……................…..................…..........….1:21

Chapter 3 VectorAccelerator Design.....…....…............…….…............….......................…..…....】【:;


3.1 Functional characteristics ofvector accelerators…………………………………………………13

3.2 Vector accelerator design block diagram and top.1evel interface…………………………..14


3.3 VectorAccelerator Design.....…..………............…….…............….......................…....…..15

3.3.1 Design ofmemory read module………………………………………………………………15

3'3.2 Design ofMemory Write Module……………………………………………………………1 7


3.3.3 Design ofOperand Buffer Module and Receiver Buffer Module…………………17

3.3.4 Design ofArbitration Processing Module…………………………………………………18

3.3.5 Design ofData Format Conversion Module……………………………………………..19


3.3.6 Design ofhardware acceleration unit module……………………………………………19
3.3.7 Vector Accelerator Main Register……………………………………………………………24

Chapter 4 Implementation ofthe VectorAccelerator Module Veilfication Platfom……………26


4.1 V.erification scheme………………………………………………………………………………………..26

4.1.1 Validation Plan and Process Steps for Vector Accelerators………………………….26


4.1.2 Verifieation function points ofvector accelerators……………………………………..27
4.2 Construction ofUVM Verification Platform………………………………………………………28

VII

万方数据
山东大学硕士学位论文

4.2.1 Top layer design ofUVM verification platform………………………………………一29


4.2.2 IⅣM’S env layer design…………………………………………………………………………30
4.2.3 Interface design of UVM………………………………………………………………………一3 1
4.2.4 Reference Model Component Design ofUⅣM V.erification Platform…………..32
4.2.5 I丁VM’S scoreboard component design………………………………………………………38

4.2.6 I n伦rS agent component design……………………………………………………………一38


4.2.7 I丁Ⅷ’S driver component design……………………………………………………………..39
4.2.8 IⅣM’S monitor component design………………………………………………………….40
4.2.9 I『vM’S sequencer component design……………………………………………………….41
4.2.10 Register Model Design ofIⅣM……………………………………………………………41
UVM’S reg_adapter design……………………………………………………………………42
4.2.11

4.3 Functional Coverage Model Design………….…………………….……….……………………….44

Chapter 5 Vector Accelerator Verification Results and Analysis………………………………………45


5.1 Vector Accelerator V撕fication Platform Catalog……………………………………………….45
5.2 IⅣM Verifcation Platform Execution Process………………………………………………….45

5.3 I『vM simulation verification environment………………………………………………………..46


5.4 Test Cases……………………………………………………………………………………………………..47

1;.4.1 Smoke test……………………………………………………………………………………………47

5.4.2 Vector Accelerator Register Test……………………………………………………………..48


5.4.3 The average operator test……………………………………………………………………….z19

5.4.4 The compare 019erator test………………………………………………………………………!;()


5.4.5 The copy operator test……………………………………………………………………………5 1

5.4.6 The list operator test………………………………………………………………………………52

5.4.7 The subtraction operator test…………………………………………………………………..53

5.4.8 Exception test cases……………………………………………………………………………….54


5.5 Coverage Analysis………………………………………………………………………………………….!;zI

Conclusion………………………………………………………………………………………………………………..57

Reference………………………………………………………………………………………………………………….59

Acknowledgments……………………………………………………………………………………………………..6zI

ⅥI

万方数据
山东大学硕士学位论文

近年来,随着以云计算和物联网为代表的现代电子信息技术飞速发展,MCU应用
的场景越多越广泛,对其计算能力的需求也日益提高,促进了底层电路硬件快速发展。
因为微控制器本身运算架构的原因,只通过MCU进行大量算子运算,得到算子运算结
果的时间相对较长,对于需要低延迟和即时反应的场合,这种只通过MCU进行算子运
算无法满足需求,可以将相关算子做成硬件加速器,通过硬件加速器进行处理相关算子
运算,而MCU只需要处理硬件加速器的寄存器配置就可以得到硬件加速器的运算结果,
同时微处理器会减少对内存的消耗。微处理器有了硬件加速器的帮助,对于资源的消耗
可以减少至少10%Ell。
对于需要即时反应、系统能效要求较高的芯片需求中,处理相关运算时希望回馈反
应速度较高,MCU结合硬件加速器就显得极为重要。在对计算能力需求高和要求低延
迟的背景下,硬件加速器模块的研究具有很大的必要性和实用性。硬件加速器可以加速
各种运用的计算需求[21,而且集成了硬件加速器和MCU的芯片在处理运算所耗用的资
源上也会得到大幅优化,节能功耗的优势也较为显著,使得芯片能够处理更高复杂度和
更高要求的工作。硬件加速器和微控制器做成的SoC芯片,不采用MCU外部单独挂一
个运算处理单元,可以在成本方面做到优化,节省了载板空间,提高了运算整体效率。

因此,矢量硬件加速器的模块对于处理大量常用算子,例如比较(compare)算子、均
值(average)算子、list算子、矢量减法(subtraction)算子以及复制(copy)算子具有
极其重要的意义,矢量加速器模块的验证工作也是意义重大。

SoC(System on Chip)技术是当今集成电路行业的重点研究的方向之一,它是一个
微小型系统,将微处理器、内存、口核和其他组件集成在一个芯片上进行协同工作[3,41。
因为工艺和技术的快速发展,各个芯片公司不断追求更高的性能和更低的功耗,芯片复
杂度的提升增大了验证难度。SoC的验证流程变得复杂多样,其中模块级验证为了确保
口核的功能是否正确和完整,是验证环节中不可缺少的一环。
一个完善有效的验证方法学对芯片验证极为重要,验证占据整个设计过程的
60~80%时间[5-7】。UVM常常用于验证变得越来越复杂的DUT(Design Under Test)【8],
它的验证平台、验证组件以及测试序列具有较好的可重用性【91。当今国内外芯片设计公
司广泛采用的UVM验证方法学,因而使用UVM方法学验证矢量加速器模块具有较高
的实用性和现实意义。

万方数据
山东大学硕士学位论文

国内外对硬件加速器的探索一直没有停止。在2008年,HaiJie Yang等人设计了矢
量加速器的专用集成电路,实现基于梅尔频率倒谱系数(MFCC)特征的连续密度隐马
尔可夫模型(CHMM)识别算法,大大提高系统的实现效率和降低了成本[10]。同年,智
强、李鹏、董明等人设计出嵌入式语言识别系统,通过对Mahalanobis距离模块映射成
硬件加速模块,大大优化整个系统的性能【11]。2010年,胡云峰、陈虹等人从硬件实现
控制算法的角度研究了预测控制器的设计与实现【12】。2015年,Minkwan Kee等人提出
了一种基于6轴传感器检测运动方向的硬件加速,用于处理复杂的卡尔曼滤波,提高方
向估计的准确性并且降低其能耗[13】。同年,方睿、刘加贺等人设计了卷积神经网络的
FPGA并行加速方案设计,在计算效率方面有着显著提高[14】。2018年,Francesco Conti

等人提出了ⅫOR神经引擎(XNE),这是一种用于二元神经网络的全数字可配置硬
件加速器Ⅲ,它能够自主与MCU协作,实现更加复杂的行为【15]。2020年,陆申阳、冉
峰等人设计了一种用于自适应直方图均衡化的硬件加速,使算法在图形增强方面使用更
加容易【16]。2021年,Rakshit Mittal等人针对自适应MaMeMi滤波器提出了硬件加速器
架构,硬件加速器针对各种生物电位信号趋势进行了测试,单个硬件能够以较少的计算
成本和较低的延迟从所有考虑的测量中消除基线漂移【17】。
在早期的芯片开发设计和验证中,验证是由设计人员根据芯片设计功能需求,使用
硬件编程语言编写定向测试用例,对数据结果进行人工比对[18】。该验证方法缺点是需要
编写大量的定向测试用例,很难功能模块化和随机化验证,无法复用到其他项目等。
随着集成电路行业迅速发展,单纯的使用硬件描述语言进行芯片验证已经很难满足

要求,通过建立一个验证环境来进行测试和发现缺陷变得越来越重要【19】。Synopsys和
CoWare等公司合力开发SystemC语言,它能够从系统级到门级对复杂电子系统进行建
模【201。SystemC是一种广泛用于对系统级芯片进行原型设计的工具,是一个C++库【21】,
用于系统架构建模、硬件和软件协同设计以及早期集成等【22]。2002年,System Verilog

诞生,它完全兼容Verilog,深受芯片验证人员的喜爱。在2005年,成为IEEE标准【23】。
System Verilog提供了面向对象语言中的高级数据结构,这些数据结构支持对复杂数据
类型进行更高级别的抽象和建模【241,同时具有约束、功能覆盖率等芯片验证独有的特性
并且它自身拥有内存管理机制等诸多优点,至今还是主流的IC验证语言。
伴随着验证语言发展,验证方法学也不断改进。2002年,eRM(e Reuse Methodology)

方法学被Verisity公司推出【25】;2003年,Synopsys基于OpenVera提出了RVM方法学[18】;
2006年,Synopsys公司基于SV(System Verilog)语言发布VMM方法学,支持基于事
务的验证和随机验证等[26】;同年AVM验证方法学也被Mentor公司发布;2008年,Mentor
和Candence将资源集中在使用SV语言的OVM(Open Verification Methodology)方法

万方数据
山东大学硕士学位论文

学上【271,它支持factory机制等;2011年,Accellera引入了UVM验证方法学【281。UVM
继承了之前的多种验证方法学的优点,去掉了它们的缺点,并且被不同的工具供应商如
Mentor等公司支持[291。UVM验证方法学在国内外公司广泛使用,它降低验证成本,提
高整个行业的设计质量[30],已经成为一种用于验证集成电路设计的标准化方法[3l】。

1.3课题来源与研究内容

课题来源于实习公司的一个SoC项目上哥|生能硬件矢量加速器模块。主要对矢量加
速器模块的功能特性进行分析,并画出设计结构框图,设计了矢量加速器内部各个模块,
实现了矢量加速器的设计,并对其进行UVM验证方法学的模块级验证,保证所设计的
矢量加速器满足功能需求。本论文设计的矢量加速器模块是对一些常用的矢量算子运算
进行了硬件加速,可以缩短微处理器运算这些算子所涉及的算法完成时间。通过矢量硬
件加速的功能扩展来提高系统刷新率,弥补MCU运算能力的不足,并且可以缩短整个
系统算子运算的时间。

本论文的矢量加速器设计是对compare算子、average算子、list算子、subtraction
算子、copy算子进行硬件化,并且矢量加速器可以独立完成对数据的高速读写操作,可
以支持字节、半字、字数据的读写操作,支持有符号和无符号数据的处理以及支持数据
印第安序的读取和存放。整体设计框架可以分为内存读取模块、内存写入模块、仲裁处
理模块、硬件加速单元模块、操作数缓冲模块、数据格式转换模块、接收数缓冲模块和

寄存器模块。在实现高性能硬件矢量加速器设计的基础上,使用System Verilog语言与
通用验证方法学UVM进行验证。搭建模块化、可重用性、自动化比对、以覆盖率为导
向的UVM验证平台,根据矢量加速器模块的功能特性提取验证功能点,根据验证功能
点构建大量的随机测试和定向测试,最后根据代码覆盖率和功能覆盖率,确定矢量加速
器模块的设计功能是否符合要求。

1.4论文结构安排

本文共分为五个章节,具体内容如下:
第一章为绪论,主要分析了硬件加速器的重要性,引入了UVM验证方法学,并概
况了国内外研究硬件加速和芯片验证的发展现状,最后对选题来源和论文组织结构进行
介绍。
第二章主要对高性能硬件矢量加速器设计所用到的相关理论进行介绍,比如高级高
性能总线和ICB总线等,并且介绍了SV语言和UVM验证技术,对UVM的平台结构、
机制以及寄存器模型等进行说明。

万方数据
山东大学硕士学位论文

第三章对高性能硬件矢量加速器的设计实现进行详细描述,主要对矢量加速器的功
能特性进行分析,设计出矢量加速器总体框图,对矢量加速器内部的各个模块进行设计,
并且对矢量加速器中各个模块的信号和接口连接以及对各个模块的状态机进行详细说
明。

第四章是基于高性能硬件矢量加速器的UVM验证平台实现,对矢量加速器验证方
案进行详细说明,提出本设计的所要验证的功能点,之后对UVM中的各个组件和连接
如何实现进行描述,最后设计出功能覆盖率模型。
第五章是高性能硬件矢量加速器验证结果与分析,首先介绍了矢量加速器在项目平
台的目录结构,使用CVS进行版本的管理和控制,然后对UVM验证平台的执行流程以
及仿真验证环境进行说明,最后对测试用例和覆盖率报告进行详细分析。

最后结论部分总结了本论文所做的工作,指出研究中存在的问题和需要改进的地
方,并且展望了本论文今后有待研究的方向和趋势。

万方数据
山东大学硕士学位论文

2矢量加速器设计与验证相关基础

2.1高级高性能总线

总线互连设计和系统性能有着很强的联系,设计无效的系统总线可能会干扰内存和

处理器之间或外围设备和内存之间信息的传输【321。AMBA系统架构如图2-1所示,高级
高性能总线(AI-IB)是高级微控制器总线架构(AMBA)规范定义的一种通信标准[33],它
可以充当高性能系统主干总线[34],可以支持处理器、片内存储器和片外外部存储器接口
以及通过转接桥对低速模块的高效连接【35】。

图2-1AMBA系统架构

AHB系统是由几个主设备和从设备通过多路复用器连接组成,多路复用器由仲裁
器和译码器控制【36],AHB总线互联结构如图2-2所示。

图2—2AHB总线互联结构

AHB Master通过提供地址和控制信息启动读写操作,一次只有一个主机可以访问

万方数据
山东大学硕士学位论文

总线。AHB Slave用于执行读取和写入操作。AHB Arbiter是设计中的主要控制组件,用


于一次授予对总线特定主设备的访问权限。AHB Decoder对主设备给出的地址进行解
码,并选择从机进行数据传输。AHB支持突发传输,支持数据与地址分离的流水线等
操作【37】。

ICB总线系统结构如图2.3所示,主设备和从设备通过命令通道和返回通道进行信
息交互。主设备向从设备通过命令通道发送地址和控制信息,从设备通过返回通道把反
馈结果发送回主设备r381。

命令通道

地址与控 地址与控 地址与控 地址与控


制信息 制信息 制信息 制信息

Master Slave

反馈结果 反馈结果 反馈结果 反馈结果

返回通道

图2-3 ICB总线系统结构

ICB总线协议继承了AXI和AHB的许多特点,采用分离的地址和数据的方式,支
持一主多从、多主多从等拓扑结构[381。表2.1是ICB总线接口信号,表2.1中前六个信
号属于命令通道,后四个信号属于返回通道。

表2-1 ICB总线接口信号

万方数据
山东大学硕士学位论文

通用验证方法学所用到的验证语言是SV语言,SV是英文单词System Verilog的缩
写【391。SV语言结合了Verilog、C++、C语言等概念,使它拥有硬件描述语言和更高层
级抽象设计建模的优点[40】。
SV语言提供了一个面向对象的编程模型[411,能够产生受约束的随机激励,支持多
线程和线程间的通信,支持硬件描述语言的四状态数值,支持断言验证等特性[231。SV
语言的出现对芯片验证具有很大的帮助,它配合验证方法学能够很好的提高项目复用
性,帮助验证人员节省开发项目的时间,提高验证效率。

本文是通过UVM验证方法学对矢量加速器进行EDA验证。下面将对UVM验证方
法学进行介绍,对构建UVM验证平台的各个组件、机制和寄存器模型进行研究,为搭
建矢量加速器验证平台做好前期工作。

2.4.1 UVM验证平台

UVM验证平台中所有的组件是由UVM预先定义好的类派生而来[421。UVM验证方
法学将芯片验证流程标准化,每一个基于UVM方法学的验证平台结构大致相似。芯片
验证人员可以按照UVM方法学提供的大致框架,编写继承UVM中各个组件,建立各
个组件间的通信,完成UVM验证平台的搭建。图2-4是经典的UVM验证平台结构框
图。图2.4中各个验证平台组件如下所述:

(1)序列器sequencer组件:对sequence进行管理。每当driver组件索要事务级数
据时,该组件会把sequence生成的事务级数据发送给driver组件。
(2)驱动器driver组件:主要功能是向sequencer索要事务级数据,和将索要的事
务级数据转换成测试设计模块能够接收信息,通过interface传送到待测试模块[431。
(3)监测器monitor组件:功能是监控数据,通过interface监控待测试模块,获得
有用的数据并将数据转换成事务级数据,可以将数据传送给scoreboard组件或reference
model组件【删。

(4)代理器agent组件:它是一个抽象容器,可以把monitor组件、sequencer组件
和driver组件封装在一起【45】。它可以配置为主动或者被动模式。在主动模式下,它们用
于模拟设备并根据测试指令驱动事务,而在被动模式下,它们仅用于监控DUT活动[46】。
(5)计分板scoreboard组件:基于UVM环境提供功能检查和错误检测,可以通过
比较参考模型组件的期望值和待测设计模块输出的实际数据,并将比较的结果数据打印

万方数据
山东大学硕士学位论文

下来,验证人员可以查看log文件,判断待测设计模块是否功能正确[471。
(6)参考模型reference model组件:主要功能是模仿DUT去实现与其相同的功能。

DUT是用Vefilog编写,参考模型组件使用SV语言编写,SV语言会更加灵活。
(7)环境env组件:主要功能可以容纳了agent组件、scoreboard组件和reference
model组件等,完成所容纳组件的创建和接口的连接。

\ 7 弋 7
DUT <7

图2-4经典UVM验证平台

2.4.2 UVM树形结构介绍

一个完整UVM的验证平台包含env组件、agent组件、sequencer组件、driver组件、
scoreboard组件、monitor组件、reference model组件等,所有组件构成了如图2.5所示
的一种层次鲜明的UVM树形组织结构【481。

UVM验证平台中各个组件可以通过phase机制驱动运行,phase机制可以对所包含
的各个组件进行统一调度管理。从图2.5可以看出UVM中各个组件的树状关系,uvm top

为树状图的树根。因为各个组件new函数运行时确定了parent,形成了图2.5所示的层
次清楚的组织结构。基于层次鲜明的树形组织结构,UVM验证平台方便了验证人员对
项目的管理和对错误的定位。

万方数据
山东大学硕士学位论文

图2.5 UVM树形结构图

2.4.3删的phase机制
UVM的phase机制在UVM仿真验证过程中极其重要,在仿真验证流程中,它是控
制协调UVM验证平台中的各个组件问同步问题,预防组件间的冲突。各个组件可以根
据各自的需求阶段性执行。

pre_reset_phase
build_phase


reset_phase

function conneCt_phase
postreseLphase
phase end—of——elaboration_phase pre_conflgure_phase
自I
上I start——of——simulation_phase
configure_phase
而l posLconflgure_phase
下I run_phase
pre_main_phase
执I
行I extract_phase main_phase


山 check_phase
post_main_phase
function
pre_shutdown_phase
phase repot_phase
shutdown_phase
final__phase post_shutdown_phase

图2-6 UVM的phase机制

UVM根据各个phase是否会耗费仿真运行时间的特性,可以分为如图2-6所示的两
大类:function phase和task phase。Function phase不消耗仿真时间,通过函数来实现,
如build phase、connect phase、final phase等,而task phase消耗仿真时间,通过任务

来实现,如run phase等【491。
UVM中各个phase是从上到下依次执行的。对于这两类phase,在同一仿真时间内
只允许一个phase运行的是function phase;对于task phase,如图2-6所示,run phase

和pre n i等若干个小的
phase am. 方
phase 是可以同时并行执行。
大极制 UVM 的
机 phase

万方数据
山东大学硕士学位论文

便了验证项目的移植和不同组件间的同步控制。

2.4.4 UVM的objection机制

UVM中的objection机制的主要功能是负责打开和关闭UVM验证平台。每进入一
个phase中,UVM验证平台都会去检查是否有objection被raise。如果phase有被raise
起来,就会等这个objection被drop后停止仿真;如果phase没有被raise,则UVM验
证平台会自动结束当前phase。需要注意的是raise objection语句的前面,不能编写具有
消耗仿真时间的代码或语句。因此在UVM验证平台执行的过程中,每一次进入一个组

件的phase,UVM验证平台都会去统计phase是否raise objection,并且会监听是否
objection被撤销。因为UVM树形结构有多个节点,所以objection控制办法有多种。在
实际项目中,通常会在sequence的代码中将sequencer的objection拉起,在sequence结
束后撤销掉objection。代码一般以如下格式编写:
task run_phase(uvm__phase phase);
phase.raise_objection(this);

phase.drop_objection(this);
endtask

2.4.5 UVM的sequence机制

为了防止每次修改测试用例时,验证人员都要修改驱动代码,UVM方法学引入了

sequence机制。Sequence机制的出现让事务级信息的产生和激励驱动不用混在一起,各
自分工明确,sequence是负责事务级数据的产生,driver组件可以向sequencer索要事务
级数据,和将索要的事务级数据转换成测试设计模块能够接收的激励信号。芯片验证人

员想要产生不同的transaction,只需要修改sequence来实现。在UVM验证方法学中,

通过编写sequence来产生各种不同测试功能的激励,芯片验证人员只需要编写不同的
sequence代码,就可以很方便快捷产生各种不同功能的测试激励。Sequence机制还可以
对UVM验证平台进行控制。一般控制验证平台的功能会在sequence的代码中实现,即
在sequence中编写raiseobjection和drop_objection。当一个sequence启动起来之后,
UVM会自动去执行sequence中的body任务。

2.4.6 UVM的field automation机制

UVM的field automation机制在UVM验证平台的搭建中经常被使用。芯片验证人

员可以使用uvm field宏注册的成员变量,可以方便快捷的调用UVM的自己的内建函

数,比如copy函数、compare函数、print函数,节省了验证人员自己编写大量代码的时
间。

10

万方数据
山东大学硕士学位论文

2.4.7 UVM的eonfig_.db机制

UVM的config_db机制通常是成对出现的,通过set语句发送和get语句接收信息,
它可以把virtual interface、单一变量值等传递到环境中。使用uvm config .db 的语法传
递寄存器模型句柄代码如下所示:

uvm_config_db#(vpu2_topreg_model)::set(this,“m』nV”,‘伽”,p-口1);
uvm_config_db#(vpu2_top_reg_model)::get(this,'"',"叠肋”,p唧);
#(vpu2_topreg_model)代表着要传递的参数类型是矢量加速器的寄存器模型。在get
语句实际代码编写时,习惯使用if语句进行判断,从而可以很容易知道config db机制
有没有把参数get操作成功,防止出现异常情况。

2.4.8删的factory机制
Factory机制在UVM验证平台主要作用是可以将一个类自动例化,并且可以调用相

关的函数和任务。它还有个很重要的作用是对UVM验证平台中的component组件或者
object对象进行重载。UVM的工厂机制的实现一般通过注册、重载以及例化三部分。注
册是通过UVM宏来实现的,一般使用、uvm_object_utils(T)和、uvm_component_utils(T)将
对象和组件注册到factory中去。那些被重载的类需要使用UVM提供的工厂例化方式
type_name::type_id.":create0构造的组件或者对象,不能使用new函数进行构造。

2.4.9 UVM的TLM机制
TLM(Transaction Level Modeling)主要功能是为了解决各个组件之间的通讯问题,

在各个组件之间建立的一个专用通道可以让信息只在通道里流动,从而避免了全局变
量。SV语言也有相似的功能,例如通过信箱,旗语,事件等来实现组件之间的通信,
但是使用SV语言中信箱,旗语等代码量会很大,并且复用的时候也会因为组件间的变
化而需要修改大量代码以及需要大量代码去实现复杂的组件间通信。相比之下,TLM机
制在不同组件之间通信时,对组件之间依赖性更低,更容易实现对组件的移植,提高了
整体的仿真效率。

2.4.10 IⅣM的寄存器模型

寄存器文件验证是任何数字设计验证过程的关键部分【50】,UVM提供了待测试设计

的寄存器内容映射,用于访问寄存器和管理的基类库,称为UVM的RegisterAbstraction
Layer(RAL),UVM的寄存器模型可以通过frontdoor和backdoor的方式访问寄存器
或存储器151】。使用UVM的m让极大提高了验证人员对寄存器验证的效率【521。

万方数据
山东大学硕士学位论文

2.4.11覆盖率介绍

在芯片验证中,可以通过IMC等工具查看项目里代码覆盖率和功能覆盖率的情况。
验证人员可以通过观察覆盖率,通过覆盖率数据信息完善自己的测试用例,从而进一步
提高覆盖率。
覆盖率分为代码覆盖率和功能覆盖率。代码覆盖率跟踪设计的模块代码已经执行了
多少行,单比特变量的值是否发生了跳变,以及状态机中的状态是否都完成等,它可以
使用工具自动收集【531。代码覆盖率有如下几种:
1.Block覆盖率:用来识别代码中哪些块已经执行以及哪些还没有执行。
2.Statement覆盖率:统计设计的代码中每个可执行语句执行情况。

3.Expression覆盖率:统计HDL代码中所有表达式信息。
4.Toggle覆盖率:提供仿真期间信号和端口变化的信息,对于未使用的信号和保持
不变的信号进行标记。
5.FSM覆盖率:可以看出状态机哪些状态没有执行,统计状态机覆盖情况。
功能覆盖率用于衡量在验证中执行了多少设计规范,需要验证人员编写项目相关的
功能点【541。它是用于确定验证工作是否完成的因素之一,可以通过它去查看设计是否按
照要求的行为去执行,即是否符合设计需求。
代码覆盖率报告的是执行了什么而不是测试了什么【551,功能覆盖率报告的是设计的
功能是否正确实现。覆盖率需要经常和验证计划进行对照,可以看出验证的进度,通过
验证覆盖率可以找出验证不全面的地方,帮助聚焦风险点,提高验证的信心。

12

万方数据
山东大学硕士学位论文

高性能硬件矢量加速器模块对经常大量使用的五种矢量算子(average算子、compare
算子、subtraction算予、copy算子和list算子)进行硬件加速。因为矢量加速模块功能
可以进行扩展,提高系统刷新率,弥补MCU运算能力的不足,应用于需要即时反应和
高性能的芯片中。

高性能硬件矢量加速器模块设计需要支持均值、极值、矢量减法、复制和list算子
的算子计算,并且各个算子会因为寄存器配置的不同,算子会满足对应的运算需求。本

设计中的矢量加速器支持数据从内存中读取,进行算子计算后,将数据结果写入到内存
中,各个算子可以根据寄存器不同的配置对数据进行相应处理的操作,以及仲裁策略等。
在本设计中,矢量加速器由两个内存读取模块,一个内存写入模块控制对内存数据的访
问,并且由仲裁处理模块控制内存读取模块和内存写入模块仲裁操作。高性能硬件矢量
加速器具有的功能特性如下:
(1)本设计的仲裁处理模块内有AHB master,本设计可以通过高级高性能总线去高
速访问内存中的数据。

(2)从memory读取数据,可以通过配置内存读取模块的寄存器,通过两路的内存读
取模块高速读取数据。
(3)对于各个算子计算出的结果通过一路内存写入模块将计算结果高速存入到
memory中。
(4)内存读取模块1、内存读取模块2和内存写入模块是通过ICB总线实现和高级高
性能总线的交互。

(5)ICB总线有仲裁策略,仲裁策略分为轮询和优先级两种方式。
(6)支持实现矢量加速算子有:average算子、compare算子、list算子、subtraction
算子和copy算子。
(7)各个算子需要共享内存读取模块和内存写入模块,各个算子也要共享加、减、除、
移位等基本运算单元,对于同一时刻,模块只能使能一个算子进行工作,不能同时工作
两个及以上算子。
(8)支持计算完成后上报中断,高性能硬件矢量加速模块处理状态软件可查询。

13

万方数据
山东大学硕士学位论文

3.2矢量加速器设计框图和顶层接口

根据前面的功能特性描述设计出高性能硬件矢量加速器的设计框图,如图3-1所示。
矢量加速器通过寄存器进行配置,矢量加速器通过AHB总线连接外部的内存,通过内
存读取模块高速读取内存中的数据,数据经过操作数缓冲模块和数据格式转换模块进入
硬件加速单元模块,对需要处理的算子进行对应算子运算并将算子运算结果通过接收数
缓冲模块和内存写入模块经过AHB总线写入到外部内存中。


上 山
内存冒嘎《横陕1 内存读取樱姨2

、L 上
操作数缈撇1 操作数瓣中模块2

山 山
‘ L

ICB
l壤群I l燃2
l数矧备式转l

内存 上 上
铡嘞觯融
AHB

卜,I—P嘴

仲裁处理模块



接收数笺率睫块
ICB


内存写入模块

图3-1矢量加速器结构框图

高性能硬件矢量加速器模块主要包括了内存读取模块、内存写入模块、仲裁处理模

块、硬件加速单元模块、操作数缓冲模块、数据格式转换模块、接收数缓冲模块、寄存
器模块等。矢量加速器顶层的接口信号如表3.1所示。

表3.1矢量加速器顶层接口信号

14

万方数据
山东大学硕士学位论文

3.3.1内存读取模块设计

内存读取模块rdma通过寄存器配置后可以经过ICB总线从仲裁处理模块读取参与
算子运算的数据,并且将数据写入操作数缓冲模块。该模块与仲裁处理模块、操作数缓
冲模块以及寄存器的信号连接如图3。2所示。内存读取模块支持通过寄存器

rg amdr_data
中其,据数的位8、位61、位size
23取读中存内从以可,置配
rg rdma data size=2’bOO,表示从内存中获取的输入原始数据元素为8位;

rg rdma data size=2’b01,表示输入原始数据元素为16位;rg data


a md size=2
r_, b10

表示输入原始数据元素为32位。输入数据的有无符号位可以通过寄存器rg.rdma signed

进行配置,其中rg .;数号符有为据数始原入bl
amdrsigned=l 输示表,

rg rdmal b0 表示输入原始数据为无符号数。支持配置
l =dengis.big endian
和 little endian

读取,big endian是指数据的高字节存放在低地址中,模块读取数据的方向是从低地址
开始读取;little endian是指数据的高字节存放在高地址中,模块读取数据的方向是从高
地址开始读取。

图3-2内存读取模块连接图

内存读取模块内部通过两个状态机分别控制命令的请求和响应。内存读取模块可以

通过配置寄存器outstanding的值实现多滞留的transaction。每次发起有效的读取请求命
令时,内部信号ost lev会加l,每当操作数缓冲模块拿走一笔数据时,ost lev减l。内
部信号ost lev的值决定了是否可以再次发起请求指令。内存读取模块的请求指令状态

15

万方数据
山东大学硕士学位论文

机如图3.3所示。

O氧埒怛帕帅O筑帅帆
图3.3内存读取模块状态转换图

IDLE状态:系统上电或者复位后该模块进入空闲状态。如果在该模式下检测到读

取数据请求使能信号,则进入REQ状态;如果该模式下检测到rsp使能信号后,则进入
RSP状态。

REQ状态:数据请求状态,代表系统算子请求数据输入。该状态下内部信号ost lev

满足条件则发起数据传送请求,每次发起的有效的数据传送后,内部信号rdma ready

为1,并且使地址按照寄存器rg_rdma_stride、rg_rdma_round_round、rgrdma_pace和
rg amdr.进行递增。如果该状态下检测到
器存寄于等于小号信
grv完el送ts发。经已求请据数的取读要需有所且并值d的nuoa
r.ecap. ost
mdlimit
r.状ELm入进则,后成
态。

REQ WAIT状态:数据请求等待状态。当内部信号ost lev大于寄存器


rg ,时据数笔一走拿每块模冲缓limit
amdr.ost 数作操,中态状此在,态状该入进后值的
ost lev减1,直至信号ost lev的值小于寄存器rg dr.入进新limit
amost 重,值的 REQ
状态。

RSP状态:数据响应状态。内存读取模块通过rsp fifo缓存读取数据,每一次有效
的rsp到来,rsp 中的数据加1;每一次操作数缓冲模块发出的有效
o fif.,来到号request 信
rsp fifo数据减少1。当rep fifo full为0并且所有需要读取的数据请求已经发送完成后,

则进入IDLE状态。如果rsR fifo非满时,产生icb rsp rdy信号,表示此模块可以接受


AHB总线返回的数据;如果rsp 非空时,产生操作数缓冲模块的有效信号op
o fif., vaild

表示操作数缓冲模块可以读取内存读取模块中缓存的读数据。
RSP WAIT状态:响应等待状态。当rsp fifo的满信号为1时,从RSP状态进入此
状态;当rSp fifo的满信号为0时,则进入RSP状态。

16

万方数据
山东大学硕士学位论文

3.3.2内存写入模块设计

该模块主要功能是将从接收数缓冲模块中读取算子运算后的数据,并且按照该模块
寄存器相关的配置修改数据,之后通过ICB总线将数据写入该寄存器指定的内存地址
中。该模块与仲裁处理模块、接收数缓冲模块以及寄存器的信号连接如图3.4所示。结

构和功能类似内存读取模块。写入内存的地址可以通过寄存器rg wdma dest addr、

rg stride m
a 、
rg wdma
dw round rg wdma
stride . 、
设 pace 和
行 进
rg_wdma pace round

置。该模块支持通过寄存器rg amdwdata
_照按据数的后算运size
子算将以可,置配
amdata

32bits、16bits、8bits的格式写入内存中,当rg dw.中size=2
存内入写bOO
示表
data size=2 表示写入内存中的数据格式为

的数据格式为8bits;当rg a mb01 d w.; 16bits

表示写入内存中的数据格式为

当rg data
a md size=2
w_ b10
置 配持支据数32bits 。 big

endian和little endian写入内存,当寄存器rg wdma lte为1’b1时,数据存入内存的格式

为little endian,当寄存器rg wdma lte为1’b0时,数据存入内存的格式为big endian。

图3-4内存写入模块连接图

3.3.3操作数缓冲模块和接收数缓冲模块设计

操作数缓冲模块实现了对内存读取模块中读取数据的处理,并且实现对读数据通路
的扩展。操作数缓冲模块的深度为2,满足矢量加速器算子需求。硬件加速单元模块算
子想要数据时,会从该模块取出数据,数据会进入格式转换模块,把数据转换成符合需
求的数据后传入硬件加速单元模块,进行相应的算子计算。
接收数缓冲模块是深度为8的fifo。当硬件加速单元模块需要写入数据且接收数缓
冲模块为非满时,数据写入此模块。当内存写入模块的内部信号wdma rdy为1时并且

17

万方数据
山东大学硕士学位论文

接收数缓冲模块非空时,数据从接收数缓冲模块流入内存写入模块。

3.3.4仲裁处理模块设计

仲裁处理模块主要对两个内存读取模块和一个内存写入模块进行仲裁操作,并且将
仲裁的结果转化为AHB总线形式,将数据传递到内存中存储。该模块与其他模块的连
接如图3.5所示。该模块采用的之前公司项目里总线仲裁P,可以实现轮询和优先级两

种仲裁方式,可以完成本设计需求。当寄存器rg arb select为0时,仲裁处理模块为轮

询仲裁方式,当寄存器rg arb select为1时,仲裁处理模块为优先级仲裁方式。


僻崮溯模映

图3.5仲裁处理模块连接图

图3.5中仲裁处理模块共有四组ICB总线接口,分别连接内存读取模块1、内存读

取模块2、内存写入模块和ICB总线转AHB总线的master。以内存读取模块1为例,
表3.2列出ICB总线接口信号和方向。

表3-2仲裁模块与rdma连接的ICB总线接口

18

万方数据
山东大学硕士学位论文

3.3.5数据格式转换模块设计

数据格式转换模块是对操作数缓冲模块中的数据进行格式转换,再将数据传送到硬
件加速单元模块中。各个算子会根据自身所需要执行的运算从数据格式转换模块中得到
对应的处理数据。该模块实现了对加法、减法等基本运算单元对应的数据格式转换,提
供硬件加速单元中算子选择。以加法基本运算单元为例说明此模块的数据格式转换逻
辑,该模块从操作数缓冲模块接收到了数据,判断输入数据是否为有符号还是无符号,
如果是有符号,再进行判断输入数据的位宽,将数据位宽进行扩展到41位,对于8位
的有符号数据,将第7位符号位进行扩展到最高位,第0位和第6位数据保留。16位和
32位的有符号数据与8位有符号数据处理情况类似。对于无符号数据,只需要将扩展的
位赋值为0即可。

3.3.6硬件加速单元模块设计

硬件加速单元模块结构框图如图3-6所示,它包含了最基本的运算单元池、多路复
用接口、五个运算算子。它实现了对各个算子使能的控制以及各个算子的运算操作。

图3-6硬件加速器单元结构图

多路复用接口的主要作用是为了执行运算算子与运算单元池建立信息交互通路。考
虑到以后会添加新的算子,将所有的算子和运算单元交互的信号进行或操作,使其具有
很好的算子扩展性。
运算单元池模块实现了最基本使用频率较高的运算单元,包括加法器、减法器、除
法器和右移操作。这些基本运算单元对五个运算算子都是可见的,运算算子会根据自身
算子的需求调用各个运算单元执行相应的运算操作。加法器和减法器都是两输入均为
41bits有符号数,输出也为41bits有符号数,并且存在使能开关,一个周期内可以得到
计算结果;除法器为两输入,被除数输入数据是41bits有符号数,除数是21bits有符号
数,输出的商是41bits有符号数和余数是21bits有符号数,并且存在使能开关;右移操

19

万方数据
山东大学硕士学位论文

作输入和输出均为41bits有符号数,存在使能开关,由寄存器rg t shiR
h gir _配
bits[3:0]
置右移的位数,最大支持15位。对五个矢量算子详细设计描述如下:

(1)Average算子:通过寄存器rg amddata
r_,数位据数size[1:O]
的子算此入输置配
支持输入32bits、16bits和8bits一维数组。算子输入的有无符号位可以通过寄存器
rg rdma signed配置。在一维数组模式下,输入的一维数组长度由寄存器rg.avg.cal lens

配置,最大支持1023个数据参与运算。该算子支持二维操作,二维数组是由寄存器
rg aVg-cal_lens和rg_avg_loop_num共同决定输入的数据个数,rg_avg_loop__num最大支
持重复次数为61次。当rg 当。算运组数维一行进示为
gva1.oop.num 表,时10者或
寄存器rg gva.器存寄当,算运值均为
lac_mode 求为算运子算1该,时 rg avg cal mode

为0时,表示该算子为累加求和运算。寄存器rg thgshift
if.行进果结加bits
累持支以可
右移操作,最大支持右移15位。寄存器rg gvacal
.值均求是还mode
加累子算制控以可
运算,当rg gvacal 余有没,算运和求加累为
_当,作操数mode 为果结子算0该,时
rg l 为 1c
modea 时,该算子结果为求均值运算。寄存器
_gva.制 控
rg store remainder en

是否输出余数,当rg store remainder en为1时,保留余数,输出时按照商、余数、商、


余数进行存储。计算结果32位对齐。该算子的状态机如图3.7所示。

图3-7 average算子状态转换图

IDLE状态:当信号rst—n为0或者均值算子寄存器清零后进入该状态。如果在该模
式下检测到均值算子使能信号,则进AADD_CAL状态并将内部信号avg_num赋值为1。
ADD_CAL状态:使用加法器将数据进行加法计算,得到计算结果后,avg_num进
行加1操作。当avg_num的值小于寄存器rg_aVg_caLiens的值,则加法器将结果当作输

20

万方数据
山东大学硕士学位论文

入和下一个输入的数据进行加法运算,直到avg_num与rg_avg_cal_lens的值相等,结束
该状态,进入SHIFT RIGHT状态,并将avg loop加1。
SHIFT RIGHT状态:将累加的结果按照寄存器rg __right.shift bits 的值进行右移位
操作。
DIV CAL状态:进入此状态将进行除法操作。
QUOTIENT WRITE状态:进入该状态后,将商的值传递给接收数缓冲模块,然后

进行判断。当avg_loop小于rg_avg_loop_num时,满足rg_avg_cal_mode为0或者
rg_avg_cal_mode=1和rg_store_remainderen=0的条件,将avg_num信号置1,进入

ADD—CAL状态;当avg_loop大于等于rg_avg_loop_num时,满足rgavg_cal_mode为
0或者rg_avg_cal_mode=1和rg_storeremainderen=0的条件,将avg_loop信号清零,
进入IDLE状态;当寄存器rg store remainder e11为1时,进入RIMAINDER WRITE
状态。
RIMAINDER WRITE状态:进入该状态后,将余数的值传递给接收数缓冲模块。

当avg_loop的值小于寄存器rg_avg_loop_num的值,则进入ADD_CAL状态;当avg_loop
的值大于等于寄存器rg_avg_loop_num的值,则进入IDLE状态,并且将avg_loop信号
清零。

(2)Compare算子也可以称为求最大最小值算子。该算子通过寄存器
rgrdma_data_size[1:0]酉-d置输入数据位数,支持32bits、16bits和8bits的一维数组。算
子输入数据的有无符号位通过寄存器rgrdma_signed配置。同样支持一维数组和二维数
组。在一维数组模式中,寄存器rg emoccal
.度长大最,度长组lens
数维一的入输置配
为1023。在二维数组模式中,输入的数据个数由寄存器rg 和

共同决定,
m un_poorg_comp_loop_num
l_pmoc_grsn算 最大支持重复次数为..c06m3
el该la。c次e 子计
算结果32位对齐,输出数据按照最大值、最大值的索引值、最小值、最小值的索引值
存放,如果出现最小相同的数据,以第一次出现位置的索引值为输出结果。该算子的状
态机如图3.8所示。

图3-8 compare算子状态转换图

2l

万方数据
山东大学硕士学位论文

IDLE状态:当信号rst n为0或者极值算子使能寄存器清零后进入该状态。如果在
该模式下检测到极值算子使能信号,则进入COMP CAL状态并将内部信号comp.rlum
赋值为1。

COMP CAL状态:对输入的两数据完成数据大小比较,得到比较结果后,comp.num

进行加1操作。当comp hum的值小于寄存器rg lac.pmlens


oc.当果结前之将则,值的
作输入和下一个输入的数据进行比较,直到comp m与
unrg_comp.cal
.,等相值 lens

结束该状态,进入WRITE状态,并将comp 清零和
lnllncomp
.。加

ETIRW1最照p按o,1.元单冲缓数收接入写果结较比的组数轮一将:态状 大值、最大值

的索引值、最小值、最小值的索引值存放。当comp loop的值大于等于寄存器
rg 的值,则进入 状态,并且将 信号清零;当
的.值.co小mp于l寄oo存p器num num
p IDL的E值,则进入
0 01.pmoc. COMP
comp_loop状态。
grp CAL
001.pmoc

(3)List算子使用到了两个内存读取模块,rdmal从内存中读取一维数组V1,rdma2

从内存中读取一维数组V2。一维数组V1里的数据可以由寄存器rg amdata size


dr_,置 配
支持32bits、16bits和8bits,由寄存器rg rdma signed配置有无符号数。一维数组V2
里的数据为无符号8bits数据,数据的值只能1或者0。Vl和V2两个一维数组长度相

等,由寄存器rg list cal lens配置。当rg list mode等于0时,输出的一维数组的数据

是V1取V2数组里数据值为0的索引值所对应的数据;当rg 等于1时,输出
的一维数组的数据是V1取 2Ved数om的t应sil对.所值引索1为据数里组 据。例如V1={11,

22,33,44,55,66,77,88,99,00),V2={l,0,l,l,0,0,0,0,0,1),当rg_list_rnode
为1时,则输出数组V3--{ll,33,44,00},当rg list mode等于0时,v3={22,55,
66,77,88,991。该算子的状态机如图3-9所示。

rg_l
li

图3-9 List算子状态转换图

万方数据
山东大学硕士学位论文

IDLE状态:当信号rst n为0或者list算子使能寄存器清零后进入该状态。如果在
该模式下检测到list算子使能信号,则进入LIST CAL状态。
LIST CAL状态:当输入的两个一维数组对应索引值的数据值出现匹配成功时,信
号list match赋值为1,等待接收数缓冲模块ready为l时,进入WRITE状态,否则一

直等待接收数缓冲模块的ready信号为1;如果没有匹配成功,则继续匹配下一个索引
值所对应的数据,重新匹配。每次匹配失败或者成功,list nunl进行加1。
WRITE状态:将匹配成功索引值所对应的Vl数据的结果写入接收数缓冲单元。当
list hum的值大于等于寄存器rg list cal num的值,则进入IDLE状态,并且将list num

信号清零;当list num的值小于寄存器rg list cal num的值,则进入LIST CAL状态。


(4)Subtraction算子使用到了两个内存读取模块,rdmal从内存中读取一维数组

V1,rdma2从内存中读取一维数组V2,V2也可以通过rg v2 const data配置为固定常


数。V1里的数据相当于被减数,V2里的数据相当于减数。V2配置为固定常数时,需

要寄存器rg v2 const en使能。一维数组里的数据可以由寄存器rg rdma data size配置,

支持32bits、16bits和8bits,由寄存器rg rdma signed配置有无符号数。V1和V2两个


一维数组长度相等,由寄存器rg tcal s_配置,当
bulens 行进, 1为cal
rg.subt 置lens

1次减法操作,最大计算长度支持到5002个,该算子的状态机如图3.10所示

图3.10 subtraction算子状态转换图

IDLE状态:当信号rst n为0或者复位或者subtraction算子使能寄存器清零后进入
该状态。如果在该模式下检测到subtraction算子使能信号,则进入SUB CAL状态。
SUB CAL状态:输入的两个一维数组对应索引值的数据值做减法运算,当接收数
缓冲模块rec rdy为1时,进入WRITE状态,同时内部信号sub haITI加1。
WRITE状态:将SUB CAL状态中减法运算的结果写入接收数缓冲单元。当sub nunq

的值大于等于寄存器rg subt cal num的值,则进入IDLE状态,并且将sub num信号

万方数据
山东大学硕士学位论文

清零;当sub hum的值小于寄存器rg t brlum


cal us 的值,则进入
_。态 SUB 状
CAL

(5)Copy算子通过寄存器rgrdma_data_size配置输入数据的位数,支持32bits、
16bits和8bits的一维数组。算子输入数据的有无符号位通过寄存器rg rdma dengis.。置配
复制数据的内存起始地址和目标地址可以通过寄存器rg rdma src addr、rg amstride
dr_、

rgrdma strideround、rgrdma__.pace、 rg_rdma__pace_round、rg_wdmadestaddr,


rg_wdma__stride、rg_wdma_strideround、rg_wdma_pace和rg_wdma_paceround进行设
置,复制出的结果数据全部32位对齐。

3.3.7矢量加速器主要寄存器

矢量加速器的寄存器主要包括算子控制寄存器、中断清除寄存器、工作状态寄存器、
rdmal控制寄存器0、rdmal控制寄存器1、rdmal控制寄存器2、rdma2控制寄存器0、
rdma2控制寄存器1、rdma2控制寄存器2、wdmal控制寄存器0、wdmal控制寄存器1、
wdmal控制寄存器2、算子配置寄存器0、算子配置寄存器l、算子信息只读寄存器。
矢量加速器设计中各个寄存器的名称和寄存器的功能描述等信息如表格3.3所示。

表3.3矢量加速器寄存器

矢量加速器只需要配置寄存器就可以自动完成对数据从内存中读取,格式转换,选
择想要的算子运算完成硬件加速,再到运算处理后的数据写回内存中。所有模块顶层只
留出控制寄存器的接El,顶层接口信号如表3.1所示。对寄存器的控制是通过reg_bus
总线,它通过7个接口信号对寄存器进行读写操作。图3-11是reg_bus总线的写操作波
形图。

24

万方数据
山东大学硕士学位论文

剀3-1 1 reg—bus总线写操作波形幽

如图3.11所示,当对寄存器进行写操作时,信号reg.wr和reg ew_,拍一续持要需均
从高byte开始写入,每写一个byte数据之后需要打一拍再进行下一个byte数据的写操
作。所以要完成一个寄存器32位数据的写操作,总共需要8个时钟。reg wdata里赋值
的数据为当前有效的写数据byte,reg wdata为32位信号,需要复制四个有效的byte写
数据组成32位的数据赋值给reg wdata。例如要写入的数据最高byte的数值为19,赋
值给reg a的数据为 Oxl9191919
tadw.为21. 3图。出送拍前reg.wdata
当能使写为

reg.bus

总线读操作波形图,当对寄存器进行读操作时,信号reg rd为高,当前拍按照reg.rdar
把读数据赋值给reg a。其中
tadr.寄个各为址地的reg.wadr
器存寄,址地写的器存寄为
存器的偏移地址。reg 信号表示写使能。
r w.器存 寄
reg_we 表示写寄存器的
,置位 byte

数据位宽是32位即4个byte,所以用4bits表示。reg atdw.。据数写的器存寄示表 reg.radr

表示寄存器的读偏移地址,reg d表示寄存器的读使能。
r_。据数读的器存reg
寄示rdata

图3-12 reg_bus总线读操作波形图

25

万方数据
山东大学硕士学位论文

4矢量加速器模块验证平台的实现

4.1验证方案

详细分析高性能硬件矢量加速器模块功能特性以及各个模块的功能后,需要在
UVM验证平台搭建之前,制定出关于矢量加速器模块的验证计划。验证计划可以使得
矢量加速器验证有条不紊进行。

4.1.1矢量加速景的验证计划和流程步骤

在进入高性能硬件矢量加速器设计的验证流程之前,通常需要根据设计详细描述,
规划好矢量加速器的验证计划。验证流程步骤如图4.1所示。

图4-1验证流程步骤

1.熟悉矢量加速器设计文档,学习矢量加速器模块涉及到的相关理论知识。
2.制定验证计划和对矢量加速器的功能点进行提取。深入理解矢量加速器设计各个
模块的功能结构,提取全部的矢量加速器的验证功能点。
3.根据矢量加速器,搭建UVM验证平台。编写UVM中各个组件,编写矢量加速
器的参考模型组件,输入输出的数据监控monitor组件、driver组件等。
4.编写测试用例。分析矢量加速器所提取的验证功能点,编写对应的测试用例和冒
烟测试。使用冒烟测试去测试设计代码和验证环境,确保寄存器读写成功,基本数据流

26

万方数据
山东大学硕士学位论文

打通,发现bug并确认是设计问题还是环境问题后,立即修改。
5.冒烟测试成功后,开始运行其他测试用例,将功能点逐一验证,同时进行覆盖率
分析。完成验证后,进行验证报告,包括覆盖率报告和专项场景分析报告等。

4.1.2矢量加速器的验证功能点

为了保证高性能硬件矢量加速器模块符合设计规范,需要根据矢量加速器的说明文
档提取出验证功能点,验证人员根据验证功能点分析高性能硬件矢量加速器模块可能处
于的激励边界值等场景,编写测试用例进行验证,保证设计模块的可靠性。
根据第三章详细的功能特性和矢量加速器模块的设计,提取如下功能点:
1.寄存器的检查:检查寄存器默认值是否正确,寄存器的读写操作是否能够成功,
写入特定值是否会发生错误。

2.对average算子的检测:对输入的有符号数和无符号数的8位、16位、32位数据
进行均值算子运算;对特定值的数据输入,取最大值、最小值和中间值输入运算;对输
入寄存器印第安序的控制进行遍历验证;对输出数据的位宽进行遍历,比较均值算子运
算结果是否正确;对均值算子的求和与均值两种模式进行遍历;对均值算子的右移位的

功能进行遍历;对二维输入进行均值计算,对rg_avg_cal_lens和rg_avg_loop_num寄存
器进行设置,取最大值、最小值和中间值;对均值算子的余数寄存器
rg store remainder en进行遍历,观察仿真结果是否正确;对寄存器rg.work status flag

功能验证,观察均值运算完成和溢出的情况是否符合;中断信号功能是否正常;对均值
算子的case进行重复多次;均值算子溢出标志进行验证;均值算子的仲裁模式检测;对
均值算子的特定值进行覆盖和随机值进行压测。

3.对compare算子的检测:对输入compare算子运算的数据进行验证,有符号数和
无符号数、输入数据的位宽和印第安序进行遍历,观察输出结果;对特定值的数据输入,
取最大值、最小值和中间值输入运算;对输出数据的位宽寄存器进行遍历;对二维数组
输入进行compare算子验证,对rg_comp_cal_lens和rg_comp_loop_num寄存器进行设
置;对寄存器rg kstatus
row.况 情功能验证,观察
flag 的出溢和成完算 运子算
compare

是否符合;中断信号功能是否正常;对compare算子的case进行重复多次;compare算
子溢出标志进行验证;compare算子的仲裁模式检测;对compare算子的特定值进行覆
盖和随机值进行压测。
4.对copy算子的检测:对有符号数和无符号数、输入数据的位宽和印第安序的功能
进行遍历,观察输出结果;对特定值的数据输入,取最大值、最小值和中间值输入运算;

对输出数据的位宽控制寄存器进行遍历;对copy算子所能复制的长度进行验证,取最
大值、最小值和中间值;对寄存器rg_work_status_flag功能验证,观察copy算子运算完
成和溢出的情况是否符合;中断信号功能是否正常;对copy算子的case进行重复多次;

27

万方数据
山东大学硕士学位论文

对copy算子溢出标志进行验证;copy算子的仲裁模式检测;对copy算子的特定值进行
覆盖和随机值进行压测。
5.对list算子的检测:基本list算子功能进行验证;将输入输出相关寄存器
rg l sizem
dataa 、 rdmal
rgd rsigned
. 长的
rg.wdmal
、 进行遍历;对
data size 子 算 list

度进行设置,取最大值和最小值和中间值;对寄存器rg list mode进行遍历;


rg work status flag确认list算子运算完成和溢出的情况;对list算子的多次运行;对list

算子溢出标志位验证;在list算子运算场景中,对仲裁模式的验证;特定值和随机值进
行压测。
6.对subtraction算子的检测:对输入输出数据控制的相关寄存器进行遍历;对
subtraction算子寄存器rg tbus_cal
器存寄对;证验行lens
进度长据数入输置设
rg v2 const en功能验证;通过配置寄存器rg v2 const data设置V2的数据为最大值、
最小值和中间值验证;寄存器rg krowStatus
.情出溢和成完算运子算flag
法减量矢认确
况的验证;算子的重复多次不间断验证;对subtraction算子溢出标志位验证;在subtraction
算子运算场景中,对仲裁模式的验证;特定值和随机值进行压测验证。
7.矢量加速器设计在进行运算算子处理过程中,突然关掉算子的使能,然后再重新
使能,矢量加速器是否还能正常工作的场景验证。
8.矢量加速器设计在算子计算过程中,突然发生复位,复位结束后,矢量加速器是
否还能重新启动并且能够正常工作的场景验证。
从高性能硬件矢量加速器设计中分析总结出这八个验证功能点,并且以此为基础进
行后面测试用例和功能覆盖率模型的编写,通过覆盖率和测试用例执行的情况验证高性
能硬件矢量加速器设计功能的完备性。

4.2 UVlVI验证平台的搭建

本设计高性能硬件矢量加速器的验证平台具有矢量加速器算子功能的参考模型。参
考模型模拟了五个矢量加速算子运行的情况,验证平台会将参考模型里算子计算的结果
和矢量加速器设计算子计算的结果都传送到计分板组件中,在计分板组件中完成计算结
果的自动化对比,确认算子计算的实际值是否符合期望值。
UVM验证平台能够模拟矢量加速器运行的场景,通过对前面列出的功能点,来施
加不同的激励,充分验证矢量加速器模块的功能是否符合要求。本设计的矢量加速器在

项目中被命名为vpu2。图4—2为矢量加速器的UVM验证平台设计框图。

万方数据
山东大学硕士学位论文

图4-2矢量加速器验证平台框图

4.2.1 IⅣM验证平台的top层设计

Top层从图4.2可以看出,它是验证平台的最顶层,它在IⅣM验证平台里起到了
至关重要的作用。Top层主要作用有对时钟进行驱动、对波形进行设置以及接口信号的
传递等。Top层将验证平台和矢量加速器模块的端口进行正确连接,接口信号正确传送
到端口,驱动矢量加速器设计。图4.3是顶层设计部分代码。
vpu2 top州.REG ACE ADRW(16))vpu2 top u(

.sys rst b(rst n) ,

.sys cIk (clk) ,

.reg_wadr(rn-Vif.reg_wadr),
.regyr (m_vif・reg_wr) ,

.reg_we 《m_vif.reg_we) ,

.reg_wdata(m_vif.reg_wdata),
.reg—radr(m_vif.reg—radr),
.reg_rd (m_vif.reg_rd) ,

.reg_rdata(m_Vif.reg—rdata),

.sys—clk_mbist(1。be)
.mbist—mode (1‘bB)
.test—cg_en (0)
);

图4.3顶层设计部分代码

29

万方数据
山东大学硕士学位论文

Top层里使用图4-4所示的代码去生成所需要的验证仿真文件,波形文件格式为.fsdb
格式。¥fsdbDumpfile(“top.fsdb”)指定了生成的波形文件名为top.fsdb。
¥fsdbDumpvars(0,top)的第一个参数0是表示要加载当前instance下的所有变量以及它的
模块实例的波形,第二个参数值top为顶层例化名。因为需要仿真查看memory中的数
据,所以代码中添加¥f奎dbD唧npMDA(O,top.u_ram.mem)。

initia l-begin

¥fsdbDumpfile(¨top.fsdb¨);
¥fsdbDumpvars(0,top);
¥fsdbDumpRDA《0,top.U ram.mem);
¥fsdbDumpSVA;
¥fsdbDumpflush;
end

图4_4 Top层对波形设置代码

Top层对接口vpu2 也进行了声明例化,通过使用
f iv.对制 机
config db virtual

interface进行set操作,其他需要使用到interface的组件,在所需要的组件层次中进行

config_db机制的get操作,就可以使用接121中的信号并完成对其操作。Sequence通过
con_fig db机制使用interface,因为sequence在实例化时名字一般不固定,所有在顶层中
set函数第二个路径参数使用通配符。Top层config db的set代码如图4.5所示。
initial begin

uw_config_db#(virtual vpu2_if)::set(nulI,”uvm test—top.m_env.m_vpu2_agent”.’。m vif”,m vif);


uw_config—db#(virtual vpu2 if)::set(null.”uvm_test—top.m env.m_vpu2一agent.m driver”,”m_vif”.m_vif);
uw_config_db#(virtual vpu2_if)::set(null.”uvm_test—top.m_env.m_vpu2_agent.m monitor”。。。m_vif”,m_vif);
uv=_config_db#(virtual vpu2_if)::set(null,“uvm_test—top.M_env.m_vpu2一scoreboard“,”m_vif”.m_vif);
uw_config_db#(virtual vpuZ_if)::set(null,”uvm_test—top.m_env.s_monitor”.”m_vif”,m_vif);
uv=config_db#(virtual vpu2_if)::set(nutI.”uvm_test—top.m_env.m_vpu2一agent.m sequencer.4”,‘。m_vif”.m_vif);
uw_config_db#(virtuaI vpu2 if)::set(null.”uvm test—top.m_env.m_vpu2一refm”,“m__vif”,m_vif);
run_test():
end

图4.5 top层config bd.码代作操tes的

4.2.2 UVM的env层设计

验证环境中的env组件派生自uvm env,它作为一个结构化的容器,定义声明并且

例化了agent组件、输出数据的监视器out—monitor组件、转换器adapter、计分板组件、
参考模型组件和uvm tim fifo,完成所容纳组件的创建和接口的连接,并且声明了寄存
器参考模型。
UVM环境中的env组件通过uvmconfig db的get得到其他层传来的句柄。部分代
码如下:

if(!uvmconfig_db#(vpu2topreg_model)::get(this,”’,‘.一rill’,,p_rm))begin
、uvm info(“getRGM”,‘'rio top-down RGM hangle is assigned",UVM_LOW)

30

万方数据
山东大学硕士学位论文

p_rm=vpu2_top_reg_model::type__id::create(“p-rm",this);

、uvm_info(‘'newRGM”,“create rgrn instance locally",UVM_LOW)


end

UVM环境中的env组件所有用到的类一般在build phase中实例化。实例化后的寄
存器模型在env组件中还需要进行一些操作,部分代码如下:
p_rm.configure(null,“”);

p_rm.build();
p_rm.10ck_model();
p_rm.reset();
p_rm.set_hdl_path_root(“top.vpu2_top_u.u_vpu2_reg_wrap_inst'’);
对于uvm tim fifo的连接,它发生在env组件中的connect phase中,各个组件需

要进行通信则建立TLM连接,部分代码如图4-6所示。

m_vpu2一agent.m_monitor.m_ap.connect(in_monitor refm_fifo.blocking—put—export);
m_vpu2一refm.bgp.connect(in—monitor_refm_fifo.blocking—get—export);
S monito r.m p connect

p ( out monito
b sco reboa rd fifo
r . ;.

expo rt
btocldng put )
reboa rd.out_monito r_bgp.connect(out monito r_sco reboa rd—fifo.blocking_get_expo rt);
m_vpu2一sco

m_vpu2一scoreboard.refm_bgp.connect(refmscoreboard—fifo.blocking—get_export);
m_vpu—refm.bpp.connect(refm_scoreboard—fifo.blocking—put_export);

图4.6 env层建立TLM通信代码

4.2.3 UVIVI的interface设计

Interface是实现UVM验证平台和矢量加速器之间的连接,interface的定义独立于
模块,通过关键字interface和endinterface包裹起来,在interface里面可以有断言,覆

盖率收集等[56]。
Interface在类中定义为虚接口,是物理接口的句柄,因为interface和module一样,
都是静态的变量,是在程序开始的时候,内存中就有了实例。
Interface在类里使用虚接口,在Top层将其实例化,在基于矢量加速器UVM验证
平台中,使用了是config 把句柄传递过去。本设计的验证平台的
b d.码代分interface 部
如图4—7所示。

万方数据
山东大学硕士学位论文

、ifndef vpu2一if—sv
、define
vpu2一if—sv
interface
vpu2一if(input clk,input rst—n);
logic【9:0】 reg_wadr;
logic reg_w ;
logic【3:e】 reg_ue ;

logic【31:0】 reg_wdata;
logic【9:01 reg—tadr;
logic reg_rd ;

logic【31:e】 reg_rdata;

bit【19:2】 rg—rdmal一src—addr ;//=top.vpu2一top—U.u_vpu2一reg wrap_inst.rg—rdmal—Src—addr【19:2】:


bit【0:e】 ro_done_intr_flag ://=top.vpu2一top_u.u_Vpu2一reg wrap_inst.ro_done_intr_flag【e:8】;
bit【11:e】 rg—rdmal_stride_round;//=top.vpu2_top_u.u_vpu2一reg wrap—i‘nst.rg—rdmal-stride_round【11:O】;
bit【11:e】 rg—rdml_pace_round ;//=top-vpu2 top_u。u_vpu2一reg wrap—inst.rg—rdmal_pace_round【11:8】:
bit【11:2l rg—rdml_stride ://=top.vpu2.top忡u.u_vpu2一reg wrap_inst.rg_rdmal_stride[11:21;
bit【11:2】 rg—rdmal pace ;//=top.vpu2一top_u.u_vpu2一reg wrap_inst.rg—rdmal pace【11:2】;
bit【11:2】 rg wdmal_stride ://=top.vpu2一top_u.u_vpu2一reg wrap_inst.rg_wdmal—stride[1l:2】;
bit【11:e】 rgⅥlmal_strid皇一round;//=top.vpu2_top—U.u_vpu2一regwrap_inst.rg_wdmal—stride_round【11:0】;
bit【11:e1 rg_州mal_pace_round ://=top.vpu2_top-u.u_vpu2一reg_wrap_inst.rg_wdmal_pace_round【11:e】:
bit【11:2】 rg_wdmal_pace ;//=top.vpu2一top_u.u_Vpu2一rog_yrap_inst.rg wdmal_pace【11:2】;
bit【1:8】 rg—rdmal_data_size ;//=top.vpu2一top_u.u-vpu2一reg wrap_inst.rg_rdml data—size【1:0】;
bit【e:0】 rg—rdml_signed ://=top.vpu2一top_u.u-vpu2一reg wrap_inst.rg—rdmal—signed【e:0】;
bit【5:0】 rg—ypu2_core en
;/I=top-vpu2一top_u.u_vpu2一reg_wrap_inst.rg—vpu2一COre_en【5:0】;
bit【19:2】 rg_wdmaUest_add r ://=top.vpu2jop_u.uJpu2一reg』rap_inst.rg wdmal_dest—add r[19:2】;
bit【1:e】 rg_wd舱l_data—size ;

bit【11:01
rg—rdma2一stride—round://=top.vpu2』op_u.u_vpu2一reg wrap—inst.r9一rdma2一stride_round【11:01;
bit【11:e】 rg—rdw2_pace-round ;//=top.vpu2一top_u.u-vpu2一reg_wrap_inst.rg—rdma2 pace-round【11:e】;

图4.7 interface部分代码

4.2.4 UVM验证平台的参考模型组件设计
参考模型是按照矢量加速器的说明文档中功能需求进行设计,使用SV语言对参考
模型进行编写。参考模型的存在是为了验证矢量加速器模块功能是否正确。参考模型对
于整个验证平台而言至关重要。在编写参考模型时,确保功能正确,并且在验证的过程
中,需要将参考模型和矢量加速器设计的输出结果通过TLM通信传输到scoreboard组
件中进行结果比较,通过比较结果判断矢量加速器设计功能的正确性。本论文中参考模
型检测对应寄存器状态使用的是后门访问DUT的状态寄存器实现的。矢量加速器的参
考模型主要是由五个算子组成,下面依次介绍。
Copy算子参考模型:copy算子支持输入为32位、16位和8位的有无符号位数据
的输入,输入数据的字节长度为HIGH BIT位。输入的一维数组长度为1024"100p num。

通过宏定义HIGH BIT和loop muR.据数历遍,算运的快更了为。护维行进码代对好更


通过count all算出每次输入的数据有多少个进行遍历,通过case语句对输入的数据位

宽rg dataa
l 进行判断,进入对应的
size m dr_, BYTE
支 HALFWORD
分 WORD
和的 、

其中rg rdmal data size通过寄存器后门访问获得数值。因为输出结果全部32位对齐,


以及需要判断rg l size 的值,再次使用
data a mdw 语句,进入对应的
case . 、 BYTE

HALFWORD和WORD的分支后,通过三目运算符,进行有符号还是无符号的处理。

例如BYTE分支,如果rg rdmal signed为1,数据的第0位到第6位进行正常复制,


第7位赋值为l,剩余的25bits赋值为0。Copy算子部分设计代码如图4.8所示。

32

万方数据
function void COPy(1I'pln bit s1口nedl‘¨IC,H Dl"r;el in dlltll n位4.‘L∞P聃l・
ref bit‘lgn酣I.HI“srr:eI em_ebtalle24。’LOOP.¨”};

黑2=::器"I…,IIC“.¨BITm:el尝蛊器:墚豁帮i器;.嚏一,J峨一,

."ⅢBYT‰E
’m∞
{拳:龋怒批-州m vlf.幢t|姒Nml..‘¥i州1”ed湍2S'№be,,㈦(札in蚋data…ILll71171m1},I.'in舢.to黼|::;|落25*¨be,l“删_dat小ali]m17.eI:el:
:OOt dlt|tempIiJ}m vlf q.raml—II口●-d7 f 1’be.125(1n datllill7¨J.1n datalil|6:ell:(25‘bet Ln dmtaliII 7:ell

札曲

datt|lalt川]llsJlSlmH.黜m4:e】6:el;噶25㈨'be.蛐ln
vifl.,咀rL№r'-。aLl¥I枷11ee‘溜25魄"be,{:{{岫In dstIlIIalll陋l?:eeBl
戮淼 蒸一 瓣涨 。.¨ie
・●_vtt.憎.rdmmL“—酣7{l’be.n7I机t时●IllIl5l¨.轴.—¨州llll4:e¨:{17’be・虮椭U1llS:Ol}
讨.

善~州 粼~
=I-vif.一一rdm-l_signed?f嚣‘be.{l{i-IJn・11Il,ll¨
;a vlf.rtLrdml slgnN?(17。螗.t 1{In_d●tallll31111 蠹嚣‰黜臻港盐蒿,l川i1 1。7洲:el;
虮ht-flll31:e1}:{1’∞一Ln datellll31:01)
:刍躲哏№L‘1州¨1”・

图4-8 copy算子模型部分设计代码

因为还需要对算子运算结果进行大小印第安序的处理,通过判断寄存器

rg_wdmal_lte位的情况。当rg_wdmal_lte等于LITTLE—ENDIAN时,结果保持不变,否
则,需要通过对位宽不同情况进行调整,位宽调整的部分代码如图4-9所示。
if(m_vif.rLwdmUte一、LrTTLE_ENDIAN)begin
out_data=out—data—t剑甲;
end

else begin

case(她一Vif.rg砌帕l_data_size)
、BYTE:begin
out data=out data temp;
end

、HALl:WORD:begin
for(int i=0:i<1824"、L00P_NUH;i++)begin
7:0 J;
out_datali】【15:8】;out_data_temp[ilI
out_data[i】【7:8】=out_data_teep[i】【15:81;
end

end
、WORD:begin
for《int i=O;i<1024"、LOOP NUH;i++)begin
out_data[i)【31:24]=out—data—templi J【7:0】;
out data[i|123:Z6l=out data_t唧(iI【15:81;
out_dataIll f1S:8】=out data tmp[i]【23:16】;
out_data[i1【7:0】=out_data_tapli】【31:24】;
end

end
endcase
endfunctiOn

图4-9输出数据印第安序设计代码

Average算子参考模型:此算子支持一维数组和二维数组的输入,由寄存器信号
rg_avg_loop_num进行控制,当其信号为0或1时,表示进行一维运算,在算子中进行

if(m_vif.rg_avg_loop_num=一‘hO)begin
rg_avg_loop_num_temp=‘hi;

end

在进行二维数组运算时,通过for循环语句转化,将二维数组运算转换成一维数组

33

万方数据
山东大学硕士学位论文

进行相应的操作,通过for循环rg_avg_loop_num_temp,进行相应的一维数组运算,再
对rg_avg_cal_lenstemp进行遍历,将从in_agent中in—monitor监控的输入DUT的数据
赋值到临时数组temp中,再通过for循环将数组相加,得到一维数组中各个数据的累加
和。部分代码如下:

for(intj=O;j勺瑟avg_loop_num_temp;j++)begin
for(int m=0;m<rg_avg_cal_lens_temp;m++)begin

temp[m】=data[j木rg_avg_cal_lens_temp+m];
end

sum_data=0;

for(int i=o;i<rg_avgcal_lenstemp;i++)begin
sum—data=sum_data+temp[i];
end

end.

得到累加和之后,需要去判断add ovf加法溢出位,对于求累加和运算是否发生加

法溢出。判断sum—data最高位(第42位)是否为1,如果为1表明累加和为负数,如果
sum_data[42:40]这3个比特位有一个及以上比特位为0则发生加法溢出。如果累加和为
正数,判断sum_data[42:40]这3个比特位是否有比特位为1,为1则发生加法溢出。发
生加法溢出情况,保证数据正确,需要将第0位到第40位的累加数据复制给累加和变
量。

add_ovf=sum_data[42】?(&sum data[42:40])一0:(Isum_data[42:40]一1);
if(add_ovf)begin
、uvm info(“AVERAGE”,“avemge_add_ovf---一1 1 1”,UVM_LOW);

end

if(add_ovf 1)begin
sum_data_temp=sum_data[40:0];
end

else begin

surn_data_temp=sum data;
end

寄存器信号rg_right_shi帅its,可以对累加结果进行移位操作,最大支持15位的右
移。当rg_right_shi帅its为0时,不进行右移操作,sum—data—shift等于累加和。

34

万方数据
山东大学硕士学位论文

//right shift config

sum_data_shift=sum data_temp>>rg_right shift—bits—temp;


sum data shift trans=sum data shift;

avg_data_temp【j】=sum_data~shift—trans/rg avg—cal—lens—tmp
||rg—avg—cal—mode config
if(m vif.rg—avg—cal—mode一1)begin
avg_data【j J=avg—data_temp[j J;
end

else begin

avg_data【j】=sum_data_shift;
end

if(m_vif.rg—store_remainder en一1&&m-vif-rg_avg_cal—mode=:1)begin
remain—data[j】=sum_data_shift_ttans%rg—avg—cal_lens—temp;
end

else begin
remain_data【J】=。he;

图4.10右移和模式选择部分代码

当寄存器信号rg_avg_cal_mode为1’bl,将进行求均值运算,rg_avg cal rnode=1‘bO,

算子为累加和运算。寄存器信号rg_store_remainderen=l’bl时,会保留余数。通过对累
加和变量sum—data—shift—trans使用“/’’和“%”分别求出商和余数。代码如图4.10所
不o

Average算子计算出来的结果全部对齐32bits,计算结果的符号位和rdma输入的数
据信号有关,计算结果的位宽和wdma寄存器信号rg_wdmal_data_size有关。输出的商
和余数分别根据寄存器信号rg_wdmal_data_size和rg_rdmal_signed以及
rgrdmal—signed的配置截取不同的位宽和符号位赋值给数组avg_data_trans和
remain—data—trans,当寄存器信号rg_store_remainder_en和rg_avg__.cal_mode同时为l时,
符号位截取avg_data_temp第32位,否则符号位截取avg_data_temp第42位。部分代码
如图4.11所示。
if(m Vif rg_store_reminder en一1&&m..vif rg avg_cal mode一11 begin
case(m vif.rlrdmal_data_size)
’BYTE:begin
int
ceuntjll=m_vif.rg_wdml_stride_round+1)‘(m vlf
forfint i≈e;i<count all:i¨)begin
avg_data trans 【i1;m-vif.rg—rdml—signed?{25 bO.avg data_te=p[111321,avg_data[i】【6:e¨:{25’be,avg_dataIll【7:0":
remin—data—tFans【i】=mjif.rg—rdml signed?{25 be.remin_data【i】132].remain_data【iI【6:e】):(25‘∞,remain-data[i】17:01}
end

end

‘HALF啪P.D:b叼1n
int count all=(a_vif.rg_w如1_stride round+1)‘(-ijif.rg__dml pace—roun“1);
for(int i呻:i(count all:i++)begin
avg_data-tr狮5 【i1==_vif.rg_rdmal_signed?n7。be.avg_data_tmp[i]1321.avg_data[i]【14:0n:{17‘b0.avg_data[i]【15:e¨;
remain_data_trans[i]=e_vif.rg—rdml_Mgned 7{17‘be.rewin_data[i]【32】.remain—data[i][14:01}:f17。bB,remain_data[i][15:e】)
end
end

‘WORD:begin
int
count~art t(m_vif.rg_-dml-stride_round+1)+(m_vif.rg-dml aace_round+1);
for{int i≈O;i<count all:i++)begin

avg data—trans 【i】=m_vif.rg—rdaal_signed 7 n’be.avg—data_temp[i1【32】.avg—data[i]【3e:日】):f1’be.avg—data[i][31:el':


reuzn data—trans[il=m_vif.rg_rdmal—signed?{l。∞.remain-data[i][321.remin data[iI【∞:e】}:n’∞.nⅫaln data|i113h61,:
end

end
endtase

end

图4-I 1 average算子输出设计部分代码

极值算子参考模型:此算子支持一维数组和二维数组的数据输入,由寄存器信号
rg_comp_loop_num进行控制,当其信号为0或1时,表示进行一维运算,用三目运算

35

万方数据
山东大学硕士学位论文

符表示,代码rg_comp_loop_num=m_vif.rg_comp_loop_num?m_vif.rg_eomp_loop__num:1。
在进行二维数组运算时,需要将二维数组运算转化成一维数组,再对一维数组进行

输入数据的处理。通过for循环rg_comp_loop__num和rg_comp_cal_lens,将二维数组每
一行转化为相应的一维数组运算,再对一维数组进行遍历比较,求出最大值、最大值索
引、最小值和最小值索引,大小相同的数据以第一次出现的位置索引为结果数据输出,
并赋值到对应的数组中,进行下一轮的循环,代码如图4.12所示。
for(int j=8;J‘rg_comp Ioop_num;j++)begin
for(int m=O;m<rg_comp_cal—lens;l叶+)begin
temp[m]=data【j幸rg—comp_cal_lens+m】;
end

max—data=temple];
min data=temp【e】:

max_data_index_temp=O:
min_data_index_temp=0;
for(int i--8;i<rg_comp_cal_len¥:i++)begin
if(t即币[i]>max_data)begin
Max data=temp【i】;

max_data_index_temp=i:
end
if(tenqo[i]<min_data)begin
min data=temp【i】:

min_data_index_temp=i:
end
end
end

图4.12极值算子输入数据处理代码

List算子参考模型:list算子使用到了rdmal和rdma2两个模块,rdmal输入一维数
组VI,rdma2输入一维数组V2。一维数组V1里的数据可以是随机值,一维数组V2

里的数据必须是1或者0,Vl和V2两个数组长度相等。当rg_list_mode等于0时,输
出为V1取V2数组里数据值为0的索引值所对应的数据;当rg_list_mode等于1时,输
出为V1取V2数组里数据值为1的索引值所对应的数据,代码如图4.13所示。
for(int i;0:i<rg_list_cal—lens;i++)begin
if(m-vif.rg_list_mde一0)begin
if(data_two【i】一日)begin
data_out【k】=data—one[i];
k=l‘+1:
end
end
else begin
if(data_two【i】I-0)begin
data_out【k】=data_one[i];
k=l(+l:
end
end
end

图4.1 3 list算子模式选择设计代码

36

万方数据
山东大学硕士学位论文

对list算子结果数据的处理和前面描述的copy算子的处理类似。
Subtraction算子参考模型:该算子支持使用rdmal和rdma2两个模块,rdmal输入
一维数组V1,rdma2输入一维数组V2。一维数组V1里的数据与V2数据一一对应,
V1里的数据相当于被减数,V2里的数据相当于减数,计算的结果放到一维数组V3。

一维数组1和V2的长度可以由寄存器rg subt cal lens进行配置,最大支持计算长度为

5002个。寄存器rg v2 const en可以对一维数组V2进行配置,当此寄存器赋值为1,

V2的值为常数,等效于消底运算,常数值可以通过寄存器rg v2 const data[3l:0]进行配


置,固定为32bits数据,且为有符号数据。通过for循环对V2数组根据配置,进行数
据处理。再通过sub函数进行减法运算得到计算结果,部分代码如下:

sub—datal=sub_vl[i];
if(rg_v2_const_en)sub—data2={rg.v2 const_data[3 1],rg v2一const_data[3 1:0]);
else sub—data2=sub_v2[i];
sub—result=sub(sub_datal,sub_data2);
参考模型顶层设计:在参考模型的run phase中,首先判断接El是否由

uvm_config_db从顶层得到,没有得到句柄将会报error。Config_db机制get成功后,会
进入循环语句,在ro done intr 上升沿的时候,通过 case 语句,读取
的值判断进入哪个算子,调用相.fl应ag的算子后,由 trr定g_义_vp的u2
op_teg_gnikcolb_mvuna得e去bgp
roc
到in monitor组件检测到的输入DUT的数据,进行相关算子的运算,再通过

uvm_blocking__put_port定义的bpp,将参考模型算子所计算得到的结果值传递到计分板
组件里。参考模型继续等待下一个ro done intr galf.图如码代分部。来到的号信沿升上
4.14所示。
forever begin

temp_rsp=new();
@(posedge m_vif.ro done intr flag)begin
case(m vif.rg_vpu2_core_en)
’COMPARE:begin
compare(tmp_rsp.mx—data,temp_rsp.max—data—index.temp_rsp.min_data,temp_rsp.rain—data—index)
end

、AVERAGE:begin
average(temp_rsp.out_avg_data.temp_rsp.out_data_remain);
end
’SUBSTRACTOR:begin
sub_v(tenp_rsp,sub—data—out):
end
‘COPY:begin
temp_req;netlI):
bgp.get(temp_req):
copy(terp reg.in_data.temp_rsp.out—data):
end

’LIST:begin
list(temp rsp.data—out—array,temp_rsp.ro list—result_lens);
temp_rsp.print(J:
end

defautt:’uvm is the value of the warning”)


warningI”旺刚”,”rg—vpu2一core—eft
endcase

bpp.putItemp_rsp):
temp_rsp.print();
’uw_infoI“RE刚。,”vpu2 refm put ok!….UVR LOW)
end
end

图4.14参考模型顶层设计代码

37

万方数据
山东大学硕士学位论文

4.2.5 UVM的scoreboard组件设计

Scoreboard组件是UVM验证平台重要组成部分,它实现了期望数据和DUT输出的
实际数据的自动比对。scoreboard组件分别接收从参考模型传输来的数据和out monitor

传输来的数据,进行自动比对,并将比较结果进行打印,让验证人员清楚直观知道比较
结果是否正确。
Scoreboard组件通过定义两个uvm blocking_get_port端E1分别是out_monitor_bgp
和refm gb.望期的到得里型模考参和据数际实DUT
p,通过get函数分别获得从 的到得
数据。计分板组件、参考模型组件以及out monitor组件的相关接口是通过env层的
uvm tim fifo接口相连接。uvm tim fifo接口内有fifo,可以存放参考模型和out monitor

传输进去的数据。期望值是根据输入的数据和所选择的算子,由验证平台中参考模型计

算得到的数据,它使用SV语言编写,无需消耗仿真时间。所以get参考模型的数据完
后,计分板组件会等待out_monitor_bgp传输数据,两个数据都得到后,再进行接下来
的比较。
因为不同的算子,求得的数据类型不一样。使用了case语句将使用不同的算子进入

不同的分支进行比较。比如compare算子,需要去比较期望值和理想值的最大值、最大
值的索引值、最小值和最小值的索引值,比较完毕后,会打印比较结果和比较次数。部
分代码如图4。15所示。
’COMPARE:begin
if((out monitor_item.max_data一他fre_item.mx_data)陆(out_onitoLitem.max—data—index—refm_ites.max—data—iJldex
)龋(out_mnitor item.m data—refm_itt帅.rain—data)酗(out_Bonitor item.min—data index—refm—item.Bin_data_index))

图4—15 compare算子比较部分代码

4.2.6 UVM的agent组l件设:计

代理器agent组件是对sequencer,driver,monitor组件进行封装,来提高验证平台
的可重用性。UVM中agent组件中引入了枚举类型变量is active,该变量的系统的默认
值是UVM ACTIVE。当is active变量值为UVM ACTIVE时,则agent组件在build phase

中实例化driver、monitor和sequencer组件,并且在connect phase中将driver的

seq item port和sequencer的seq item export连接起来。当is active赋值为


UVM PASSIVE,则agent组件在build phase中只实例化monitor组件。

本论文有输入的agent组件,输出的agent直接使用out—monitor完成任务,因为输
出需要监控DUT输出的数据,并且将数据转换成scoreboard组件能够接收的形式,
out monitor完全能够实现。vpu2 组件的部分设计代码如图4.16所示。

38

万方数据
山东大学硕士学位论文

function void bulld_phase(uvm phase phase):


super.build_phase(phase);
¥display(”vpu2 agent build…”);
monitor=vpu2_monitor::type_id::create(“monitor”.this);
if(is_active—UVH_ACTIVE)
begin

sequencer=vpu2一sequencer::type_id::create(”sequencer”.this):
driver=vpu2-driver::type_id::createl。driver。.this):
end
’uvm
info(”vpu2一agent”,。function build—phase is called。.UW LOW);
endfunction:build’hase

function void connect—phase(uvm_phase phase);


SUper.connect phase(phase);
Sdisplay(”vpu2 agent connect…”J:
monitor put refm=monitor.put r-efm:
if(is_activea—UVM_ACTIVE'
begin
driver.seq_item_port.connect(sequencer.seq_item_export);
end

、uva
inforvpu2一agent’.。function connect_phase is called“.UVR_LOW);
endfunction:connect phase

图4-16 agent组件部分代码

4.2.7 tWM的driver组件设计

在UVM验证环境中,driver组件接受来自sequencer的事务级数据transaction,按
照reg_bus总线协议产生读写驱动,并发送给DUT的输入接口,完成数据的传输。
在driver组件的main_phase中,通过fork…join_none语句,并行两个任务:复位
reset_listener()和事务级驱动get_and_driveO,代码如下所示:
fork

get_and_drive();
resellistenerO;
join_none
复位操作是通过fork・・"joinnone全程监控复位信号rst—n是否出现下降沿动作。当
检查到复位信号rst—n下降沿后,将寄存器信号的地址、读写、使能信号等进行复位,
赋值为0完成复位操作,具体代码如图4.17所示。
task vpu2 driver::reset listener():
、uvm_info(get_type_name().“reset—listener…”,UVH-LOW)
fork
forever begin

@(negedge m_vif.rst_n)begin
、uvm_info(get_type_name(),”reset—listener:rst—n;0…”,U、,叱LOW)
m vif.reg wadr a e:
m vif.reg wr ☆0:

vif.reg we o 0:
m vif.reg wdata审0:
m vif.reg radr a 0:
m vif.reg rd q 0:
end

end

】01Lnone
endtask:reset listener

图4-1 7 reset_listener代码

39

万方数据
事务级驱动任务是通过seq__item_port.get_next_item等待sequencer组件传递激励信
息,得到激励后,通过函数reg_writeO,将激励信息转化为DUT能够识别的数据,发
送给DUT接口,和DUT接口完成信息交互后,driver组件调用seq_item_port.item_done()
函数。完成一次传输动作,通过forever语句等待下一次传输。get_and_drive()任务代码
如图4.18所示。

task vpu2 driver::get and drive();


、uvm_info(get—type_name(),”m_vpu2_driver get—and_drive…”,UVM_LOW)
@(posedge m—vii.ctk)
f@rever begin

seq—item_po rt.get_next—item(req);
this.reg write(req);
seq item p@rt.item done();
end

endtask:get and d rive

图4.1 8 get_and_drive代码

其中re删te()函数是按照reg_bus总线进行驱动,部分代码如图4-19所示。
task vpu2-driver::reg_write(vpu2_itm item);
@(posedge re_vii.cIk);
case(item.reg_cmd)
’WRrTE:begin
re_vii.reg_wadr#item.reg_addr;
In vii.reg 1 bl
rw.:‘#
m vii.reg雠 a’4bleee
_;

lI-vif.reg wdata<={{item.reg wdata[31:24]},{item.reg wdata[31:24]),{item・reg_wlata[31:241}・(item・reg_wdata[31:241}}


@(posed9e m_vif.ctk iff fn.vif.rst—nl:
re_vii.reg_wr a 1。be:
■vii.reg ewt. #‘ be
4:


@(posedge=_vii.clk iff vif.FSt n):

m_vif.reg_wr ☆1。bl;
■vii.reg we 审4’bel66;
=_vii.reg wdata<={4{item.reg_诚latal23:16】));
@(posedge re_vii.clk iff m—V”.rst—n);
乱vif.reg wr 靠1’b8:
■vii.reg we#41b0:
@(posedge re_vii.clk iff m vii.rst—n);
m vii.reg wr 口1’bl:
n vii.reg垤 o’4beel0
_;
=_vii.reg_wdata<={4{item.reg_wdata【15:8】)};
@(posedge re_vii.ctk iff re_vii.rst n):
n vii.reg rw_:
o’ 1 be
<_’ be
m vii.reg垤 4_:
@(posedge re_vii.clk iff vif.rst-n);

m vii.reg wr ☆1。bl;
啊vii.reg we a 4。beeel;

vif.reg wdata<={4(item.regⅥlata【7:8】));

@(posedge m vif.clk iff m—V”.rst_n);


m__vif.reg_wr ☆1’be;
=vii.reg we 。4‘be;
end

’READ:begin
m vii.reg 芈。
dr _1:
bl

■vii.reg radr举item.reg_addr;

图4.19 reg_write代码

4.2.8 IⅣM的monitor组

UVM中的monitor组件将输出引脚电平激励转换为事务级电平,UVM的monitor
组件在interface对DUT的信号进行采样和捕获响应,并将信息整理打包发给参考模型

万方数据
山东大学硕士学位论文

组件或者scoreboard组件中,进行相关处理【57】。组件in monitor中输入的数据相关配置
和rdmal和rdma2寄存器相关,根据算子使用情况调用rdmal或者rdmal和rdma2。如
subtraction算子,当寄存器信号rg v2 const ell为0时,会调用rdma2,对V2从memo巧
得到数据,并进行数据处理。当rg v2 const en为1时,V2为常数,常数值通过寄存

器rg v2 const data配置,固定为32位有符号数,此时不用调用rdma2,in monitor也

不用去memo巧采取并处理相关数据。list算子也会使用rdma2模块,处理情况类似。
通过rdmal,rdma2相关配置,in monitor组件获取了内存的相关数据,还需要寄
存器信号rg lamdr.需还后理处端小lte
大行进据数对,理处据数关相行进置设端小大的
要对输入配置的位宽寄存器和符号位寄存器的配置进行数据的处理,这样做从memory
获得数据而不是从rdma获得数据,可以避免因为设计rdma处理数据的错误,导致验证
也发生同样的错误。验证中也进行了对数据输入和输出的处理,使得比较结果较为准确。
最后将处理好的数据,使用TLM机制,通过uvm blocking put port端口将信息打
包发送到参考模型组件里,交给参考模型进行对应算子处理。
out monitor收集DUT计算的输出数据,收集的方式思想一样,处理的情况类似,
out monitor将收集处理好的处理发送到scoreboard组件中。

4.2.9 UVM的sequencer组件设计

sequencer组件在UVM平台中必不可少,在矢量加速器模块验证环境中,负责给
driver组件传递sequence产生的transaction,这里transaction是vpu2 item。Sequencer

组件在不同DUT的UVM验证平台环境中基本类似,继承于uvm sequencer,通过
、uvm component utils宏注册,设计代码如图4.20所示。
class vpu2_sequencer extends uvm_sequencer#(vpu2_item):
vi rtual vpu2_if啊-Vif;
、uvm coRDonent—utits(vpu2_sequencer)
extern function new(strlng name.uw_component parent):
endctass

function vpu2_sequencer::new(string name。uvm_component parent):


super.new(name,parent);
endfunction:new

图4-20 sequencer组件设计代码

4.2.10 UVM的寄存嚣模型设计

寄存器对模块设计来说非常重要,通过读取寄存器的状态,可以获得硬件当前的状
况,或者对寄存器进行配置,使模块运行在指定的工作模式。因此对寄存器设计进行充
分验证显得尤为重要,在UVM验证方法学中,通常采用UVM的寄存器模型对寄存器
设计进行验证。
寄存器模型是通过configure函数对寄存器模型中每个寄存器和每个寄存器域进行

41

万方数据
山东大学硕士学位论文

属性设置,比如读写、位宽、复位值等信息,并对每一个寄存器构建build函数,通过
configure函数实现了寄存器模型的层次化构建。
寄存器模型中每个寄存器域和寄存器属性有所不同外,其他代码基本类似,为了节
省大量人力和时间以及避免人为编写代码导致一些错误的输入信息,比如初始值输入错
误,位宽算错等情况,经常采用了脚本来自动生成寄存器模型代码,这样大大提高了验
证效率,以及可以更好地维护寄存器模型,很大程度上减轻了验证人员的负担【581。

通过python脚本自动化产生验证寄存器的代码,需要严格按照python脚本要求修
改Excel格式表格里的寄存器信息,寄存器填写表格的信息格式如图4.21所示。因为有
些空白域的存在,使得寄存器的地址不是连续的,需要将其设置为reserved bits,默认
值为0。
』0fBet Name MSB LSB Field Name Access Default Value Descnption

iox00 VPU2一cALTRIG—CFG vpu2 control register

Enable bit for core Should be one—hot.

Only one core can be turned on because the

DMA engines are shared.

。 o rg_vpu2_core_en
RW 0x0
黜;=喾勰=
bit 2:substractor

bit 3:copy

ba 4:list

图4.21寄存器excel表格图

通过python脚本生成的寄存器代码,将寄存器模型代码放入验证平台,在顶层环境
中与总线相连接,使得寄存器模型集成到验证环境中。

4.2.1 1 UVM的reg_adapter设计

在UVM验证平台中寄存器模型的读写操作会产生uvmreg_bus_op类型的变量,这
个变量中存储了操作类型和操作地址等【59】,其格式如下:

typedef struct{

uvm——access—.e kind;

uvmreg_addr_t addr;

uvmreg__data__t data;

int n_bits;

uvmreg_byte_en byte_en;

uvm——status——e status;

)uvm_reg_bus__op

reg r可以将寄存器模型传来的信息转换成
etpada_将以可也,息信的别识DUT
够能
DUT总线发出的信息转换成寄存器模型能够识别的信息。转换过程是通过转换器的

re92bus()和bus2reg()两个函数实现的。re92bus()函数是将寄存器模型传来的
uvmreg_bus_op类型的对象转换成协议传输对象。bus2reg函数是将总线传输项转化为

42

万方数据
山东大学硕士学位论文

寄存器级的对象。以前门访问读操作,读寄存器vpu2_cal_tfig_cfg为例,参考模型组件
通过p_rm.vpu2.vpu2 cal trig_cfq.read(status,value,IⅣM FRONTDOoR)调用寄存器模型
的读任务。
function uw_sequence_itm re92bus(const ref uw reg—bus—op rw);

vpu2一item tr:
tr=vpu—item::type_id::create(”tr。):
tr.reg addr=rw.addr:
tr.nag and=(rw。kLnd—UVH M{ZTE)?、WRITE:’READ;

if《tr.reg_cmd%‘t舭rTE)begin
tr.reg_udata=rw.data;
end
return tr:

endfunction

function void bus2reg(uv=_sequence_item bus item.ref uⅧ一recj_bus_op rw):


vpu2_ltem t r:

if(!¥cast(tr,bus 1tem))begin
、uv=fatat(”vpu2_adapter”.”Provided bus—item is not of the correct type・“)
return;

end

~.kind=(tr.reg—cmd一’WRITE)?UVR_慷ITE:UVM_READ;
rld.addr=tr.reg_addr:
~.byte_eft=’h3:
rw.data=(tr.reg_cmd一、READ)?tr.reg_rdata:tr.reg_wdata;
rw.status=U、『H—IS—OK;

endfunction

图4—22 reg_adapter设计代码

寄存器模型读写操作数据流如图4.23所示,图4.23的图(a)是读操作数据流,图
(b)是写操作数据流。

(a)蕾Il怍

图4.23寄存器模型读写操作

43

万方数据
山东大学硕士学位论文

本节将分析矢量加速器的功能覆盖率模型。功能覆盖率模型是通过SV语言编写,
使用覆盖组等来完成功能验证点的覆盖率建模。功能覆盖率模型完成后,在UVM验证
平台中可以通过sample函数触发覆盖组,功能覆盖是根据被击中的bin数量和bin总数
来衡量的,可以通过IMC工具打开合并数据库的文件,可以看到总的覆盖率情况[601。
基于对设计功能的分析和前面提取的功能点,对矢量加速器建立功能覆盖率模型。
本文根据使用五个算子各自定义了一个covergroup,在interface中收集覆盖率。例如
compare算子计算的数据长度的覆盖点中,定义了最大数据长度、最小数据长度和中间
值。对于寄存器rg_comp_cal_lens考虑到运算资源和总体功能覆盖率,采用了最大值,
最小值和中间值的bins节省运算资源。因为输入输出有符号数据的功能点由多个寄存器
共同控制,需要同时覆盖多个覆盖点表示运行了该功能点,所以需要使用CROSS语句,

把各个独立的覆盖点进行联合,建立交叉覆盖点。其他算子情况类似,compare算子覆
盖率模型代码如图4.24所示。
covergroup colp coy@(posedge rg_vpu2_core—en【O】)
option.per instance=l:

lens:coverpoint rg—coqo_cal lens{


bins min={’hl};

bins max={。h3ff};
bins others={【’h2:‘h3fe]l:

loop_ntm:coverpoint rg_com_loop_num{
bins one_diss9={‘he};

bins one_dissl=t’hl};
bins two_diss={‘h2:。h3e}:
bins two_diss_max={‘h3f}:

rdmal..size:coverpoint rg rd=al data.。size{
bins by_re=t‘he};
bins halfword={。hl};

bins啪rd=t‘h2};

signed_data:coverpoint nj_raral signed{
bins sign=n};

bins unsign;伯);

wdmal—.size:coverpoint rg wd糙l—.data_size{
bins by—te:t‘he}:
bins halfword={‘hl};
bins啪rd=f‘h2};

comp_data_cross:cross rd帕1_size,signed_data。wdml—size;
endgroup

图4.24 compare算子覆盖率模型代码

万方数据
山东大学硕士学位论文

高性能硬件矢量加速器模块验证平台的验证目录结构层次如图5.1所示。这样严格
的按照如下目录进行验证平台目录的划分是为了方便以后的项目维护和管理版本迭代,
以及验证平台的复用。根目录为project项目名称,下一级目录分别为设计代码目录,验
证目录以及后仿等其他人员负责的目录。再下一级目录为UVM验证组件代码等。矢量
加速器验证平台目录结构如图5.1所示。

图5-1矢量加速器验证目录

验证平台使用CVS进行版本的控制和管理。设计人员通过CVS工具很清楚直观了
解到代码的迭代情况,验证人员也能通过CVS工具了解到代码的修改历史和不同版本
中设计代码的变化情况。对于多人同时开发一个大型的项目,CVS方便对源代码和版本
的维护。CVS把文件保存到仓库,开发人员可以从任意版本回溯到初始版本,节省大量
存储空间。

测试矢量加速器设计在不同场景下的结果,编写各种case,通过输入
+UVM_TESTNAME--test_sign_compare命令来启动compare算子的测试用例,想要启动
其他测试用例,可以将test_sign_compare替换。EDA仿真器会从顶层开始执行,即top.SV
文件开始运行,当运行到run—test后,就会启动基于UVM的矢量加速器的验证平刨61】。
该验证平台会按照前面输入的命令,将test_sign_compare实例化。当test_sign_compare

45

万方数据
山东大学硕士学位论文

被实例化以后,自动运行test_sign_compare中的build__phase,建立vpu2_env环境组件。
当test_sign_compare中的build__phase运行完成后,会自动运行vpu2_env环境组件中的
build_phase,各个成员变量也会被创建。验证平台就这样自上而下的运行所有组件中的
build_phase。UVM树形结构就是通过这种方式建立起来。UVM验证平台的执行流程如
图5.2所示。

TOP


run_t笛tO


启动验证平台


根据uVM.JESTNAME
产生对应∞∞实例


依汐彤珩∞se及其同西翘窭量的
build phase,形成完整的U、,M
树状图


颓序抽彳亍UⅥ幢难}个节点的
connect_phase,main_phase
等直至执行完所有pha∞


仿真结束

图5-2验证平台执行流程图

本文搭建的矢量加速器验证环境需要在linux系统中运行,linux版本是红帽企业版
本6.8。通过perl脚本调用makefile脚本去运行控制Cadence公司提供的XCELIUMl909
仿真工具,perl脚本和makefile脚本相互配合能够自动化运行所有编写的case,并且调
动IMC工具,查看覆盖率报告。自动化运行所有测试用例需要将编写的测试用例名放

入到perl脚本指定目录的SV list¥USER文件中。Makefile脚本中包含了使用x.van验证
所用的命令。Xrun的运行过程可以看作两个过程,包括编译过程和仿真。编译完成会
生成.fsdb文件,可以使用verdi.R.2020.12.SPl查看波形,使用IMC工具进行覆盖率收

集与查看。图5.3为perl脚本核心代码。

万方数据
山东大学硕士学位论文

幸!/bin/bash

PR03ECT=”vpu2一ip”
TB DIR=”/extthome/¥USER/¥PROJECT/verification”
while read line
do

if【f”¥1ine“=一““群”I I”¥Une。=,一‘¥】】:then
continue
else

sv_case=S{line锦\.+】.
gnome-terminal-X bash・C。make Fun case=¥sv—case;read”
fi

done<STB DIR/testcase/sv case/sv list¥USER

图5.3 ped部分核心代码

Perl脚本调用makefile脚本进行仿真验证,使得验证流程更加自动化。Makefile脚
本部分代码如图5-4所示。
run:

舯kdir-P¥(WORK DIR)/¥(case)
旺p・rf./makefile¥(WORK_DIR)/¥(case)
@cp-rf./makefile¥(WORK_DIR)
畦d¥(WORK_DIR)/¥(case)驰make run—COY

@cd¥(WORK OIR)&&make imc

run—coy:

xrun-UVIll.SV,mess.tJ∞escale lns/lns+xmoverride tJJaescale.f¥{TB DIR)Iduv/list.f\

一¥(k旧RK OIR)/xrun—log/¥(casel.109・coverage all・coworkdir“WORK_OIR}/coy—work\


random
・covtest¥{case}一¥{SEED}-covoverwrite-uvm+UVM TESlgAtE=¥{case}・access・Iinedebug・svseed

verdi:

verdi|
+v2k\

.sverilog t
“,vH TESlM睚=“case)\
.gui-=verdi|

+uvn哪I。TRACE=”UVM
“,州TR
AWARE+RTL+MIER+COMPWARE。\
RECO凹\
・nologo\
.f list.f\ .

-ssf top.fsdb&

imc:

imc-execcmd’merge¥{WORK_DIR}/cov_work/scope/test—sign_’・overwrite—out TB—ALL”

图5-4 makefile脚本部分代码

5.4测试用例

为了充分验证矢量加速器设计满足功能需求,需要根据之前提取的验证功能点,编
写测试用例。通过测试用例产生激励,经过UVM验证平台的scoreboard组件的比较结

果,检验矢量加速器设计是否符合标准。测试用例的编写一般在sequence中完成,跑完
测试用例后,分析仿真结果的log文件和fsdb格式的波形文件去确认结果是否符合预期。
下面将会对测试用例进行分析。

5.4.1冒烟测试

基于UVM的矢量加速器验证平台搭建完成后,为了测试所搭建的验证平台是否能

47

万方数据
山东大学硕士学位论文

够对矢量加速器设计进行正确测试,需要编写冒烟测试。冒烟测试对验证平台各个组件
的功能进行测试,检查是否能够正常运行,参考模型功能是否与实际功能相匹配,验证
平台是否能够功能是否正确,确定矢量加速器的接口是否能够正常工作等。冒烟测试的

测试用例名称为test—smoke。将各个算子的寄存器配置,都会配置一遍,进行冒烟测试,
通过仿真结果确定验证平台能够正常运行。仿真波形图如图5.5所示。

图5—5冒烟测试波形图

5.4.2矢量加速器寄存器测试

对寄存器的测试是验证环节中至关重要的一环,寄存器类型和功能是否正确直接决
定了整个矢量加速器设计是否能够正常工作。确保寄存器默认值正确和读写操作成功,

为后续测试矢量加速器其他功能点对寄存器的操作提供保障。测试用例名称为test_reg,
使用寄存器模型的前门和后门访问结合的方式检查寄存器的复位值和寄存器的类型是
否正确。在第4章已经设计好寄存器模型,寄存器模型里存放好设计中各个寄存器的复
位值。图5-6所示为寄存器测试用例部分代码。
exxH voj…eq;‘一”
reg’【】read‘1r_. ac:ual val ue j、”1咐。r r州J’

…‘rO qet:YpeⅢ
t.
:,。.。、一一”:

’‘f'rmaI。r、’’J… J¨i
u¨㈣
h¨. +i’ rf f- ‘T,L
]『7,‘、 P。

‘~’一d—i『e05 1 g“f u【I『w∞Ps a”t t

r+㈨(t YoI”a:t val¨‘: udl

u…r Fo
gel tyPe『am
t‘t:‘na“ ‘}。71’・.”?_¨i 【’二’”^’- :+、,+ rI_
J¨I ’rj r・-t’ J, {1 J1

u11哪
1’‘・【, ’・・’ 【J- ~I

9e’full’一 f
’】-T,1t
rP05 帅Ps d口々t a(t udl val ue e,卵(:val。e

11一’㈣ct vdI¨a Jal~3【“r。『 ct

ty#日Ⅲ
【『vfr二nfo,Pt

E‘’~jt‘ 二:J一 1-“‘ J¨l "

qet,utt…
.,,’ 【,。 】J‘

’“n 2弘1驴1'uH‘州 铀}’d a(£uaI vaI ue E1畔(’vaL曲 ~。-

图5-6寄存器测试用例部分代码

当对寄存器的复位值进行验证时,测试用例首先给矢量加速器设计发送复位信号,

让各个设计内的寄存器恢复到默认值,然后通过regs[i].get()得到field的期望值并保存
到expect_value中,通过前门访问操作read读取矢量加速器设计中寄存器当前的实际值,
保存到actual—value,再使用if语句判断前门访问操作是否成功,成功后再去判断期望
值与实际值是否一样,根据结果,打印不同的报告,全部通过会打印“pass”。

48

万方数据
山东大学硕士学位论文

对于寄存器的读写检查,测试用例会通过前门访问操作向矢量加速器设计写
0xffff觥,然后再读取矢量加速器设计中寄存器的值,并与0xffff ffff比较,判断是否
写入成功。因为本设计的寄存器有可读可写的RW类型寄存器,也有只读的RO类型寄
存器。只读寄存器不在此测试范围内,在别的测试点功能测试时会进行覆盖。对寄存器
写入0x筒ffff后,再依次OxO、0xaaaa aaaa、0x5555 5555,检测步骤类似。图5.7所
示为test reg测试序列部分波形图。
卜§■:土
I*曼■::¨
l一量置:’;.珊。::cj
l一匣置:宅r:
l一巨皇:÷;』!:L
I.匠暑?!¨:,。%::
I・匿置踟一:☆Ii'-"fj
卜暖置re:_z-d
L巨■:。L陆um c】

图5-7 test_reg测试部分波形

5.4.3均值算子测试

均值算子测试用例里包含了以下几个测试方面:

1.对均值算子的基本功能进行验证,将寄存器rg rdmal data size进行遍历,遍历

值为0、1和2,对应输入的数据为8位、16位和32位:将寄存器rg rdmal signed进


行遍历,设置输入数据有符号和无符号;对输入数据进行设置,设置输入的数据最大值、
最小值和中间值;配置寄存器rg wdmal data size进行遍历,对输出结果位数进行控制。

对均值寄存器rg_avg_cal_mode进行遍历,控制均值算子的求和与均值计算;对均值寄
存器rg_right_shift_bits进行遍历;对寄存器rg_avg_cal—lens和rg_avg_loop_num按照输
入的数据设置最大值、最小值和中间值;对rg er ots.置配
remainder 遍历
en 当 。和
0 1

好后,启动均值算子运算,给寄存器均值算子使能位赋值为1,其他算子使能位赋值为

O;寄存器rg_work_status_flag确认运算完成和溢出的情况。矢量加速器均值算子计算结
果和参考模型计算结果一致。
2.对均值算子的case进行重复多次,均值算子运算完成后,将寄存器算子时钟门控

rg_hw_gate—cal—clk—en、dma时钟门控和标志位清除寄存器进行软件清零。再次运行下
一次计算。

3.对均值算子溢出标志进行验证。输入的数据源能产生累加结果发生溢出,在加法
器的结果绝对值超过了0xFF FFFF FFFF时,加法溢出标志位add ovf flag置l。对于
结果有效数据位宽大于wdma寄存器配置的位宽时,数据溢出标志置1。
4.对rdmal、rmda2、wdma的仲裁验证,均值算子的基本功能验证的仲裁模式为轮

询:在对寄存器rg arbt scheme select赋值为1,进行优先级模式,对rg rdmal ost limit

遍历0到7。

5.对均值算子的特定值进行覆盖和随机值压测,随机生成输入数据和输入数据长度,

49

万方数据
山东大学硕士学位论文

测试20000次。

均值算子测试的部分波形如图5.8所示。

图5—8均值算于=)!J|0试波形图

5.4.4极值算子测试

极值算子测试用例里包含了以下几个测试方面:
1.对极值算子的基本功能进行验证。输入合法值能够得到正确的极值算子结果。将

寄存器rgrdmal_data_size、rgrdmal—signed和rg_wdmal_data_size进行遍历。对极值
寄存器rg_comp_cal_lens和rg_comp_loop_num设置最大值、最小值和中间值:当配置
好后,启动极值算子运算,给寄存器极值算子使能位赋值为1,其他算子使能位赋值为

0;寄存器rg work status flag确认极值算子运算完成和溢出的情况。


2.对极值算子进行重复运行,每次极值算子运算完成后,将寄存器算子时钟门控、
dma时钟门控和标志位清除寄存器进行软件清零。再次运行下一次极值算子运算。
3.对极值算子溢出标志进行验证。对于结果有效数据位宽大于wdma寄存器配置的
位宽时,数据溢出标志置1。
4.极值算子场景中对内存读取模块和内存写入模块的仲裁验证,极值算子的基本功
能验证的仲裁模式为轮询;在对寄存器rg arbt scheme select赋值为l,进行优先级模

式,对rg rdmal ost limit遍历0到7。


5.对极值算子的特定值进行覆盖和随机值压测。设置极大值和极小值分别为负数、0
和正数的场景。随机生成输入数据和输入数据长度,测试20000次。
极值算子的部分波形如图5-9所示。

50

万方数据
山东大学硕士学位论文

图5-9极值算子测试波形图

5.4.5 Copy算子测试

Copy算子测试用例里包含了以下几个测试方面:
1.对copy算子的基本功能进行验证。将寄存器rg_rdmal_data_size、rg_rdmal_signed
和rg wdmal data size进行遍历。对copy寄存器输入数据的长度设置最大值、最小值
和中间值;当配置好后,启动copy算子运算,给寄存器copy算子使能位赋值为l,其
他算子使能位赋值为0;寄存器rg_work_status_flag确认极值算子运算完成和溢出的情
况。

2.对copy算子进行重复运行,每次copy算子运算完成后,将寄存器算子时钟门控、
dma时钟门控和标志位清除寄存器进行软件清零。再次运行下一次copy算子运算。
3.对copy算子溢出标志进行验证。对于结果有效数据位宽大于wdma寄存器配置的
位宽时,数据溢出标志置l。

4.copy算子场景中对内存读取模块和内存写入模块的仲裁验证,copy算子的基本功
能验证的仲裁模式为轮询;在对寄存器rg tbrscheme
a.模级先优行select
进,1为值赋
式,对rg rdmal ost limit遍历0到7。

5.对copy算子进行特定值和随机值压测,特定值例如为0、Oxffff ffff,0x5555 5555、

Oxaaaa aaaa等,随机生成输入数据和输入数据长度,压测20000次。

Copy算子仿真波形的部分波形如图5.10所示。

5l

万方数据
山东大学硕士学位论文

图5—10 copy算子测试波形图

5.4.6 List算子测试

List算子测试用例里包含了以下几个测试方面:

1.对list算子的基本功能进行验证。将寄存器rg_rdmal_data_size、rg_rdmal_signed
和rg ldata
amdsize
w. 进行遍历;对
和值小最 寄存器
list 、 值大 最cal
rg_list 置lens

中间值;对寄存器rg list mode进行遍历。当配置好后,启动list算子运算,给寄存器

list算子使能位置为1,其他算子使能位赋值为0;寄存器rg_work_status—flag确认极值
算子运算完成和溢出的情况。
2.对list算子进行重复运行,每次list算子运算完成后,将寄存器算子时钟门控、dma
时钟门控、标志位清除寄存器进行软件清零。再次运行下一次list算子运算。
3.对list算子溢出标志进行验证。对于结果有效数据位宽大于wdma寄存器配置的
位宽时,数据溢出标志置1。
4.1ist算子场景中对内存读取模块和内存写入模块的仲裁验证,list算子的基本功能

验证的仲裁模式为轮询,rg_rdmal ost limit固定为7;在对寄存器rg_arbt_schemeselect


赋值为1,进行优先级模式,对rg rdmal ost limit遍历0到7。
5.对list算子的特定值进行覆盖和随机值压测。随机生成输入数据和输入数据长度,
测试20000次。

List算子的部分波形如图5.1l所示。

52

万方数据
山东大学硕士学位论文

图5—11 list算子钡0试波形幽

5.4.7 Subtraction算子测试

subtraction算子测试用例里包含了以下几个测试方面:

1.对subtraction算子的基本功能进行验证。将寄存器rg rdmal data size、

rg_rdmal—signed和rg_wdmal_data_size进行遍历;对subtraction算子寄存器
rg tbus.cal
gr器存寄对;值间中和值lens
小最、值大最度长据数入输置设 v2 const en

遍历,rg v2 const en为l时,v2为固定值,通过配置寄存器rg v2 const data设置V2


的数据为最大值、最小值和中间值。当配置好后,启动subtraction算子运算,给寄存器

subtraction算子使能位置为1,其他算子使能位赋值为0;寄存器rg work status flag确


认极值算子运算完成和溢出的情况。
2.对subtraction算子进行重复运行,每次subtraction算子运算完成后,将寄存器算
子时钟门控、dma时钟门控和标志位清除寄存器进行软件清零。再次运行下一次
subtraction算子运算。
3.对subtraction算子溢出标志进行验证。对于结果有效数据位宽大于wdma寄存器
配置的位宽时,数据溢出标志置1。
4.subtraction算子场景中对内存读取模块和内存写入模块的仲裁验证,subtraction算

子的基本功能验证的仲裁模式为轮询,rg rdmal ost limit固定为7;在对寄存器

rg scheme
t bselect
ra 赋值为l,进行优先级模式,对
_。7到rg_rdmal ost limit
历遍 0

5.对subtraction算子的特定值进行覆盖和随机值压测。随机生成输入数据和输入数
据长度,测试20000次。
subtraction算子的部分波形如图5.12所示。

53

万方数据
山东大学硕士学位论文

图5.1 2 subtraction算子测试波形图

5.4.8异常测试用倒

在对模块进行验证时,除了测试矢量加速器的功能测试外,还可以测试异常情况下
的场景。对于突发情况或者异常状况下,矢量加速器是否还能从异常状态恢复到正常工
作状态,继续完成算子任务。本矢量加速器验证的异常测试用例代码里有两种场景:一
是算子运算过程中,突然关掉对应算子的使能,再重新使能后能否正常工作;二是算子
计算过程中,矢量加速器突然复位,复位结束后,是否能够重新启动正常工作。异常测
试用例的仿真波形部分波形如图5—13所示,图5.13中复位信号rb rstn在算子运算过程
中,突然发生复位操作,复位后,矢量加速器能够重新启动,并且能够继续进行工作。

图5—13异常测试用例波形图

5.5覆盖率分析

设计的复杂性使得受约束的随机测试方式是进行全面验证的唯一有效途径,前面已

54

万方数据
山东大学硕士学位论文

经进行了大量随机测试和定向测试,还需要使用覆盖率来度量验证进行的程度。功能覆
盖率和代码覆盖率量化了验证工作的进度,也能够更加形象的说明验证的完备性,通过
它可以让人确定验证是否达到要求。本设计的验证目标是代码覆盖率需要90%以上,功
能覆盖率需要100%。

代码覆盖率分析:代码覆盖率可以通过工具1MC打开查看,在makefile脚本中加

入一coverage all选项收集覆盖率,一covworkdir COV work指定收集覆盖率文件放入哪个目


录中。

蚓5-14分析前的代码覆盖率

由图5.14可以看到矢量加速器模块的代码覆盖率,其中总的Code覆盖率为95.75%,

Block覆盖率为97.21%,Expression覆盖率为96.94%,Toggle覆盖率93.58%,FSM覆
盖率为99.75%。可以进一步分析代码覆盖率报告中没有被覆盖到的部分,提高代码整
体覆盖率。一般来说,有两种情况可以较为显著提高代码覆盖率:第一种情况是由于测
试激励没有遍历完所有的测试点,或测试点并不完善,有些功能或者情况没有考虑到,
这是真实的覆盖率漏洞,通过观察未覆盖的代码部分,可以通过对现有的测试用例进行
修改,增加激励,或者添加新的测试用例产生激励;第二种情况有些信号固定为0或者
l,会导致翻转覆盖率覆盖不全,有些信号并未使用等。
对未覆盖的代码覆盖率进行分析,查看未覆盖的代码部分,经过分析,主要有如下
一些原因:

1.设计功能代码冗余,后期去掉一些功能,相关代码依然保留。
2.case语句分支已经考虑所有情况,default语句没有得到执行。
3.寄存器的保留位。

4.寄存器可能只有特定的几种数值的变化,并没有所用位都进行了翻转。
5.端口信号只使用了特定的位宽。例如输入地址控制端口只是用10bits位宽,高22
位并没有使用。

经过对未覆盖的代码分析后,确定不是因为测试点不全的问题,对冗余的代码通过
IMC工具的exclude功能进行忽略,可以得到代码覆盖率为100%,如图5.15所示。

55

万方数据
一 些壅盔堂堡主堂垡笙塞——
————————————————————————————————————————————————————————————————————————一

J‘●q_ =_ _婶p尊舅I嘲睁 ■■M■


●●“ ●■¨
J●q_t坤J 誓■^n
●●_.¨-・Jr_
■d_L■一.k.ssj
●●qH¨t■t._・Lt哦
柳t.Ho
●■t-“

-●"“u'.M
’●。J●t劬.州
●q■●札-埘1
t u.q¨.r目&
●●t"山.‘_・J蚺L删
'●也n帆呻uz._艄
'●u wdmal.ml
●t’叫Jno‘_埘
●●■mN
●‰■mJ"
●・,_“

图5.15分析后的代码覆盖率

功能覆盖率分析:前面已经对矢量加速器的功能覆盖率进行介绍,仿真过程中,LMC
仿真统计工具会收集覆盖率,如图5-16所示,所有的功能组覆盖率均达到100%,所有
功能覆盖点被全部覆盖到。

■nm帅 ■_100% 113{lOm●,)

JII c●L肭№ ■■■’∞% :,2《"O咐 篡


■_100% 414110口咐
^Wop31um

工‘¨1Jz- ■_100% ,13l'O州 黧


●-100%

2,2,000啕
■signedll.dm
JIz wdmal size ■_100% j,,a∞螂
¨dlveraKe crots 稿,41aOO,‘,

■——l'OO%

^●●vtr●譬t_粤砒--cmI‘ ■_100% 111,18 Uom‘)

J叠umablk%comp_cov.・r咀 —_100% ∞/"aO*’


.islens —_100% ,,,(10mVI mrda
■ioopjⅥzm ■■日’OO’b ●/4盯OnI
■mm'jtn imgl'∞峙 ,,}t1口O~,

●割S睫酊-a-协
^wdmal_Stze
—一100%
—_100%
2/2f10“,
,,3(100%I

■●comp d址a_cross ■_'IOD% 181111门OOM


・■urH仙k15l-'Lc"r哦 ■_100% 152,132 c10口’IJ

■lens ■_100% 3/3(100~】

上commode ■_’oD% 2/21108%)

工rm'nal stze —_'00% 5,3(100~I

量‘曝nedl data ●_100% 2I 2l'0¨l


j r帅埔2Jzc ■_100% 3,{‘’O㈨
■¥19ned2.dnt4 —_100% 2,21100%I

皇ⅥdⅢj.2t —翻1∞% 3,,(10iY‘)


W“Ibt.口*‘ —_100% ‘/61100I.,
^d s岫Ld.¨-cr诉‘ ■_100q 108,108(100%I

J囊unrnMkl k.c".Ⅱtn ■_100% 39,,9 flore,,)

工bLH№ ■_1Do% 2,2f-∞●.1


卫le唯 ■_100% 3,3(soo~l
量rdmal‘lze ■_100% ,,3种∞埘
■5喵nedl.d矾6 ●■_’00% 2,2l’O¨’
工wdm01.Mze —_100% l,,nOO ̄l
jh‘』讳‘嫩I —_I∞~ 2,2tl∞‘-I
^d btc.口口l‘
■啊100% ‘,5”叫
^■她K.帅Ⅳo弭 —_100% 15/'0l,∞‰}
J■嘶mH¨‘opy.tov.蚓 ●—_'00% q拍,∞l,O删
量tdrn・t.sno ■_100% l,飘100*t畸
上III州,.∞¨ ■啊100%
▲忡1
●4
ra/e

top删m..croI‘
—啊'OO%
■蛔1∞‘‘ 灞;嚣搿.。毫
怫,憾(100h1

图5.16功能覆盖率

结合代码覆盖率和功能覆盖率,此次验证测试完全达到了验证的预期目标,可以认
定高性能硬件矢量加速器验证是完备的。

56

万方数据
山东大学硕士学位论文

结 论

本论文基于实际项目的需求,针对使用频率较高的几个矢量运算算子,进行了相关
算子硬件化加速的深入研究,并且围绕着高性能矢量加速器的硬件实现和基于UVM的
验证方法学对所设计的高性能硬件矢量加速器进行详细描述。主要工作内容如下:
1.对硬件加速和UVM验证方法学进行分析,研究了高级高性能总线和ICB总线,
为后面高性能硬件矢量加速器的实现和UVM验证提供了理论基础。

2.研究高性能硬件矢量加速器的功能特性,设计出矢量加速器的整体设计框图,完
成矢量加速器内部各个模块设计,包括内存读取模块、内存写入模块、仲裁处理模块、
硬件加速单元模块、操作数缓冲模块、数据格式转换模块、接收数缓冲模块和寄存器模
块的设计,并对其内部信号、接口连接等做出了详细说明。
3.高性能硬件矢量加速器的内存读取模块和内存写入模块可以支持8位、16位、32

位数据从memo巧中高速读取和写入,也支持有符号数据和无符号数据的读取和写入,
同时支持数据big endian和little endian的读取和存放。
4.高性能硬件矢量加速器主要对compare算子、average算子、list算子、subtraction
算子、copy算子实现了硬件化,基本运算单元比如加法、减法、除法、移位等可以被这
些算子共同使用,并且留下接口扩展,为以后需要添加新的算子和基本运算提供方便。
对这些算子的运算进行硬件加速,可以缩短微处理器运算这些算子所涉及的算法完成时
间。通过矢量硬件加速的功能扩展来提高系统刷新率,弥补MCU运算能力的不足,并
且可以缩短整个系统完成矢量算子运算所需要的时间。
5.利用了UVM验证方法学的原理,基于矢量加速器设计,编写验证方案和提取验
证功能点,设计UVM平台中各个组件,包括参考模型组件、scoreboard组件、寄存器

模型等,利用phase机制、config db机制、工厂机制和TLM机制等完成组件间的连接
通信,共同构建了UVM验证平台,此UVM验证平台具有很好地自动化比对,对设计
的验证高效便捷,也具有很好的可重用性,可以验证其他项目时,减少验证人员搭建
IⅣM验证平台的时间。

6.详细描述验证平台目录和UVM验证执行流程,并且说明了验证环境,编写perl
脚本和makefile脚本文件,提高了验证平台的自动化能力。根据矢量加速器验证功能点
编写好对应的测试用例和在interface中构建好功能覆盖率模型,使用Cadence公司提供
的XCELIUMl909工具进行编译仿真,运行测试用例,通过verdi.R.2020.12.SPl查看仿
真波形,使用IMC工具进行覆盖率收集,实现了代码和功能覆盖率都为100%,确定矢
量加速器模块的功能验证满足要求,达到预期目标。

57

万方数据
山东大学硕士学位论文

本文设计的矢量加速器结构完整,微处理器只需要配置本模块的寄存器,矢量加速
器就可以自动完成对数据从内存中高速读取,格式转换,算子硬件加速,再到运算处理

后的结果数据写回内存中。本设计实现了compare算子、average算子、list算子、subtraction
算子、copy算子,基本运算单元实现了加、减、除法、右移位等,但是并没有实现其他
更多复杂的算子,在后续的工作中,可以在增加其他需要硬件化的算子,比如高斯滤波
算法等。本论文搭建的UVM验证平台的具有效率高、通用性好、可重用性好和覆盖率
测量更容易等优点,添加的perl脚本和makefile脚本增加了验证平台的自动化,后续验
证其他项目的模块时,可以将本验证平台进行适当修改,减少搭建UVM验证平台的时
间和工作量。对于UVM验证平台,后续的学习希望能够将UVM高级功能,例如callback
机制等也能应用在自己的UVM验证平台中。 .

58

万方数据
山东大学硕士学位论文

参考文献

[1]顾玲玲.MCU的DSP/FPU硬件加速芯片整合技术[J].集成电路应用,2017,34(03):
70.72.

[2]GOVⅡ呵DAR AJAN S,CHITNIS K,MODY M,et a1.Flexible and Efficient sharing of

High Performance Hardware Accelerators in a Safe,Secure,Virtualized System[C]//2020


IEEE International Conference on Consumer Electronics-Asia(ICCE—Asia).2020:1-4.
[3]何荣森,何希顺,张跃.从ARM体系看嵌入式处理器的发展[J].微电子学与计算机,
2002(05):42_45.
[4]GUO Y,WANG Y TANG X,et a1.A SPI interface module verification method based on

UVM[C]//2020 IEEE International Conference on Information Technology,Big Data and

Artificial Intelligence 0CmA).IEEE,2020,1:12 1 9—1223.


[5]KIRCHSTEIGER C M,GIm叮SCHGL J,TRUMMER C,et a1.Automatic test generation

from semi・-formal specifications for functional verification of system・-on--chip

designs[C]//2008 2nd Annual IEEE Systems Conference.IEEE,2008:1—8.

[6】NI W:WANG X.Functional coverage-driven UVM—based UART IP verification[C]//20 1 5


IEEE 1 l th International Conference on ASIC(ASICON).20 1 5:1—4.
[7]WANG J,GENG S,PENG X,et a1.DMA Function Verification Based on UVM

Verification Platform[C]//202 1 6th International Conference on Integrated Circuits and

Microsystems(ICICM).IEEE,202 1:276-279.
[8]KWON H J,0H M H,KWON W:verification of Interconnect RTL Code for

Memory-Centric Computing using UVM[C]//202 1 International Conference on

Electronics,Information,and Communication(ICEIC).IEEE,202 I:1-4.

[9]WEI N,JICHUN Z.Research of reusability based on UVM verification[C]//20 15 IEEE

l lth International Conference on ASIC(ASICON).IEEE,20 1 5:1-4.


[1 0]HA/JIE Y JING Y JIA L.A novel speech recognition system-on・chip[C]//2008
International Conference on Audio,Language and Image Processing.2008:764—768.

[11]智强,李鹏,董明,等.基于硬件加速模块的嵌入式语音识别系统解决方案叨.电
子技术应用,2008,34(08):3 1.33,37.
[12】胡云峰,陈虹,刘明星,等.基于FPGA/SOPC的预测控制器设计与实现[J】.仪器仪
表学报,2010,3 l(06):1241.1248.
[1 3]KEE M,SEON H-S,KWON S,et aI.Hardware accelerator for low-power sensor hub

59

万方数据
山东大学硕士学位论文

MCU to process sensor fusion algorithm[C]//12th International SoC Design Conference,

ISOCC 2015,November 2,2015-November 5,2015.Gyeongju,Korea,Republic


of:Institute of Electrical and Electronics Engineers Inc.,20 1 5:1 89・190.

[14]方睿,刘加贺,薛志辉,等.卷积神经网络的FPGA并行加速方案设计[J].计算机
工程与应用,2015,51(08):32.36.
P D,BENINI L.XNOR Neural Engine:A Hardware Accelerator
[1 5]CONTI F’SCHIAVONE
IP for 2 1.6一fJ/op Binary Neural Network Inference[J].IEEE Transactions on

Computer—Aided Design of Integrated Circuits and Systems,20 1 8,37(1 1):2940—295 1.

[16]陆申阳,冉峰,郭爱英,等.一种用于自适应直方图均衡化的硬件加速器[J].上海
大学学报(自然科学版),2020,26(03):401.412.
[1 7]MITTAL R,PRINCE A A,NALBAND S,et a1.Low-Power Hardware Accelerator for

Detrending Measured Biopotential Data[J].IEEE Transactions on Instrumentation and

Measurement,202 1,70:1-9.

[1 8]SHAN H E,DUOLI Z.RVM Used in Functional Verification Testbench[J].


Microelectronics&Computer,2007,24(5):146—1 48,1 52.

[1 9]USTAOl3LU B,BAdBABA A C,ORS B,et a1.Creating test environment with UVM for

SPI[C]//20 1 5 23nd Signal Processing and Communications Applications Conference

(SIL0.2015:2373—2376.
[20]XI C,NINGYI X,ZUCHENG Z.A Methodology for SystemC Algorithmic Model

VerificationApplying MATLAB[C]//第五届专用集成电路国际会议(ASICON).Beijing,
China,2003:335-338.

[2 1]MARQUET K MOY M,KARKARE B.A theoretical and experimental review of

SystemC front-ends[C]//2010 Forum on Specification&Design Languages(FDL 2010).


mT,2010:1-6.

[22]MEFENZA M,YONGA F,BOBDA C.Automatic uvm environment generation for

assertion—based and functional verification of systemc designs[C]//2014 15th international

microprocessor test and vefificmion workshop.IEEE,20 1 4:1 6-2 1.

[23]YAN M,LIU Z.Application of System Vefilog in Digital System Design[J].


Microelectronics&Computer,2008,25(6):127-13l,136.

[24]KE H,ZHONGLL6心JG D,QIONG S.Verification of AMBA bus model using

SystemVerilog[C]//2007 8th International Conference on Electronic Measurement and

Instruments.IEEE,2007:1-776.

[25]LIANG W E N,RONGLI J I N,LONGSHENG W U,et a1.Building Reused eVC

Verification Based on AHB Bus【J].Microelectronics&Computer,20 1 l,28(7):202-204.

万方数据
山东大学硕士学位论文

[26]KONG L,WU W C,HE Y et a1.Design of SoC verification platform based on VMM

methodology[C]//2009 IEEE 8th International Conference on ASIC.IEEE,2009:

1272.1275.

[27]KAMKIN A S,CHUPILKO M M.Survey of modern technologies of simulation-based

verification ofhardware[J].Programming and Computer Software,201 1,37(3):147—152.

[28]EL-YAMANY,AHMED.Echoing The”generality Concept”Through The Bus Functional

Model Architecture In Universal Verification Environments[C]//20 1 6 1 7th International

Workshop on Microprocessor and SOC Test and Verification(MTV).IEEE.20 1 6:77.80.

[29]QAMAR S,BUTT W H,ANWAR M W:et a1.A Comprehensive Investigation of

Universal Verification Methodology(UVM)Standard for Design Verification[C]//ICSCA


2020:Proceedings of the 2020 9th International Conference on Software and Computer

Applications.2020:339—343.

[30]RAGHUVANSHI S,SINGH V Review on universal verification methodology(uvm)


concepts for functional verification[J].International Joumal of Electrical.Electronics and
Data Communication,2014,2(3):101—107.

[3 1]FIERGOLSKI A.Simulation environment based on the Universal Verification

Methodology[J].Journal ofInstrumentation,2017,12(01):COl001.
[32]DEEKSHA L,SHWAKUMAR B R.Effective design and implementation of AMBA

HB bus protocol using Verilog[C]//20 1 9 International Conference on Intelligent

Sustainable Systems(ICISS).IEEE,20 1 9:1-5.


[33]GURHA P,KHANDELlWAL R R.SystemVerilog Assertion Based Verification of

AMBA・AHB[C]//20 1 6 International Conference on Micro.Electronics and


Telecommunication Engineering(ICMETE).20 1 6:641.645.
[34]WANG Z,YE Y WANG J,et a1.Designing AHB/PCI bridge[C]//ASICON 200 1.200 1

4th International Conference on ASIC Proceedings fCat.No.01TH8549).2001:578.580.

[35]LI K,LEI L,FAN Y et a1.A design of the PLB to AHB bus bridge[C]//20 1 l International

Conference on Electronics,Communications and Control(ICECC).20 1 1:l 7.20.

[361NGUYEN S L,NGUYEN D M.AHB—master controller formal compliance

verification[C]//20 1 4 IEEE Fifth International Conference on Communications and

Electronics(ICCE).20 14:340-345.
[3 7]GAUR A,SHARMA P,PANDEY S R HDL and timing analysis of AMBA AHB on

FPGA platform[C]//20 17 Recent Developments in Control,Automation&Power

Engineering(RDCAPE).20 1 7:22—27.
[38】胡振波.ICB总线系统及协议:CN201810741624.7[P].2018.12.18.

61

万方数据
山东大学硕士学位论文

[39]KASHYAP B,RAVI V Universal Verification Methodology Based Verification of UART

Protocol[C]//Journal of Physics:Conference Series.10P Publishing,2020,1716(1):


012040.

[40]LI B—F,CHEN J,YAN Y_H.System Verilog-a unified design language for

system—on—chip[J].Semicond Technol(China),2003,28(12):25。29.

[41]YADU K K BHAKTHAVATCHALU R.Block Level SoC Verification Using

Systemverilog[C]//20 1 9 3rd International conference on Electronics,Communication and

Aerospace Technology(ICECA).2019:878-887.
【42]XIONG T,JIANG J.Self-verification of CAN Module Based Oil UVM[J].

Microelectronics&Computer,2016,33(9):93—97.
[43]JIAYI彤NIANXIONG Z YANGFAN Z?et a1.A UVM Verification Platform for RISC.V

SoC from Module to System Level[J].2020 IEEE 5th International Conference on

Integrated Circuits and Microsystems(ICICM),2020,242-246.

[44]M W,W埘G X.UVM based functional coverage—driven SDIO IP verification[J].

Microelectronics,2017,47(3):392—395,41 1.
[45]DENG Q,ZHU P,XI J.The Implementation of Universal Verification Platform for

Sub-model ofDBF System Based on


UVM[J】.Microelectronics&Computer,2018,35(1):
115-117,123.

[46]FRANCESCONI J,I的DRjGUEZ J A,JULbIN P M.IⅣM based testbench architecture


for unit verification[C]//20 1 4 Argentine Conference on Micro.Nanoelectronics,
Technology and Applications(EAMTA).20 1 4:89—94.
[47]MADAN R,KI MAR N,DEB S.Pragmatic approaches tO
implement self-checking

mechanism in UVM based TestBench[C]//20 1 5 Intemational ConfcFence on Advances in

Computer Engineering andApplications.2015:632—636.

[48]GENG R,W心G X.An UVM Based Mixed—signal Verification Environment[J].


Microelectronics&Computer,20 1 6,33(9):24—27,3 1.

[49]XIONG T,JIANG J.Research of Vertical Reuse Based on UVM[J】.Microelectronics&

Computer,20 1 6,33(4):64—68.

[50]EL-ASHRY S,ADEL A.Efficient Methodology of Sampling UVM RAL During

Simulation for SoC Functional Coverage[C]//2018 19th International Workshop on

Microprocessor and SOC Test and Verification(MTV).20 1 8:6 1-66.


[5 1]XIE Z,WANG T,YONG S,et a1.A RISC CPU Oriented Reusable Functional

Verification Platform Based on UVM[J].Acta Sei Nat Univ Pekin(China),20 1 4,50(2):


221.227

62

万方数据
山东大学硕士学位论文

[52]田晓旭,徐庆阳,汤先拓,等.基于UVM的寄存器验证自动化方法[J】.集成电路应
用,2020,37(02):18—21.
[53]LOKANANTA F,HARTONO D,TANG C M.A scalable and reconfigurable verification
and benchmark environment for Network on Chip architecture[C]//20 1 7 4th International

Conference on New Media Studies(CONMEDIA).2017:6-10.

[54]ELAKKIYA C,MURTY N S,BABU C,et a1.Functional Coverage-Driven UVM Based


JTAG Verification[C]//20 1 7 IEEE International Conference on Computational Intelligence

and Computing Research(ICCIC).2017:1—7.

[551 EL-ASHRY S,SALAH K.A functional coverage approach for direct testing:An

industrial IP EUROCON 20 1 5一International Conference


as a case study[C]//IEEE on

Computer as a Tool(EUROCON).2015:1-6.
[56]WANG X,DAI Y AHB-UART Verification Based on UVM[J].Acta Scientiarum

Naturalittm Univemitatis Nankaiensis,2020,53(5):82-86.

[5 7]SHARMA G BHARGAVA L,KUMAR V Automated Coverage Register Access

Technology on UVM Framework for Advanced Verification[C]//20 1 8 IEEE Intemational

Symposium on Circuits and Systems(ISCAS).2018:1-4.

[58]xw J,LI S.Adopting Universal Verification Methodology to Achieve Reusability and

Automation Verification[J].Microelectronics&Computer,2014,31(11):14-17,22.
[59]张强.UVM实战[M].北京:机械工业出版社,2014.
『60]POOJA K S,l(IUSHNAKI『MAR S,ARADHYA H V R.Verification of Interconnection
IP for Automobile Applications using System Verilog and UVM[C]H20 1 8 3rd IEEE

International Conference on Recent Trends in Electronics,Information&Communication

Technology(RTEICT).2018:11 19-1 123.

[61]PENG X,WANG S,WANG H,et a1.Function Verification ofSRAM Controller Based on

UVM[C]//20 1 9 IEEE 1 3th International Conference on Anti-counterfeiting,Security,and


Identification(ASID).20 1 9:l一5.

63

万方数据
山东大学硕士学位论文

致 谢

转眼三年,有无尽的不舍和期待,有憧憬有怀恋。在此,由衷感谢一路走来遇到所
有给予我帮助和鼓励的人们。
感谢我的导师田军教授。田军教授学术上治学严谨学识渊博,生活中温柔和善平易
近人。三年来对我的帮助无微不至,在我写论文期间给予大量指导,提出很多宝贵意见,
每次周会都会对我学业进行悉心指导,让我研究生的学习和生活目标明确。在此向田教
授致以最诚挚的谢意。
感谢我实习的公司提供实验平台,感谢公司里的同事们,感谢明哥、原哥、雪文哥、
倩倩姐、高姐等人提供的学习指导和生活帮助,永记于心。
感谢微电子学院的领导和老师,感谢我的师兄师姐,感谢谢明明、马继超、孙士刚、
韩帅、董艳、王志奇、陈有涛等同学,感谢他们对我的帮助。
感谢我的女朋友舒明慧,彼此陪伴,相互鼓励,相互支持。感谢我们一路走来从不
放弃,感谢彼此坚信共同创造美好的未来。

感谢我的父母,从出生到如今即将步入社会,父母一直默默守护我的成长。感谢父
母将我养育成人,感谢他们在青春年华最美好的时光陪伴我长大。
最后,感谢对本论文进行评审的专家和老师。

万方数据
学位论文评阅及答辩情况表

专业技术 是否博导
姓 名 所在单位 总体评价※
职 务 (硕导)



透岛评阋 良好

评 匿名评闶 良婷
阅 匿名评阋 良婷

专业技术 是否博导
姓 名 所在单位
职 务 (硕导)

主席
杨济瓦 孰授 石定孚 山东师范天学
答 王永 教授 博导 山东太喾微龟手季院

宁亚翟 勘攫蠲芤畏 石灸导 山东夫学徽屯壬尝院


贝 委 唐,J啄亳 剖教鞭 石灰 导 山东夫尊搿久电占喾阮
会 山东夫碧徽电每喾阮
周莉 昌J教授 顽导




答辩委员会对论文
良好 答辩秘书 钥蝴 答辩
2。22.03"・27
的总体评价※ 勰’ 日期

备注

※优秀为“A”;良好为“B”;合格为“C”;不合格为“D”。

万方数据

You might also like