Download as pdf or txt
Download as pdf or txt
You are on page 1of 77

不同哈希算法的硬件研究及 UVM 验证

作 者 姓 名 : 李辉

导 师 姓 名 : 熊晓明

学科(专业)或领域名称 : 控制工程

论 文 答 辩 年 月 : 2020 年 05 月 24 日
分类号: 学校代码:11845

UDC: 密级: 学 号:2111704298

广东工业大学硕士学位论文

(工程硕士)

不同哈希算法的硬件研究及 UVM 验证

李辉

导师姓名(职称) : 熊晓明教授

黄沫高级工程师

学科(专业)或领域名称 : 控制工程

学 生 所 属 学 院 : 自动化学院

答 辩 委 员 会 主 席 : 蔡述庭

论 文 答 辩 日 期 : 2020 年 5 月
A Dissertation Submitted to Guangdong University of Technology for

the Degree of Master

(Master of Engineering Science)

Hardware Research and UVM Verification of Different


Hash Algorithms

Candidate: Li Hui

Supervisor: Prof. Xiaoming Xiong

May 2020
School of Automation
Guangdong University of Technology
Guangzhou, Guangdong, P. R. China, 51000
摘 要

摘 要
近年来,随着人工智能技术的发展,以及 5G 技术的大规模商用化,物联网行业得
到了飞速发展,我国的物联网发展水平也处于世界领先水平。然而物联网市场的信息
安全隐患也随着市场的增长变得越来越严重。因此,发展物联网信息安全的迫切性,使
得物联网信息安全的 ASIC 芯片的研发在物联网市场增长的过程中变得尤为重要。目
前存量的加密算法包括国际的 AES/RSA/SHA 等,以及国内的 SM2/SM3/SM4 算法;同
时,很多学者及工程师针对安全算法的优化和实现方式做了大量的工作。但是,在实际
的应用中根据应用场景安全级别及性质的不同,则对算法的需求不同。为了能够兼容
国际加密算法和国密加密算法,本文是在设计一款同时支持国际加密算法和国密加密
算法的物联网信息安全芯片中提炼出的,主要就哈希算法兼容国际加密算法和国密算
法进行研究和实现。
现存国际哈希算法的种类有很多,结合项目的实际需求及哈希算法的发展,国际
哈希算法本文采用 SHA256 和国密算法采用 SM3 作为本文的研究与设计内容,SHA256
的运用最为广泛,研究使用相对较为成熟;SM3 加密算法由中国国家密码局提出,其
算法在硬件实现方面还存在着优化空间;基于上述,本文的主要工作包括 SHA256/SM3
算法的软硬件协同设计。同时,UVM 验证技术现已经广泛的运用于 SoC 设计;本文基
于 SHA256/SM3 算法的 IP 级验证搭建了 UVM 验证平台,用于验证 SHA256/SM3 算法
的 RTL 实现在功能是否与纯软件实现是否一致,同时基于 smartL 平台完成系统级测试
和 FPGA 原型机验证。
首先,通过软件来实现 SHA256/SM3 算法,同时搭建 UVM 验证平台,并使用软
件实现的 SHA256/SM3 算法作为验证平台的参考模型,然后对 SM3 算法进行优化,其
优化指标为使寄存器的数量减少为原来的 1/3,性能提升 28.9%,再将 SHA256 算法以
及优化后的 SM3 算法进行 RTL 实现,最后通过 AHB 总线接口将 SHA256/SM3 算法电
路与 CPU 进行连接,最终形成一块 SoC。设计完成后,先是用 UVM 完成算法的 IP 级
验证,从 UVM 的 scoreboard 可以观察到数据通过 DUT 和参考模型得到的结果是一致
的,然后分析了 UVM 平台的覆盖率,可以观察到随着测试案例的增加,功能覆盖率和
代码覆盖率逐渐趋于 100%。再在 VCS 下完成系统及仿真,其结果均能达到设计预期,
最后在平头哥提供的 FMX7A 开发板上完成 FPGA 验证,验证了原型机验证完全符合
设计要求。综上所述,该设计方案完全满足物联网信息完全的需求。

I
广东工业大学硕士学业论文

关键词:信息安全;哈希算法;UVM;软硬件协同;SoC

II
Abstract

Abstract
In recent years, with the development of artificial intelligence technology and the large-
scale commercialization of 5G technology, the Internet of Things industry has developed
rapidly, and the development level of China's Internet of Things is also at the world's leading
level. However, information security risks in the Internet of Things market have become more
and more serious as the market grows. Therefore, the urgency of developing IoT information
security has made the development of ASIC chips for IoT information security particularly
important in the growth of the IoT market. The current encryption algorithms include
international AES / RSA / SHA, etc., and domestic SM2 / SM3 / SM4 algorithms; at the same
time, many scholars and engineers have done a lot of work on the optimization and
implementation of security algorithms. However, in actual applications, depending on the
security level and nature of the application scenario, the algorithm requirements are different.
In order to be compatible with the international encryption algorithm and the national
encryption algorithm, this article was extracted from the design of an IoT information security
chip that supports both the international encryption algorithm and the national encryption
algorithm. The hash algorithm is compatible with the international encryption algorithm and
the national encryption algorithm. The encryption algorithm is researched and implemented.
There are many types of existing international hash algorithms. Combined with the actual
needs of the project and the development of hash algorithms, the international hash algorithm
uses SHA256 and the national secret algorithm adopts SM3 as the research and design content
of this article. SHA256 is the most widely used and studied. It is relatively mature to use; SM3
encryption algorithm is proposed by China National Cipher Bureau, and its algorithm still has
optimization space in terms of hardware implementation; based on the above, the main work
of this paper includes software and hardware collaborative design of SHA256 / SM3 algorithm.
At the same time, UVM verification technology has been widely used in SoC design; this
paper builds a UVM verification platform based on the IP level verification of the SHA256 /
SM3 algorithm to verify whether the RTL implementation of the SHA256 / SM3 algorithm is-

III
广东工业大学硕士学业论文

consistent with the function of pure software. At the same time based on smartL platform to
complete system-level testing and FPGA prototype verification.
First, the SHA256 / SM3 algorithm is implemented through software, and the UVM
verification platform is built at the same time, and the SHA256 / SM3 algorithm implemented
by the software is used as a reference model for the verification platform, and then the SM3
algorithm is optimized. The optimization index is to reduce the number of registers to The
original 1/3, the performance is improved by 28.9%, and then the SHA256 algorithm and the
optimized SM3 algorithm are implemented by RTL. Finally, the SHA256 / SM3 algorithm
circuit is connected to the CPU through the AHB bus interface, and finally a SoC is formed.
After the design is completed, the IP level verification of the algorithm is first completed with
UVM. From the scoreboard of UVM, the results obtained by the data through the DUT and
the reference model are consistent, and then the coverage of the UVM platform is analyzed. It
can be observed that with the test case The increase of the function coverage and code coverage
gradually tends to 100%. Then complete the system and simulation under VCS, and the results
can meet the design expectations. Finally, FPGA verification is completed on the FMX7A
development board provided by Pingtou, which verifies that the prototype verification fully
meets the design requirements. In summary, this design solution fully satisfies the complete
information needs of the Internet of Things.
Key words: Information safety; Hash algorithm; UVM; Hardware/software codesign;
SoC

IV
目 录

目 录
摘 要 ................................................................................................................................. I
Abstract .......................................................................................................................... III
目 录 ................................................................................................................................ V
Contents ....................................................................................................................... VIII
第一章 绪论 ..................................................................................................................... 1
1.1 课题背景及意义 ............................................................................................. 1
1.2 国内外的研究现状 ......................................................................................... 2
1.3 研究内容及行文结构 ..................................................................................... 3
1.4 本章小结 ......................................................................................................... 3
第二章 算法原理及验证平台介绍 ................................................................................. 4
2.1 不同哈希算法的概述 ..................................................................................... 4
2.1.1 MD4 算法介绍 ....................................................................................... 5
2.1.2 MD5 算法介绍 ......................................................................................... 5
2.1.3 SHA-1 算法介绍 ...................................................................................... 6
2.1.4 SHA-2 算法介绍 ...................................................................................... 7
2.1.5 SM3 算法介绍 .......................................................................................... 8
2.2 验证技术介绍 ................................................................................................. 8
2.2.1 验证语言介绍 ............................................................................................ 8
2.2.2 验证方法学介绍 ........................................................................................ 9
2.3 算法方案的选择及算法分析 ....................................................................... 10
2.3.1 SHA256 算法分析 ................................................................................... 10
2.3.2 SM3 算法分析 ......................................................................................... 14
2.4 本章小结 ....................................................................................................... 16
第三章 算法的软硬件及 AHB 总线接口设计 ............................................................ 17
3.1 算法的软硬件总体设计方案 ....................................................................... 17
3.2 算法的软件设计思路 ................................................................................... 19
3.3 SHA256 模块硬件设计 ................................................................................ 20
3.3.1 SH256 算法的硬件的端口信号分析 ...................................................... 20
3.3.2 SHA256 模块的 HDL 设计 ..................................................................... 21
3.4 SM3 算法的硬件优化及实现....................................................................... 23

V
广东工业大学硕士学业论文

3.4.1 SM3 算法硬件的端口信号介绍 ............................................................. 23


3.4.2 SM3 算法数据扩展模块的优化 ............................................................. 24
3.4.3 SM3 算法压缩函数模块的优化 ............................................................. 26
3.5 AHB-SM3/AHB-SHA256 从接口设计 ........................................................ 27
3.5.1 AHB 总线接口介绍................................................................................. 28
3.5.2 控制器模块状态机的分析与设计 ......................................................... 28
3.5.3 控制器模块设计流程 ............................................................................. 29
3.5.4 控制器模块的接口信号及其 HDL 设计 ............................................... 30
3.6 本章小结 ....................................................................................................... 32
第四章 UVM 验证平台的搭建 .................................................................................... 33
4.1 UVM 验证技术简介 ..................................................................................... 33
4.1.1 UVM 的演变 ............................................................................................ 33
4.1.2 UVM 的调度语义 .................................................................................... 34
4.1.3 UVM 的组成 ............................................................................................ 35
4.1.4 UVM 树 .................................................................................................... 38
4.1.5 UVM 的 phase 机制................................................................................. 39
4.1.6 UVM 的 objection 机制 ........................................................................... 39
4.1.7 UVM 的通信机制 .................................................................................... 39
4.2 算法功能验证的 UVM 平台搭建 ................................................................ 40
4.2.1 UVM 验证环境的搭建流程 .................................................................... 41
4.3 使用 UVM 验证平台的验证流程 ................................................................ 45
4.4 本章小结 ....................................................................................................... 45
第五章 验证及分析 ....................................................................................................... 47
5.1 前仿结果分析 ............................................................................................... 47
5.1.1 仿真工具介绍 ......................................................................................... 47
5.1.2 IP 级的 UVM 仿真结果 .......................................................................... 47
5.1.3 系统级的仿真结果 ................................................................................. 49
5.2 FPGA 验证及结果分析 ................................................................................ 50
5.3 后端综合及性能分析 ................................................................................... 53
5.3.1 SM3 算法优化的分析 ............................................................................. 55
5.4 本章小结 ....................................................................................................... 55
第六章 总结与展望 ....................................................................................................... 57
参考文献 ......................................................................................................................... 59
攻读学位期间的科研成果 ............................................................................................. 62
VI
目 录

学位论文独创性声明 ..................................................................................................... 63
学位论文版权使用授权声明 ......................................................................................... 63
致 谢 ............................................................................................................................... 64

VII
Contents

Contents
Abstract(Chinese) .................................................................................................... Ⅰ
Abstract(English) .................................................................................................... Ⅲ
Contents(Chinese) ................................................................................................... Ⅴ
Contents(English) ..................................................................................................... Ⅶ
Chapter 1 Introduction ................................................................................................... 1
1.1 Project background and significance ............................................................... 1
1.2 Research status at home and abroad ................................................................ 2
1.3 Research content and writing structure ............................................................ 3
1.4 Chapter summary ............................................................................................. 3
Chapter 2 Algorithm principle and verification platform introduction .................... 4
2.1 Overview of hashing ........................................................................................ 4
2.1.1 MD4 algorithm ........................................................................................ 5
2.1.2 MD5 algorithm ........................................................................................ 5
2.1.3 SHA-1 algorithm ..................................................................................... 6
2.1.4 SHA-2 algorithm ..................................................................................... 7
2.1.5 SM3 algorithm ........................................................................................ 8
2.2 Verification technology introduction ............................................................... 8
2.2.1 Verification language introduction ............................................................. 8
2.2.2 Introduction to verification methodology................................................... 9
2.3 Implementation options ................................................................................. 10
2.3.1 SHA256 algorithm analysis...................................................................... 10
2.3.2 SM3 algorithm analysis ............................................................................ 14
2.4 Chapter summary ........................................................................................... 16
Chapter 3 Algorithm hardware and software and AHB interface design ................ 17
3.1 Overall design ................................................................................................ 17
3.2 Software design.............................................................................................. 19
3.3 Hardware design of SHA256 ......................................................................... 20
3.3.1 Hardware port of SH256 .......................................................................... 20
3.3.2 HDL design of SHA256 ........................................................................... 21
3.4 Optimization and hardware implementation of SM3 .................................... 23
VIII
广东工业大学硕士学业论文

3.4.1 Hardware port of SM3 .............................................................................. 23


3.4.2 Optimization of SM3 data expansion ....................................................... 24
3.4.3 Optimization of SM3 compression function ............................................ 26
3.5 AHB-SM3/AHB-SHA256 slave interface design ......................................... 27
3.5.1 Introduction of AHB interface .................................................................. 28
3.5.2 Analysis and Design of Controller State Machine ................................... 28
3.5.3 Controller design flow .............................................................................. 29
3.5.4 Interface of controller and HDL design .................................................... 30
3.6 Chapter summary ........................................................................................... 32
Chapter 4 UVM verification platform......................................................................... 33
4.1 UVM Verification .......................................................................................... 33
4.1.1 The evolution of UVM ............................................................................. 33
4.1.2 The scheduling semantics of UVM .......................................................... 34
4.1.3 Composition of UVM............................................................................... 35
4.1.4 UVM tree .................................................................................................. 38
4.1.5 UVM phase mechanism ........................................................................... 39
4.1.6 UVM's objection mechanism ................................................................... 39
4.1.7 UVM communication mechanism............................................................ 39
4.2 UVM platform construction for algorithm function verification ................... 40
4.2.1 UVM verification environment construction process .............................. 41
4.3 Verification process using UVM verification platform ................................. 45
4.4 Chapter summary ........................................................................................... 45
Chapter 5 Verification and analysis ............................................................................. 46
5.1 Pre-simulation analysis .................................................................................. 46
5.1.1 Simulation tools introduction ................................................................... 46
5.1.2 IP-level UVM verification results ............................................................ 46
5.1.3 System-level simulation results ................................................................ 49
5.2 FPGA verification and result analysis ........................................................... 49
5.3 Back-end synthesis and performance analysis ............................................... 52
5.3.1 Analysis of SM3 algorithm optimization ................................................. 54
5.4 chapter summary ............................................................................................ 55
Chapter 6 Summary and outlook................................................................................. 56
IX
Contents

References ...................................................................................................................... 58
Publications .................................................................................................................... 61
Original dissertation statement .................................................................................... 62
Dissertation Copyright Use Rights Statement ............................................................ 62
Acknowledgement ......................................................................................................... 63

X
第一章 绪论

