CN117075969A - 面向risc-v处理器特权指令集一致性的形式验证方法及装置 - Google Patents
面向risc-v处理器特权指令集一致性的形式验证方法及装置 Download PDFInfo
- Publication number
- CN117075969A CN117075969A CN202311088711.4A CN202311088711A CN117075969A CN 117075969 A CN117075969 A CN 117075969A CN 202311088711 A CN202311088711 A CN 202311088711A CN 117075969 A CN117075969 A CN 117075969A
- Authority
- CN
- China
- Prior art keywords
- signal
- signals
- instruction set
- verified
- instruction
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 60
- 238000012795 verification Methods 0.000 title claims abstract description 51
- 238000013519 translation Methods 0.000 claims abstract description 61
- 238000013508 migration Methods 0.000 claims abstract description 22
- 230000005012 migration Effects 0.000 claims abstract description 22
- 238000001514 detection method Methods 0.000 claims abstract description 16
- 230000007246 mechanism Effects 0.000 claims description 34
- 230000006870 function Effects 0.000 claims description 31
- 238000013461 design Methods 0.000 claims description 28
- 230000008569 process Effects 0.000 claims description 25
- 238000012545 processing Methods 0.000 claims description 16
- 230000005856 abnormality Effects 0.000 claims description 15
- 230000000737 periodic effect Effects 0.000 claims description 12
- 230000002159 abnormal effect Effects 0.000 claims description 10
- 230000001360 synchronised effect Effects 0.000 claims description 10
- 238000013507 mapping Methods 0.000 claims description 8
- ZLIBICFPKPWGIZ-UHFFFAOYSA-N pyrimethanil Chemical compound CC1=CC(C)=NC(NC=2C=CC=CC=2)=N1 ZLIBICFPKPWGIZ-UHFFFAOYSA-N 0.000 claims description 5
- 230000006399 behavior Effects 0.000 claims description 4
- 238000012360 testing method Methods 0.000 description 7
- 238000006243 chemical reaction Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000010998 test method Methods 0.000 description 2
- 108010072966 SV48 Proteins 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000013499 data model Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000012938 design process Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000005284 excitation Effects 0.000 description 1
- 210000001503 joint Anatomy 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 230000008092 positive effect Effects 0.000 description 1
- 230000008054 signal transmission Effects 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 230000009897 systematic effect Effects 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/3834—Maintaining memory consistency
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明公开了一种面向RISC‑V处理器特权指令集一致性的形式验证方法及装置,所述方法包括:在Chisel设计的待验证处理器中引出指令信号、通用寄存器信号、访存信号、控制和状态寄存器信号、TLB页表翻译信号到信号同步模块;将指令信号作为特权指令集参考模型执行的指令输入,并将通用寄存器信号、访存信号、控制和状态寄存器信号、TLB页表翻译信号与特权指令集参考模型的执行结果是否一致设为待验证性质;将特权指令集参考模型、待验证处理器、信号同步模块与待验证性质共同转换迁移系统模型;基于迁移系统模型,交由模型检测算法进行求解,得到待验证处理器的验证结果。本发明可以对RISC‑V特权指令集进行一致性验证。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种面向RISC-V处理器特权指令集一致性的形式验证方法及装置。
背景技术
RISC-V指令集主要分为非特权指令集和特权指令集两部分。操作系统中虚拟化和安全等功能的实现离不开特权指令集。不同于常规指令对数据进行运算和读写操作,特权指令集需要考虑在不同特权级别下指令执行的差异性,以及中断、异常处理、地址转换和保护等问题,实现较为复杂。这就导致处理器设计者在设计该部分指令时极易出错,产生功能问题。
特权指令集一致性的形式化验证对处理器设计是否符合特权指令集规范进行检查,是处理器功能验证的重要环节。形式验证技术基于数学证明手段,使用系统性的方法遍历整个状态空间,与测试和仿真相比,能够发现更深层次的系统设计错误,而且不需用户手动提供激励和测试用例,已经被广泛用于处理器设计的验证。
Chisel是一种嵌入到Scala中的新型硬件构建语言,已经广泛用于RISC-V处理器的RTL设计,因此,RISC-V处理器Chisel设计的特权指令集一致性的形式验证问题也应得到关注。
但目前已有的对RISC-V处理器设计的指令集一致性进行形式验证的工具尚不支持特权指令集的一致性验证。对于常规的测试方法,其问题在于不能对处理器设计进行完备的验证,即通过测试不能完全保证设计的正确性。对Chisel生成的Verilog进行测试或形式验证的方法,延长了工具链,需要再根据生成的Verilog代码与不同的工具对接,实现较为困难。
发明内容
针对以上问题,本发明公开了一种面向RISC-V处理器特权指令集一致性的形式验证方法及装置,该方法使用形式化方法中的模型检测技术,对指定的验证范围,如果存在设计问题则一定能发现。
本发明的技术方案,包括:
一种面向RISC-V处理器特权指令集一致性的形式验证方法,包括:
在Chisel设计的待验证处理器中引出指令信号、通用寄存器信号、访存信号、控制和状态寄存器信号、TLB页表翻译信号到信号同步模块;其中,所述信号同步模块用于对指令信号、通用寄存器信号、访存信号、控制和状态寄存器信号和TLB页表翻译信号进行信号同步处理;
将所述指令信号作为特权指令集参考模型执行的指令输入,并将所述通用寄存器信号、所述访存信号、所述控制和状态寄存器信号、所述TLB页表翻译信号与所述特权指令集参考模型的执行结果是否一致设为待验证性质;其中,所述特权指令集参考模型是由Chisel编写,且表达RISC-V特权指令集规范中约定行为的模型;
将特权指令集参考模型、待验证处理器、信号同步模块与待验证性质共同转换迁移系统模型;
基于所述迁移系统模型,交由模型检测算法进行求解,得到所述待验证处理器的验证结果。
进一步地,所述特权指令集参考模型执行指令的过程包括:对运行过程中出现的不合法指令、非对齐访存、断点和系统调用进行处理的异常处理流程;
所述异常处理流程包括:
记录产生的所有异常并确定当前优先级最高的异常;
基于当前优先级最高的异常,进行M模式下的异常处理流程和S模式/U模式下的异常委托处理流程;其中,所述进行M模式下的异常处理流程,包括:
以当前最高优先级作为参数,调用异常处理函数,以保存所述当前优先级最高的异常的现场;
对所述当前优先级最高的异常进行异常处理;
待异常处理完毕后,调用MRET指令退出异常处理流程。
进一步地,所述记录产生的所有异常并确定当前优先级最高的异常,包括:
设置全局异常使能和异常处理函数,所述异常处理函数维护一容器,且出现异常则将容器相应位打开,并打开全局异常使能;
设置一优先级序列以保存RISC-V异常代码的优先级;其中,所述RISC-V异常代码的优先级基于RISC-V特权指令集手册定义;
使用Scala语言的高阶函数foldRight对所述容器进行按照优先级进行遍历,以确定当前优先级最高的异常。
进一步地,所述以当前最高优先级作为参数,调用异常处理函数,以保存所述当前优先级最高的异常的现场,包括:
将异常发生前所处的特权级存储在mstatus.MPP位,mstatus.MIE保存到mstatus.MPIE位,并将mstatus.MIE置零以禁用中断;
和/或,
将异常原因写入mcause寄存器,导致异常的附加信息写入mtval寄存器;
和/或,
将异常指令的指令PC写入mepc寄存器;
和/或,
将特权级更改至M模式。
进一步地,所述特权指令集参考模型执行指令的过程包括:虚拟内存和物理内存的地址转换流程;
所述虚拟内存和物理内存的地址转换流程的实现过程,包括:
通过信号同步机制得到TLB页表翻译信号,根据RISC-V指令集规定的虚拟内存和物理内存的地址转换算法,使用其中的页表项数据得到虚拟页和物理帧直接的映射关系。
进一步地,所述特权指令集参考模型执行指令的过程包括:针对TLB页表的访存流程;
所述针对TLB页表的访存流程的实现过程,包括:
设计多个内存读写接口,所述多个内存读写接口包括:用于Load/Store指令的访存接口以及用于虚拟内存和物理内存的地址转换翻译的三个读端口、一个写端口;
针对需要访存虚拟地址的Load/Store指令,基于所述多个内存读写接口实现针对TLB页表的访存流程。
进一步地,将所述通用寄存器信号、所述访存信号、所述控制和状态寄存器信号、所述TLB页表翻译信号与所述特权指令集参考模型的执行结果是否一致设为待验证性质,包括:
通过信号同步机制进行获取所述通用寄存器信号、所述访存信号、所述控制和状态寄存器信号、所述TLB页表翻译信号与所述特权指令集参考模型的执行结果;其中,所述信号同步机制包括:
通过嵌套多个RegNext()函数实现固定周期信号的后延,所述固定周期信号包括:通用寄存器信号;
和,
将非固定周期信号记录于队列内,并在待验证处理器完成指令后,且参考模型执行指令时,对队列进行非固定周期信号读取,以完成对非固定周期信号的同步,所述非固定周期信号包括:访存信号、控制和状态寄存器信号;
和,
设计多个队列存储访存不同页表级的TLB页表翻译信号,并在待验证处理器执行指令时将TLB页表信号存储到多个队列中,在参考模型执行指令时对多个队列进行TLB页表翻译信号读取,以完成TLB页表翻译信号的同步;
基于信号同步机制的获取结果,设置待验证性质。
进一步地,所述基于所述迁移系统模型,交由模型检测算法进行求解,得到所述待验证处理器的验证结果,包括:
将迁移系统模型输出为BTOR2格式;
调用模型检测算法,对BTOR2格式的迁移系统进行形式化验证,在满足指令验证范围约束的前提下,检查状态空间内是否有违反待验证性质的情况;
如果发现反例,根据Chisel和BTOR2的对应关系生成反例波形。
进一步地,所述模型检测算法包括:BMC、K-induction或IC3。
一种RISC-V处理器Chisel设计指令集一致性的形式验证装置,包括:
待验证处理器,用于提供指令信号、通用寄存器信号、访存信号、控制和状态寄存器信号、TLB页表翻译信号;
同步模块,用于对指令信号、通用寄存器信号、访存信号、控制和状态寄存器信号、TLB页表翻译信号进行信号同步处理;
特权指令集参考模型,用于基于指令信号,得到所述特权指令集参考模型的执行结果;
其中,将所述通用寄存器信号、所述访存信号、所述控制和状态寄存器信号、所述TLB页表翻译信号与所述特权指令集参考模型的执行结果是否一致设为待验证性质后,将特权指令集参考模型、待验证处理器、信号同步模块与待验证性质共同转换迁移系统模型,并基于所述迁移系统模型,交由模型检测算法进行求解,得到所述待验证处理器的验证结果。
与现有技术相比,本发明的积极效果为:
针对特权指令集的验证需要用户对指令集和计算机系统结构有着较为深刻地理解,同时常规的形式化验证技术也需要用户具有形式化验证的相关知识。本发明不需要用户在RISC-V指令集、计算机系统结构、形式化验证技术具有深刻的了解。仅需使用Chisel的语法连接待验证处理器中的电路信号到信号同步模块,降低了形式化验证方法的使用难度;
针对RISC-V特权指令集一致性验证问题设计,无需使用Chisel断言编写待验证性质,可以在不同Chisel处理器设计中复用;验证的配置与运行均在Chisel代码中完成,自动调用后端模型检测算法;
相比于测试方法,形式化方法的验证更完备,无需设置测试用例。
相比于利用Verilog工具的验证方法,验证工作流程更短,不用再在Verilog代码层面进行连接配置等工作。
附图说明
图1是本发明的整体结构示意图。
图2特权指令集的参考模型的示意图。
图3特权指令集的参考模型的访存接口。
具体实施方式
下面结合附图对本发明进行进一步详细描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
本发明是一种端到端的形式化验证方法,如图1所示,其通过一个Chisel编写的特权指令集参考模型,表达RISC-V特权指令集规范中约定的行为;通过信号同步模块与辅助工具,连接待验证处理器和参考模型,设置验证范围,组成包含性质的待验证系统;转换为迁移系统模型,调用模型检测算法求解;如果有则生成反例波形。
具体步骤包括:
1)根据RISC-V特权指令集规范,利用Chisel编写特权指令集参考模型,接受用户参数化控制参考模型支持功能。
本发明的参考模型支持RISC-V指令集中32/64位基础指令集I、乘除指令集M、压缩指令集C、原子指令集A,并支持M、S、U三个特权级和SV39分页方案。该参考模型每个时钟执行一条指令,效仿迁移系统模型的形式,通过当前值now信号和下一时钟值next信号描述每个寄存器值的变化情况。并分模块实现特权指令集,根据用户传入的位宽信息和特权指令集的支持情况控制参考模型功能。
2)进行参考模型与待验证处理器的信号同步,对于待验证处理器中无法确定后延周期的信号,使用队列进行临时的存储。
具体来说,在Chisel设计的待验证处理器中将指令信号、通用寄存器信号、访存信号、控制和状态寄存器(CSR)信号、TLB页表翻译信号引出到信号同步模块,不同的信号需要采用不同的信号同步机制进行处理。
本发明的同步模块支持同步待验证处理器和参考模型的指令信号、通用寄存器信号、访存信号、控制和状态寄存器(CSR)信号、TLB页表翻译信号,比较两者的执行情况是否匹配,生成可验证的性质。
3)从同步模块中取出指令信号作为特权指令集参考模型执行的指令输入,将同步模块中获取的其余信号与参考模型的执行结果比较,将信号值是否一致设为待验证性质。
4)将参考模型、待验证处理器、信号同步模块与待验证性质共同转换迁移系统模型。
5)将迁移系统输出为BTOR2格式,调用模型检测算法进行验证。模型检测算法包括:BMC、K-induction或IC3。
6)如果发现反例,根据Chisel和BTOR2的对应关系生成反例波形。
具体来说,本发明提出的面向RISC-V处理器特权指令集一致性的形式验证方法相较于常规的非特权指令集的指令集一致性形式验证方法,不仅新增了支持特权指令集的参考模型,还增加了针对特权指令集参考模型与待验证处理器间的信号同步机制。
一.支持特权指令集的参考模型。
本发明公开了一种支持特权指令集的参考模型,该参考模型实现了特权指令集需要的控制和状态寄存器(CSR)、异常处理、虚拟内存机制与针对TLB页表的访存,且支持M、S、U三种特权级及必要的指令,并至少实现SV39分页方案。
(一)控制和状态寄存器的实现。
虽然CSR寄存器读写的逻辑与通用寄存器的处理类似,但是由于不同的CSR寄存器可能有着不同的读写权限,特别是某些寄存器精确到单一比特位读写权限的控制,需要进行特殊处理。
部分CSR寄存器的某些位是禁止读或者禁止写的,例如:mvendorid、mimpid等机器信息寄存器,均为只读寄存器。因此需要设计一个合适的数据结构对这些读写要求进行保存。参考模型中设计了读写掩码,将读或写的源数据与掩码进行与操作,实现对某些CSR寄存器状态位的保护。
读写掩码位宽与CSR寄存器位宽一致,对于写数据,通过原数据和取反后的掩码进行与操作,再与原数据和掩码进行与操作后取或,得到最终的应该写入的数据,流程如公式1-1所示,其中wdata代表最终写入的数据,nowCSR代表寄存器的值,wmask代表写掩码,data代表最初希望写入的数据,wmask对应位为1时CSR对应位可写。
wdata = (nowCSR & ~wmask) | (data & wmask) (1-1)
对于读数据,只需要将寄存器的值与读掩码作与操作即可,如公式1-2所示,其中rdata代表读取的数据,nowCSR代表寄存器的值,rmask代表读掩码。rmask对应位为1时CSR对应位可读。
rdata = (nowCSR & rmask) (1-2)
此外,特权指令集要求处理器自行检查某些状态位并进行相应的操作,即更新CSR寄存器的内容可能会同时修改处理器的一些信号值,如对mstatus寄存器进行写操作时,若将mstatus.FS的两个比特位修改为全1,将导致mstatus的最高比特位更新为1。为了在参考模型内实现状态的自动更新,需要设计一个写副作用函数,在每次写操作完成后调用函数,重新对寄存器进行二次赋值。此外,写副作用函数也可以控制寄存器的写权限。
使用了样例类(case info)可以方便地实现上述功能,样例类是Scala中的一种专门用于创建不可变的数据模型的类。参考模型设计了一个记录CSR寄存器的样例类,在该类中保存的CSR寄存器的信息包括:寄存器地址、位宽、读掩码、写掩码和写副作用函数。
(二)异常处理。
RISC-V的异常处理机制是指对处理器运行过程中出现不合法指令、非对齐访存、断点、系统调用等异常情况进行处理。异常处理是执行操作系统的基础需求,也是特权指令集的主要功能之一。目前RISC-V特权指令集提供的异常种类如下表1所示:
表1 RISC-V异常代码
RISC-V对异常的处理主要依靠CSR寄存器和软件中的异常处理函数,主要依赖的CSR寄存器如表2所示:
表2部分异常处理所需的CSR寄存器
在默认情况下,所有的异常都在M模式(机器模型)下进行处理,通过异常委托(Exception Delegation)机制可以选择将特定的异常交由S模式(监管模型)甚至U模式(用户模式)进行处理,能够减少不必要的特权级切换。
当处理器执行指令出现异常时,在不考虑异常委托的情况下,异常处理过程如下:
1.保存现场:
(1)将异常发生前所处的特权级存储在mstatus.MPP位,mstatus.MIE保存到mstatus.MPIE位,并将mstatus.MIE置零以禁用中断;
(2)将异常原因写入mcause寄存器,导致异常的附加信息写入mtval寄存器;
(3)异常指令的指令PC指写入mepc寄存器;
(4)将特权级更改至M Mode;
2.异常处理:跳转到mtvec记录的异常处理程序启示地址进行异常处理;
3.恢复执行:异常处理程序最终调用xRET指令退出异常处理程序,例如执行MRET指令,则需要恢复mstatus寄存器,将其MPIE位复制到MIE位来恢复之前的中断使能设置,并将特权级设置为MPP位的值。并从mepc中保存的地址执行,恢复到异常发生前的程序流。
也就是说,本发明的参考模型使用Chisel语言进行设计,在特权指令集参考模型的异常处理模块的具体设计上,由于上述异常处理流程在处理器设计中涉及多个周期进行,而在设计参考模型时则需要在单周期内完成整个流程,即需要使用组合逻辑完成包括异常处理模块在内的各个模块的设计。
利用Chisel语言的特性,在单周期内完成异常处理模块的设计需要使用设置全局异常使能和异常处理函数。在不同的模块中出现异常均可以调用异常处理的方法。异常处理函数维护了一个容器(Vector),出现异常则将容器相应位打开,并且打开全局异常使能,对不同的异常进行相应的处理。如果多个异常同时发生,则需要按照异常优先级进行仲裁。
根据表1中描述的优先级进行优先级仲裁,确定最高优先级的异常代码,最终只会对优先级最高的异常进行处理。(表中优先级值越小,优先级越高)
参考模型中优先级仲裁的设计需要提前定义一个序列(Sequence)将优先级值从小到大进行保存。
通过设置循环依次从序列中得到较低优先级的异常编号,并通过该编号读取异常处理容器的相应位,判断容器对应位是否为空判断是否产生了相应异常,若产生异常则将该异常编号进行保存,由于该寻找异常的循环从较低的优先级开始寻找,再较高优先级的异常发生的情况下,将会把保存的较低异常的编号进行覆盖,因此最终找到的为优先级更高的异常。该循环可以使用Scala语言自带的高阶函数foldRight对容器进行按照优先级进行遍历。
(三)虚拟内存机制与针对TLB页表的访存。
虚拟内存机制是现代操作系统的标志之一,操作系统需要对不同用户进程的内存空间进行隔离,这样保证了不同程序在运行时不会影响到其他程序在内存中的数据,充分保障系统的安全性和可靠性。
在处理器设计过程中,通常在TLB(页表缓冲)内完成虚实地址转换机制。TLB是处理器中的重要功能部件之一,用于在虚拟地址和物理地址之间进行快速转换。当访问虚拟地址时,处理器需要将虚拟地址转换为物理地址。这个过程需要多次进行访存,因此对处理器性能影响较大。
为解决上述问题,TLB存储了最近访问的一部分虚拟地址和物理地址之间的映射关系,并提供了一种快速查找这些映射关系的方法。一旦TLB中找到了相应的映射关系,CPU就可以直接使用物理地址访问内存,而无需进行昂贵的地址转换操作。这样可以极大地提高CPU访问内存的效率。
TLB需要完成虚实地址转换并对结果进行缓存进行加速,而缓存的过程与指令集一致性问题无关,因此在设计参考模型时,仅需要考虑虚拟内存机制的实现,相当于实现一个没有缓存的TLB。
虚拟内存机制的核心是页表和虚实地址转换。通过信号同步机制得到TLB页表翻译信号,使用其中的页表项数据得到虚拟页和物理帧直接的映射关系,然后通过映射关系将这些页映射到物理帧上,完成虚拟内存和物理内存的转换。
根据特权指令集手册,RISC-V的分页方案有SV32、SV39、SV48、SV57四种,其中SV32用于32位处理器分页,SV39常用于64位处理器分页,SV32和SV39分页方案均采用三级页表,具体算法如下:
1)检查satp寄存器中保存的模式是否为监管模式或者用户模式,否则不进行地址翻译过程。若是则访存得到satp寄存器的值。
2)通过前一步骤访存值中保存的物理页数字计算出物理页表的对应地址,得到对应的页表项,检查该页表项是否违反物理内存的属性和保护检查,若违反则引发与原始访问类型相对应的访问错误异常。
3)如果上述页表项的有效位为0,或者读取位为0,写入位为1,或者页表项的保留位包含非零值,则停止并引发与原始访问类型相对应的页错误异常。
4)如果未出现异常则认为上述页表项有效。如果页表项的读取位为1或者执行位为1,则执行步骤5。否则,此页表项是页表的下一级指针。如果没有下一级,则停止并引发与原始访问类型相对应的页错误异常。否则转到步骤2,步骤2中使用当前得到的页表项作为访存值。
5)找到了一个叶页表项,考虑mstatus寄存器的SUM和MXR字段的值,以及当前特权模式下页表项的读取位、写入位、执行位、使用位是否允许所请求的内存访问。如果不允许,则停止并引发与原始访问类型相对应的页错误异常。
6)当页表项对应级别的物理页数字不为0,则这是一个不对齐的超级页面;停止并引发与原始访问类型相对应的页错误异常。
7)如果页表项的访问位为0,或者原始内存访问为写内存且页表项的脏位为0,则引发与原始访问类型相对应的页错误异常,或者:
(1)如果存储到页表项中会违反物理内存的属性和保护检查,则引发与原始访问类型相对应的访问错误异常。
(2)原子地执行以下步骤:
①将最后一次步骤2的访存值与当前虚拟地址页表偏移值相加,取出其中对应的页表项部分的值与当前页表项值进行比较,
②如果值匹配,则将页表项的访问位设置为1,并且如果原始内存访问为写内存,则也将页表项的脏位设置为1。
③如果比较失败,则返回到步骤2。
8)翻译成功。翻译后的物理地址如下所示:
(1)物理地址的页面偏移等于虚拟地址的页面偏移。
(2)如果最终页表级非最低,则这是一个超页翻译,且物理地址对应页表级以下的物理页表数字等于虚拟地址对应页表级以下的虚拟页表数字。
(3)物理地址对应页表级及以上的物理页表数字等于最终得到页表项内的对应页表级及以上的物理页表数字。
翻译过程有诸多步骤,特别是在多级寻找页表的过程中可能在几个步骤中循环(算法的2~4步),因此最好通过状态机进行实现。然而通过状态机将不可避免地使用多个周期。由于参考模型的实现与处理器略有不同,参考模型需要在单个周期内完成指令的执行,处理器对一条指令的执行则可能通过多个时钟周期。
因此需要通过组合逻辑实现RISC-V的虚实地址转换,将状态机转换成单周期实现需要设置多个布尔变量记录每个地址翻译步骤是否成功,并根据布尔变量的值,使用条件语句设置后续的操作,完成整个地址翻译步骤。实际上这些布尔变量记录的相当于状态机的状态转移条件,通过条件语句的组合,在单周期内完成状态机的整个状态的变化过程。
在实际的硬件设计中,出于面积和性能上的考虑,一般只会保留一至两组内存读写接口,处理器TLB部件在地址翻译过程中,通过状态机多次对内存进行访存,然而参考模型使用组合逻辑实现了地址翻译过程,该过程需要在一个周期内完成,因此参考模型需要同时设计多个内存读写接口。针对三级访存的地址翻译机制,需要在常规的用于Load/Store指令的访存接口外,额外设计三个读端口和一个写端口提供给地址翻译过程使用,访存设计如图2所示,常规的Load和Store指令需要通过地址转换单元得到真实的物理访存地址,地址转换单元翻译过程中需要三个PageRead端口和一个PageWrite端口。
如图3所示,由于参考模型可独立作为单周期处理器进行仿真,因此还需要设计一个支持多端口访存的内存模块,该模块可以使用Chisel自带的Chisel3.Mem对象进行修改。当参考模型连接内存模块单独执行时,其可以通过执行riscv-tests中虚实地址转换相关测试用例来保证其自身实现的正确性,方便调试。
二.针对特权指令集参考模型与待验证处理器间的信号同步机制。
本发明的信号同步机制包括:固定周期的信号同步机制、非固定周期的信号同步机制和针对TLB访存的信号同步机制。
2.1固定周期的信号同步机制。
固定周期的信号同步适用于大部分的寄存器和状态信号,例如通用寄存器、CSR寄存器、异常处理相关的状态信号等。常规的多级流水线处理器的指令在写回级进行提交,通用寄存器值的修改也在写回级发生修改,因此只需将寄存器信号直接同步给参考模型即可,对于CSR信号,通常在执行级发生了修改,只需将信号后延一个周期传递至写回级即可。在写回级所有数据得到同步,提交指令给参考模型进行比对。在具体实现上,通过嵌套多个RegNext()函数即可实现固定周期的信号后延。
2.2非固定周期的信号同步机制。
参考模型需要考虑不同的待验证处理器的信号传递周期,特别是针对非固定周期的信号同步过程,例如访存信号、控制寄存器信号和状态寄存器信号等。
在RISC-V中,读内存的Load指令有LD、LW、LB、LH四种,在64位处理器中,通常会对部分读和全部读进行划分,部分读即读取少于64位的指令,如LD、LW、LB,全部读则是读取全部64位,即LD指令,因此会在对应的状态机中设计一个判断步骤,导致对LD指令的数据读取需要更多的周期,不同的访存指令需要的时钟周期不是固定值,以NutShell处理器为例,LW、LB、LH指令需要后延两个时钟周期到达WBU模块内进行指令提交,而LD指令则需要三个时钟周期才能完成提交。而这些读指令通常共用一个信号接口,在代码层面上很难对每种读指令设计不同的同步周期。
解决上述问题需要对访存接口设计基于队列的存取机制,在待验证处理器访存的同时,将访存信息记录于队列内,待测处理器完成指令后,参考模型执行指令时,再对队列进行读取,完成对非固定周期的信号同步。
Chisel中已经内置了实现队列的相关类。通过对这些类进行封装,并配合固定周期的信号同步机制,即可实现非固定周期的信号同步机制。
2.3针对TLB访存的信号同步机制。
处理器中的TLB模块主要用于在虚拟地址和物理地址进行快速转换,在处理器中出于对时序和性能的考虑,该模块同时使用状态机在多个时钟周期内完成地址翻译的工作,而由于参考模型需要在单个周期内完成该工作,需要使用组合逻辑在单个周期内完成。由此将产生一个同步方面的问题,即需要在获得待测处理器TLB的全部访存操作后,同时在参考模型相应的接口中提供访存的数据。
设计针对TLB的信号同步机制首先需要分析相应处理器TLB的实现方法,特别是分析相应的访存和地址翻译状态机,在相应访存的状态中获取访存地址和数据等信息,并设计多个队列存储访存不同页表级的访存信息。
综上所述,本发明通过一个模块化、与原文对应、可参数化配置的特权指令集参考模型描述RISC-V特权指令集规范的行为,减轻了验证人员对形式化验证知识的需求,无需人工编写待验证的性质;通过一系列同步接口和辅助工具,简化了待验证处理器设计和参考模型之间的连接,并可以方便的设置验证范围;全部验证的连接与配置工作在Chisel代码中完成;当发现错误时,可以返回对应波形反例。
Chisel层面特权指令集参考模型的构建,通过组合逻辑在单周期内完成参考模型的译码、执行、异常处理、状态更新等操作,并搭配信号同步机制在单周期内完成处理器在数个周期内才能完成的根据页表的地址翻译工作。
针对参考模型和待验证处理器间完善的信号同步机制,待验证处理器提供指令信号、通用寄存器信号、访存信号、控制和状态寄存器(CSR)信号、TLB页表翻译信号给信号同步模块,信号同步模块使用队列对上述信号进行临时存储,并提交给参考模型进行同步执行,最终进行一致性检查。
Chisel层面端到端的验证方案。可以将整个处理器设计作为整体进行验证,不需要拆分模块;整个验证的连接与配置工作在Chisel中完成;无需使用Chisel断言编写RISC-V指令集一致性性质;可以返回对应的反例波形图。
尽管为说明目的公开了本发明的具体内容、实施算法以及附图,其目的在于帮助理解本发明的内容并据以实施,但是本领域的技术人员可以理解:在不脱离本发明及所附的权利要求的精神和范围内,各种替换、变化和修改都是可能的。本发明不应局限于本说明书最佳实施例和附图所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。
Claims (10)
1.一种面向RISC-V处理器特权指令集一致性的形式验证方法,其特征在于,所述方法包括:
在Chisel设计的待验证处理器中引出指令信号、通用寄存器信号、访存信号、控制和状态寄存器信号、TLB页表翻译信号到信号同步模块;其中,所述信号同步模块用于对指令信号、通用寄存器信号、访存信号、控制和状态寄存器信号和TLB页表翻译信号进行信号同步处理;
将所述指令信号作为特权指令集参考模型执行的指令输入,并将所述通用寄存器信号、所述访存信号、所述控制和状态寄存器信号、所述TLB页表翻译信号与所述特权指令集参考模型的执行结果是否一致设为待验证性质;其中,所述特权指令集参考模型是由Chisel编写,且表达RISC-V特权指令集规范中约定行为的模型;
将特权指令集参考模型、待验证处理器、信号同步模块与待验证性质共同转换迁移系统模型;
基于所述迁移系统模型,交由模型检测算法进行求解,得到所述待验证处理器的验证结果。
2.如权利要求1所述的方法,其特征在于,所述特权指令集参考模型执行指令的过程包括:对运行过程中出现的不合法指令、非对齐访存、断点和系统调用进行处理的异常处理流程;
所述异常处理流程包括:
记录产生的所有异常并确定当前优先级最高的异常;
基于当前优先级最高的异常,进行M模式下的异常处理流程和S模式/U模式下的异常委托处理流程;其中,所述进行M模式下的异常处理流程,包括:
以当前最高优先级作为参数,调用异常处理函数,以保存所述当前优先级最高的异常的现场;
对所述当前优先级最高的异常进行异常处理;
待异常处理完毕后,调用MRET指令退出异常处理流程。
3.如权利要求2所述的方法,其特征在于,所述记录产生的所有异常并确定当前优先级最高的异常,包括:
设置全局异常使能和异常处理函数,所述异常处理函数维护一容器,且出现异常则将容器相应位打开,并打开全局异常使能;
设置一优先级序列以保存RISC-V异常代码的优先级;其中,所述RISC-V异常代码的优先级基于RISC-V特权指令集手册定义;
使用Scala语言的高阶函数foldRight对所述容器进行按照优先级进行遍历,以确定当前优先级最高的异常。
4.如权利要求2所述的方法,其特征在于,所述以当前最高优先级作为参数,调用异常处理函数,以保存所述当前优先级最高的异常的现场,包括:
将异常发生前所处的特权级存储在mstatus.MPP位,mstatus.MIE保存到mstatus.MPIE位,并将mstatus.MIE置零以禁用中断;
和/或,
将异常原因写入mcause寄存器,导致异常的附加信息写入mtval寄存器;
和/或,
将异常指令的指令PC写入mepc寄存器;
和/或,
将特权级更改至M模式。
5.如权利要求1所述的方法,其特征在于,所述特权指令集参考模型执行指令的过程包括:虚拟内存和物理内存的地址转换流程;
所述虚拟内存和物理内存的地址转换流程的实现过程,包括:
通过信号同步机制得到TLB页表翻译信号,根据RISC-V指令集规定的虚拟内存和物理内存的地址转换算法,使用其中的页表项数据得到虚拟页和物理帧直接的映射关系。
6.如权利要求1所述的方法,其特征在于,所述特权指令集参考模型执行指令的过程包括:针对TLB页表的访存流程;
所述针对TLB页表的访存流程的实现过程,包括:
设计多个内存读写接口,所述多个内存读写接口包括:用于Load/Store指令的访存接口以及用于虚拟内存和物理内存的地址转换翻译的三个读端口、一个写端口;
针对需要访存虚拟地址的Load/Store指令,基于所述多个内存读写接口实现针对TLB页表的访存流程。
7.如权利要求1所述的方法,其特征在于,将所述通用寄存器信号、所述访存信号、所述控制和状态寄存器信号、所述TLB页表翻译信号与所述特权指令集参考模型的执行结果是否一致设为待验证性质,包括:
通过信号同步机制进行获取所述通用寄存器信号、所述访存信号、所述控制和状态寄存器信号、所述TLB页表翻译信号与所述特权指令集参考模型的执行结果;其中,所述信号同步机制包括:
通过嵌套多个RegNext()函数实现固定周期信号的后延,所述固定周期信号包括:通用寄存器信号;
和,
将非固定周期信号记录于队列内,并在待验证处理器完成指令后,且参考模型执行指令时,对队列进行非固定周期信号读取,以完成对非固定周期信号的同步,所述非固定周期信号包括:访存信号、控制和状态寄存器信号;
和,
设计多个队列存储访存不同页表级的TLB页表翻译信号,并在待验证处理器执行指令时将TLB页表信号存储到多个队列中,在参考模型执行指令时对多个队列进行TLB页表翻译信号读取,以完成TLB页表翻译信号的同步;
基于信号同步机制的获取结果,设置待验证性质。
8.如权利要求1所述的方法,其特征在于,所述基于所述迁移系统模型,交由模型检测算法进行求解,得到所述待验证处理器的验证结果,包括:
将迁移系统模型输出为BTOR2格式;
调用模型检测算法,对BTOR2格式的迁移系统进行形式化验证,在满足指令验证范围约束的前提下,检查状态空间内是否有违反待验证性质的情况;
如果发现反例,根据Chisel和BTOR2的对应关系生成反例波形。
9.如权利要求1所述的方法,其特征在于,所述模型检测算法包括:BMC、K-induction或IC3。
10.一种RISC-V处理器Chisel设计指令集一致性的形式验证装置,其特征在于,所述装置包括:
待验证处理器,用于提供指令信号、通用寄存器信号、访存信号、控制和状态寄存器信号、TLB页表翻译信号;
同步模块,用于对指令信号、通用寄存器信号、访存信号、控制和状态寄存器信号、TLB页表翻译信号进行信号同步处理;
特权指令集参考模型,用于基于指令信号,得到所述特权指令集参考模型的执行结果;
其中,将所述通用寄存器信号、所述访存信号、所述控制和状态寄存器信号、所述TLB页表翻译信号与所述特权指令集参考模型的执行结果是否一致设为待验证性质后,将特权指令集参考模型、待验证处理器、信号同步模块与待验证性质共同转换迁移系统模型,并基于所述迁移系统模型,交由模型检测算法进行求解,得到所述待验证处理器的验证结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311088711.4A CN117075969A (zh) | 2023-08-28 | 2023-08-28 | 面向risc-v处理器特权指令集一致性的形式验证方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311088711.4A CN117075969A (zh) | 2023-08-28 | 2023-08-28 | 面向risc-v处理器特权指令集一致性的形式验证方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117075969A true CN117075969A (zh) | 2023-11-17 |
Family
ID=88705764
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311088711.4A Pending CN117075969A (zh) | 2023-08-28 | 2023-08-28 | 面向risc-v处理器特权指令集一致性的形式验证方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117075969A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117422026A (zh) * | 2023-12-18 | 2024-01-19 | 青岛本原微电子有限公司 | 一种基于risc-v架构的处理器验证系统 |
CN117851268A (zh) * | 2024-03-07 | 2024-04-09 | 广东省新一代通信与网络创新研究院 | 基于fpga的原型验证平台的高频差分系统 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130326193A1 (en) * | 2012-05-31 | 2013-12-05 | Daniel M. McCarthy | Processor resource and execution protection methods and apparatus |
US20140266359A1 (en) * | 2013-03-15 | 2014-09-18 | Nanya Technology Corporation | Clock cycle compensator and the method thereof |
US20210157728A1 (en) * | 2019-11-25 | 2021-05-27 | SiFive, Inc. | Virtualized caches |
CN113673002A (zh) * | 2021-08-09 | 2021-11-19 | 中国科学院软件研究所 | 一种基于指针加密机制和risc-v协处理器的内存溢出防御方法 |
CN114138342A (zh) * | 2022-01-25 | 2022-03-04 | 北京大学 | Rocc协处理器接口模型及其自动生成工具和实现方法 |
CN115374440A (zh) * | 2022-08-24 | 2022-11-22 | 北京奕斯伟计算技术股份有限公司 | 安全防御方法和电子装置 |
CN115496017A (zh) * | 2022-09-06 | 2022-12-20 | 中国科学院软件研究所 | Chisel断言语言的类SVA扩展及形式化验证方法 |
CN115563914A (zh) * | 2022-09-29 | 2023-01-03 | 飞腾信息技术有限公司 | 验证方法及装置、计算设备、计算机可读存储介质 |
CN115964309A (zh) * | 2021-10-13 | 2023-04-14 | Arm有限公司 | 预取 |
US20230131389A1 (en) * | 2021-10-25 | 2023-04-27 | The Regents Of The University Of California | Quantum instruction set architecture (quasar) |
-
2023
- 2023-08-28 CN CN202311088711.4A patent/CN117075969A/zh active Pending
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130326193A1 (en) * | 2012-05-31 | 2013-12-05 | Daniel M. McCarthy | Processor resource and execution protection methods and apparatus |
US20140266359A1 (en) * | 2013-03-15 | 2014-09-18 | Nanya Technology Corporation | Clock cycle compensator and the method thereof |
US20210157728A1 (en) * | 2019-11-25 | 2021-05-27 | SiFive, Inc. | Virtualized caches |
CN113673002A (zh) * | 2021-08-09 | 2021-11-19 | 中国科学院软件研究所 | 一种基于指针加密机制和risc-v协处理器的内存溢出防御方法 |
CN115964309A (zh) * | 2021-10-13 | 2023-04-14 | Arm有限公司 | 预取 |
US20230131389A1 (en) * | 2021-10-25 | 2023-04-27 | The Regents Of The University Of California | Quantum instruction set architecture (quasar) |
CN114138342A (zh) * | 2022-01-25 | 2022-03-04 | 北京大学 | Rocc协处理器接口模型及其自动生成工具和实现方法 |
CN115374440A (zh) * | 2022-08-24 | 2022-11-22 | 北京奕斯伟计算技术股份有限公司 | 安全防御方法和电子装置 |
CN115496017A (zh) * | 2022-09-06 | 2022-12-20 | 中国科学院软件研究所 | Chisel断言语言的类SVA扩展及形式化验证方法 |
CN115563914A (zh) * | 2022-09-29 | 2023-01-03 | 飞腾信息技术有限公司 | 验证方法及装置、计算设备、计算机可读存储介质 |
Non-Patent Citations (2)
Title |
---|
何虎, 孙义和: "面向寄存器的流水线处理器建模及验证方法", 半导体学报, no. 01, 8 January 2003 (2003-01-08), pages 98 - 103 * |
詹博华;吴志林: "芯片设计形式验证", 《前瞻科技》, 31 March 2023 (2023-03-31), pages 23 - 32 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117422026A (zh) * | 2023-12-18 | 2024-01-19 | 青岛本原微电子有限公司 | 一种基于risc-v架构的处理器验证系统 |
CN117422026B (zh) * | 2023-12-18 | 2024-03-26 | 青岛本原微电子有限公司 | 一种基于risc-v架构的处理器验证系统 |
CN117851268A (zh) * | 2024-03-07 | 2024-04-09 | 广东省新一代通信与网络创新研究院 | 基于fpga的原型验证平台的高频差分系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN117075969A (zh) | 面向risc-v处理器特权指令集一致性的形式验证方法及装置 | |
US7472361B2 (en) | System and method for generating a plurality of models at different levels of abstraction from a single master model | |
US7146605B2 (en) | Automatic abstraction of software source | |
US20060130029A1 (en) | Programming language model generating apparatus for hardware verification, programming language model generating method for hardware verification, computer system, hardware simulation method, control program and computer-readable storage medium | |
US10255400B1 (en) | Debugging system and method | |
US7437282B2 (en) | Method and apparatus to provide alternative stimulus to signals internal to a model actively running on a logic simulation hardware emulator | |
US7370312B1 (en) | System and method for controlling simulation of hardware in a hardware development process | |
Große et al. | Quality-driven SystemC design | |
Vinco et al. | Code manipulation for virtual platform integration | |
Srivas et al. | Applying formal verification to a commercial microprocessor | |
EP3532936B1 (en) | Debugging system and method | |
US20080288902A1 (en) | Circuit design verification method and apparatus and computer readable medium | |
US20130173887A1 (en) | Processor simulation environment | |
Cordeiro et al. | Intrinsics-hmc: An automatic trace generator for simulations of processing-in-memory instructions | |
Hunt et al. | Verifying the FM9801 microarchitecture | |
US11106846B1 (en) | Systems and methods for emulation data array compaction | |
US20070038431A1 (en) | Data processing apparatus simulation | |
Hin et al. | Supporting RISC-V full system simulation in gem5 | |
Tasiran et al. | Using formal specifications to monitor and guide simulation: Verifying the cache coherence engine of the Alpha 21364 microprocessor | |
Liu et al. | A survey of formal techniques for hardware/software co-verification | |
Ferro et al. | Runtime verification of typical requirements for a space critical SoC platform | |
US20220302917A1 (en) | Property-Driven Automatic Generation of Reduced Component Hardware | |
US11314911B1 (en) | High-level synthesis implementation of data structures in hardware | |
Wang et al. | An embedded C language Target Code level Unit Test method based on CPU Simulator | |
GB2338573A (en) | Modeling integrated circuits |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |