1、interface中可以使用:initial、always、function、task;
2、interface中定义的接口类型为logic(4态),不用bit是因为其只有2态,不足以表示dut signal的状态;wire也是4态的,使用logic而不使用wire的一个好处是logic不能双驱动,如果验证平台中有双驱动,编译会报错;
3、module、interface不同点:
- module:可以例化module、interface;
- interface:可以例化interface,但不能例化module;
4、flip flop:触发器;
5、系统函数:
- $finish():结束仿真;
- $stop():特点是stop后,还是继续执行(continue on)
- $exit():用于退出program,program中不能实例化program;
6、interface中特殊用法(覆盖默认的采样方式):
7、CB中input、output的延时模拟了dut的建立时间、保持时间(如上图):
- input:采集的是上升沿之前10ns的信号值;
- output:驱动是在上升沿之后的2ns对dut信号进行驱动;
8、driver、monitor的一般使用说明:
- driver:一般需要使用cb块对信号进行驱动,并使用NBA,是为了避免让dut产生竞争-冒险;
- monitor:一般需要使用cb块对信号进行采样,并使用BA,是因为只是采样,并不是驱动dut,不会让dut产生竞争-冒险;
- 详细规则:输入输出是针对cb块中的视角
- rule_1:必须使用@cb,不能是@(posedge clk);
- rule_2:对输出信号赋值,必须是cb.output,不能是output;
- rule_3:对输入信号采样,必须是cb.input,不能是input;
- rule_4:对输出信号采样,必须是output,不能是cb.output;
- rule_5:赋值必须是NBA,不能是BA;
- rule_6:采样必须是BA,不能是NBA;
9、硬件代码中时序逻辑使用NBA、组合逻辑使用B。BA、NBA的不同如下: