RISC-V微架构验证

对于RISC-V处理器因其灵活性和可扩展性而受到广泛关注,但如果没有高效验证策略,错误的设计实现可能会影响RISC-V的继续推广。

在RISC-V出现之前,对于大多数半导体公司来说,处理器验证几乎成为一门屠龙之技。专业知识被浓缩到少数几家提供处理器或处理器 IP 的商业公司中,并且经常开发自己的内部流程和工具。但是,开源 RISC-V ISA 的出现以及开源实现的激增引起了人们的极大兴趣,并且需要适当的工具和专业知识。

在过去的一年里,RISC-V International宣布了几项新的扩展。此外,鼓励用户进行自己的扩展和修改。虽然开发这些扩展可能是一个相对快速和简单的过程,但验证它们并不容易。

很少有标准或开源工具可以帮助处理器验证。RISC-V 是一个开放的 ISA,任何人都可以接受它并实现处理器。但RISC-V市场的领导者知道,仅仅因为他们不需要支付许可使用费,并不意味着RISC-V是便宜的选择。

如果你想在RISC-V上取得成功,验证是没有捷径的。

很多人天真地认为验证处理器就是测试指令是否有效。他们去构建一个测试生成器,做这个,做那个,或者引入一个验证套件,但真正的问题与微架构、pipeline有关。对于微架构验证的复杂性,没有标准的方法,甚至没有公开讨论。

对于给定的 RISC-V CPU,验证容易被低估。RISC-V带来了大量的控制和数据路径复杂性。包括预测执行、乱序执行等等为更具挑战性的工作负载提供更高性能的常用技术,这些技术是RISV-V成为服务器级设备中被采用CPU的必备技术。但这些技术也会导致可以利用的安全漏洞,例如 Spectre 和 Meltdown。

RISC-V的开发人员很多来自传统的CPU架构背景,他们正在重用所学到的任何东西。但这仍然不容易,RISC-V和传统的CPU有一些生态上的区别。

RISC-V微架构的验证正处于一个十字路口,既要平衡开放性和灵活性的优势,又要应对多样性和复杂性的挑战。随着生态系统的成熟,应对这些挑战对于将RISC-V确立为其他微架构(ARM、X86)的可靠和安全替代方案至关重要。

通过社区驱动的方法、持续的创新和对标准化的关注,RISC-V的验证环境无疑将不断发展并迎接挑战。

不止随机

处理器验证不同于常规的ASIC验证,处理器验证空间更大。ASIC 中的 AS 代表特定应用。完全验证芯片的预期应用是有限且有界的。处理器验证不是。处理器指令集架构 (ISA) 中的每个操作都必须经过验证,以便在每种可能性(每种指令组合)中提供指定的行为,而在验证处理器 IP 时无法预测这一点。

SystemVerilog 和 UVM 是 ASIC 验证的主力军。UVM 是进行随机指令生成的好方法,但它有局限性。例如,覆盖率。如果你说你对“add指令”有 100% 的覆盖率,你一定有与我不同的覆盖率含义,因为我不相信你涵盖了所有可能的组合。此外,向处理器提供激励的典型方法是生成一堆随机指令。你也许能够根据要测试的特定区域来调整这些指令,但这是尝试验证处理器的一种非常低效的方法。它会发现一些简单的错误,但你必须继续提高验证效率。

很多客户都在做受约束的随机,事实上确实存在几个指令生成器,可以定向随机地为你生成数十万条指令。但这够了吗?

根据传统CPU供应商的经验,以及在RISC-V内核中看到的情况,基于仿真的验证是不够的。这就是为什么你必须考虑其他方法,比如Formal验证。

处理器以自下而上的方式进行验证,类似于当今系统的验证方式。处理器子单元包括分支预测、pipeline的一部分或内存系统,如cache缓存。这也往往是Formal方法的亮点。有些人在受约束的随机性下这样验证prefetch buffer/ALUs/register models/multipliers/load store unit,他们得到了很好的覆盖。但是,如果你不使用Formal验证,你就有可能在那里留下一些极端的情况,这就是验证的最后一公里,有遗留bug的风险。

55e3293f8984c087a4ef3c3323a422ed.png

使用Formal验证处理器子模块

验证子单元后,可以集成它们。可以想象在启动 Linux 时发现 ALU 错误是一种什么样的体验。

现在,需要一种更加混合的验证策略。Formal验证是有用的,因为从根本上说,Formal验证会执行所有可能的输入组合来验证ISA指定的行为,这些行为通常被描述为SystemVerilog断言。主要的处理器供应商还拥有广泛的验证套件,包括UVM测试平台和测试软件。仿真对于全面验证大型处理器的所有模块更是必要的,并确保将正确的行为集成到 SoC 中,同时还允许在被测处理器上执行测试软件。

令人惊讶的是,一个处理器核心中可以有很多错误,并且仍然能够启动 Linux。通过真实的linux系统启动,你会发现各种在其他EDA验证和Formal验证中找不到的东西,比如很多异步时序。

