为习惯日益杂乱的体系芯片SoC(System on Chip)规划,新一代芯片规划和验证言语SystemVerilog应运而生,并在2005年11月被美国电气和电子工程师协会(IEEE)同意为新规范[1]。在此基础上,Synopsys公司和ARM公司联合推出了VMM验证办法学[2,3]。运用VMM办法学提出的规矩和规范函数库,能够快速建立功用强大的验证渠道。经过受束缚的随机鼓励,并以掩盖率为辅导,能够快速完结体系功用验证,明显进步验证功率。
文章以实践工程项目为布景,构建了一种契合VMM办法学规范的体系级软硬件协同验证渠道。一起经过对试验数据的剖析,提出了用于优化随机鼓励束缚的办法。
1 体系级软硬件协同仿真验证渠道
一般仿真验证SoC的战略可分为3个进程:模块验证、集成验证和体系验证[2,4]。其间体系验证渠道中包含处理器CPU或DSP[2],而且选用软硬件协同验证办法。因而体系级软硬件验证比其他办法的验证更靠近实在环境,在仿真中能够观察到软硬件运转的一切状况,这样能够快速有用地定位问题并进行体系功用归纳剖析。可是体系级软硬件协同仿真验证也存在验证渠道建立周期长、编译仿真时刻长和资源耗费大的问题。针对这些问题能够选用VMM办法学引荐的办法和规范函数库,并选用老练的VIP(Verification Intellectual Property),快速建立验证渠道。一起经过一次编译屡次仿真的验证办法,以进步验证功率,缩短验证周期。
图1所示是一种契合VMM规范的体系级软硬件协同仿真验证渠道。在这里,硬件指RTL(Register Transfer Lever)规划,包含ARM核处理器模型。软件指用汇编言语和C言语编写的程序,经过编译加载到仿真环境中由ARM核处理器模型履行[5]。验证渠道由SystemVerilog言语完结,在RTL级仿真验证。
1.1 验证渠道的架构
图1所示的验证渠道契合可重用性[2,6],即不同的DUT(Design Under Test)模块能够共用同一个验证渠道。验证渠道结构被模块化和层次化。每个模块的功用和层与层之间的接口被清晰界说,这使得验证渠道非常灵敏。
1.1.1 测验层
测验层首要是编写各种测验事例(Testcase),包含修正生成器的束缚,界说新的随机场景,同步不同事物处理器和创立定向鼓励[2]。一般,在仿真的进行中要不断查看搜集的掩盖率,并以此来修正随机鼓励的束缚条件,或许针对难以掩盖的边角状况编写定向鼓励。恰当的束缚条件可进步掩盖率收敛速度。
1.1.2 场景层
场景层由生成器(Generator)发生可控且同步的业务。生成器依据测验层供给的静态变量和束缚条件,随机生成不同的装备信息和数据。装备信息经过功用层的业务处理器传递给指令层的软件程序,用于装备DUT。一起装备信息还要传到VIP业务处理器用于装备VIP模块。
1.1.3 功用层
功用层将场景层随机生成的装备信息和数据经过事前约好的通道传递给指令层的软件程序,别的检测VIP业务处理器传回的数据,送给计分板(Scoreboard),完结验证渠道的主动查看功用。
1.1.4 指令层
指令层包含操控ARM核运转的软件程序(ARM Core Software,图1中带纹路方框),需求接纳功用层经过通道(Channel)传递过来的装备信息和数据,一起还要装备和驱动DUT完结数据传输。VIP业务处理器(VIP Transfer)是用于验证DUT的老练验证IP模块。VIP监督器(VIP Monitor)归于VIP模块,用于监督DUT与外部通讯的接口信号。指令层还包含一个或多个AMBA总线监督器,归于老练的VIP模块,用于监督多层AMBA总线(Multi-layer AMBA Bus)[7]。
1.1.5 信号层
在信号层,例化了一切SoC模块,完结体系级的功用验证。除AMBA总线外,首要还包含ARM核、片上RAM、中止操控模块、DMA操控模块以及其他模块。
1.1.6 功用掩盖率
功用掩盖率能够从验证渠道的其他模块中搜集,一般没有特定的限制。
1.2 验证渠道中软硬件通讯办法
上面所介绍的验证渠道与其他验证渠道最大的差异便是引入了软件程序,构建该验证渠道的关键是软件与硬件之间的通讯。一般软件是用汇编和C言语编写的,硬件与验证渠道别离是用可归纳Verilog言语和SystemVerilog言语编写的。在这里规则用软件程序与SV(SystemVerilog)之间的通讯表明软件程序与硬件之间的通讯,本文介绍以下三种软硬件通讯办法。
(1)软件向总线未用地址写数据完结软件程序向SV的单向通讯;
(2)经过SoC上的具有通讯功用的模块,完结软件程序与SV之间的通讯;
(3)经过片内RAM,完结软件程序与SV间的双向通讯。
在实践运用进程中,经过榜首种办法输出软件程序运转进程中的信息,经过第三种办法能够作为软硬件间信息通讯的双向通道。图1所示的软硬件协同仿真验证渠道便是经过第三种办法完结软硬件双向通讯的,一起也用到了榜首种办法,输出软件运转进程中的信息。第二种办法能够视状况运用。
图2所示是一种体系级软硬件协同仿真验证渠道的结构,虚线中为SoC的体系架构。为满意验证需求,在SoC体系架构中增添了两个模块:一个是Print Tube(PT)模块,用来完结软件仿真时的信息输出。当软件需求输出信息时,向PT模块写数据,PT模块会调用$display体系函数,显现传输过来的信息。另一个是RAM(Random Access Memory)模块,作为软件和SV的信息交互的通道。RAM模块有两个总线接口,一个链接到SoC体系总线上,软件可经过其读写RAM模块;另一个接口与验证渠道中的BFM(Bus Function Model)模块链接,如AHB VIP Master[8]。一起在验证渠道中运用RAL(Register Abstraction Layer)[9]办法,将RAM模块笼统为RAL模型。这样处理后验证渠道对RAM模块的拜访更简练便利。
为验证SoC体系上某个模块的功用,需求编写两套鼓励:C言语编写的软件程序和SV言语编写的鼓励。在仿真时,两套鼓励需求同步。能够经过监测RAM模块中某个寄存器的改变完结同步。
在建立图1所示的体系级软硬件协同仿真验证渠道时,因为很多运用了VIP,一起开发了可重用的PT模块和SRAM模块,这使得验证渠道的建立作业能够在一周内完结,敏捷进步了验证功率。
2 受束缚的随机鼓励与功用掩盖率组
建立好根据VMM规范的验证渠道后,要发挥渠道的效果,关键是要规划舒适束缚的随机鼓励。
一种分类树(Classification Trees)[10]的办法能够有用地将待测模块(DUT)的各种功用装备状况转换成System-
Verilog[1-3,11]的束缚句子。可是一般在编写受束缚随机鼓励前,需求经过一些定向鼓励确认验证渠道作业正常,以及装备参数有用取值。
如下程序是验证项目中为验证SPI模块DMA传输办法编写的束缚条件。在经过试验性的定向测验和分类树处理后,构成SystemVerilog的束缚句子。
程序1:
constraint c_ssi_dma {
ch dist { SSI1 := 1, SSI2 := 0, SSI3 := 0 };
ctrlr0_spc dist { 0 := 1, 1 := 0, 2 := 0, 3 := 1 };
( burst_size == 0 ) -> (dmatdlr inside {[0:20]})
(dmardlr == 0)(datas.size() inside{[79:80]});
( burst_size == 1 ) -> (dmatdlr inside {[0:17]})
(dmardlr == 3)(datas.size() inside{[77:80]});
( burst_size == 2 ) -> (dmatdlr inside {[0:13]})
(dmardlr == 7)(datas.size() inside{[73:80]});
( burst_size == 3 ) -> (dmatdlr inside {[0:5]})
(dmardlr == 15)(datas.size() inside{[65:80]});
……
……
datas.size() = 80;
for_block_ts == (80-datas.size());
}
在编写完随机束缚条件的一起还要编写相应的掩盖率组(covergroup)[1-3,8],用于主动搜集仿真进程中功用掩盖状况,辅导仿真。如下程序是针对SPI模块DMA传输办法编写的功用掩盖率组。
程序2:
covergroup covport_ssi_dma;
coverpoint ch {bins CH[]={[1:3]};}
ctrlr0_spc_c:coverpoint ctrlr0_spc {
bins spc_00={0};
bins spc_11={3};}
coverpoint burst_size {
bins burst_size_1={0};
bins burst_size_4={1};
bins burst_size_8={2};
bins burst_size_16={3};}
dmatdlr_c:coverpoint dmatdlr {
……
……
}
……
……
cross ch, ctrlr0_spc_c, burst_size, dmatdlr_c, dmardlr_c,
for_block_ts, ctrlr0_dfl_c {
ignore_bins
burst_t1=binsof(burst_size)intersect{0}
binsof(dmatdlr_c)intersect{[21:$]};
ignore_bins
burst_t4=binsof(burst_size)intersect{1}
binsof(dmatdlr_c)intersect{[17:$]};
……
}
endgroup
3 验证进程与验证成果
3.1 验证进程
仿真所选用的软件为Synopsys公司的VCS-MX-C2009.06。它自带有VMM规范库函数,支撑一次编译屡次仿真。因为如图1所示的软硬件协同仿真验证渠道的通用性,能够将一切测验事例一次编译后,别离仿真。不同的测验事例代码写到VMM的宏′vmm_test_begin()与′vmm_test_end()之间,并在验证渠道的程序(program)中经过类(class)vmm_test_registry的办法run()来调用。仿真进程如图3所示。
3.2 验证成果
图4是由上面程序2所界说的掩盖率组搜集的掩盖率数据。每次仿真中,随机发生10次随机场景。这样做能够削减重复运转仿真的次数,进步仿真速度。
从仿真成果看到:(1)掩盖率在仿真初始阶段增加很快,随后逐步趋缓;(2)区分测验空间后的接连仿真,与未区分测验空间的接连仿真终究仿真时刻相同;(3)区分测验空间后的并行仿真,掩盖率收敛速度最快,能够使掩盖率收敛速度进步近3倍。
别的由成果(1)可知,在仿真进程中,经过负反馈机制修正随机变量的束缚条件,扫除已测验过的测验事例,能够使每次仿真的掩盖率坚持很高的增加速度[12]。但修正束缚条件后需求从头编译。
针对实践项目需求,文章介绍了一种契合VMM规范的体系级软硬件协同仿真验证渠道,评论了验证渠道中软硬之间的通讯办法。给出了在此渠道上所做的一个模块的详细验证,包含随机鼓励的束缚和相应的掩盖率组。最终对仿真成果做了比照剖析。成果表明,与根据SystemC言语建立的验证渠道[13]比较,根据VMM规范并运用SystemVerilog言语,能够进步验证渠道的建立功率和可重用性。经过对测验空间的区分和仿真进程的操控,有用进步仿真功率。