
1. 什么是接口使用接口有什么优点和缺点接口类似于排针将一组信号信号捆绑起来通过接口可以使DUT和TB进行通信。在没有接口时对DUT和TB进行连接需要在DUT和TB内部定义一堆信号如果信号名或者数量发生了变化需要同步进行修改此外如果连接发生错误也影响了仿真效率。当使用接口时可以把对信号的声明定义在接口内部而只需要向TB传入接口名进入实例化即可大大减小了繁琐的信号连接工作。interface name (signal list); logic/wire signal_name; .... endinterface接口大致具有四个优点第一便于设计重用。如果DUT涉及通用的协议当DUT进行迭代时只需要对接口进行修改即可而在验证平台的顶层不需要大幅改动。第二减少连接的错误。将信号都定义在接口中当在验证平台的顶层例化DUT和TB时无需进行大规模连接操作。第三添加信号较容易。当信号有增加时只需要在接口中新增定义。第四可以约束信号方向、定义时钟块。接口大致具有四个缺点第一当DUT和TB点对点时使用接口不太方便。第二在TB中使用接口时需要接口名信号名信号名称太长。第三当DUT不是专用的接口时不能进行设计重用。第四连接两个不同的接口困难。2. 什么是modport具有什么特点modport可以约束接口中信号的方向。在一个接口中可以定义多个modport同时一个信号可以在多个modport中被声明。比如对于DUT来说rst是输入信号而对于TEST来说rst是输出信号。modport中可以定义的信号方向有input、output、inout。modport name( input signal1,signal2, output signal3,signal4 );3. 什么是时钟块它的工作原理是什么时钟块在规定的时钟有效沿对时钟块内的输入信号进行采样、输出信号进行驱动有效避免时序竞争。clocking cb (posedge clk); default input #2ns output #0; input grant; output request; endclocking时钟块类似于触发器在时钟有效沿到来前的微小时间内对输入信号进行采样默认1step在时钟有效沿到来后的微小时间内对输出信号进行驱动默认0。所以TB对DUT的输出信号进行采样时可以看作是使用了一个触发器进行同步而TB将信号驱动至DUT中时若默认时延是0则相当于使用wire线与DUT进行连接但当时延大于0时需要在下一个有效时钟沿才能传输给DUT。可以使用或者wait实现接口的同步当对时钟块的输入信号进行采样时——DUT的输出阻塞赋值给到时钟块内的输入信号当对时钟块的输出信号进行驱动时——时钟块内的输出给到DUT的输入信号非阻塞赋值。4. systemverilog是怎么避免时序竞争的sv将仿真时间分为了四个阶段。首先Active执行DUT中的设计代码类似于“干活”其次Observed观察执行过程是是否出现error但不修改类似于“检查”然后Reactive执行tb相关代码若有错误则会调整类似于“调整”最后Postponed在时间槽的最后阶段采样信号用于观测稳定后的信号值类似于“收尾”。在verilog中TB和DUT的执行在同一时间段若在同一有效时钟沿上DUT对某信号进行驱动而TB对该信号进行采样可以因为违反时钟的建立时间和保持时间从而产生亚稳态。sv将DUT和TB的执行时间分开减小了竞争冒险的情况。