基于二级片内硬件堆栈的后向CFI 验证方法研究,第5章 测试及实验结果

5.1 SoC系统功能仿真

按照上一章的设计方案,采用verilog HDL语言,在玄铁E906处理器平台中分别采用延迟验证和批处理验证方法完成了二级硬件堆栈的RTL级硬件描述。为了验证二级硬件堆栈的正确性,采用斐波那契数列进行验证,设置RAB大小为4,对添加二级硬件堆栈后的玄铁E906进行功能仿真,并利用Xilinx XC7- A100T器件对整个系统进行FPGA验证。
为了验证加入二级硬件堆栈后玄铁E906处理器还能否正常运行,以及二级硬件堆栈是否有效,在处理器中运行斐波那契数列进行验证[17],采用C语言编写的斐波那契数列是一种典型的递归程序,在程序运行时会调用多次子函数,能够很好的验证程序中调用的返回地址的正确性。计算前12个斐波那契数列的C语言程序为:
int Fbi(int i)
{
if( i < 2 )
return i == 0 ? 0 : 1;
return Fbi(i - 1) + Fbi(i - 2);
}
int main()
{
int i;
int a[40];
printf(“start fibonacci\n”);
a[0]=0;
a[1]=1;
printf(“%d “,a[0]);
printf(”%d “,a[1]);
for(i = 2;i < 12;i++)
{
a[i] = a[i-1] + a[i-2];
printf(”%d “,a[i]);
}
printf(”\n”);
printf(“end fibonacci show:\n”);
for(i = 0;i < 12;i++)
printf("%d ", Fbi(i));
return 0;
}
使用RISC-V gcc编译工具链对该程序编译产生二进制文件,分别使用延迟验证实现与批处理验证实现的玄铁E906处理器运行该程序,运行输出的结果如图5.1所示,表明加入二级硬件堆栈后处理器能够正常执行程序。
在延迟验证中,运行仿真斐波那契数列后延迟验证模块主要信号的仿真波形如图5.2所示。sw_ra与lw_ra_1信号检测返回地址保存和调用,由图可见当检测到相关指令时相应的信号保持一个高电平脉冲,同时front指针加1或减1。
在这里插入图片描述
图5.1 斐波那契数列在玄铁E906中运行仿真输出
在这里插入图片描述
图5.2 延迟验证功能仿真
在仿真波形中b1、b2、b3、b4为RAB中的返回地址,m表示RAB中的消息验证码,mm表示MAC存储单元中保存的消息验证码,由仿真波形图可以看出在检测到相应指令后,RAB中相应条目的返回地址和MAC被改变,将MAC保存到MAC存储单元或读取MAC,mac_pointer指针也同时加1或减1,同时在系统中rear指针所指的返回地址不断送入MAC计算单元进行计算,aes_ld信号出现高电平脉冲。
在批处理验证中,运行仿真斐波那契数列后批处理验证模块主要信号的仿真波形如图5.3所示。在保存返回地址sw_ra为一个高电平时front加1,在调用返回地址lw_ra_1为高电平时front减1,在需要计算RAB中返回地址的MAC并且aes_same为0时aes_ld信号被置1。在这里插入图片描述
图5.3 批处理验证功能仿真

5.2 FPGA验证实现

对添加二级硬件堆栈后的玄铁E906处理器建立Vivado工程,如图5.4所示,对工程进行相应的时序约束和引脚约束后进行综合实现产生可在FPGA中运行的bit文件。
在这里插入图片描述
分别将延迟验证实现与批处理验证实现的玄铁E906处理器下载到FPGA型号为XC7A100T的FPGA开发板中,如图5.5所示,使用RISC-V gcc编译斐波那契数列生成elf文件,使用玄铁E906的JTAG接口通过RISC -V gdb调试工具将elf下载到处理器内存中并运行[26],如图5.6所示,通过串口调试工具查看运行结果,运行结果如图5.7,在FPGA平台中,玄铁E906增加二级硬件堆栈后仍然能成功运行斐波那契数列。
在这里插入图片描述
图5.5 下载玄铁E906 SoC到FPGA开发板中
在这里插入图片描述
图5.6 下载elf文件到玄铁E906并运行
在这里插入图片描述
图5.7 FPGA中玄铁E906运行斐波那契数列输出

表5.1 延迟验证性能开销
在这里插入图片描述

5.3 系统性能测试

为了测试在添加二级硬件堆栈后对系统性能的影响,在原平台和添加硬件堆栈的处理器中运行典型测试基准程序,通过查看处理器运行时钟周期以及需要进行MAC验证的返回地址数量来统计系统性能开销。在本文中分别测试RAB大小为2和RAB大小为4时系统的性能开销,运行5个典型测试程序:qurt是一种二次方程求根程序;duff是用于串行复制的程序;sglib_hashtable是一种哈希表访问程序;dhrystone是测量处理器运算能力的基准测试程序之一,能够综合测试处理器的运算能力;fibonacci是一种典型的循环递归程序。
表5.2 延迟验证中消除不必要MAC验证的比例
在这里插入图片描述
在延迟验证中,分别设置RAB大小为2和4,运行测试程序后系统性能开销如表5.1所示,展示了运行原系统以及添加二级硬件堆栈后处理器运行时钟周期。延迟验证中,使用两个条目的RAB性能开销最多不到3%,当使用四个条目的RAB时,性能开销不到1%,在一定程度上不影响处理器的实时性,RAB中存储的返回地址越多性能开销就越少,在表中4个条目的RAB比2个条目的RAB性能开销上至少减少一半。表5.2显示了延迟验证在减少MAC验证方面具有显著的效果,如果没有二级硬件堆栈,子函数每次返回时都需要进行验证,
当RAB为2个条目时平均能够减少85%以上的验证,RAB为4个条目时平均能减少95%以上的验证。如果在一个程序中子函数的调用深度小于RAB中能存储返回地址的数目,则不需要进行验证。
表5.3 批处理验证性能开销
在这里插入图片描述
批处理验证中RAB中的所有返回地址生成一个MAC,表5.3表示了批处理验证中运行测试程序后系统的性能开销,当RAB大小为2时只有在连续两次子函数返回时才需要进行MAC验证,对于像sglib_hashtable这种调用子函数深度较少程序几乎没有性能开销。当设置RAB大小为4时只有在连续四次子函数返回时才需要MAC验证,系统性能开销更低,对于fibonacci这种调用子函数较多的递归程序性能开销也不到1%。表5.4为批处理验证减少MAC验证的比例,当RAB大小为4时,对于大多数程序能够减少95%以上的MAC验证。
在陈立伟等人设计的链式堆栈中[4],采用改进的基于MAC验证方法提高了安全性,但带来了23%的巨大的性能开销;张军等人提出的RAGuard进行了优化,但也带来了6%以上的性能开销[8]。使用本文设计二级片内堆栈,当RAB大小为4时,两种验证方法的性能开销都小于1%,并且设置RAB越大,性能开销会更低。
表5.4 批处理验证中消除不必要MAC验证的比例
在这里插入图片描述

5.4 系统硬件开销

在二级硬件堆栈RAB大小为4时,通过vivado2019.2工具对设计进行综合实现,两种验证方法在xc7a100t FPGA芯片中的硬件开销如表5.5所示。
表5.5 二级硬件堆栈在FPGA中的硬件资源消耗
在这里插入图片描述
由表5.5可知,RAB大小为4时延迟验证大约增减4.7%的硬件开销,批处理验证大约增加4.1%的硬件开销,其中大约40%的硬件开销来源于消息码计算单元AES,由于批处理验证RAB不需要存储MAC并且MAC存储单元可以更小,所以批处理验证占用的硬件资源更少,同时存储MAC也会占用大量的片上硬件资源。

5.5 本章小结

本章主要对加入二级硬件堆栈后的玄铁E906处理器进行了功能验证和性能分析,以及在FPGA中的硬件资源开销。首先在加入两种验证方法后的处理器中分别运行典型的递归程序斐波那契数列,进行仿真以及FPGA实现,验证功能的正确性,并通过分析仿真波形,验证设计的二级硬件堆栈真正其作用并且正常工作了。之后采用典型公认的处理器性能测试程序,统计了加入二级硬件堆栈之后系统的性能开销并与其他研究者的设计进行了比较。最后分析了两种验证方法的硬件资源开销。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/312534.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【R语言】组合图:散点图+箱线图+平滑曲线图+柱状图

用算数运算符轻松组合不同的ggplot图&#xff0c;如图&#xff1a; 具体代码如下&#xff1a; install.packages("devtools")#安装devtools包 devtools::install_github("thomasp85/patchwork")#安装patchwork包 library(ggplot2) library(patchwork) #p1是…

AMPLE: 基于图简化和增强图表征学习的漏洞检测

GNN已被证实能有效学习源代码的图表示&#xff0c;然而GNN难以处理代码结构图中长距离节点之间连接的局限性&#xff0c;导致无法捕获代码图的全局信息&#xff08;即远距离节点间的依赖关系&#xff09;。针对上述问题&#xff0c;提出漏洞检测框架AMPLE&#xff0c;它包括图简…

机器学习引领金融革命:重塑金融服务领域新格局,开启智能化新篇章

&#x1f9d1; 作者简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向的学习指导…

我们一起看看《看漫画学C++》中如何介绍的字符串的用法

C中的字符串使用的是 std::string 类型&#xff0c;它是C标准库中提供的字符串类&#xff0c;提供了丰富的字符串操作方法。下面是关于C字符串的一些常用用法&#xff1a; 字符串拼接 字符串查找 字符串追加 购书地址&#xff1a;https://item.jd.com/14418856.html

【教程】一个比较良心的C++代码混淆器

这是一个比较良心的C代码混淆器&#xff0c;用于信息竞赛训练和保护代码免受抄袭。本文将介绍这个混淆器的使用方法、混淆效果和已知的一些bug。同时&#xff0c;我们也会给出一些示例来演示混淆器的具体操作。 引言 在信息竞赛训练和实际开发中&#xff0c;保护代码的安全性和…

Docker 学习笔记(十):Centos7 中 Docker 部署 Redis 集群,打包 SpringBoot 微服务

一、前言 记录时间 [2024-4-17] 系列文章简摘&#xff1a; Docker 学习笔记&#xff08;六&#xff09;&#xff1a;挑战容器数据卷技术一文通&#xff0c;实战多个 MySQL 数据同步&#xff0c;能懂会用&#xff0c;初学必备 Docker 学习笔记&#xff08;七&#xff09;&#x…

关于外网后端服务访问内网minio中间件,因连接minio超时,启动失败问题

注&#xff1a;服务器情况&#xff1a;2台服务器&#xff0c;内网服务器包含&#xff08;activemq、minio、nginx、redis、mysql、后端java服务&#xff09;。外网服务器只有后端java服务&#xff0c;访问内网的中间件&#xff08;内网服务器开放了部分指定端口&#xff09; 问…

web安全学习笔记(9)

记一下第十三课的内容。 准备工作&#xff1a;在根目录下创建template目录&#xff0c;将login.html放入其中&#xff0c;在该目录下新建一个reg.html。在根目录下创建一个function.php 一、函数声明与传参 PHP中的函数定义和其他语言基本上是相同的。我们编辑function.php …

【C++】哈希

1. unordered系列关联式容器 STL提供了底层为红黑树结构的一系列关联式容 这里介绍 unordered_set 和 unordered_map a. unordered_map unordered_map 是存储<key, value>键值对的关联式容器&#xff0c;其允许通过 key 快速的索引到与 其对应的 value unordered_m…

nested exception is dm.jdbc.driver.DMException: 字符串截断

nested exception is dm.jdbc.driver.DMException: 字符串截断 背景问题分析问题解决 背景 今天在日常工作中遇到了一个问题&#xff0c;正常的 insert into操作报错了 ### Cause: dm.jdbc.driver.DMException: 字符串截断 ; 字符串截断; nested exception is dm.jdbc.driver…

element-ui container 组件源码分享

今日简单分享 container 组件的源码实现&#xff0c;从以下两个方面来讲解&#xff1a; 1、container 组件的页面结构 2、container 组件的属性 一、container 组件的页面结构 二、container 组件的属性 1、container 部分的 direction 属性&#xff0c;子元素的排列方向&am…

Redis(哨兵模式)

什么是哨兵机制 问题: redis 主从复制模式下, 一旦主节点由于故障不能提供服务, 需要人工进行主从切换, 同时大量客户端需要被通知切换到新的主节点上, 对于有一定规模的应用来说, 对于人力的资源消耗会很大.解决: 通过哨兵对主从结构进行监控, 一旦出现主节点挂了的情况, 自动…

利用CSS延迟动画,打造令人惊艳的复杂动画效果!

动画在前端开发中是经常遇到的场景之一&#xff0c;加入动画后页面可以极大的提升用户体验。 绝大多数简单的动画场景可以直接通过CSS实现&#xff0c;对于一些特殊场景的动画可能会使用到JS计算实现&#xff0c;通过本文的学习&#xff0c;可以让你在一些看似需要使用JS实现的…

网络编程(现在不重要)

目录 网络编程三要素与InetAddress类的使用 软件架构 面临的主要问题 网络编程三要素&#xff08;对应三个问题&#xff09; InetAddress的使用 TCP与UDP协议剖析与TCP编程案例&#xff08;了解&#xff09; TCP协议 UDP协议 例子 UDP、URL网络编程 URL&#xff1a;&…

求奖金(if)(C语言)

一、N-S流程图&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int I 0;float bonus 0;//提示用户&#xff1b;printf("请输入利润I&#xff1a;");//获取用户值&#xf…

【优选算法专栏】专题十三:队列+宽搜(一)

本专栏内容为&#xff1a;算法学习专栏&#xff0c;分为优选算法专栏&#xff0c;贪心算法专栏&#xff0c;动态规划专栏以及递归&#xff0c;搜索与回溯算法专栏四部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握算法。 &#x1f493;博主csdn个人主页&#xff1a;小…

【Linux系统编程】第四弹---基本指令(二)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、echo指令 2、cat指令 3、more指令 4、less指令 4、head指令 5、tail指令 6、时间相关的指令 7、cal指令 8、find指…

包装类的认识

前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; hellohello~&#xff0c;大家好&#x1f495;&#x1f495;&#xff0c;这里是E绵绵呀✋✋ &#xff0c;如果觉得这篇文章还不错的话还请点赞❤️❤️收藏&#x1f49e; &#x1f49e; 关注&#x1f4a5;&#x1…

如何鉴别品深茶叶的真伪?

鉴别品深茶叶的真伪可以通过以下三点进行判断&#xff1a;第一是看&#xff0c;观察茶叶的颜色和形状是否自然&#xff1b;第二是闻&#xff0c;感受茶叶的香气是否纯净&#xff1b;第三是泡&#xff0c;品尝茶汤的味道是否醇厚。最好的方式还是通过官方访问进行查询&#xff0…

简单的网站-表白墙(前后端交互)

提交信息后&#xff0c;就得到了下面的一行话 但是存在一些问题 在一个网站中&#xff0c;服务器起到的最主要的效果&#xff0c;就是 “存储数据” 因此服务器这边往往也就需要能够提供两种风格的接口。存数据 、取数据 二、实现前后端交互 1&#xff09;先规定此处请求和响…