当前位置: 代码迷 >> 综合 >> Systemverilog 第四课 Interface and program
  详细解决方案

Systemverilog 第四课 Interface and program

热度:20   发布时间:2023-12-18 22:42:04.0

P13 Interface and Program

  • 正式运行testcase之前需要做好的准备:
    1.对CLK和RESET进行规划,DUT和TB都需要时钟和复位信号。
    2.对于第一个testcase用log记录仿真过程,并用display显示仿真结果。
    3.首先排除tb的错误,再检查tb给dut环境设置是否错误,全都没错才去检查RTL的错误。

Q:logic数据类型有几个状态?
A:4个,01xz

Interface

Q:如何连接testbench与DUT?
A:先定义连接途径,并利用例化将端口连接起来。

  • Verilog连接方式
    1.默认连接方式 .*
    e.g. test t1(.*);
    要求被例化模块的所有端口在tb当中有名字、类型、数据宽度完全一样的连接路径(不推荐使用)。
    2.名字连接方式 .name
    3.端口连接方式.name(name)
    Q:如果一个被例化模块的端口名发生变化,在上层模块要如何修改?
    A:verilog中只能单独修改,SV则可以使用interface规避这个问题。

  • Systemverilog Interface
    Interface可以将一组信号放在一起作为一个端口,并将作为单独的部分和tb以及DUT分离开来。这样做可以将不同配置的interface适配给不同的tb,不需要进行繁琐的连接。
    在这里插入图片描述
    关键字:interface/endinterface,端口可选,一般端口当中会列出clk和reset
    interface需要在top当中进行例化,但是不需要指定输入输出的方向。
    与verilog写成的DUT联合仿真时,可以使用端口连接的方式进行连接:
    在这里插入图片描述

  • 代码:
    在这里插入图片描述
    在这里插入图片描述

modport

modport用于给interface的信号进行分组,interface可以含有任意多的modport
在这里插入图片描述
在上图的modport中给TEST和DUV的端口方向是不一样的。
优点:方便区分功能,缺点:名字变长,命名变复杂

  • overview
    在这里插入图片描述

Stimulus Timing

tb和design的信号时序应当错开,来避免竞争的情况。
一个是尽量不要操纵同一个信号,第二个是在tb中加入延时信息。
可以通过在tb中使用interface的clk来避免时序错乱的情况。

  • Clocking Blocks
    可以通过一个时钟模块,将所有行为同步到同一时钟上。
    在这里插入图片描述
    关键字:clocking/endclocking,模块内所有信号以clk的上升沿做触发
    default input #1step output #2;
    default设置所有的信号:可以使模块去采样clk上升沿前1个时间单位时候的输入,在上升沿#2个时间单位之后输出结果。

  • Timing regions
    即使硬件语言是并行语言,实际的执行也有先后顺序。对sv的tb进行仿真时,一个时钟沿含有4个时间域:
    1.Active Region(design):模块内的代码仿真
    2.Observed Region(assertions):代码仿真以后对断言进行判断
    3.Reactive Region(testbench):执行tb
    4.Postpone Region(sample):在所有行为结束后对信号采样(如$display等)

  • Signal Synchronization
    在这里插入图片描述

  • Signal Synchronization
    通过灵活运用clocking模块内的信号可以完成各个模块的同步。
    在这里插入图片描述

Program

testbench的顶层应当包含一段program
program内部不能例化其它模块,包括module和interface
在这里插入图片描述

  相关解决方案