由于Matlab engine不是直接与Simulink仿真模型进行连接的,因此数据不能再Matlab中的Simulink仿真模型和UVM环境之间直接进行传输。为了克服这一缺点,Simulink仿真模型要进行一些改进。在改进之后的仿真模型中需给将要与DUT设计进行比对的Simulink仿真模型添加监视器(monitors),在这一点上允许引入数组数据给Matlab工作区。一旦这些数组数据到了Matlab工作区,就会立刻被转发到中UVM环境中去,其中Matlab engine函数engGetVariable()会从Matlab工作站得到数据。当通过使用DPI导入命令后,UVM环境就可以从Matlab工作站得到Simulink中monitor监控到的数据。当UVM环境中需要用一些带有约束随机变量的激励时,UVM环境就会生成带有约束随机变量的事物级数据包给仿真,这些数据包会被发送给Matlab engine,然后再进入Simulink仿真模型。在这一点上也允许在Simulink仿真模型中提供更进一步的测试但是就Matalb自身而言是做不到这一点的。Matlab与Simulink之间的数据通信如图11所示:
图11. 嵌入monitor的Simulink仿真模型.
2.5 UVM环境
Matlab engine对象和命令可以包含在系统级验证环境中,Matlab engine的打开、关闭以及命令都是来自于系统级UVM环境。来自于Matlab engine的数据会被移植到UVM环境中去用于随后的数据比对和计分操作。
2.6 基于覆盖率统计的验证
对于这一点,允许Simulink仿真模型进行单一的迭代。UVM环境启动了Matlab engine去作为一个子进程,同时Simulink仿真开始并且转发数据到Matlab工作区,然后在将这些数据转发给UVM环境作为验证环境中的变量。到这里之后UVM环境就可以跑起来同时可以与Matlab那边的数据进行比对了。同样地,UVM环境也可以跑仿真时间设置固定的仿真,仿真环境发送激励给Simulink仿真模型,同时在这里也允许一个测试用例在时间设置固定的仿真中去跑,并且可以在基于覆盖率统计的验证过程中应用直接或随机的测试用例去完成覆盖率统计的目标。
2.7 基于覆盖率数据收敛目标的验证
通过跑测试用例,直到覆盖所有UVM环境无限期运行中遇到的需要去覆盖的目标,当一个MatlabEngine被嵌入到UVM环境后,Simulink仿真模型也需要能够无限期地去运行,以便于连续的运行仿真直到满足覆盖率目标。在UVM环境中Simulink仿真模型与DUT之间的时间相关性需要满足,Simulink仿真模型中的计时器需要在UVM环境中去匹配一个时间窗口,这个时间窗口将会有一定数量的数据在两个环境之间进行交互,并且用于交互的数据量也应该被相应地进行设计。当Simulink中的计时器到达给定的时间时,它会触发一个断言去用于暂停Simulink仿真模型,依据断言再去使用Matlab控制台命令就会将Simulink仿真模型暂停。
一旦暂停了Simulink仿真模型,数据需要从Simulink中的monitor传输给Matalab工作区。这一点可以通过在Matlab控制台使用一个带有暂停功能的DPI函数去完成,之后数据就可以被传输到UVM环境,通过对Simulink仿真模型运行相同的时间周期后在于DUT结果进行比对,一旦这些都被完成后,Simulink仿真模型就可以用一条控制台命令继续去进行Simulink仿真。这种迭代可以无限期地反复进行下去直到覆盖率目标完成。
2.8 基于断言的验证
通过在UVM环境中嵌入Matlab / Simulink仿真模型后,仿真模型可视为一个黄金参考模型,仿真模型的数据可以直接与DUT的数据进行比对,同时断言也可以被创建到UVM环境中去更进一步验证设计功能的完整性。
2.9 协同仿真技术的优点
用Matlab和UVM创建一个协同仿真环境可以带来许多好处。协同仿真直接在Matlab/Simulink模型和DUT之间进行数据比对,这将从仿真环境以及手工进行数据比对和断言等数据分析中节省时间。
在算法设计中,相比于UVM方法学,激励有时候更容易在Matlab中被创建。通过协同仿真使二者联系结合在一起,由Matlab产生的相同功能的激励可以给UVM环境中的DUT使用,这一特点将给UVM验证方法学节省了创建测试用例的时间。
给Matlab/Simulink模型创建激励已经是一种已知的模式。具有约束随机特点的UVM方法学已经有能力去创建带有覆盖率统计作为验证指标的约束化随机激励,并且这种随机化的测试用例可以反复用于仿真。
3.结论
通过使用DPI接口给UVM环境导入Matlab Engine,使得一个嵌入式的Matlab环境可以在UVM中被创建。同时支持在UVM环境中进行Matlab / Simulink仿真模型与DUT之间进行协同仿真,这种协同仿真技术为用户带来了许多便利。协同仿真还可以节省总体设计和验证所需要的时间,同时也提高了行为模型和RTL代码之间数据比对的准确性。