使用时钟块的接口
interfaceRx_if(input logic clk);
//................
clocking cb @ (posedge clk);
output....
input.....
endclocking:cb
//.................
endinterface
还是能接受的,说用这个是为了避免测试平台在驱动和采样时的时序竞争,看的不是很明白。
时钟的不是有周期的吗,没有看到怎么设置clk的周期,看见有个时钟发生器是写在module中,就是always #10clk = ~ clk这种,但没见这个模块和接口与测试块有联系阿?
另外上面代码中接口Rx_if的参数(input logic clk);中的logic怎么理解,还见过 interfaceRx_if(input bit clk);
求前辈们指点
可以先去看看语法书
interface Rx_if(inout bit clk)这个就相当于例化,将clk这个始终输入到interface中了
logic 可以理解成reg的父集
嗯,理解了一些,谢谢。
reg 的扩展logic可类似wire一样直接连接块,更加方便,而且驱动连线只能有一个,可以防止多驱动。
时钟块是独立于接口块之外的,所以只需要在时钟块编写always#10 clk=~clk这种语句就可以了。
我的理解对吗?
这个clocking block不是实现时钟产生功能的,而是把interface的接口统一到对应的时钟域下进行处理,比如定义方向等等。always那个操作,你依然要在module或者program里面定义,产生时钟信号,再传入interface里面的clocking block。只是一个在大量接口存在的情况下,便于理解的操作而已,可以对接口进行setup/hold等参数的统一配置。这是我的理解。
谢谢,继续追问一个问题:关于信号同步异步的interfacea(input bit clock)
logicrst;
logic......
logic........
clocking cb @(posedge clock)
input.....
outputrst;
endclocking
modport TEST(cloking cb,output rst);
......
endinterface
上面代码中标红的复位信号,第一个是异步信号,第二个是同步信号,为什么在TEST块用了两个复位,虽然一个同步一个异步,不是很理解,请指点
a.rst = 1; a.cb.rst = 0; 这样就实现了异步复位,同步撤销了
modport TEST(cloking cb,output rst);的同步异步复位是对于testcase而言的是吗,跟DUT的复位有关系不
DUT也可以用modport TEST啊,那这个复位就是DUT的复位了