第一章 绪论
1.1 课题背景及意义
根据全球移动通信系统协会(GSMA)提供的资料显示,物联网技术 2018 年对全
球经济的影响比例变得越来越大,占 GDP 的两个百分点;其中,制造业受物联网技术
技术的影响最大;物联网对中国的经济的影响,与中国的 GDP 在世界的排名一致,都
是位居第二。物联网技术的发展与全球经济的发展是相互影响的,物联网技术发展会
促使全球经济的发展,而经济的发展与会倒过来推动物联网行业的发展,权威机构预
测,未来 5 年,物联网技术对全球经济影响将持续变大,可以达到 3710 亿美元[4],占
GDP 比重也将越大越大,大约增加到三个百分点。无可争议,物联网的发展将促进智
慧城市、智能制造、智能车联网、智能农业化等[5]行业的蓬勃发展。
随着技术的发展,大量低功耗的网络连接技术的商业化速度也在加速快速发展;物
联网平台迅速增长,服务支撑能力迅速得到了提升[6];GSMA 发布的关于物联网行业的相
关资料显示,2010 年至 2018 年期间,全球的物联网连接数长期保持高速增长的状
态, 2018 年,全球的物联网连接数达 90 多亿。物联网因此将成为电子信息技术未来
发展的重要方向。
近年来随着超大规模集成电路及人工智能技术的飞速发展,当前计算机的计算能
力不断的增强,以及随着通信网络和信息技术的发展,我国的物联网很快将进入高速
发展时期[9]。
物联网技术的发展,在给提升社会效率的过程中,也存在很大的信息安全隐患,据
相关机构提供的数据表明:到 2016 年底,因为系统安全而产生的漏洞数量,已经有 900
多个,其中,工业控制领域是重灾区,其信息安全问题最为严重。随着汽车 ECU 数量以
及车联网需求的增加,汽车遭受攻也急剧增加。物联网信息安全中的破坏形式有很多
种,包括泄露隐私数据、破坏局域网络、非法入侵和被控制为僵尸网络等类型,而且随
着物联网规模的扩大,其破坏力也越大。下面将举一些发生在当下的一些信息安全事
故,2020 年新冠疫情期间发生了太多的信息安全事故,第一起是世界知名半导体公司
AMD 的 GPU 源码被黑客盗取,然后扬言勒索 AMD1 亿美金,否则就将源码公布到开
源网站上。第二起,因为疫情期间大多数公司和学校都选择在家办公和学习,也因此视

1
广东工业大学硕士学业论文

频会议软件的使用量迅速激增。国外表现最为热门的软件一定要数 Zoom,近日,被曝
发现了重大安全漏洞,大量的私人视频被非法上传至公开网页,可以被任何人在线围
观。
芯片是作为物联网的基础设施,随着物联网市场的发展,因此,使得物联网信息安
全的 ASIC 芯片的研发在物联网市场增长的过程中变得尤为重要,本文本人在设计物
联网芯片的项目中提炼出来的,由于本人在设计芯片的过程中主要是贡献在于哈希算
法的设计,因此,本人也将围绕哈希算法的硬件设计及验证来展开。
1.2 国内外的研究现状
物联网设备的安全问题曰益成为人们关注的焦点。可以预见的是,在不远的未来,
物联网安全事件频发,全球物联网安全支出将不断增加[8]。为了构建物联网信息安全护
盾,权威机构预测 2020 年全球用于构建物联网安全体系,为此支出的费用将超过 20 亿
美元;因为物联网规模越大,信息安全存在地可能性就越大,危害也越大。因此,之后
还会不断地增加投入,物联网的安全支出还会不断增加。所以,基于物联网的信息安全
的相关研究是一个非常有前景的方向。
回到哈希算法在信息安全领域的应用,看到大量的专家学者都在从事相关的研究
工作。哈希算法可以分为很多类,包括一开始的 MD 系列算法,其中包括 MD4 和 MD5,
以及后来在 MD5 算法的基础上发展出来的 SHA 算法,以及中国国家密码局提出的国
密算法 SM 系列中的 SM3 算法。
哈希算法的软件实现,因为其具有易于标准化和便于软硬件实现等特点,在信息
安全领域有广泛的应用 [13],但是用软件的形式来实现哈希算法一般情况下都是运行在
通用计算机平台下的,这会导致算法在运行过程中速度慢,执行效率低,不适合物联网
领域。随着集成电路的发展,物联网领域的哈希算法更多情况下会选择作为一个算法
IP 集成到 SoC 中。
王晓燕[14]在 FPGA 平台上对 SM3 算法的运算单元进行过优化,Kim J W [15] 从流水
线的方法优化过哈希算法的 SHA-1 算法的 FPGA 实现,以及张倩[16]也在 FPGA 上从流
水线的角度优化过 SM3 算法的硬件实现实现。丁冬平[17]、薛也[18]等在 SM3 算法和 SHA-
1 算法的架构设计上面采用循环展开结构,陈华锋[19]和李鸿强[20]从关键路径的设计上对
SHA256 算法和 SHA512 算法做了优化。同样 Dan Cao[21] LI Miao[22]和刘恒[23]等从算法
的可重构角度做了大量的研究。
总体来说,在算法的硬件实现方面,更多的都是从硬件的角度去考虑如何优化哈
希算法的 PPA(Performance(性能)、Power(功耗)、Area(面积)),本文主要是从实际应
用出发,领用软硬件协同设计的角度去做算法的优化。此外,本文还在验证层面做了大
2
第一章 绪论

量工作,包括 IP 级别的 UVM 验证和 smarL 平台下的系统级验证,基于原型机的 FPGA


验证。从软硬件协同设计的角度来分析哈希算法在硬件层面的优化。
1.3 研究内容及行文结构
第一章,首先主要介绍本文的研究意义,从宏观层面阐述了国内外信息安全领域
的研究现状,列举了部分物联网设备遭受黑客攻击或窃听等例证,然后简单介绍了密
码学的发展史,及哈希算法在信息安全中的应用,随着芯片尺寸的增加,验证是最耗时
的工作并占据越来越多的周期。怎样提高验证效率变得非常重要,又简单的介绍了
UVM 验证方法学,以及软硬件协同设计方面的知识,提出本文的研究内容和工作内容。
第二章,对不同的哈希算法以历史和技术发展的角度进行简要的归纳介绍。包括
详细分析了算法的基本原理,算法的共性和差异,然后就算法在发展的过程中遇到的
安全问题以及解决方案做了详细的介绍。然后,根据项目的需求,最终确立哈希算法硬
件实现的方案:即:本文在芯片中哈希的硬件实现部分选用 SM3 算法和 SHA256 算法。
第三章,先是交代了算法软硬件协同设计的思路,然后确立对 SM3 算法和 SHA256
算法硬件加速的部分,然后做软硬件划分,然后交代硬件设计的流程,然后对接口进行
了详细的介绍,接着就是对 SHA256 算法硬件实现方面给出了详细的说明,然后详细
的介绍了 SM3 算法的优化过程,随后给出了控制单元的逻辑分析,画出了状态转移图
以及代码说明,最后给出了 AHB-SHA256 和 AHB-/SM3 接口设计的思路以及实现的过
程。
第四章,先是系统的介绍了验证平台及验证语言的发展历史,然后详细的介绍了
UVM 验证方法学的使用方法,以及详细的介绍了基于 SHA256 和 SM3 算法的 UVM
验证平台的搭建步骤。
第五章,先是介绍了仿真工具,再就是对 SM3 算法和 SHA256 算法硬件实现的功
能验证,包括前仿和后仿,前仿部分包括 IP 级的 UVM 验证,然后在 smartL 平台下做
系统级的验证,验证 CPU 与 AHB 总线以及 IP 之间的连接是否存在问题,最后做 FPGA
板级验证,进一步确定原型机验证是否与预期一致本文采用的设计方案是否满足设计
的预期。
1.4 本章小结
本章的主要内容是介绍本文的研究意义,从宏观层面阐述了国内外信息安全领域
的研究现状,列举了一些物联网设备遭受黑客攻击或窃听等例证,然后简单介绍了密
码学的发展史,及哈希算法在信息安全中的应用,然后介绍了 UVM,最后给出了本文
的核心研究内容,以及行文脉络。

3
第二章 算法原理及验证平台介绍

第二章 算法原理及验证平台介绍
2.1 不同哈希算法的概述
哈希算法的含义哈希的英文名为 Hash,意思为散列 ,因此哈希算法也因此可以
[24]

广泛的理解为散列算法,哈希算法的基本工作任务来是将任意一个长度的数据(哈希值
输入的数据),通过散列算法 H,得到固定长度的输出 H(x),即哈希值 h[25]的一种算法。
一般称经过哈希算法运算过的数据为哈希值,一般的情况下,哈希值的输出数据的长
度会远小于输入数据的的长度。最为重要的是哈希函数本身具有不可逆的特点,简单
的说,哈希函数的值只能通过明文通过加密的方法得到,而输入数据无法通过哈希值
而得到,即通过哈希值完全无法准确的推算出哈希算法输入数据。所以一般的情况下,
哈希算法会广泛的被研究和运用于一些信息安全的领域,例如:使用鉴权加密协议等,
防止文件在进行数据传输的过程中被恶意篡改,这一点比传统的 crc 校验及奇偶校验
方法会更具有很大的技术优势。
所有的哈希算法其运算的过程包括数据填充,分组运算以及输出等步骤,下面就
数据填充部分进行详细的介绍。所谓数据填充操作,就是把哈希算法的输入数据经过
一些转换操作,将输入数据的长度拼凑成 512 位的整数倍。其操作过程如下:首先,将
哈希算法的输入数据转换成二进制序列,然后紧接着在二进制串序列后面填充一个 1,
然后就是填充若干个 0,最后的 64 位用来保存输入数据转化为二进制数据时候的长度,
因此填充 0 的个数取决于输入数据的长度,填充后的数据长度 L 应该满足 L mod 512
=448,假设原始数据的长度为 S,哈希算法在填充时,需要在数据后填充 1 个 1 和 K 个
0,则 K 应该满足(S+1+K) mod 512=448 的最小非负整数。特别地,如果 S mod 512=447,
则只需在二进制数据的后面补 1 个 1,不需补 0,而直接在后面不上数据的长度就行了,
即使 S 已满足 S mod 512=448,也要在数据后面补 1 个 1,为了满足哈希算法的条件
(S+1+K) mod 512=448,则还需要再补 511 个 0,这会使填充后的数据比原来的数据新
增一个 512 位的数据组。最后,进行数据的长度填充,将原始数据以 64 位二进制表示
原始数据的长度,若超过 64 位则取低位 ,最终得到的数据长度是 512 的整数倍。填
[26]

充的示意图如图 2-1 所示。

4
广东工业大学硕士学业论文

N*512位
(L)
1个 1 K个 0

原始输入数据 1 00···00 消息长度

········
512位 512位 512位

数据块1 数据块2 数据块3

图 2-1 填充的示意图

Figure 2-1 Schematic diagram of filling

从现有的哈希算法来看,哈希算法可以分为很多类,包括一开始的 MD 系列算法,
其中包括 MD4 和 MD5,以及后来在 MD5 算法的基础上发展出来的 SHA 算法,以及
中国国家密码局提出的国密算法 SM 系列中的 SM3 算法,下面将对不同的哈希算法以
历史和技术发展的角度进行简要的归纳介绍。

2.1.1 MD4 算法介绍


MD4 加密算法是由 Ronald Rivest 设计的,主要目的是用来抵抗碰撞和第二原象攻
击,最初的应用场景包括用来测试消息是否具备完整性的,该算法经过加密运算,最终
将得到一个 128 位的摘要,但是,在众多学者的攻击下,该算法的设计存在很大的缺
陷,这就意味着需要提出更为先进的算法来弥补 MD4 算法存在的缺陷,尽管存在着各
种问题,但是,该算法的发明对后续一系列哈希算法的研究发展产生了深远的影响[27],
2.1.2 MD5 算法介绍
MD5 算法是罗纳德·李维斯特(Ronald Rivest)教授对 MD4 算法的改进后的结果。
于 1992 年提出的,MD5 算法的摘要长度也为 128 位,以及分组的长度也跟 MD4 算法
的长度都是一致的。但是,MD5 算法的关键步骤的运算更为复杂。运行速度稍微慢一
5
第二章 算法原理及验证平台介绍

些,就是因为关键算法的设计更为发杂,也因此更安全。其输入值以 512 位为单位进行分


组,输出值是由 4 个 32bit 的数据组成的 128bit 的结构,其与 MD4 算法的主要区别如
下:
MD5 算法输入数据的长度不大于 264 位,经过计算以后得到的哈希值长度是 128
位,其处理的过程包括三个步骤,数据填充,数据分组以及数据的迭代。
前文已经详细介绍过了数据填充环节,数据分组,主要是将填充后的数据进行分
组,然后对分组后的数据进行迭代然后将 512 位又切割位 4 个 128 位的数据进行迭代运
算,以此不断迭代,直到所有的数据爹算完全必,迭代的过程包括初试化 MD5 算法的
参数,进入主循环,和输出结果等步骤。MD5 算法的主要参数如下:
A=0x01234567,B=0x89abdcef,C=0xfedcba98,D=0x76543210
主循环中用到的一些函数,见式(2.1)到式(2.4)
F(b ,c,d )  (b & c)|(( b ) & d ) (2.1)
G(b ,c,d )  (b & d )|(c & ( d )) (2.2)
H (b ,c,d )  b  c  d (2.3)
I(b ,c,d )  c  (b |( d )) (2.4)
2.1.3 SHA-1 算法介绍
1993 年,NIST 发布 FIPS PUB180,正式地提出了安全散列算法(Secure hash
algorithm)简称 SHA,一开始推出的是 SHA-0 算法,但是 SHA-0 算法因为存在“严重缺
陷”很快就被撤销了,不久之后在 SHA-0 的基础上,经过修改发展出了 SHA-1 算法,
SHA-1 算法解决了 SHA-0 算法存在的严重缺陷问题。这两个算法都能将[1-264-1]位的
数据经过哈希运算,得到 160 位输出数据。SHA-1 算法也是要将输入的数据长度变成
512 的整数倍,然后以 512 位基础的输入数据单元,输入到算法中进行运算,进入算法
后,将 512 位的数据切割成 16 个 312 位的数据才进行运算。SHA-1 此前广泛应用于
Internet 和以及其他安全工具中。
其算法的过程与 MD5 大致一样,经过初试化,迭代计算和输出等环节,其初试化
时的参数如下:
A=0x67452301;B=0xEFCDAB89;C=0x98BADCFE;D=0x10325476;E=0xC3D2E1F0[28];
在迭代时使用的函数见式(2.5)和式(2.6):

6
广东工业大学硕士学业论文

(b  c )  ( b  d ) 0  j  19

b  c  d 20  j  39
Fj   (2.5)
(b  c )  (c  d )  (b  d ) 40  j  59
b  c  d 50  j  79

5a 827999 0  j  19

6ed 9eba1 20  j  39
Tj   (2.6)
8f 1bbcdc 40  j  59
ca 62c1d 6 60  j  79

但是,2005 年 8 月 17 日的 crypto 会议中王小云、姚期智、姚储枫能在 230 的复杂


度内找到碰撞:对于 SHA-1,可以在 263 的计算复杂度内找到碰撞[29]。次年的 crypto 会议
上,克里斯汀雷奇伯格等也再次公开宣布他们完全可以容许任何网络攻击者自行决定
部分原子和信息的特定条件下,找到一个 SHA-1 的碰撞。
2.1.4 SHA-2 算法介绍
基于上述,2002 年,NIST 重新定义了的 SHA 算法,因此就有了后来的 SHA-2,
相比 SHA-1,SHA-2 拥有了更高级别的加密安全性。SHA-2 内部的操作位宽,SHA-224
和 SHA-256 的消息块大小,内部操作位宽,以及最大消息长度都和 SHA-1 样[30];但是,
SHA-2 的最大输出数据和消息长度的大小取决于算法的写入数据选择,SHA224 对应
的输出消息数据为 224 位,SHA256 对应的最大输出消息数据为 256 位。
SHA-2 算法包括 SHA224/SHA256/SHA384/SHA512 四种结构,运算的步骤仍然遵
从此前介绍的哈希算法的一般规则,填充方式依然是按照传统的方式在进行,但是初
试化的值,以及循环迭代方式存在差异,同样,这里对 SHA-2 算法进行一个简单的介
绍。
SHA256 算法的输入数据长度不大于 264,输出数据的长度为 256,初试化向量由 8
个 32 位的数据组成,分别为:
A:=0x6a09e667;B:=0xbb67ae85;C:=0x3c6ef372;D:=0xa54ff53a;
E:=0x510e527f;F:=0x9b05688c;G:=0x1f83d9ab;H:=0x5be0cd19;
SHA224 算法则是取 SHA256 算法的哈希值的前 224 位,因此一般认为 SHA224 为
SHA256 的精简版。

