微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于VMM方法学的系统级软硬件协同仿真验证

基于VMM方法学的系统级软硬件协同仿真验证

时间:06-05 来源:互联网 点击:

图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语言,可以提高验证平台的搭建效率和可重用性。通过对测试空间的划分和仿真过程的控制,有效提高仿真效率。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top