目录
1 接口
接口是什么
接口(interface)是连接设计和测试平台的一个"插排",可以用作设计,也可用作验证;
接口的优势
将有关信号封装在同一个接口中,对于设计和验证环境都便于维护和使用。
interface是SV中唯一的硬件和软件环境的媒介交互。
接口可以例化,使得对于多组相同的总线,在例化和使用时变得更加灵活。
接口的使用
在inteface端口列表中只需定义时钟、复位等公共信号,或者不定义任何端口,推荐使用logic定义变量。
interface也可以依靠函数参数化方式提供复用性。
interface在例化时,同module例化方式一样。
模块里面可以例化模块,也可以例化interface,interface里面可以例化interface但不能例化module。
实例说明(接口使用三步骤)
- 定义接口,Dut调用interface
interface arb_if(input bit clk);
logic [1:0] grant,request;
logic rst;
endinterface
module arb (arb_if arbif); //接口传入模块中
...
always @ (posedge arbif.clk or negedge arbif.rst) begin
if (arbif.rst)
arbif.grant <= 2'b00;
else
arbif.grant <= next_grant;
...
end
endmodule
- Test调用interface
module test (arb_if arbif);
...
initial begin
@(posedge arbif.clk);
arbif.request <= 2'b01;
$display("@%0t:Drove req = 01",$time);
repeat(2)
@(posedge arbif.clk);
if (arbif.grant != 2'b01)
$display("@%0t: al:grant != 2'b01",$time);
$finish;
end
endmodule
- Top层例化接口、dut和test
module top;
bit clk;
always #5 clk = ~clk;
arb_if arbif(clk);
arb_al(arbif);
test_tl(arbif)'
endmodule
2 采样和数据驱动
电路中的竞争问题
1、为了解决在RTL中发生的信号竞争问题,我们建议通过非阻塞赋值或特定的信号延迟来解决同步问题。
2、同样的在仿真行为中,为了避免时序电路中时钟信号和驱动信号的时序竞争问题,需要明确驱动时序和采样时序。
3、在默认情况下,时钟对驱动会添加一个无限小的时间delta-cycle的延迟,该时间无法用绝对时间衡量,比最小的时间精度还小。
4、一个时间片(time-slot)包含了无数delta-cycle,在仿真命令中输入run 0 ,表示运行一个delta-cycle。
5、由于各种可能性,clk和被采样数据之间若只存在若干个delta-cycle的延迟,那么采样很可能会存在问题。那么如何去避免采样时的竞争问题?
- 在驱动时,添加相应的人为延迟时间
- 在采样事件前的某段时间进行采样。
由此引入了下面的cloking的概念
时钟块cloking
实例说明
除此之外,cloking的一些特性有:1.可定义在interface、module、program中;2.clocking中的信号不是自己定义的,而生由其所在的模块或interface中定义的;3.如果没有定义默认的采样事件,则默认 input #1step output #0; 4.可以用新的采样事件覆盖原有的默认事件。
cloking采样和驱动
在使用接口中时钟块进行采样时,应使用阻塞赋值;驱动时使用非阻塞赋值。
3 测试的开始和结束
系统函数的调用
在verilog中,需要调用系统函数来结束($finish)或者暂停($stop)仿真
仿真开始
在仿真命令输入run 0
program
sv中推出program将设计你和验证进行有效隔离,
1、Progam执行验证平台代码,是不能含有层次的结构,如其他module或者interface的实例。
2、program内部定义的变量赋值方式应该是阻塞赋值(软件方式),在驱动外部硬件信号时采用非阻塞赋值(硬件方式)
program的结束方式分为隐式结束和显示结束
隐式结束:就是在执行完最后一个initial过程块自动结束仿真
显示结束:实际情况中有些过程块会一直运行下去(forever),此时需要置入系统函数$exit() 强行结束
progam 和 module
module为硬件盒子,progam为软件盒子,interface为软硬件的媒介
4 调试方法
- 查看信号和波形 仿真前使用命令log -r /*保存波形
- 通过设置断点查看软件部分的局部变量,程序会停留到断点这一行,还未执行该行。
————————————————
版权声明:本文为CSDN博主「持续学习_ing」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_59670134/article/details/119118086