7
第二章 算法原理及验证平台介绍

同理,SHA512 法的输入数据长度不大于 2128,输出数据的长度为 512,初试化向


量由 8 个 64 位的数据组成。其值为:
A=6a09e667f3bcc908;B=bb67ae8584caa73b;
C=3c6ef372fe94f82b;D=a54ff53a5f1d36f1;
E=510e527fade682d1;F=9b05688c2b3e6c1f;
G=1f83d9abfb41bd6b;H=5be0cd19137e2179;
SHA384 算法则是取 SHA518 算法的哈希值的前 3844 位,因此一般认为 SHA3844
为 SHA512 的精简版。
SHA256/SHA224 算法和 SHA512/SHA384 算法除了上述的初值和输入输入输出数
据的长度以外,还存在着一个很大的区别,SHA256/SHA224 的迭代轮数为 64 轮,而
SHA512/SHA384 的迭代次数为 80 轮。
2.1.5 SM3 算法介绍
在物联网时代,为了进一步保障我国的商用信息安全,满足我国企业使用电子认
证服务系统以及商用密码安全服务的需求,中国国家密码管理局在 2010 年 12 月 17 日
正式发布了国密算法 SM 系列中的 SM3 算法。该算法也是散列函数中的一种,与
SHA256 函数非常的类似,具体体现在,其输入数据的长度也是小于 264,数据进入到
算法时进行分组也与 SHA256 算法一样,是将 512 位数据切割成 8 个 32 位的数据,输
出数据也是 256 位,其差异存在于迭代的过程,以及初试化的向量值不同,输入数据
的 SM3 算法是由王小云等国内多位密码学界著名教授自主设计的国密算法。以下是
SM3 算法的初始向量。
A=0x7380166f;=0x4914b2b9;=0x172442d7;=Oxda8a0600;
E=Oxa96f30bc;=0x163138aa;=Oxc38dcc4d;=Oxb0fb0c4c
2.2 验证技术介绍
论述验证技术,主要从验证语言和方法学的角度去着手,验证语言是验证技术的
实现的工具基础,而验证方法学则规定了验证技术的一些理论和基础架构。各大 EDA
厂商广泛的利用各种各样的验证语言(如:C/C++/Verilog/systemverilog/system C)及验
证方法学建立了各自的验证平台。

2.2.1 验证语言介绍

8
广东工业大学硕士学业论文

除了比较熟悉的 Verilog HDL,还要介绍 E 语言,Vera 语言,System C(SC)和


System Verilog(SV),E 语言是一款面向对象(object oriented programming,简称 OOP
的语言),由 VerisityDesign(已经被 cadence 收购)公司研发。跟 Verilog 比起来,E 语
言专门为验证研发,因此 E 语言支持产生带约束的随机激励、统计覆盖率(coverage)、
断言(assertion)验证[31]等功能,基于上述,E 语言是最早的 OOP(面向对象编程)验
证语言。由于 E 语言的兼容性问题,所以发展至今 E 语言没有成为最为主流的验证语
言。Vera 验证语言是新思科技(Synopsys)设计的验证语言,支持面向对象编程,是为
了解决 Soc 设计过程中的验证环境难以搭建的问题。Vera 语言在支持的硬件描述语言
特性的同时,也拥有软件编程中类(class)的编程方式,可以很方便的进行数据结构和
进程的监控,在芯片设计的过程中,如果要搭建一个验证平台,可以用该语言来描述验
证方法学的底层组件、产生测试向量,统计覆盖率以及断言验证。适用于不同阶段的功
能验证,因此改语言有很好的灵活性。另外,SV 也是在这基础上发展来的,并作为
IEEE1800 标准的一部分。
无论是 E 语言还是 Vera 语言等其他语言都会出现效率和兼容性等方面的限制,因
此其,这些语言都没有成为最为主流的语言。应用受到了很大的限制,而 System Verilog
语言很好的解决了这个问题。
SystemVerilog(SV)语言是 Verilog 的基础上扩展起来的,由于他同时具备 OOP 的
特点,很多情况下都称 SV 语言是连接“软硬件编程的桥梁”2005 年正式成为 IEEE 的
标准。以下是 SV 的特点:
支持 OOP 的功能特点:封装、继承和多态
支持验证需要的功能特点:约束、功能覆盖率。
跟 Verilog 完全兼容,使得工程师能快速入手。

2.2.2 验证方法学介绍
2002 年,Verisity(已经被 cadence 收购)公布了第一个基于 E 语言开发的 eRM 验
证库。次年,Synopsys 公司公布了基于 Vera 语言开发的 RVM。2006 年,三大 EDA 厂
商的 Mentor 公布了 AVM,支持 TLM 标准,用 SV 和 SC 实现。接着,Synopsys 推出
VMM,这主要是将 RVM 的 vera 语言切换到到 SV。2007 年,Cadence 推出 URM,这
也是将 eRM 的 E 语言切换到 SV,并支持 TLM 接口等。2008 年,Cadence 和 Mentor
一起推出了 OVM,这也是 UVM 的前身。2010 年,ACCELLERA 以 OVM 为基础,进

9
第二章 算法原理及验证平台介绍

行开发,最终形成了 UVM。最终被三大 EDA 厂商同时支持,因此 UVM 验证方法学


成为了迄今为止最为主流的验证方法学,图 2-2 为验证语言及验证方法学的发展历程。

E语言 eRM SV
VA RVM AVM\VMM OVM UVM
Vera、SV (IEEE1800)

至今

1998 2000 2002 2003 2005 2006 2008 2011


图 2-2 验证语言及其验证方法学的发展史

Figure 2-2 History of verification language and verification methodology

2.3 算法方案的选择及算法分析
当下国内国内广泛应用的哈希算法,主要是 SHA2 系列算法和国密的 SM 系列中
的 SM3 算法,而且目前对哈希算法的大规模运用主要是用软件实现。本文的是在基于
设计国密芯片并且兼容国际加密算法的前提下,做出的设计。国密算法包括 SM1、SM2、
SM3、SM4、SM7 和 SM9 算法[32],本人负责的内容是哈希算法的设计,考虑到算法的
通用、兼容及软硬件复用等问题,前文已经做了一定的介绍 SHA256 算法和 SM3 输入
输出数据的结构非常相似,并且 SHA256 算法在密码学中运用最为广泛,从项目的实
际出发,本文在芯片中哈希的硬件实现部分采用 SM3 算法和 SHA256 算法。下面就
SHA256 算法和 SM3 做详细的分析和推导,并在合适的地方提出硬件优化方案。

由前一节可知,在本加密芯片中需要用到的哈希算法是 SHA256 算法和 SM3 算法。


关于这两种算法的原理,项目的两小节将做详细的分析。

2.3.1 SHA256 算法分析


SHA256 算法为 SHA-2 算法细分出的一种算法,由 NIST 研发,SHA256 算法因为
其运算结果为 256 位,而所以将其命名为 SHA256,运算的结果通常被称为哈希值或摘
要。哈希值的长度为 256,这 256 位数据是由 16 个 32 位的数据组成,为了方便表示,
一 般 将 哈 希 值 转 换 成 16 进 制 , 即 64 个 16 进 制 数 据 。 如 :
0x670d9743542cae3ea7ebe36af56bd53648b0a1126162e78d81a32934a711302e。

10
广东工业大学硕士学业论文

SHA256 算法中含有在 SHA-256 算法中,使用六个逻辑函数、两个移位函数以及 8


个 32bit 的初始化哈希值[33]。具体包括数据的填充、数据扩展及其数据的循环迭代计算。
算法是以 32bit 的数据块为单位进行运算的。下面将从数据填充,迭代和输出流程来进
行介绍。

2.7.1.1 数据填充

首先,将 SHA256 算法的输入数据转换成二进制序列,然后紧接着在二进制串序


列后面填充一个 1,然后就是填充若干个 0,最后的 64 位用来保存输入数据转化为二
进制数据时候的长度,因此填充 0 的个数取决于输入数据的长度,填充后的数据长度
L 应该满足 L mod 512 =448,假设原始数据的长度为 S,哈希算法在填充时,需要在数
据后填充 1 个 1 和 K 个 0,则 K 应该满足(S+1+K) mod 512=448 的最小非负整数。特
别地,如果 S mod 512=447,则只需在二进制数据的后面补 1 个 1,不需补 0,而直接在
后面不上数据的长度就行了,即使 S 已满足 S mod 512=448,也要在数据后面补 1 个
1,为了满足哈希算法的条件(S+1+K) mod 512=448,则还需要再补 511 个 0,这会使填
充后的数据比原来的数据新增一个 512 位的数据组。最后,进行数据的长度填充,将
原始数据的长度 S 转用 64 位的二进制表示出来,补在填充后的数据后面,最终得到的
数据长度是 512 的整数倍。
为了方便理解,图 2-3 为“abc”的填充过程,假设 SHA256 算法的输入数据为字
符串“abc”,先将字符串转化为 ASCⅡ码为“011000010110001001100011”总共 24 位,
按照前文的规则所述,在”abc”的二进制后后添加 1 个 1。然后紧接着补 423 个“0”,使
其满足 24+1+423=448,最后的 64 位为“abc”ASCⅡ的长度,即:24,用二进制表示
为:11000。最终满足 24+1+423+64=512。

01100001 01100010 01100011 1 00 00 1100


a b c 1个1 423个0 abc的长度为24

图 2-3 “abc”的填充过程

Figure 2-3 "abc" filling process

11
第二章 算法原理及验证平台介绍

2.7.1.2 初始化 SHA256 算法的缓存区

由于 SHA256 算法的结果是一个 256 位的数据组成,其由 8 个 32 位的寄存器组


成,输入的数据在运算之前,应当对这 8 个寄存器赋初值,如果输入数据的数据长度
为 512 位的整数倍,经过第一轮运算结束后刷新的 8 个寄存器的值,则作为下一轮迭
代的初值,这里给出第一轮迭代时的初值,也就是前文所提及到的 A,B,C,D,E,F,G 的值
赋给 Hi(i=0,1,…,7)。
A:=0x6a09e667;B:=0xbb67ae85;C:=0x3c6ef372;D:=0xa54ff53a;
E:=0x510e527f;F:=0x9b05688c;G:=0x1f83d9ab;H:=0x5be0cd19;
即 A=H0; B=H1; C=H2; D=H3; E=H4; F=H5; G=H6; H=H7;

2.7.1.3 数据扩展

SHA256 算法处理数据是以 512 位的数据块为基本单元的,且每次将 512 位的数


据切割成 16 组 32 位的数据,如果输入数据的长度大于 512 位,则第一组 512 位数据
迭代的哈希值作为下一组 512 位数据迭代的初值的同时,输入下一组 512 位数据,每
组 32 位的数据分别用 Mi(i=0,1,2,…,15)表示,如式(2.7)所示的公式完成迭代。

M t
(i )
0  t  15
Wt   (2.7)
 1 (Wt  2  Wt  7   0 (Wt 15 )  Wt 16 )
 16  t  63
(256) (256)

2.7.1.4 数据的循环迭代计算

1)SHA256 算法的迭代过程共有 64 轮,每一轮运算主要用到公式,如公式(2.8)到


公式(2.13)公式中的一些特殊符号做如下说明:&(与)、^(异或)、~(非),POTR(循
环右移)、SHR(右移)。
Ch(x ,y ,z )  (x & y )  ( x & z ) (2.8)
Maj(x ,y ,z )  (x & y )  (x & z )  (y & z ) (2.9)


256
0
(x )  POTR 2(x )  POTR 13(x )  POTR 22(x ) (2.10)


256
1
(x )  POTR 6(x )  POTR 11(x )  POTR 25(x ) (2.11)

12
广东工业大学硕士学业论文

 {256}
0
 POTR 7(x )  POTR 18(x )  SHR 3(x ) (2.12)
1{256}  POTR 17(x )  POTR 19(x )  SHR 10(x ) (2.13)
2)而 64 轮的循环迭代运算用到的则是,经过赋初值以后不断地重复进行扩展迭
代的过程,从而得到 256 位的哈希值,其计算过程见式(2.14)所示:

for  0 to 63
{

{256}
T1  H  0
(E )  ch(E ,F ,G )  K t{256}  Wt


{256}
T2  0
(a )  Maj(A , B ,C )
H  G
G  F
F  E
E  D  T1 (2.14)
D  C
C  B
B  A
A  T1  T2
}
3)完成 64 次循环迭代后,会产生新的 A,B,C,D,E,F,G 的值,此时将新的
A,B,C,D,E,F,G 与内部初始时的 8 个哈希向量相加,则得到当前 512 位输入数据的哈
希值,如果本次输入的数据长度大于 512 位,则本轮得到的哈希值将会重新切割成 8
个 32 位的数据组,以此类推完成所有数据的循环迭代,其具体过程如下见式(2.15):

H 0(t )  A  H 0(t 1)


H 1(t )  B  H 1(t 1)
H 2(t )  C  H 2(t 1)
H 3(t )  D  H 3(t 1)
H 4(t )  E  H 4(t 1) (2.15)
H 5(t )  F  H 5(t 1)
H 6(t )  G  H 6(t 1)
H 7(t )  H  H 7(t 1)

4)当所有数据运算结束以后,将所有的哈希值(H0,H1,H2,H3,H4,H5,H6,
H7)进行级联,则得到最终的结果。其具体过程见式(2.16):
H 0(N ) H 1( N ) H 2( N ) H 3( N ) H (4 N ) H 5( N ) H 6( N ) H 7( N ) (2.16)

13
第二章 算法原理及验证平台介绍

2.3.2 SM3 算法分析


SM3 算法的数据填充,数据扩展以及循环迭代的方式与 SHA256 非常相似,其流
程这里不再做详细的介绍,下面直接介绍数据扩展和循环迭代的算法过程 2.6.2.1 初始
化 SM3 算法的缓存区
与 SHA256 算法一样,首先也是初试化算法的缓存区,将 A、B、C、D、E、F、
G、H 的值赋给 Hi(i=0,1,…,7)。
A=0x7380166f;B=0x4914b2b9;C=0x172442d7;D=Oxda8a0600;
E=Oxa96f30bc;F=0x163138aa;G=Oxc38dcc4d;H=Oxb0fb0c4c;
即 A=H0; B=H1; C=H2; D=H3; E=H4; F=H5; G=H6; H=H7;

2.7.2.1 数据扩展

SM3 算法的扩展依旧是将填充完成后的 512bit 数据先分成 16 组 32bit 的数据,同


样用 W0,W1,…,W15 表示出来,最终扩展成 132 个数据,用 W0,W1,…,W67,W’0,W’1,…,W’63
表示,其扩展过程见式(2.17)和式(2.18)

for j  16 to 67
Wj  P1(Wj 16  Wj  9  (Wj  3  15))  (Wj 13  7)  Wj  6 (2.17)
endfor

for j  0 to 63
Wj'  Wj  Wj  4 (2.18)
endfor
上 述 式 ( 1.17 ) 中 的 P1(x )  X  (X  15)  (X  23) ,W0,W1,…,W63,

W’0,W’1,…,W’63 适用于 SM3 算法的压缩函数,仅 W64,W65,W65,W67 用于 W’60,W’61,


W’62,W’63 的计算。

2.7.2.2SM3 算法的迭代压缩

与 SHA256 一样,对每一组 512bit 的数据组进行 64 次迭代,其流程与 SHA256 一


样,每一轮的迭代主要用到的公式,见式(2.19)至式(2.21):

14
广东工业大学硕士学业论文

for j  0 to 63
SS1  ((A  12)  E  (Tj  j ))  7
SS 2  SS1  (A  12)
TT1  FFj(A , B ,C )  D  SS 2  W j'
TT2  GG j(E ,F ,G )  H  SS1  Wj
D  C
C  B  9 (2.19)
B  A
A  TT1
H  G
G  F  19
F  E
E  P0(TT2 )
endfor
其中 FFj(A,B ,C )和GGj(A,B ,C )的表达式如下:

A  B  C 0  j  15
FFj(A,B ,C )   (2.20)
(A  B )  (A  C )  (B  C ) 16  j  63
A  B  C 0  j  15
GG j(A,B ,C )   
(2.21)
(A  B )  ( A  C ) 16  j  63
与 SHA256 算法一样完成 64 次循环迭代后,会产生新的 A,B,C,D,E,F,G 的值,此
时将新的 A,B,C,D,E,F,G 与内部初始时的 8 个哈希向量初值做异或操作,就会得到本组
512 位输入数据的最终值。其运算过程见式(1.22):

H 0(t )  A  H 0(t 1)


H 1(t )  B  H 1(t 1)
H 2(t )  C  H 2(t 1)
H 3(t )  D  H 3(t 1) (1.22)
(t 1)
H (t )
4
 E H 4

H 5(t )  F  H 5(t 1)


H 6(t )  G  H 6(t 1)
H 7(t )  H  H 7(t 1)

15
第二章 算法原理及验证平台介绍

2.4 本章小结
本章主要是对不同的哈希算法以历史和技术发展的角度进行简要的归纳介绍。包
括详细分析了算法的基本原理,算法的共性和差异,然后就算法在发展的过程中遇到
的安全问题以及解决方案做了详细的介绍。然后,根据项目的需求,本文在芯片中哈希
的硬件实现部分采用 SM3 算法和 SHA256 算法,又因为设计一块 SoC 必然会用到验证
技术,本设计最终会采用 UVM 验证方法学,因此对验证技术的发展状况做了介绍,最
后对 SM3 算法和 SHA256 的算法做了详细的推导和理解。

16
第三章 算法的软硬件及 AHB 总线接口设计

第三章 算法的软硬件及 AHB 总线接口设计


本文是在设计一块兼容国密算法和国际加密算法的芯片时提出得到,该芯片的架
构如图 3-1 所示。主要包括平头哥的 CK802 嵌入式内核,以及 AHB 总线和 APB 总线,
以及常见外设接口,存储和算法单元,设计的目标主要面向物联网信息安全领域。本人
主要负责的是 SoC 系统中 SM3 算法和 SHA256 算法的软硬件设计部分。

ROM

CK802 SDRAM

TRNG
A
H I2C
B
SM2/RSA 总 A UART
线 P
B GPIO
SM4/AES 桥
TIMER

SM3/SHA256
SPI

图 3-1 芯片的整体架构

Figure 3-1 The overall architecture of the chip

3.1 算法的软硬件总体设计方案
在设计本系统以前,首先使用 C 语言用软件实现 SHA256 算法和 SM3 算法。经研
究发现扩展和压缩操作占据了总运行时间的 90%以上。因此,如果在软件中实现扩展
和压缩模块,则加密效率将非常低。此外,考虑到消息长度的可变性,发现很难存储整
个消息,如果在硬件中设计填充和解析功能,则会消耗大量的硬件资源。因此,在设计
中,填充和解析操作用软件来实现,扩展和压缩操作用硬件实现。在软件/硬件划分之
后,确定了 SoC 电路的最终架。
17
广东工业大学硕士学业论文

基于上述,本节提出了总体实现架构,包括嵌入式 CPU,AHB 总线模块,SM3 算


法模块和 SHA256 算法模块以及其他模块,总体架构如图 3-2 所示,CK802 的 CPU 是
该 SoC 的主机部分,用来实现软硬件协同设计中的软件设计,因为 SHA256 算法和 SM3
算法在实际应用中需要硬件加速的部分主要是扩展和压缩部分,填充部分用软件来做。
因此,本文中 CPU 的任务主要是完成 SHA256 算法和 SM3 算法的填充部分,而将
SHA256 算法和 SM3 算法的扩展和压缩部分用 RTL 来实现,在这里将 RTL 实现后的
电路作为本系统的从机,并且通过 AHB 总线,将 SHA256 算法的硬件部分电路和 SM3
算法的硬件部分电路与 CPU 连接在一起,最终设计成一个 SoC,因此在架构层面应该
将加密模块的非标准接口转换为兼容 AHB 总线的接口,才能使整个 SoC 连接起来。
因此,SHA256 算法的硬件部分电路和 SM3 算法的硬件部分电路除了各自的扩展电路
模块,压缩电路模块以及控制模块和结果模块组成,还有 AHB 从接口。在本设计中,
控制模块电路和数据输入/输出模块是分开的,前者主要用于控制 SHA256 算法硬件电
路部分和 SM3 算法硬件电路部分的执行过程。后者由几个子电路模块组成,主要实现
SM3 算法和 SHA256 算法的硬件加密功能,结果模块以 32 位的形式输出加密后的数
据。

控制模块

AHB
Slave
接口
CPU AHB AHB
master接 扩展模块 压缩模块
CK802 口 总线

输出模块

图 3-2 SHA256/SM3 算法的软硬件架构图

Figure 3-2 SHA256 / SM3 algorithm software and hardware architecture diagram

18
第三章 算法的软硬件及 AHB 总线接口设计

3.2 算法的软件设计思路
如上文所述,将 SM3 算法和 SHA256 算法的实现做软硬件划分,数据的填充用软
件来实现,图 3-3 所示,这里运行软件的平台为平头哥的 CPU,型号为 CK802。扩展
模块及压缩模块,以及控制单元和总线接口单元都是用硬件实现。本小结主要介绍算
法软件设计的平台(CPU 的介绍)和软件代码的设计。
平头哥半导体有限公司研发的具有完全自主知识产权的国产嵌入式处理器,采用
16 位、32 位指令混编的 RISC 指令集架构。目前 C-SKY 已经推出首个个嵌入式处理器
系列;CK500 系列、CK600 系列和 CK800 系列[37],下图是 CK802 的架构图。广泛于低
成本,低功耗等物联网领域,CK802 架构图如图 3-3 所示。

32位
指令总线
接口
MPU
Cache
CPU CK802 单元
32位
数据总线
接口

DEBUG接口 VIC 定时器

图 3-3 CK802 架构图

Figure 3-3 CK802 architecture diagram

其架构特征如下:
指令集:平头哥 ISA(32 位/16 位变长指令系统)
通用寄存器:16 个 32 位 GPR
内存保护:0-8 个保护区可选配
乘法器:慢速乘法器、快速乘法器可选配
流水线:2 级流水线
总线接口:双总线(指令总线+数据总线)

19
广东工业大学硕士学业论文

紧耦合 IP:中断控制器、计时器
算法的软件代码部分设计,其功能就是把哈希算法的输入数据经过转换操作,将
输入数据的长度拼凑成 512 位的整数倍。用软件实现的填充操作,如图 3-4 所示。

图 3-4 输入数据填充操作的软件实现代码

Figure 3-4 Software implementation code for input data filling operation

3.3 SHA256 模块硬件设计


SHA256 模块硬件设计的部分,主要包括数据的扩展和数据压缩操作,扩展和压缩
操作,硬件实现的理论基础,主要参考第二章的 2.7 节中公式(2.7)到公式(2.16)。

3.3.1 SH256 算法的硬件的端口信号分析


首先,设计 SHA256 算法的扩展和压缩模块。表 3-1 给出了 SHA256 算法硬件实
现的接口,其中 clk,rst,data_in,crtl 和 round 是输入信号,data_out 为输出信号,clk
信号由 AHB 总线提供,由于该 SoC 设计之初定下的标准是采用全局同步时钟控制,
因此 clk 的工作流程应该是先由外部晶振产生时钟信号,然后提供给 CPU,再由 CPU
通过 AHB 总线去控制 SHA256 算法模块,在电路工作的过程中,上升沿有效。rst 也是
采用全局同步信号,在时钟电路中下降沿有效,CPU 通过 AHB 总线控制 SHA256 算法
单元,data_in 的值由前文所述进行软件填充以后,CPU 通过 AHB 总线发送给 SHA256

20
第三章 算法的软硬件及 AHB 总线接口设计

算法电路,其位宽为 32 位。crtl 由控制单元产生,其用来控制 SHA256 算法的压缩电


路和扩展电路的状态,包括初始化控制状态,执行加密和输出等操作,具体控制逻辑参
考后文控制状态机设计部分,round 信号是用来精确控制 SHA256 算法硬件执行操作的
信号,具体到每一轮操作。而 data_out 信号,则是运算完毕以后,输出数据的通道。
表 3-1 SHA256 算法硬件实现的接口

clk 由 CPU 发出,通过 AHB 总线去控制 SHA256 算法模块,上升沿有效

rst 输入信号,CPU 发送给 AHB 总线,然后控制 SM3 算法单元

ata_in 输入信号,由 CPU 进行杂凑以后,通过 AHB 总线发送给 SM3 算法单元

输入信号,由控制单元产生,其用来控制 SM3 算法单元执行的状态,包括初试


crtl
化,加密,输出等状态

round 输入信号,用来控制实时追踪 SM3 算法执行状态的信号

data_out 输出信号,运算完毕以后,输出数据的通道

Table 3-1 SHA256 algorithm hardware implementation interface

3.3.2 SHA256 模块的 HDL 设计


由于 SHA256 算法的数据填充部分已经由软件部分实现了,其数据的长度为
(N*512bit),现在只需要在硬件上做 SHA256 算法上做数据扩展和数据压缩,数据扩
展和数据压缩模块的功能是将输入数据 data_in 迭代成 256 位的哈希值。
具体的迭代原理前文已经做了详细的介绍,本节的主要内要是对 SHA256 算法的
数据扩展和数据压缩的主要数据通路及模块进行详细的功能介绍介绍并给出设计流程。
图 3-5 所示为 SHA256 算法数据扩展和数据压缩的原理框图,从图中的红色框内可以
看出,在 SHA256 算法的数据扩展和数据压缩部分中主要是数据块扩展模块、迭代压
缩模块以及结果输出三部分。这三部分是 SHA256 算法硬件设计中最核心的部分。为
了提升系统的性能达,在整个设计过程中,需要对整个算法进行一定的优化,才可能提
高整个 SoC 的性能。图,3-6 为第二章中 2.7 节中公式(2.7)到公式(2.14)的 RTL 实
现,图 3-7,为循环迭代过程的 RTL 实现

21
广东工业大学硕士学业论文

控制 操作

寄存器 初始值 择


制 开始 W0
压缩模块

输入数据 512bits
寄存器 结束 扩 W1
压缩模块


W62

压缩模块

状态
完成 W63
寄存器 压缩模块


存 新的初始值 选
器 择


输出数据
256bits 块
寄存器 结果 XOR

图 3-5 SHA256 算法计算模块的原理框图

Figure 3-5 Functional block diagram of SHA256 algorithm calculation module

图 3-6 数据扩展的算法实现

Figure 3-6 Algorithm implementation of data expansion

图 3-7 循环迭代过程的 RTL 实现

Figure 3-7 RTL implementation of the loop iteration process

22
第三章 算法的软硬件及 AHB 总线接口设计

