sv interface高级用法

sv interface高级用法

1、interface:

interface 中的信号必须声明为logic,因为reg只允许在always块中赋值,wire至允许assign赋值,bit是两态,logic是四态的,且可以阻塞赋值也可以非阻塞赋值。

1、clocking block

clocking规定了信号之间的时序关系。

// To wait for posedge of clock

@busIf.cb_clk;

// To use clocking block signals

busIf.cb_clk.enable = 1;

2、modport

modport明确了站在不同的角度对应信号的输入输出方向。

3. parametered interface

interface myBus #(parameter D_WIDTH=31) (input clk);

logic [D_WIDTH-1:0] data;

logic enable;

endinterface

2、interface中定义task和function

task read_memory(input logic [7:0] raddr, output logic [7:0] data);

@(posedge clk);

ren=1'b0;

addr=raddr;

@(negedge mrdy);

@(posedge clk);

data=m2c_data;

ren=1'b1;

endtask

接口可以直接调用task,来完成信号的赋值。

3、interface中定义always块

8bit到10bit的转换有专门的算法encode_8b10b完成。通常来说,可以在driver中完成这种转换,并将串行的数据驱动到接口上:

==================================================================================================

由于8b10b转换的动作适用于任意要驱动的数据,换言之,这是一个“always”的动作,因此可以在interface中使用always语句:

相应的,数据在driver中可以只驱动到interface的并行接口上即可:

==================================================================================================

4、interface中定义initial 块

interface clk_rst_if();

logic clk;

logic rstn;

initial begin

clk <= 0;

forever begin

#5ns clk <= !clk;

end

end

initial begin

#20ns ;

rstn <= 1;

#40ns ;

rstn <= 0;

#20ns ;

rstn <= 1;

end

endinterface

5、使用interface替代driver部分功能

上面的uvm实战中的代码用interface代替driver部分功能的举例说明

第一个好处是可以让driver从底层繁杂的数据处理中解脱出来,更加专注于处理高层数据。

第二个好处是有更多的数据出现在interface中,这会对调试起到很大的帮助。 interface可以查看信号的波形,但是uvm component中很难查看信号波形。

相关推荐

华为手机扫一扫在什么地方
英国365bet体育

华为手机扫一扫在什么地方

07-10 👁️ 2460
蠲赦的意思
365账号被限制什么原因

蠲赦的意思

07-03 👁️ 9110