大多数人通过将实现的功能与参考模型进行比较来验证处理器。规格并非在各个方面都精确,它可能没有说明当六个相同优先级的中断同时发生时会发生什么。微架构选择采用哪一个,在pipeline的哪个阶段处理,这些选择因处理器内核而异。这个时候参考模型可能会起到意想不到的作用,当参考模型和RTL设计比对不通过时,你就会分析设计是否合理!

RISC-V的一大吸引力在于,你可以自由地修改处理器,使其更适合特定应用。挑战在于,你投入的每一件事情都会使验证加倍,复杂性加倍。添加东西非常容易,但是很难让它们以高质量出口。很多人没有意识到自定义指令增加的复杂性。他们必须自己进行所有这些验证。对于你添加的所有内容,必须完全重新验证所有内容,以及这个添加不会影响更多内容。你必须考虑它如何影响设计的其余部分,特别是如果它改变了pipeline中的内容、ALU 中的冲突、cache系统的问题或load store的东西。

你什么时候完成?
验证永远不会完成。普遍接受的想法是,当验证做得足够时,风险是可控的。

验证的过程就是告诉你已经做了哪些事情,验证给了你一定程度的信心,但它并不能保证不会有问题。如果你使用仿真,你可以生成大量的覆盖率报告,这些报告会让你有信心说你已经激发了你的设计的大部分,并且覆盖率证明了这一点,并且你已经发现了某些类别的错误。

由于处理器验证的复杂性,这种覆盖范围是不够的。

处理器覆盖率不仅仅是所有指令以及指令的耦合,此时你只是关注处理器中的解码器。你并没有真正测试其他任何东西,包括指令序列以及pipeline中发生的情况。

随着 RISC-V 中引入新的自定义指令,了解微架构以及如何影响整个 SoC 及其上运行的工作负载非常重要。硬件辅助验证,如虚拟原型功能、仿真和硬件原型设计,是整个验证流程中的关键组成部分。这些技术有助于确保RISC-V微架构决策不会对功耗和性能tradeoff产生负面影响。

当涉及到安全时,需要更加严格。根据最终产品所需的认证级别,他们必须达到一定程度的故障覆盖率。需要注入定义明确的故障,这些故障由 ISO 26262 为功能安全而定义。进行故障分析,然后生成诊断覆盖率。如果在设计中为关键功能插入这些故障,你是否内置了安全机制来处理这些故障?

当无法完成验证时,启发式方法往往变得很重要。原则性建议是,在验证是不要认为自己是一个验证工程师,需要站在用户的角度使用这款芯片,即必须继续运行真正的软件。在你运行一段时间后,一切似乎都正常。这是一个非常有价值的事情,即使无法量化,但是仍旧有很大的意义。

RISC-V的开源特性也使其面临潜在的安全风险。虽然透明度允许社区驱动的审查,但这也意味着对手可以访问相同的信息。这需要强大的安全验证,确保微架构能够抵御各种攻击。与封闭式架构相比,RISC-V的安全挑战更加严峻,专有设计可以对其安全功能保密。

RISC-V需要更多专用的验证工具。当处理器由五家不同的公司设计时,对这些处理器的测试生成器或Formal工具的需求并不大,因为它们都是在各个公司内部构建的。但现在有了RISC-V,围绕RISC-V ISA的架构分析、验证、Formal肯定有一个市场。

随着时间的推移,我们会看到人们为RISC-V的性能分析工具和Formal工具,但现在还为时过早。

下图列出了验证处理器微架构时可以考虑的方法。

342e3ca10415e320bd69ee6724d0d72d.png

处理器的验证方法。

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

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

相关文章

文献速递:深度学习肝脏肿瘤诊断---基于深度学习的表型分类重新划分联合肝细胞胆管癌

Title 题目 Deep learning-based phenotyping reclassifies combined hepatocellular cholangiocarcinoma 基于深度学习的表型分类重新划分联合肝细胞胆管癌 01文献速递介绍 Primary liver cancer arises either from hepatocytic or biliary lineage cells, giving rise to…

2024中国内燃机展-北京汽车发动机零部件展

2024第二十三届中国国际内燃机与零部件展览会 由中国内燃机工业协会主办、中国机床专用技术设备有限公司、汽车工艺装备成套开发集团协办的2024中国国际内燃机及动力装备博览会(简称“动博会”)将于2024年10月11日-13日在亦创国际会展中心隆重举办。本届…

通过matlab分别对比PSO,反向学习PSO,多策略改进反向学习PSO三种优化算法

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 粒子群优化算法 (PSO) 4.2 反向学习粒子群优化算法 (OPSO) 4.3 多策略改进反向学习粒子群优化算法 (MSO-PSO) 5.完整程序 1.程序功能描述 分别对比PSO,反向学习PSO,多策略改进反向学…

为数据穿上安全的外衣——零售电商场景下的数据安全体系建设

在电子商务交易过程中,会涉及大量的个人和财务数据的传输和处理,随着电子商务的发展,数据安全风险也成为一个备受关注的问题。 而跨境电商,属于出海业务,涉及到海外不同国家的政策法规,且数据作为电商的业…