输出环节的部分代码
if(ctrl==2'b11)
begin
data_out[8*32-1:7*32]<=SHA256_result[8*32-1:7*32];
data_out[7*32-1:6*32]<=SHA256_result[7*32-1:6*32];
data_out[6*32-1:5*32]<=SHA256_result[6*32-1:5*32];
data_out[5*32-1:4*32]<=SHA256_result[5*32-1:4*32];
data_out[4*32-1:3*32]<=SHA256_result[4*32-1:3*32];
data_out[3*32-1:2*32]<=SHA256_result[3*32-1:2*32];
data_out[2*32-1:1*32]<=SHA256_result[2*32-1:1*32];
data_out[1*32-1:0*32]<=SHA256_result[1*32-1:0*32];

3.4 SM3 算法的硬件优化及实现

3.4.1 SM3 算法硬件的端口信号介绍


同 SHA256 算法一样,SM3 算法的硬件电路实现方案应该先做扩展和压缩模块,
图 3-5 所示为 SM3 算法硬件实现的接口,其中 clk,rst,m_i,crtl 和 round 和 finish 是输入
信号,而 w_out 为输出信号,clk 信号由 AHB 总线提供,由于这颗芯片的采用的是全
局同步时钟控制,因此 clk 的值首先是外部晶振提供给 CPU,然后 CPU 发送给 AHB
总线,然后通过 AHB 总线去控制 SM3 算法模块,其上升沿有效。rst 低电平有效,与
clk 一样,CPU 发送给 AHB 总线,然后控制 SM3 算法单元,m_i 的值由 CPU 进行杂
凑以后,通过 AHB 总线发送给 SM3 算法单元。crtl 信号由控制单元产生,其用来控制
SM3 算法单元执行的状态,包括初试化,加密,输出等状态,具体的参考控制状态机
设计部分,round 信号是用来控制实时追踪 SM3 算法执行状态的信号。finish 信号则为
控制步骤信号,控制 SM3 模块到底是处于加密状态,还是处于输出状态。w_out 为输
出信号,运算完毕以后,输出数据的通道。

23
广东工业大学硕士学业论文

表 3-2 SM3 算法硬件实现的接口

Table 3-2 SM3 algorithm hardware implementation interface

clk 由 CPU 发出,通过 AHB 总线去控制 SM3 算法模块,上升沿有效

rst 输入信号,CPU 发送给 AHB 总线,然后控制 SM3 算法单元

m_i 输入信号,由 CPU 进行杂凑以后,通过 AHB 总线发送给 SM3 算法单元

输入信号,由控制单元产生,其用来控制 SM3 算法单元执行的状态,包括初试


crtl
化,加密,输出等状态

round 输入信号,用来控制实时追踪 SM3 算法执行状态的信号

finish 控制步骤信号,控制 SM3 模块到底是处于加密状态,还是处于输出状态。

w_out 输出信号,运算完毕以后,输出数据的通道

3.4.2 SM3 算法数据扩展模块的优化


标准方法分析扩展模块:对于扩展模块部分,假设填充过后的消息长度 M 为 512
位。常规地,将 32 位划分的消息 W0,W1,…,W15 以 16 个时钟周期顺序地存储在 16 个寄
存器 W0,W1,…,W15。当每个周期的上升沿到来时,会将一组数据写入相应的寄存器。从
第 17 个时钟开始,当时钟的上升沿到来时,根据第 2 章的 2.7 节给出的公式(2.17),
并且将设置一个新的寄存器 W16 来存储计算的值。即,新寄存器 W16 被设置在第 17 个
时钟并计算其值。直到第 68 个时钟,W67 才会更新。完成第 2 节中给出的等式(2.17)
的计算后,获得了个 W0,W1,…,W67,相当于 64 个字,并且它们占用了 68 个时钟周期。
如果计算 W';在计算所有的 W 之后;(i=0,1,…,67)按顺序使用 64 个新寄存器存储
W'0,W'1,…,W'63,并消耗了 64 个时钟周期。因此,总共使用 68+64=132 个时钟周期和寄
存器。

24
第三章 算法的软硬件及 AHB 总线接口设计

为了减少硬件资源并提高 SM3 的性能,本文采用了任务调度和寄存器优化。提出


的扩展设计如图 3-8 所示。根据 SM3 算法的原理分析,可以直接获得第二个 64 轮迭代
所需的数据,而不必等到第一个 68 轮迭代完成之后。它只需要在第一个 68 轮迭代的
第 4 轮迭代后开始计算。也就是说,可以将第二个 64 轮迭代嵌套到第一个 68 轮迭代
中,并从其第五轮迭代开始。这样,仅需要 68 轮迭代或 68 个循环。由于寄存器将带
来 1 比特的面积和功耗开销,为了进一步降低功耗,采用寄存器多路复用方法优化并
减少寄存器数量。

W0' W1' ... W11' W12'

...
W0 W1 W2 W3 W4 ... W7 ... W10 W11 W12 W13 W14 W15 W

<<<15

<<<7

P1

压缩函数 ABCDEFGH

W13' W14' ... W63'

图 3-8 SM3 算法的优化扩展设计

Figure 3-8 Optimized expansion design of SM3 algorithm

为了更新 Wi,仍然使用寄存器 W0,W1,…,W15 来存储扩展消息 M,然后设置一个寄存器


W 来存储当前值 Wi,然后在每次循环之后将 Wi 的值分配给 Wi-1 计算。例如,在计算
W16 之后将结果直接分配给 W,然后在计算 W17 时,所有寄存器的值都分配给前一个寄
存器。W 的值分配给 W15;W15 的值被分配给 W14,W0 的值被丢弃,该方法可以将原来
的 68 个寄存器减少到仅 17 个寄存器(W0,W1,…,W15,W)而不会影响计算结果。由于不
是所有的 W 必须保留,某些中间变量未保存。Y 和 P1 作为中间变量直接参与计算,不
需要保存在寄存器中。为了更新 W’j,从第 2 节给出的公式(2.18)可以看出 W’j 的计算
结果;仅与 W 有关。在上一步中简化了寄存器之后,Wi 只需保留当前计算的值和 16 个
相邻字的值。因此,计算 W’j 时,对应被预定的 Wi 必须执行。例如,当计算 W'0 的值

25
广东工业大学硕士学业论文

时,需要 W0 和 W4。W4 的值在第 4 个周期分配,然后在下一个周期读取 W5 的值,并


可以计算 W'1。在第 15 个周期,全部读取 W0,W1,…,W15 的值,并计算 W'11 的值。从第
16 个周期开始,发现 Wi;开始将结果存储在 W 的寄存器中。只需要使用由当前时钟
周期计算得出的 W’j 的值和 Wj+4 的值。在这种情况下,当前时钟周期的计算值(Wj+4)
始终存储在寄存器 W 中。因此,采用寄存器缩减方法获得 Wj。从第 16 个时钟周期开
始,发现 W0,W1,…,W15 的值将在每个周期向左移动。从 W'12 的开头开始,每个随后的
W'j=W12⊕W(j>=12)。

3.4.3 SM3 算法压缩函数模块的优化


压缩模块是 SM3 的核心,其主要功能是迭代和压缩的实现,这些迭代和压缩会产
生大部分关键路径延迟。SM3 的迭代过程包括逻辑运算,例如 XOR,ROL 和加法运算
(ADD)。XOR 和 ROL 的延迟几乎可以忽略不计,而加法运算具有很大的延迟效。因
此,在每次迭代,串行加法的最大数量决定了延迟的大小。将串行加法运算次数最多的
计算路径定义为关键路径。为了减少关键路径延迟和寄存器数量,采用了任务调度和
关键优化。压缩的优化设计如图 3-9 所示。

Aj-1 Bj-1 Cj-1 Dj-1 Ej-1 Fj-1 Gj-1 Hj-1 Mj-1 Nj-1

<<<12
FFj <<<19
+
Tj GGj
+ <<<j
<<<7 <<<9
SS1 +
TT2 + Wj+1
SS2 +
P0
+ +
Wj+1
+
TT1

Aj Bj Cj Dj Ej Fj Gj Hj Mj Nj
图 3-9 SM3 算法的压缩优化设计

Figure 3-9 Compression optimization design of SM3 algorithm

26
第三章 算法的软硬件及 AHB 总线接口设计

从图 3-9 可以看出,A 和 E 的计算路径需要完成五个加法器操作。因此,A 和 E 的


计算路径是关键路径。一次迭代的总延迟是五次加法的延迟之和。显然,压缩过程需要
64 次循环迭代,这又消耗了 64 个周期,总的延迟将更大。在设计中,增加了两个新的
寄存器 M 和 N 来减少 A 和 E 的加法运算,并且使 Mj=Dj+W'j+1,Nj=Hj+Wj+1 将 A,B,
C,D,E,F,G,H,M 和 N 的初始值设置为 A-1,B-1,C-1,D-1,E-1,F-1,G-1,H-1,
M-1 和 N-1。由于引入了中间变量 M 和 N,因此需要在迭代过程开始之前执行 M-1=D-

1+W'0 和 N-1=H-1+W0 的初始加法运算。因此,在压缩迭代之前消耗了一个时钟周期。


值得注意的是 Mj 和 Nj 的计算在关键路径上是与 Aj 和 Ej 平行的。
通过分析第二章中 2.7 节中的公式(2.19),可以得出当前时钟周期内的 TT1 的计
算只需要 W'j 的值即可。因此,W'j 和 TT1 可以同时计算。总而言之,压缩可以预先嵌套
在扩展过程中,并且可以从扩展的第六次迭代开始,最终仅增加两个时钟周期。此外,
通过任务调度的优化,扩展和压缩模块可以共享同一控制器产生的控制信号,从而降
低了控制电路的复杂性和开销。result 模块主要实现从 256 位到 32 位格式的并行转换
输出,并通过计数器控制转换过程,需要 8 个周期;完成转换后,发现 finish=1,表示
阅读已完成,下一条消息可以加密。因此,在增加两个寄存器的情况下,只需 70 个周
期即可完成扩展和压缩操作。
其优化后的核心代码如下:
assign Wj_0 = W0 ^ W7 ^ { W13[16:0],W13[31:17] };
assign W16 = Wj_0 ^ { Wj_0[16:0],Wj_0[31:17] } ^ { Wj_0[8:0],Wj_0[31:9] } ^
{ W3[24:0],W3[31:25] } ^ W10;
assign SS1_0 = {A[19:0],A[31:20]} + E + Tj;
assign FF_0 = A^B^C; // 0 <= j <= 15 FFj(X,Y,Z) function
assign FF_1 = (A&B)|(A&C)|(B&C); // 16 <= j <= 63 FFj(X,Y,Z) function
assign GG_0 = E^F^G; // 0 <= j <= 15 GGj(X,Y,Z) function
assign GG_1 = (E&F)|(~E&G); // 16 <= j <= 63 GGj(X,Y,Z) function
assign FF = (Round < 'd21) ? FF_0 : FF_1 ;
assign GG = (Round < 'd21) ? GG_0 : GG_1 ;
assign TT1 = FF + D + SS2 + Wout63;
assign TT2 = GG + H + SS1 + Wout67;

27
广东工业大学硕士学业论文

assign next_E = TT2^{TT2[22:0],TT2[31:23]}^{TT2[14:0],TT2[31:15]};


assign next_G = {F[12:0],F[31:13]};
3.5 AHB-SM3/AHB-SHA256 从接口设计

3.5.1 AHB 总线接口介绍


AHB 总线的信号包括 HADDR,HWDATA,HRDATA,HSEL 等。基本传输模式
下的 AHB 协议序列如图 3-10 和 3-11 所示。在读取模式下,一旦主机在第一个上升沿
之后驱动地址和 HWRITE 信号,从机将在第二个上升沿发送数据,而主机将在第二个
上升沿发送数据。在第三个上升沿采样数据。在写模式下,主机在第一个上升沿之后驱
动地址和 HWRITE 信号,并在第二个上升沿输出相应的数据;从机将分别在第二个和
第三个上升沿采样地址和数据。

图 3-10 AHB 总线的读数据时序图

Figure 3-10 AHB bus read data timing diagram

图 3-11 AHB 总线的写数据时序图

Figure 3-11 AHB bus write data timing diagram

3.5.2 控制器模块状态机的分析与设计

28
第三章 算法的软硬件及 AHB 总线接口设计

控制器模块采用标准的三段有限状态机(FSM),三段 FSM 结构可以消除毛刺,


这更有利于优化代码并方便用户设置适当的时序约束结构,利用状态机可以生成并提
供控制信号(ctrl,结束和计数信号)。ctrl 是过程状态信号,包含四个状态:空闲,写
入,加密和读取。
空闲状态:如果输入信号 Write 设置为 1,则 SHA256 算法进入写状态。
在写状态:并将数据从 y_in 写入数据寄存器。数据加密完成或读取最后一个 32 位
数据时,会将 finish 设置为 1。
在这种情况下,如果将 Resualt 设置为 1,则模块进入读取状态并以 32 位格式输出
当前操作的结果。应当注意的是,每当对 512 位数据进行加密或读取 256 位结果后,
状态将恢复为空闲状态,并执行初始化操作以确保下一个加密过程中数据的准确性。
如果 Read 等于 0,则模块保留当前的运算结果,并进入空闲状态以等待下一个数据块。
此外,countout 是计数器的输出控制信号,用于控制其他模块的过程,例如扩展,压缩
和整个加密迭代过程。FSM 状态转换图如图 3-12 所示。

Write=0
Write=0 Read Read=1
Read=0 Finish=1
Finish=1
Write=0
Write=0 Read=0
Write=0 Read=1
Read=0 Finish=0
Finish=0
Finish=0
Idle Encryption
Write=0
Read=0
Finish=1
Write=1
Read=0
Write=0
Finish=0
Write

图 3-12 FSM 状态转换图

Figure 3-12 FSM state transition diagram

3.5.3 控制器模块设计流程

29
广东工业大学硕士学业论文

本节将用 Verilog HDL 来实现 SHA256/SM3 算法硬件部分的控制模块,该模块在


整个设计的过程中,通过接收 AHB 总线下发的指令来解析出相应的控制指令,然后将
解析出来的指令发送给 SHA256 算法和 SM3 算法的 RTL 实现部分。其工作过程为将
软件平台下发的指令通过逻辑控制电路及其译码器电路就行解析,然后通过数据分发
模块和转换电路模块,去输出控制控制寄存器和输入寄存器,以及读取状态寄存器和
输出寄存器的值通过转换电路,将值返回给 CPU,控制的逻辑图如图 3-13 所示。
AHB-SM3/AHB-SHA256 接口是基于 AHB 总线时序设计的,实现了主机与从机以
及四种功能寄存器之间的数据传输。控制逻辑读取 AHB 总线上的各种信号并通过内部
逻辑生成控制信号,以控制地址解码器,数据分配器和多路复用器。这四个功能寄存器
主要用于计算,控制,数据交互和状态标志,它们可以灵活地控制加密硬件模块并获取
其当前状态以进行软件调试。最后,结合一个 32 位低功耗嵌入式 CPU,采用 AHB 总
线将 SHA256 算法模块和 SM3 算法模块集成到 SoC 中。

控制寄存器
控制逻辑
数据分发模块
电路
输入寄存器

状态寄存器

译码器 转换电路模块
输出寄存器

图 3-13 SHA256/SM3 算法的控制的逻辑图

Figure 3-13 The logic diagram of the control of the SHA256 / SM3 algorithm

3.5.4 控制器模块的接口信号及其 HDL 设计


根据分析,因为 SHA256 算法和 SM3 算法的扩展和压缩模块的端口信号存在一致
性,并且二者计算循环的轮数也一样,在这里将 SM3 和 SHA256 算法的控制单元进行
复用,表 3-3 所示为控制器模块的接口信号,其中 clk,RST,W,R 是输入信号,而 count_out,
30
第三章 算法的软硬件及 AHB 总线接口设计

finish,crtl 为输出信号,clk 信号由 AHB 总线提供,由于这颗芯片的采用的是全局同


步时钟控制,因此 clk 的值首先是外部晶振提供给 CPU,然后 CPU 发送给 AHB 总线,
然后通过 AHB 总线去控制 SHA256 算法模块,其上升沿有效。RST 低电平有效,与 clk
一样,CPU 发送给 AHB 总线,然后控制 SHA256 算法单元,W 和 R 是由 CPU 发送的
读写信号,通过用户操作地址来出发 W 和 R,AHB 总线同一时刻只能执行读或写操
作,count_out 是用来向扩展和压缩模块精确提供,循环计算次数的操作,finish 是用来

接口名称 功能描述

输入信号,clk 的值是由 CPU 发送给 AHB 总线,通过 AHB 总线


clk
去控制 SHA256 和 SM3 算法模块,其上升沿有效。

输入信号,CPU 发送给 AHB 总线,然后控制 SHA256 算法单


rst
元。
W 输入信号,发送的写信号,由 AHB 总线下发。
R 输入信号,发送的读信号,由 AHB 总线下发。
输出信号,用来向扩展和压缩模块精确提供,循环计算次数的操
count_out
作。

finish 输出信号,用来关闭运算的,使整个 IP 处于 IDLE 状态。

crtl 输出信号,主要是用来控制算法运算步骤的信号。

关闭运算的,使整个 IP 处于 IDLE 状态,ctrl 信号主要是用来控制算法运算步骤的信


号。
表 3-3 控制器模块的接口信号

Table 3-3 the interface signals of the controller module

其核心代码如下:
module SM3_SHA256_Controller (clk , rst , W , R , finish , count_out , ctrl);
input clk , rst , W , R ;
output finish ;
output [6:0] count_out ; // calculat the times of extend&compress&writeresult
output [1:0] ctrl ;

31
广东工业大学硕士学业论文

reg finish ;
reg [6:0] count_out , count ;
reg [1:0] next_state , current_state;
wire [6:0] count_plus ;
parameter idle='b00; //idle state, no operation
parameter write = 'b01; // write register
parameter encryption = 'b10; // encryption only
parameter read = 'b11; // read register
assign count_plus = count + 'd1 ; //the current state is assigned to output wire
assign ctrl = next_state ; // counter ,to control the process of the sm3/SHA256
algorithm
3.6 本章小结
本章是全文中的核心部分,先是交代了算法软硬件协同设计的原由,然后做软硬
件划分,然后交代硬件设计的流程,然后对接口进行了详细的介绍,接着就是对 SHA256
算法硬件实现方面给出了详细的说明,然后详细的介绍了 SM3 算法的优化过程,随后
给出了控制单元的逻辑分析,画出了状态转移图以及代码说明,最后给出了 AHB-
SHA256/SM3 接口设计的思路以及实现的过程。

32
第四章 UVM 验证平台的搭建

第四章 UVM 验证平台的搭建


4.1 UVM 验证技术简介

4.1.1 UVM 的演变


本节深入研究 UVM,并介绍不同的功能,phase,事务级别建模(TLM),语义,
测试平台组件(UVC)等。UVM 的初始版本于 2011 年 2 月 28 日发布,此后 UVM 成为
独立的验证方法。从那时起,UVM 进行了一些更改以修复错误并添加功能。UVM1.0
的一些重要功能是:
① 测试结束异议机制,可提高模拟结束时清理的便利性。
② 回调机制将改变现有行为。
③ 报告捕获器,以增强报告处理能力。
④ 心跳机制,用于监视 UVM 组件的寿命。
⑤ 寄存器级建模以增强对存储单元的验证。
⑥ TLM 接口 FIFO,资源数据库。
2014 年 6 月左右,发布了 UVM2.0,功能得到了一定的改进,这些重要的功能是:
① uvm_sequence_base::starting_phase 被 set_starting_phase 和
get_starting_phase 替换,可以有效防止在运行期间修改 phase。
② 添加了 uvm_sequence_base::s set_automatic_phase_objection,用来避免
显式调用 raise_objection 和 drop_objection。
③ 增 加 了 新 的 方 法 , 如 : stop_request , stop_global_request ,
set_global_timeout,uvm_test_done,do_kill_all 等。
如今,SystemVerilog 和 UVM 的验证技术已经从 IP 的 Block 级,到 SOC 级的发
展。经过多年的实践,工程师已经适应 UVM 环境。尽管 UVM 验证平台相对来说比较
复杂,但其提供环境的灵活性却很高用于复杂的验证项目。甚至引入了一些验证 IP
(VIP),在创建 UVM 测试平台时变得非常方便。

33
广东工业大学硕士学业论文

4.1.2 UVM 的调度语义


一个时钟周期被划分为多个区域,在这些区域中安排了几个不同的事件。从 Verilog
调度语义上改进了 UVM Schedul。UVM Schedul 提供了与 DUT 的交互。了解 UVM
Schedul 是以了解 UVM 的核心,图 4-1 是 UVM Schedul 调度中的不同区域的介绍。

Prev Time Slot Next.Time Slot


PREPONE

Pre-active

ACTIVE

INACTIVE

Pre-NBA

OBSERVED

Pre-observed

REACTIVE

RE-INACTIVE

POSTPONED

图 4-1 UVM 的 Schedul 示意图

Figure 4-1 Schematic diagram of UVM Schedule

Preponed 区域(Preponed Region):断言中使用的变量值在一个时隙的 Preponed 区


域被采样,并且断言在 Observe 区域被计算[39]。
Pre-Active 区域(Pre-Active Region):Pre-Active 区域用于 PLI(编程语言接口)回
调机制。它允许用户代码在评估活动区域之前读取和写入值。
Active 区域(Active Region):在相应的时钟周期内需要评估的所有事件都放置在
此区域中。可以按以下顺序执行:
① 执行阻塞分配,连续分配。
② 执行非阻塞分配的右侧(right-hand side,简称:RHS)并安排更新。在
非阻塞分配事件区域(Non-blocking Assignment,简称:NBA)中。
34
第四章 UVM 验证平台的搭建

③ 执行$finish 和$display 命令。


Inactive 区域(Inactive Region):在该区域中,放置了活动事件之后需要评估的所
有事件。#0 阻止分配放置在该区域中。
非阻塞分配区域(Non-Blocking Assignment Region):在 active 区域中评估的非阻
塞分配的 RHS 会更新到该区域的左侧((left-hand side,简称:LHS)由于所有非阻塞
分配都需要彼此独立,因此该区域解决了该问题。
观察区域(Observed Region):该区域的功能是评估并发断言。并发断言所需的值
在优先区域中采样。产生此区域的原因是,在每个时钟周期应评估一次断言。根据断言
是否通过的结果,在反应区域中安排相应的事件。
反应区(Reactive Region):该区域分配给程序块中的事件,由于此区域放置在活
动和非活动区域之后,因此可以用来避免竞争状况。避免竞争状态的另一种方法是使
用时钟块,它会引起时钟偏移。
推迟区域(Postponed Region):$strobe 和$monitor 命令在此区域中执行。最终更新
的值会反映出来对应的时隙。该区域还用于收集功能覆盖范围。

4.1.3 UVM 的组成


UVM 以 SV 类库为基础开发的验证框架,因为其组件具有可重用和标准化处理的
原因,可以大幅度提升验证工程师的效率,因此各大公司的验证工程师,利用其具有标
准化层次结构和接口的功能的特点来搭建验证环境。单的说,UVM 基本上是 SV 的一
个库函数,在开发的过程中可以调用大量的类,利用 OOP 的特点,使得整个平台的搭
建过程中具有类的特性,比如:继承和重载。同样,类似 JAVA 这种高级语言,UVM
也使用 Factory 机制注册和管理其成员类。

35
广东工业大学硕士学业论文

一个典型的 UVM 验证平台如下图 4-2 所示。它由以下 UVC 构成: DUT(待验证


模块)、driver(驱动模块)、sequence(序列模块)、sequencer(定序器)、monitor(监视
器、)reference model(参考模型,简称:RFM)、scoreboard(记分板)。将各个各组件
最终组合成一个 agent 形式,然后将 agent 组合成 env 的形式。而所有组件就可以构成
一个验证环境。

env
sequence

referencemodel scoreboard

sequencer i_agt O_agt

driver monitor
monitor

DUT

图 4-2 典型的 UVM 验证平台

Figure 4-2 Typical UVM verification platform

验证平台会根据 phase 机制自动运行,其流程为:sequence 产生带约束的随机激励


通过 sequencer 发送到 Driver。由 Driver 将激励发送到 DUT 上,并通过 Monitor 来检
测 DUT 的输出信号。与此同时,将 case 用同样的方法发送到 RFM,最终将输出的来
的值都记录在 scoreboard 上(两个 agent 分别称为 i_agt 和 o_agt),将最终的验证报告,
以日志的形式打印出来。下面将上述 UVM 验证平台里面的常用组件(UVC)进行简单的
介绍:
UVM 验证平台里面的常用 UVC
sequence:UVM 验证方法学中的 sequence 机制,分为 sequence(序列模块)和
sequencer(定序器)。sequence(序列模块)是用来对验证平台产生激励的部件,一般而
言,用于验证的激励是带约束的随机数据,在这里他的 TLM(传输机模型 Transaction
Level Modeling)数据(transaction)由 sequence(序列模块)产生。在整个验证的过程

36
第四章 UVM 验证平台的搭建

中,需要大量的 case,这就需要不同约束条件的随机数据,而产生这些数据是通过定义
不同的 sequence,这样就能实现多个带有不同约束条件的随机数据。Sequencer 是一个
通道,用来启动 sequence 产生的 TLM 数据包,然后将其发送到 driver。很多时候把单
个 sequence 比作一颗子弹,产生一组 transaction,sequencer 是弹夹,sequencer 用来释
放一个个 sequence。本来 sequence(序列模块)不属于 UVM 平台的组件,但是,它与
sequencer(定序器)有密切的关系:sequence 是通过 sequencer 将激励发送到 driver 的;
如果只有 sequencer 而没有 sequence,sequencer 只是一个空的通道,在整个验证平台中
不会有任何作用,同样,只有 sequence 而没有 sequenceer,sequence 无法被发送到 driver。
所以只有同时拥有 sequence 和 sequencer,才能使 sequence 机制工作起来,而 sequencer
是属于 UVC,所以一般会把 sequence 和 sequencer 一起介绍。在这里介绍 sequence 机
制,所以就把二者一起介绍了。
driver(驱动):Driver 在 UVM 验证平台的地位十分重要,driver 的主要职责是处
理 sequencer 发送过来的数据,使其转换为 DUT 端口信号的形式,通过虚拟接口(VIF)
驱动到 DUT 中。
monitor(监视器)机制:monitor(监视器)主要是监测和采集经过 DUT 的数据,
以及实现端口与 TLM 的数据之间转换。与此同时,它将采集到的数据记录起来,最后
通过仿真软件以日志的方式打印出来。
reference model(参考模型):reference model(简称:RFM)是 UVM 验证平台中
相对来说比较复杂且重要的组件,UVM 验证的实质就是自动比对带约束的随机数据通
过 DUT 的输出与 RFM 的输出这样一种机制,可以大大的提升验证的效率,通过判断
二者的结果是是否一致,进而锁定 DUT 设计的正确性。RFM 一般是模拟算法模型,比
如:用 C 语言来实现 Verilog 描述的功能。
scoreboard(计分板):scoreboard 是 UVM 验证平台用于功能验证收集结果的核心
部件,可以自动地比对带约束的随机数据通过 DUT 的输出与 RFM 的输出和信息并打
印出来,若两边的数据是一致的,则 DUT 的设计,在功能上满足要求,若数据不同,
则表示设计在功能上不能达到预期,需要改设计。scoreboard(计分板)可以使从工程
师能够从繁琐的波形数据去发现 DUT 是否存在 BUG,变成从直观的数据来看 DUT 是
否存在 BUG。

37
广东工业大学硕士学业论文

agent(代理):UVM 平台中一般将与 DUT 的一侧相连的 driver 和 monitor 命名为


i_agent,与 monitor 输出一侧相连的命名为 out_agent。
environment(验证环境):environment 将验证平台中的各个 UVC 封装起来,然后
进行同一管理与例化,这有利于验证平台的可重用。
testc ase(测试用例):对于一个验证平台而言,不可能仅仅是用一个 testcase 就能
完成的,往往对应着很多的 testcase,而不同 testcase 是靠不同的 sequece 体现出来的,
UVM 选择不同的 testcase 实现将大量的带约束的随机激励传输到 DUT 上。
test top module:test top module 不是 UVM 验证平台的组成部分。它用来实例化
DUT,和启动 UVM 验证平台的验证。

4.1.4 UVM 树
UVM 验证平台的主要结构如图 4-3 所示,各个 UVC 都是由 uvm_component 派生
来的,UVM 树的顶层是 top module 单元,下面就是 testcase,testcase 是继承了
uvm_component 的 uvm_test,然后是 env,env 是从 uvm_env 继承过来的,记下来是
agent,scoreboard,diriver,monitor 等 UVM 分别继承了 uvm_agent,uvm_ scoreboard,
uvm_ diriver,uvm_monitor,其功能描述,前文已经做了详细的介绍,下面是 UVM 树
在实际运用过程中的结构。

tb_top
top module

testcase
uvm_test

env
uvm_env

i_agt scoreboard referencemodel o_agt


uvm_agent uvm_scoreboard uvm_componet uvm_agent

sequencer monitor driver monitor


uvm_sequencer uvm_monitor uvm_driver uvm_monitor

图 4-3 UVM 树的结构图

Figure 4-3 UVM tree structure

38
第四章 UVM 验证平台的搭建

4.1.5 UVM 的 phase 机制


UVM 验证平台利用 phase 机制来管理平台内各个 phase 的运行顺序,UVM 的 phase
又分为 function phase 和 task phase,其参照的标准是根据是否消耗仿真时间来确定的。
常见的 function phase 如 build_phase,connect_phase 等,常见的 task_phase,如 run_phase
等,如图 4-4 所示给出了 phase 的结构分布图。
build_phase
connect_phase
end_of_elaboration_phase
start_of_simulation_phase
pre_reset_phase
reset_phase
post_reset_phase
pre_configure_phase
configure_phase
Function_phase Task_phase
post_configure_phase
pre_main_phase
main_phase
post_main_phase
pre_shutdown_phase
shutdown_phase
post_shutdown_phase
extract_phase
check_phase
report_phase
final_phase

图 4-4 UVM 的 phase 的结构分布图

Figure 4-4 UVM phase structure distribution diagram

4.1.6 UVM 的 objection 机制


保证平台按照验证工程师的意愿来工作,UVM 验证平台利用 objection 机制来控
制验证平台里面的各个 phase 开启和关闭。平台开启:raise_objection;平台关闭:

39
广东工业大学硕士学业论文

drop_objection,平台中的 phase 在运行之前,都要先运行 raise_objection,然后 phase 内


的代码顺序执行,直至运行到 drop_objection,验证平台关闭。

4.1.7 UVM 的通信机制


UVM 的 TLM 通信机制提供了三类端口供各个 UVC 通信,分别是 PORT 型
EXPORT 型和 IMP 型。通信过程种,一般情况下:将动作发起者称为 producer,动作
的响应者成为 consumer,前者用 PORT 端口;后者用 EXPORT 端口;PORT 端口用
来定义传输 Transaction 的方法,EXPORT 端口用来实施前者定义的方法。IMP 端口
一般连接 EXPORT 端口,用来存储 Transaction。在通信开始的时候,producer 和
consumer 端口定义的方法都会被调用,用来完成传输 Transaction。
4.2 算法功能验证的 UVM 平台搭建
本节描述了如何为 IP 级验证开发 UVM 环境,IP 级验证是验证过程中的低抽象级
别。SHA256 算法和 SM3 算法是两个不同的 IP 分别作为 DUT 来验证其功能。将介绍
UVM 框架的环境组件以及 DUT/UVM/C 模型之间的流程。对于 IP 级别验证,使用了
通用 UVM 框架,它由多个 sequence、sequencer、driver、monitor、scoreboard 组成。在

TOP
ENV

Scoreboard
Sequencer 1

...
Sequencer 2
sequencer reference
model
Sequencer n
monitor1 monitor2

driver

Interface (vif)

DUT(SHA256/SM3)

40
第四章 UVM 验证平台的搭建

“run_phase”期间,UVM 持续与 DUT 和参考模型交互,并比较仿真结果。使用 phase 来


控制 UVM 的开启和关闭。其框架如下图 4-5 所示。
图 4-5 SHA256/SM3 的 UVM 验证平台框图

Figure 4-5 Block diagram of UV256 verification platform for SHA256 / SM3

4.2.1 UVM 验证环境的搭建流程

流程始于随机化的输出,结束于将输出与预期结果进行比较。UVM 以自上而下的
方法工作,在 uvm_test 的 sequencer 上启动 sequence。sequence 通过 sequencer 发送到
driver,同一时间只能运行一个。为了控制这一点,使用了 virtual sequence,它决定了
sequence 将在何时运行。virtual sequence 已配置使用优先级,每个 sequence 都具有一
定级别的优先级。配置好 sequence 以后就开始向 driver 发送随机值。driver 和 sequence
使用 seq_item_port 类进行连接。它们都在 get_next_item,item_done,get,put 上工作,
用来等待事务完成。driver 使用从 sequence 生成的随机值驱动 DUT。
monitor 监视 DUT 的端口并捕获每个有效的事务。这消除了不必要的低级抽象噪
声。一个 monitor 可以访问参考模型以生成预期结果。这是使用 DPI 库完成的,该库支
持在 SystemVerilog 和 C 语言之间进行事务处理。两个 monitor 都将 DUT 输出和参考
输出发送到分析端口。记分板连接到对这些值进行采样的分析端口的另一端。使用系
统方法 raise_objection 和 drop_objection 同步整个流程。一旦 drop_objection 开始执行,
则仿真就结束了。
在接口中定义了断言,可直接访问输入/输出。断言在仿真期间在“run_phase”阶段
并行运行。coverage group 包括覆盖点(输入和输出),以监视位的切换。coverage group
还提供代码覆盖率,通过代码的覆盖率可以精确的知道,整个验证过程需要执行多少
代码。
本次搭建好的 UVM 验证平台可以同时验证 SHA256 和 SM3,这在功能上可以复
用,Testbench 进行了修改,以驱动两个不同的 IP。其中一个有趣的是,这两个 IP 相互
独立地被驱动,采样和验证。Systemverilog Fork 可以方便地执行并行任务。
sequence 和 sequencer:UVM_Sequence 是基类,可以扩展以定义 DUT 的测试
sequence 流,sequence 用于产生验证平台的 transaction(是 uvm_sequence_item),sequence
继承了 uvm_component 中的 uvm_sequence,在此,分别为 SHA-256 和 SM3 定义了 5

41
广东工业大学硕士学业论文

个不同的 testcase。完成了 factory 注册,将其注册在了 UVM 的内部。每个 DUT 都有


自 己 的 sequencer , 一 次 可 以 在 其 上 运 行 一 个 sequence 。 使 用 “set_arbitration
(UVM_SEQ_ARB_USER)”在 Sequence 之间进行仲裁。从五个 sequence 中选择一个
sequence。根据作为参数给出的优先级选择 sequence。一旦高优先级 sequence 完成,就
选择下一个 sequence。为了实现这一点,定义了多个扩展 UVM_sequence 类的 sequence。
定义了顶层 virtual Sequence,其中实例化了实际的多个 sequence 并分别创建了对象。
如上所述,定义了一个 sequencer。sequencer 是 sequence 和 driver 之间的中间连接。
Sequencer 和 driver 之间的连接是静态的,使用 uvm_seq_port 连接。sequencer 和 sequence
之间的连接是动态的,并且在运行期间会根据 virtual sequence 内部的逻辑而变化。在
这种情况下,优先级用于在 virtual sequence 中的多个 sequence 之间切换。在仿真时间
的任何时候,一个 sequence 都通过 sequencer 连接到 driver。
核心部分的伪代码如下:
定义随机数
class SHA256_SM3_transaction extends uvm_sequence_item;
virtual SHA256_SM3_interface vif;
constraint str_len {a.size()==56;}
constraint temp_str_asc_II {foreach (a[i]) a[i] inside {[48:57],[65:910],[97:122]};}
如下分为例化 sequence 以及注册,核心部分的伪代码如下:
class SHA256_SM3_sequence extends uvm_sequence#(SHA256_SM3_transaction);
`uvm_object_utils(SHA256_SM3_sequence)
req=SHA256_SM3_transaction::type_id::create(.name("req"),.contxt(get_full_name()));
start_item(req);
assert(req.randomize());
finish_item(req);
endtask:body
Driver:driver 是用于 UVM 平台与 DUT 交互的,在本文中的功能是将 Sequence
中的 transaction 一条一条的发送给 DUT 的输入端口。Driver 继承了 uvm_component 中
的 uvm_driver。driver 用于驱动两个 DUT。driver 使用 Sequence 中生成的随机数据来
驱动 DUT。换句话说,driver 是 UVM 环境的核心,它负责从 Sequence 中提取随机数

42
第四章 UVM 验证平台的搭建

据并驱动 DUT,也就是向 SHA256 算法模块/SM3 算法模块中发送数据,并通过 monitor


收集输出。driver 和 Sequence 之间的通信通过 UVM_seq_port 进行。像 get_next_item 这
样的方法很少,它可以从 sequence 和 item_done 中获取下一个随机值,这意味着事务
已完成。很少有非阻塞方法,例如:get(),put(),当 1 个变量需要多个随机值时,
它们会很方便。driver 之间的通讯 DUT 通过接口发生。驱动程序使用可以通过
UVM_Config_DB 方法传递的 virtual interface 访问物理接口。其设计流程为:本文是在
SHA256_SM3_driver.sv 文件中完成了相关设计,先是完成 factory 注册,然后进行端口
例化,在 build_phase,最后再 run_phase。
核心部分的伪代码如下:
先利用 DPI 接口引入 RFM,再注册。
import "DPI−C " context function string cscript(input string str_i,output string str_o);
`uvm_component_utils (SHA256_SM3_driver)
引入虚拟接口:
virtual SHA256_SM3_interface vif;
build driver 的 phase 以及 run driver 的 phase 如下:
void'(uvm_resource_db#(virtual SHA256_SM3_interface)::read_by_name
(.scope("ifs"),.name("SHA256_SM3_interface"),.val(vif)));
endfunction:build_phase
function string get_str();
task run_phase(uvm_phase phase);
Monitor:Monitor 监视来自 SM3 和 SHA-256 的输出。它为每个有效 transaction 收
集 DUT 的输出。这就是 UVM 成为事务级建模的地方,而忽略了来自 DUT 的低级抽
象噪声。收集的值使用 Analysis_port 发送到记分板,记分板对此进行了讨论部分。另
一个监视器中嵌入了参考模型。 该参考模型只是用于生成期望值的 C 模型。该监视器
监视每个有效事务对 DUT 的输入,并将相同的输入发送给参考模型嵌入其中。收集参
考模型的输出,并将其发送到记分板进行比较。
核心部分的伪代码如下:
注册:
`uvm_component_utils(SHA256_SM3_monitor_before)

43
广东工业大学硕士学业论文

建立 build_phase 以及 run_phase。
void'(uvm_resource_db#(virtual
SHA256_SM3_interface)::read_by_name(.scope("ifs"),.name("SHA256_SM3_interface"),.v
al(vif)));
mon_ap_after=new(.name("mon_ap_after"),.parent(this));
transactionclassfields
task run_phase(uvm_phase phase);
req=SHA256_SM3_seq_item::type_id::create(.name("req"),.contxt(get_full_name()));
agent:agent 提供了包装 sequencer,driver 和 monitor 的环境。在这里构建并连接组
件。agent 保留分析端口,该端口已连接到 Monitor 的分析端口。分析端口的另一端连
接 到 scoreboard 。 agent 的 作 用 是 把 driver 和 monitor 连 接 起 来 。 agent 继 承 了
uvm_component 的 uvm_agent,在 uvm_component_utils 中完成 factory 注册。
核心部分的伪代码如下:
agent_ap_before=new (.name ("agent_ap_before") ,.parent (this) ) ;
agent_ap_after=new (.name ("agent_ap_after") ,.parent (this) ) ;
sequencer=SHA256_SM3_sequencer::type_id::create (.name ("sequencer"),.parent
(this) ) ;
driver=SHA256_SM3_driver::type_id::create (.name ("driver") ,.parent (this) ) ;
SHA256_SM3_mon=SHA256_SM3_monitor::type_id::create(.name("SHA256_SM3_
mon") ,.parent (this) ) ;
driver.seq_item_port.connect (sequencer.seq_item_export) ;
SHA256_SM3_mon.mon_ap_before.connect (agent_ap_before) ;
SHA256_SM3_mon.mon_ap_after.connect (agent_ap_after) ;
scoreboard: scoreboard 板是比较和显示结果的组件。monitor 通过 agent 的析端口将
值发送到 scoreboard 板。scoreboard 获取 DUT 和 RFM 的这些值,将它们进行比较并更
新测试结果。内部 scoreboard 每个中都有 4 个 FIFO 从 DUT 和 RFM 中收集值。这消除
了两个结果之间的同步问题。
核心部分的伪代码如下:
sb_export_before=new ("sb_export_before",this) ;

44
第四章 UVM 验证平台的搭建

sb_export_after=new ("sb_export_after",this) ;
before_fifo=new ("before_fifo",this) ;
after_fifo=new ("after_fifo",this) ;
sb_export_before.connect (before_fifo.analysis_export) ;
sb_export_after.connect (after_fifo.analysis_export) ;
task run () ;
environment:该环境是 UVM 组件的最高级别抽象包装 scoreboard 和 agent。组件在
环境中构建和连接。要访问 UVM 框架中的任何组件,都需要通过环境对其进行访问。
核心部分的伪代码如下:
agent=SHA256_SM3_agent::type_id::create (.name ("agent") ,.parent (this) ) ;
sb=SHA256_SM3_scoreboard::type_id::create (.name ("sb") ,.parent (this) ) ;
agent.agent_ap_before.connect (sb.sb_export_before) ;
agent.agent_ap_after.connect (sb.sb_export_after) ;
endfunction:connect_phase
4.3 使用 UVM 验证平台的验证流程
测试平台从随机化开始,最后将输出与预期结果进行比较。该测试平台驱动的两
个 DUT(SHA-256 和 SM3)并行运行。UVM 以自上而下的方法工作;该序列在 uvm_test
上的 sequencer 上启动。SM3 和 SHA-256 有多个 sequence,但是每一次只有一个 sequence
可在 sequencer 上运行。当所有的组件都准备好以后,就开始向 driver 发送随机值。
driver 和 sequencer 使用 transaction 进行连接。
Monitor 监视 DUT 的端口并捕获每个有效的事务,两个监视器都发送 DUT 输出和
参考输出到分析端口。记分板连接到对这些值进行采样的分析端口的另一端。使用系
统 方 法 raise_objection 和 drop_objection 。 仿 真 开 始 于 raise_objection , 结 束 于
drop_objection。
在接口中定义了断言,可以直接访问输入/输出。断言在仿真期间的运行阶段中并
行运行。覆盖组包括监视位切换的覆盖点(输入和输出)。Cover Group 还提供代码覆
盖范围表示要执行多少代码。
4.4 本章小结
本章系统的介绍了详细的介绍了 UVM 验证方法学的演化过程,以及如何使用
UVM 验证方法学来搭建一个验证平台,最后详细的给出了基于 SHA256 和 SM3 算法
45
广东工业大学硕士学业论文

的 UVM 验证平台的搭建步骤,及代码解释。最后交代了如何使用本 UVM 验证去验证


本文中提到的两个 DUT。

46
第五章 验证及分析

第五章 验证及分析
本文根据不同哈希算法的硬件研究,着重研究了 SHA256 算法和 SM3 算法的硬
件设计及其优化,前文用硬件描述语言进行了实现,本章就设计的正确性以及性能指
标进行分析与说明,模块级验证采用第四章搭建的 UVM 验证平台来验证,系统级验
证分为在 VCS 环境下用虚拟 CPU 搭建 SoC 平台来进行软硬件联合仿真,以及搭建
FPGA 验证平台来进行原型机验证。UVM 验证平台的搭建,上一章已经花费了大篇
幅来进行介绍,这里只是利用搭建好的 UVM 验证平台来验证本设计中的 SM3 和
SHA256 模块,而在仿真工具上面的系统级验证则根据写好的脚本进行配置,然后调
整软件代码即可。FPGA 验证则是对芯片进行更加完备的验证。
5.1 前仿结果分析

5.1.1 仿真工具介绍

本章中使用工具包括 EDA 工具 VCS 和平头哥的 SmartL 一站式仿真平台。下面对


这两款 EDA 工具进行介绍。
VCS(Verilog Compile Simulator)是新思科技(Synopsys)旗下的一款 EDA 仿真
软件,VCS 支持混合语言仿真,如:Verilog、systemverilog、C 语言等,广泛运用于 VLSI
设计过程中,能满足行为级到 Sign-Off 级的模拟仿真任务。其集成了 GUI 开发功能
DVE,可以对仿真的结果进行分析。
SmartL 一站式仿真平台是由平头哥半导体公司提供,该平台集成了其公司所有的
CPU 加密软核,支持 AMBA 协议,以及编译工具,可以很方便的做软硬件协同设计的
系统级仿真。

5.1.2 IP 级的 UVM 仿真结果

1) SHA256 和 SM3 的 UVM 验证结果

47
第五章 验证及分析

前文已经对 UVM 的各个组件进行了详细的介绍,scoreboard 模块在 UVM 验证平


台中的作用是将 DUT 与 RFM 的输出进行自动对比的一个模块,然后将得到的结果全
部打印到一个日志文件里,若对比 DUT 与 RFM 成功则显示 SUCCESSFUL,如果失败
则显示 FAIL。如前文所述,SM3 和 SHA256 因为其接口设计是一致的,所以两者的报
告如下/其比对的结果如图 5-1 和图 5-2 所示:

图 5-1 SHA256 算法的 UVM 验证结果

Figure 5-1 UVM verification result of SHA256 algorithm

图 5-2 SM3 算法的 UVM 验证结果

Figure 5-2 UVM verification results of SM3 algorithm

日志文件中的 UVM_INFO 是因为加入了 uvm_info 宏的原因,因此当运行到此时


会自动的打印出相关的信息。
然后 SHA256_SM3_top_test.SHA256_SM3_env.SHA256_SM3_scbd 则反映出 UVM
验证平台的调用关系。从结果显示 SHA256 和 SM3 的硬件部分设计完全满足设计规范。
2) SHA256 和 SM3 的 UVM 验证覆盖率及分析

48
广东工业大学硕士学业论文

在设计一个 UVM 验证平台的时候不得不考虑其覆盖率,主要用来衡量验证的进


度。图 5-3 所示为该平台的覆盖率表,由其值可以明确的看出,设计的 IP 其每一个功
能点都覆盖到了,图 5-4 所示为随着测试案例数量与三大覆盖率的关系。

图 5-3 验证平台的覆盖率

Figure 5-3 Verify platform coverage

图表标题
120
100
坐标轴标题

80
60
40
20
0
50 100 1000 10000 100000 1000000
测试案例的数量

代码覆盖率(100%) 功能覆盖率(100%) 断言覆盖率(100%)

图 5-4 测试案例数量与三大覆盖率的关系

Figure 5-4 The relationship between the number of test cases and the three major coverage rates

5.1.3 系统级的仿真结果

1) SHA256 的仿真波形
完成了前文的设计和验证的平台的搭建以后,然后做前仿,系统级的验证结果如
下所示,通过软件进对“abc”进行加密。

49
第五章 验证及分析

软件加密得到的结果如下:
ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
从图 5-5,可以看到,刚开始状态进入的在空闲状态,在这种状态下,所有的数据
都进入初始状态,如果输入信号为 1,则 SHA256 算法进入写状态。在写状态:并将数
据从 HWDATA 写入数据寄存器。数据加密完成或读取最后一个 32 位数据时,则模块
进入读取状态,此时数据并以 32 位格式从 HRDATA 输出当前操作的结果。经过软硬
件设计以后得到的结果与软件加密后得到的数据是完全一致的。

图 5-5 SHA256 算法系统级仿真结果

Figure 5-5 SHA256 algorithm system-level simulation results

2) SM3 的仿真波形
与 SHA256 算法一样,先通过软件进对“abc”进行加密。软件加密得到的结果如下:
66c7f0f462eeedd9d1f2d46bdc10e4e24167c4875cf2f7a2297da02b
与 SH256 算法一样,从图 5-6,可以看到,经过软硬件设计以后得到的结果与软件
加密后得到的数据是完全一致的。说明我们的硬件设计满足预期。

图 5-6 SM3 算法系统级仿真结果

Figure 5-6 SM3 algorithm system-level simulation results

5.2 FPGA 验证及结果分析


FPGA 验证的主要流程分为,硬件综合和软件测试部分。下面将介绍 FPGA 验证的
流程,首先将 RTL 代码,从服务器取出来,本次 FPGA 验证采用的是平头哥提供的
FMX7A 开发板,里面集成了 xilinx 的 Artix-7,然后将从服务器取出的 RTL 代码和约
束文件一起经过 vivado 综合产生 bit 文件,同时也会产生一个板子资源的使用情况,实
现报告如图所示。然后将 bit 文件烧录到 FPGA 板的芯片里面。到此硬件部分已经结束
了。图 5-7,为 FMX7A 开发板。
50
广东工业大学硕士学业论文

软件开发用到的是平头哥的 CDS 软件,该软件主要是将软件测试代码经过编译后


下载到 FPGA 原型机里面,然后连接 Debug server,进行调试。图 5-8 为 CDS 的调试界
面。

图 5-7 FMX7A 开发板


Figure 5-7 FMX7A development board

图 5-8 CDS 的调试界面


Figure 5-8 CDS debugging interface
接下来是软件测试部分,利用此前软硬件协同设计时,设计的软件代码作为芯片
测试代码,利用 CDS 集成开发工具进行编译,然后连接 debugserver 对 ASIC 进行 FPGA

51
第五章 验证及分析

原型机验证,其验证结果与软件实现的一模一样,说明该设计完全符合设计目标,如下
是 SHA256 的 FPGA 验证结果与软件代码实现的一模一样。图 5-9 黄色部分是 FPGA
验证时得出的值,图 5-10 是用纯软件实现的值。

图 5-9 SHA256 算法的 FPGA 验证的值

Figure 5-9 FPGA verification value of SHA256 algorithm

图 5-10 SHA256 算法纯软件实现的值

Figure 5-10 SHA256 algorithm implemented in pure software

52
广东工业大学硕士学业论文

5.3 后端综合及性能分析
图 5-11 所示为 SHA256 的版图,5-12 为 SM3 算发的版图,图 5-13 为 SM3 算法的
综合报告,图 5-14 为 SHA256 算法的综合报告。

图 5-11 SHA256 算法的版图

Figure 5-11 The layout of the SHA256 algorithm

图 5-12 SM3 算法的版图


53
第五章 验证及分析

Figure 5-12 Layout of SM3 algorithm

图 5-13 SM3 算法的 RC 综合报告

Figure 5-13 RC synthesis report of SM3 algorithm

图 5-14 SHA256 算法的 RC 综合报

Figure 5-14 RC synthesis report of SHA256 algorithm

54
广东工业大学硕士学业论文

5.3.1 SM3 算法优化的分析

在任务调度和寄存器优化之前,扩展模块需要 132 个时钟周期才能完成两次迭代。


压缩模块需要进行 64 轮循环迭代,并消耗另外 64 个周期,因此消耗了 132+64=196 个
周期。优化后的 RC 综合报告如图 5-13 所示。
如果尚未采用多路复用寄存器策略,扩展模块需要 132 个 32 位寄存器来存储 132
个中间变量;而压缩模块总共需要 16 个 32 位寄存器,包括 8 个寄存器用于存储 IV 的
初始值或前一个 512 位数据块的结果,而另外的 8 个寄存器用于存储当前获得的 256
位数据。因此,优化前的设计方案总共需要 132+16=148 个 32 位寄存器。但是实际设
计过程中,会因为一些原因,使得优化效果稍差一点。
优化前后时序结果如下:
经过任务调度和寄存器优化后,只需 70 个周期即可完成扩展和压缩,并且寄存器
数量会大幅度下降。详见表 5.1,扩展模块共需要 18 个 32 位寄存器,其中保留原有 16
个 32 位中间数据寄存器,然后新增加了两个 32 位数据寄存器 Wj,W’j。压缩模块,也
需要 18 个寄存器,原有的 16 个 32 位寄存器会继续保留,然后新增 2 个寄存器 M,N
用来减少关键路径延迟。因此,压缩模块的寄存器数量为 18。因此,扩展和压缩模块
总共需要 36 个 32 位寄存器。因此,如果不考虑其他电路的时间开销,则性能改善了
近 2.8 倍,寄存器的数量将减少约 3.11 倍。则面积开销减和功耗都大大减少了。在关
键路径优化之后,从 DC 仿真工具,将时钟周期设置为 10ns,将输入/输出延迟设置为
2ns。数据所需时间为 6.90 ns,数据到达时间为 5.59ns。则 slack 提高了 1.31ns。表中显
示了优化前和优化后方法之后的时钟、面积以及关键路径和 slack 之间的比较。
表 5.1 SM3 算法优化前后的 PPA 指标

Table 5.1 SM3 algorithm optimized and unoptimized PPA indicators

设计方式 时钟周期 寄存器数量 关键路径的数量 slack

优化前 196 148 5 0

优化后 70 36 4 1.31

5.4 本章小结

55
第五章 验证及分析

本章系统的介绍了 SM3 算法和 SHA256 算法硬件实现的结果验证,包括前仿和后


仿,前仿部分包括 IP 级的 UVM 验证,通过大量的 case 测试。从计分板的结论显示可
以看到两个模块的设计都达到了预期,并从覆盖率的角度做了分析,均达到了设计指
标。由此可以推出,SHA256 算法单元和 SM3 算法单元在 IP 级达到了设计规范,同时
基于系统级的测试也达到了预期,说明 CPU 与 AHB 总线以及 IP 之间的连接也没有问
题,然后做了 FPGA 板级验证,从而进一步确定该芯片的功能是符合预期的,最后通
过后端综合以及后仿,表明了该芯片的设计在性能指标上均符合预期。

56
第六章 总结与展望

第六章 总结与展望
6.1 总结
随着今年,5G 技术的普及,物联网市场在不久的将来,将会迎来井喷发展,物联
网的安全问题会变得越来越严重,本文在物联网信息安全领域的哈希算法中,做了一
定的研究以及工程实现。随着经济全球化进程的加快,不同标准的技术在世界范围内
的推行势必也会称为一种趋势,本文就国密算法中的 SM3 算法做了优化,然后集成了
主流的 SHA256 算法,两者具有共同的数据输入输出结果。
论文首先介绍了哈希算法的发展史,以及一些算法的原理,然后结合项目本身,选
择了 SHA256 算法和 SM3 算法做为本文的主要研究与设计方向,然后详细介绍了
SHA256 算法的硬件实现以及 SM3 算法的优化原理。AHB 总线接口设计,以及控制模
块的设计,最后就设计本身而言,通过 UVM 验证平台来验证 IP 的设计是否功能上满
足需求。
本文根据上诉,主要存在如下特点。
第一,从软件复用的角度讲,将 SHA256 算法和 SM3 算法的预处理部分用软件实
现,考虑到二者的软件处理部分具有共性,所以软件部分可以完全复用,在切换 IP 的
时候,只需要对基地址进行替换即可,考虑到敏捷开发等因素,本文在设计
SHA256/SM3 算法的硬件 IP 以及控制模块时,其偏移地址的设计也完全一致,这就极
大的减少了软件的开发复杂度。
第二,从硬件复用的角度讲,也是因为 SHA256 和 SM3 除了杂凑的参数和运算的
轮数不一样以外,其他数据形式存在很大的相似性,故控制模块和 AHB-IC 接口的也
复用了。对于硬件来说可以大幅度减少资源。
第三,除了以上从系统及的层面优化以外,本文讲 SM3 算法单元从 IP 层面做了深
入的研究,然后做了资源优化,与 SM3 的标准实现相比,该架构节省了大约 3.11 倍的
寄存器数量。
第四,采用 UVM 验证方法学来验证 IP 的功能,在验证平台的可重用性以及产生
随机数等方面具有很强的优势,使项目的后续迭代创新更为方便快捷。

57
广东工业大学硕士学业论文

6.2 展望
整篇论文从最初对不同哈希算法的探讨与分析、SoC 系统的集成、软硬件设计,验
证方法学等方面知识的学习。到将 SHA256/SM3 算法用 RTL 实现,然后通过 UVM 验
证,FPGA 板级验证,最终集成为 SoC 的一部分,最后流片成功,历时一年多。整个
系统的基本功能实现了,但是芯片的频率还有待提升,SoC 级别的 UVM 验证平台有待
完善,另外是时钟网络的设计没有展开,对低功耗的设计方面还有待加强。以及抗攻击
方面的研究,在本文中没有提到,我希望在后续展开相关工作的时候能更深入的研究
以上几个方面。
受限于本人理论知识的局限性,以及 SoC 系统设计的思路的经验并不丰富,本设
计方案并不能代表最先优方案,若在文中存在一些不足,欢迎提出。

58
广东工业大学学业论文

参考文献
[1] 钱文明. 数字 DC-DC 变换器中 DPWM 的设计[D]. 2016.
[2] 刘一鸣. 无源蜂窝物联网协议技术研究[D].
[3] 方颂. MOCVD 原位监测系统软件设计[D].
[4] 雷瑞. 智能家居,企业很热闹、用户看热闹?[J]. 家用电器(7):32.
[5] 屈 刚, 蒋川. 5G 移动通信典型应用场景分析研究 [J]. 数字技术与应用 , 2018,
36(10):41-42.
[6] 王毅俊 刘禹.《物联网白皮书(2018 年)在沪发布》(N). 上海科技报,2018
[7] 飞猪. 2019 年度中国 AIoT 企业 TOP100 排行榜[J]. 互联网周刊, 2019(18).
[8] 郭永和. 泛在物联网终端设备安全威胁与防护技术[C]. 中国电机工程学会电力信
息化专业委员会.生态互联 数字电力——2019 电力行业信息化年会论文集.中国电机工
程学会电力信息化专业委员会:人民邮电出版社电信科学编辑部,2019:108-110.
[9] 刘传军, 翁韬. Discussion on the Implication of Internet of Things in Fire Army%物联
网技术在消防部队中的应用初探[J]. 中国公共安全(学术版), 000(2):105-107.
[10] 李富勇,张君 , 尹肖栋 , et al. 浙江省工业控制系统安全现状分析[J]. 计算机时代,
2018.
[11] 叶中华, 解析 2017 年物联网五大发展趋势[N]. 中国城市报,2017
[12] 李伟, 项小升, 武亦农, et al. 物联网安全保护初探[J]. 智能建筑, 2017(9):33-35.
[13] 董晓丽. 分组密码 AES 和 SMS4 的安全性分析[D].西安电子科技大学,2011.
[14] 王晓燕, 杨先文. 基于 FPGA 的 SM3 算法优化设计与实现[J]. 计算机工程, 2012,
38(6):244-246.
[15] Kim J W , Lee H U , Won Y . Design for high throughput SHA-1 hash function on
FPGA[C]// Fourth International Conference on Ubiquitous & Future Networks. IEEE, 2012.
[16] 张 倩 , 李 树 国 . SM3 杂 凑 算 法 的 ASIC 设 计 和 实 现 [J]. 微 电 子 学 与 计 算 机 ,
2014(9):143-146.
[17] 丁冬平, 高献伟. SM3 算法的 FPGA 设计与实现%Design and implementation of SM3
algorithm on FPGA[J]. 微型机与应用, 2012, 031(005):26-28.
[18] 薛也, 胡爱群. FPGA 实现的一种 SHA-1 优化杂凑算法[J]. 东南大学学报:英文版,

59
参考文献

2014(1):13-16.
[19] 陈华锋. High-speed SHA-256 algorithm implementation%高速 SHA-256 算法硬件实
现[J]. 浙江大学学报(理学版), 2009, 36(6):675-678.
[20] 李鸿强, 苗长云, 石博雅, et al. 单向散列函数 SHA-512 的优化设计[J]. 计算机工程,
2007(07):136-138+171.
[21] Cao D , Han J , Zeng X Y . A reconfigurable and ultra low-cost VLSI implementation of
SHA-1 and MD5 functions[C]// International Conference on Asic. IEEE, 2007.
[22] Miao L , Jinfu X , Xiaohui Y , et al. Design and Implementation of Reconfigurable
Security Hash Algorithms Based on FPGA[C]// International Conference on Information
Engineering. IEEE Computer Society, 2009.
[23] 刘恒. 面向多重需求的灵活可配的哈希算法硬件加速器研究[D]. 2016.
[24] 黄云轲,辛小龙,李成龙,李聿民.关于对哈希算法的研究与应用[J].计算机光盘软件与
应用,2012(03):201+199.
[25] 么贻聪. 基于动态软键盘的口令认证安全客户端的研究与实现[D]. 吉林大学.
[26] 李堂更. 移动通信基站智能锁系统软件设计与实现[D].
[27] 刘冶, 潘炎, 夏榕楷, et al. FP-CNNH:一种基于深度卷积神经网络的快速图像哈希
算法[J]. 计算机科学, 2016, 43(9):39-46.
[28] 薛富实. 轻量级 IPsec 在嵌入式系统中的设计与实现[D]. 2012.
[29] 张宏石. SHA-3 第二轮候选 BLUE MIDNIGHT WISH 算法分析[D].山东大学,2010.
[30] 翁新钎. 安全哈希算法的并行化实现研究[D]. 复旦大学, 2013.
[31] 陈 先 勇, 徐伟俊 , 杨鑫, et al. SystemVerilog 断言及其应用 [J]. 中国集成电路,
2007(09):23-28.
[32] 张振宾. 国密 SM4 和 SM2 算法功耗攻击关键技术研究与实现[D].
[33] 刘钰力. 基于 FPGA 的 SHA256 高效数字加密系统[D]. 兰州大学.
[34] 吴卓葵. 开放网络环境远程校准系统建模与可信技术研究[D]. 华南理工大学, 2014.
[35] 韩旭明. 面向隔离交换的应用数据流检测系统的设计与实现[D].
[36] 辛颖. 基于 DSP 的视觉客流检测系统研究[D]. 北京工业大学.
[37] 李战辉. 二进制转译加速方法及其在低电压处理器中的应用研究[D]. 2016.
[38] 崔东岳, 龙兵, 曾浩, et al. 安全散列算法的 FPGA 实现与仿真[J]. 电子质量,

60
广东工业大学学业论文

2010(12):19-21.
[39] 叶茂. 基于 VMM 的验证平台的研究与实现[D]. 华中科技大学, 2008.
[40] 李兆斌. 基于 UVM 的 AXI4 总线协议接口 IP 验证的研究与实现[D].
[41] 张吉纯. 基于 UVM 的接口模块验证 IP 的研究[D]. 2016.
[42] Janssens S, Thomas J, Borremans W, et al. Hardware/software co-design of an elliptic
curve public-key cryptosystem[C]//Signal Processing Systems, 2001 IEEE Workshop on.
IEEE, 2001: 209-216.
[43] Holler.Andrea, Druml.Norbert, Kreiner.Christina. Hardware/software co-design of
elliptic curve cryptography for resource-constrained applications. San Francisco: Design
Automation Conference, 2014: 1-6.
[44] Qian Z, Shuguo L. Hardware design and implementation of SM3 algorithm in ASIC[J].
Microelectronics and Computer, 2014, 31(9): 143-146.
[45] 国家密码管理局.http://www.oscca.gov.cn/News/201-204/News 1227.htm.
[46] Chen J Z, Li H X, Wang B B. Improved chosen-plaintext DPA on block cipher SM4[J].
Journal of Tsinghua University(Science and Technology), 2017(11):1134-1138.
[47] Matsui M. Linear cryptanalysis method for DES cipher[C]// The Workshop on the Theory
and Application of Cryptographic Techniques on Advances in Cryptology. Springer-Verlag
New York, Inc. 1994:386-397.
[48] V. S. Miller. Use of Elliptic Curves in Cryptography. Advances in Cryptology-
CRYPTO’85,H.C.Williams,Ed.,LNCS 218 Springer-Verlag.1986.
[49] Bai X, Jiang L, Dai Q, et al. Acceleration of RSA processes based on hybrid ARM-FPGA
cluster[C]// Computers and Communications. IEEE,2017:682-688.
[50] Jeong C, Kim Y. Implementation of efficient SHA-256 hash algorithm for secure vehicle
communication using FPGA[C]// Soc Design14+9

61
攻读学位期间的科研成果

攻读学位期间的科研成果
(1) 李辉,一种基于哈希算法与 PUF 电路的物联网设备 ID 认证方法。申请
号:201810835202.6,申请日期:2018 年 7 月 26 号;广东工业大学(发明专利-
实审阶段,第一作者)
(2) 李辉,基于硬件实现的区块链数据加密强化设计。申请号:
201910015839.0,申请日期:2019 年 1 月 8 号;广东工业大学(发明专利-实审
阶段,第一作者)

62
学位论文独创性声明

学位论文独创性声明
本人郑重声明:所呈交的学位论文是我个人在导师的指导下进行的研究工作及取
得的研究成果。尽我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其他
人已经发表或撰写过的研究成果。与我一同工作的同志对本研究所做的任何贡献均已
在论文中作了明确的说明,并表示了谢意。本人依法享有和承担此论文所产生的权利
和责任。

论文作者签名: 日期:

学位论文版权使用授权声明
本学位论文作者完全了解学校有关保存、使用学位论文的规定,同意授权广东工业
大学保留并向国家有关部门或机构送交论文的印刷本和电子版本,允许该论文被查阅
和借阅。同意授权广东工业大学可以将本学位论文的全部或部分内容纳入有关数据库
进行查索,可以采用影印、缩印、扫描或数字化等其他复制手段保存和汇编本学位论
文。保密论文在解密后遵守此规定。

论文作者签名: 日期:
指导教师签名: 日期:

63
致 谢

致 谢
时间过的很快,三年研究生学习生活快要结束了,此时此刻思绪万千,时
光仿佛回到了 2017 年,我一个人第一次拉着行李去广州,从那以后的将近三年
的时光,我将与广东工业大学这所学校产生千丝万缕的联系,让我深深的爱上
这所工业风格浓厚的学校。
毫无疑问,在广东工业大学学习期间,对我帮助最大的就是我的导师和师
母,以及同门同学和师兄弟,我的本科是自动化专业的,研究生阶段在熊晓明
教授门下学习集成电路设计,学习的路上遇到了很多的困难,首先是集成电路
的基础知识很欠缺,其次,集成电路是一个跨学科组成的一个专业,涉及的知
识面很广,前期学习十分的吃力,在老师和同学的帮助下,我自身能力得到了
快速的提高。学校和集体也给我提供了良好的学习氛围,让我能够在研究生三
年的时光里静下心来做研究,现在研究生生涯即将画上句号。
在这里要特别感谢熊晓明教授和师母,老师对科研的认知力和严谨的教学
风格对我影响很大。在生活上,师母总是给我很多的照顾和指点迷津,让我即
使远在他乡也能感受到家的温暖。当然在读研的过程中,家人给了我很大支
持,本身不富裕的家庭,在我选择读研这条道路时,他们都是无条件的支持,
还有一起学习、一起熬夜奋战的战友们,他们是我的榜样,这个集体给了我非
常多的帮助和温暖,感谢刘祥,王艺航,张景龙,张明森,陆江城,黄宏敏,
胡恩在平时学习的过程中相互鼓励,生活里的快乐很多。感谢师兄师姐在科研
的路上给了我很大的支持和建议。最后,今年的疫情很重,感谢 TXX 的照顾,
以至于在疫情期间我能专心致志地写完本篇文章。
同时也感谢评审专家的辛勤付出和所有帮助过我的人,衷心的感谢你们,
愿你们在以后的人生道路上大放光彩!

李辉
2020 年 4 月于重庆

You might also like