系统与设计
的意见

UVM内部,取两个

一看序列之间的通信,音序器和司机。

受欢迎程度

在这个博客,我的主要精力都在解释序列等概念,音序器,司机和展示交流发生的顺序从音序器音序器和司机。在以前的博客包括我在内的顶级UVM结构的图表,显示不同的基类。

所以,让我们来看看他们所使用的主要概念和遵循通信机制的有效执行测试。

顺序是什么?它是用于生成许多Sequence_items;随机数据字段用于Sequence_items请求并将其发送到音序器。为了保持同步的测试矢量,您可以创建多个序列,每个序列被分配给一个特定的数据字段或任务。序列包含请求和sequence_item负责处理。基本上,要求是用来发送一个请求到音序器sequence_item发送到司机。是用作反应司机当它完成一个特定的操作。写一个序列后,它可以通过调用start()执行的测试。


图1:N的组合数

Sequence_name.start (sequencer_name);


图2:顶级序列和音序器的结构

现在有一个重要的属性序列再次触及,即身体()。

当你调用start()函数,一些预先定义的回调函数执行。身体()包含大部分的回调方法的一部分,因此它是一个重要的属性。

这里是如何编写一个序列类的一个例子。

现在,这里有一些东西对上述观察。

任务在上面的例子显示了一个序列与司机通过音序器。看一看下面的图。


图3:序列之间的通信基础,音序器和司机。

如图3所示,序列,首先生成sequence_item。接下来,它让音序器知道它准备发送sequence_item批准。定序器另一端是仲裁员。它拥有序列的请求,直到它收到seq_item请求司机。一旦得到司机的数据请求,它打破序列通过返回wait_for_grant()(阻塞声明!)地址的seq_item序列。接下来,数据字段内seq_item是随机的。根据用户的需求、约束可以作为UVM提供默认宏。

从本质上讲,图3说明了通信标准在UVM序列,音序器和驱动程序一步一步。这里要注意一个重要的事情是TLM-based音序器和驱动程序之间的通信。司机与音序器TLM端口定义了通信。司机也有预定义的方法。

get_next_item (), item_done()和put()方法作为驱动程序的一部分。get_next_item()基本上是2号箭头,如图3所示。这是一个阻塞声明只要没有seq_item请求音序器。同时item_done()是一个非阻塞方法证实了完成Driver-Sequence沟通。put()并不是一个强制性的方法,虽然它是用来音序器的司机的反应。

我希望这个博客提供的信息对你有意义。总之,我们看着UVM序列之间的通信协议集,音序器和司机,序列是如何工作的。

我期待着进一步写博客UVM,和其他学科。同样,如果你有任何问题或建议其他博客主题,请联系我们通过Aldec网站。

在那之前,看看这个应用注释显示UVM Aldec环境中实现。

基本清晰,考虑看看这个UVM研讨会



留下一个回复


(注意:这个名字会显示公开)

Baidu