Linux内核之aligned用法实例(四十七)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

微信小程序生成链接或二维码的对比

二维码 1.小程序样式码 获取参数直接options.xxx(参数名) 方法:微信公众平台 》工具》生成小程序二维码; 样式图:就一看就是小程序的二维码; 2.正方形二维码/链接 方法:微信公众平台》开…

5-pytorch-torch.nn.Sequential()快速搭建神经网络

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言torch.nn.Sequential()快速搭建网络法1 生成数据2 快速搭建网络3 训练、输出结果 总结 前言 本文内容还是基于4-pytorch前馈网络简单(分类&#xf…

Go 编译构建的一些细节

Go 编译构建的一些细节 发现自己竟然没有怎么认真研究过 go 的编译构建命令。 结论前置 go run 专门用来运行命令源码文件的命令,一般用来运行单个文件go build 主要是用于测试编译。编译某个包或者项目,在当前目录下生成可执行文件go install 编译并…

RabbitMQ - Spring boot 整合 RabbitMQ

一、RabbitMQ 1、RabbitMQ 使用场景 1.1、服务解耦 假设有这样一个场景, 服务A产生数据, 而服务B,C,D需要这些数据, 那么我们可以在A服务中直接调用B,C,D服务,把数据传递到下游服务即可 但是,随着我们的应用规模不断扩大,会有更多的服务需要A的数据,如果有几十甚至几百个下…

【CANN训练营】目标检测(YoloV5s)实践(Python实现)

样例介绍 使用多路离线视频流(* .mp4)作为应用程序的输入,基于YoloV5s模型对输入视频中的物体做实时检测,将推理结果信息使用imshow方式显示。 样例代码逻辑如下所示: 环境信息 CPU:Intel Xeon Gold 63…

C++11新特性系列(一)

目录 1、C11简介 2、列表的初始化 2.1 {}初始化 2.2 initializer_list 3、auto与decltype 3.1 auto 3.2 decltype 4、范围for循环 5、右值引用和移动语义 4.1 左值引用和右值引用 4.1.1 左值引用 4.1.2 右值引用 4.2 右值引用使用场景和意义 1、C11简介 C11是C语言…

高通 Android 12 源码编译aidl接口

最近在封装系统sdk接口 于是每次需要更新aidl接口 ,传统方式一般使用make update-api或者修改Android.mk文件,今天我尝试使用Android.bp修改 ,Android 10之前在Android.mk文件修改,这里不做赘述。下面开始尝试修改,其实…

InnoDB架构:磁盘篇

InnoDB架构:磁盘篇 InnoDB是MySQL数据库中默认的存储引擎,它为数据库提供了事务安全型(ACID兼容)、行级锁定和外键支持等功能。InnoDB的架构设计优化了对于读取密集和写入密集型应用的性能表现,是一个高度优化的存储系…

近屿智能全新推出AI培训产品:AIGC大模型工程师与产品经理学习路径图

如今,人工智能和自然语言处理技术的发展,使得AI生成的内容(AIGC,AI Generated Content)领域开发出了巨大的潜力。就像业内巨头OpenAI公司,开发出了一系列自然语言处理模型ChatGPT,不仅带动了全世…

C语言单向链表的经典算法

1.分割链表 2.移除链表元素 3.反转链表 4.合并两个有序链表 5.链表的中间结点 6.环形链表的约瑟夫问题 1.分割链表: 1.思路:创建新链表,小链表和大链表。如图 代码如下 /*** Definition for singly-linked list.* struct ListNode {* int val…

Unity类银河恶魔城学习记录12-18,19 p140 Options UI-p141 Finalising ToolTip源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili UI_ToolTip.cs using TMPro; using UnityEngine;public class UI_ToolTip :…

IBM SPSS Statistics for Mac中文激活版:强大的数据分析工具

IBM SPSS Statistics for Mac是一款功能强大的数据分析工具,为Mac用户提供了高效、精准的数据分析体验。 IBM SPSS Statistics for Mac中文激活版下载 该软件拥有丰富的统计分析功能,无论是描述性统计、推论性统计,还是高级的多元统计分析&am…

【面试经典 150 | 链表】K 个一组翻转链表

文章目录 写在前面Tag题目来源解题思路方法一:迭代 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附带一些对于本题涉及到的数据结构等内容进行回顾…

【从零开始手搓12306项目】第一阶段遇到的问题及解决方案

IDEA中datebase连接mysql失败 读取外包函数报错 注意区分private和public 找不到数据库? 一定要注意数据库的url链接,在datebase的url复制过来 xml和java对应不上? 最好复制一遍到xml文件 git忽略条件文件目录 定义Git全局的 .gitigno…

人工智能与IP代理池:解析网络数据采集的未来

前言 随着互联网的快速发展,数据成为了当今社会最宝贵的资源之一。然而,要获取大量的网络数据并进行有效的分析,往往需要面对诸多挑战,其中之一就是网络封锁与反爬虫机制。在这个背景下,人工智能(AI&#x…