1.
interface中除了可以定义变量,还可以定义任务和函数。还可以在其中使用always和initial语句。
interface可以代替driver做很多事情,但是并不能代替driver做所有的事情。interface只适用于做一些低层次的转换,如8b10b转换、曼彻斯特编码等。这些转换动作是与transaction完全无关的。
使用interface代替driver的第一个好处是可以让driver从底层繁杂的数据处理中解脱出来,更加专注于处理高层数据。第二个好处是有更多的数据出现在interface中,这会对调试起到很大的帮助。
不过,当使用interface完成这些转换后,如果想构造这些转换异常的测试用例,则稍显麻烦。如构造一个8b10b转换的错误,需要在interface中加入一个标志位err_8b10b,根据此标志位的数据决定向数据线上发送何种数据。
而如果这种转换是在driver完成的,有两种选择,一是在正常的driver中加入异常driver的处理代码;二是重新编写一个全新的异常driver,将原来的driver使用factory机制重载掉。
无论是哪种方式都能实现其目的。相比来说,在interface上实现转换能够更有助于调试,这一优势完全可以弥补其劣势。
2.
一般可能需要三种可变时钟:
- 第一种是在不同测试用例之间时钟频率不同,但是在同一测试用
例中保持不变。 - 第二种是在同一个测试用例中存在时钟频率变换的情况。类似PLL在时钟稳定前的过渡期,我们不关心这段过渡期时,而只关心过渡期前和过