SV的端口与测试平台
背景
绿皮书的第四章在近几年的工作中很少用到,不过对于其中讲的某些点也有一些简单的看法。
核心内容(3-5 个要点)
- 接口
- 时钟块
- 断言
我的理解
说实话,在读到绿皮书第4章的时候,我感到有点陌生,因为里面提到的很多用法在我过去的工作中都没怎么见过,比如modport、program在UVM为主流的验证环境中几乎绝迹。但有些内容在UVM验证环境中依然扮演着至关重要的角色。
interface
在UVM验证环境中一般会有一个interface.sv文件,其中罗列了所有TB需要和DUT连接的接口,然后通过在tb_top上连接的方式,将TB和DUT连接起来。
在使用SV的interface中一般有两种信号线:logic和wire。二者的区别和用法,我之前在\[SV数据类型一]中提到过,除了之前提到的差异之外,绿皮书4.3.2中还提到了,logic类型的信号可以直接驱动,而wire信号需要用assign来驱动。
时钟块
时钟块在uvm的环境中相对比较常用,一般出现在interface中,然后在driver、monitor等需要打拍的组件中通过使用vif.cb来访问信号。
这样做可以消除竞争。如果我们仅用@(posedge clk)来处理信号很容易出现driver驱动信号变化的时候,monitor同时想要进行采样,两个行为同时在时在时钟上升沿发生的时候,monitor会采到变化后的值。但是实际电路是存在延时的,需要有setup time和hold time,时钟块的存在在某种程度上模拟了前仿中无法观察到的setup time和hold time。
断言
断言在整个验证过程中是非常有用的检查方法,虽然在\[SV断言入门一]和\[SV断言入门二]中简单介绍了断言的用法,但是断言的用法相当灵活,用简短的文字可能无法完全描述清楚,如果后续找到合适的例子,也会继续分享。各家其实也有通用的断言库,经过梳理后也是非常适合进行统一化、提升代码可读性的方法。