0%

SV之设计特性与接口

本节主要介绍了SystemVerilog中比verilog更好用的相关特性以及在基础语言上扩展的接口。

过程语句块新特性

  • always语句块被细分为了:
    • 组合逻辑语句块:always_comb
    • 锁存逻辑语句块:always_latch
    • 时序逻辑语句块:always_ff

1.过程语句块always_comb

  • always_comb用来表示组合逻辑

  • always_comb可以自动嵌入敏感列表

  • always_comb可以禁止共享变量,即赋值左侧的变量无法被另一个过程块所赋值

  • always_comb在仿真0时刻会自动触发一次,无论在0时刻是否有敏感信号列表中的信号发生变化

  • 软件工具会检查该过程快,如果其所表示的不是组合逻辑,那么会发生警告

    1
    always_comb if (en) y=a; //此时软件工具会报警告
  • Verilog @*的敏感列表声明方式不同于always_comb:

    • always_comb会限制其他过程块对同一变量进行赋值

    • always_comb会将被调用函数中可能参与运算的其他信号也声明到敏感列表中

      image-20230815155051049

2.过程语句块always_latch

  • always_latch表示锁存逻辑,且自动插入敏感列表

  • EDA工具会检查always_latch过程块是否真正实现了锁存逻辑

    1
    2
    always_latch
    if (enable) q <= d;

3.过程语句块always_ff

  • always_ff用来表示时序逻辑

  • 敏感列表必须指令posedge或者negedge

  • EDA工具也会检明always_ff过程块语句是否实现了时序逻辑

    1
    2
    3
    always_ff @(posedge clock, negedge resetN)
    if (!resetN) q <= 0;
    else q <= d;

赋值操作符

  • SV可以通过'0,'1,'z和'x来分别填充0、1、z、和x,通过这种方法,代码会根据向量的宽度自动填充

  • SV添加了inside操作符,用来检查数值是否在一系列值的集合当中

    1
    2
    logic [2: 0] a;
    if (a inside {3'b001, 3'b010, 3'b100})

增强的case语句

  • unique case要求每次case选择必须只能满足一条case选项

    image-20230815161214746

  • priority case则表示必须至少有一个case选项满足要求,如果有多个case选项满足要求时,第一个满足的分支将会被执行


接口

  • 接口不单单可以包含变量或者线网,它还可以封装模块之间通信的协议

  • 接口无法例化module,但是接口可以例化接口

  • 接口中可以进一步声明modport来约束不同模块连接时的信号方向

  • 接口信号必须采用非阻塞赋值来驱动

    image-20230815170109218

  • System Verilog的接口(interface)(1) - 知乎 (zhihu.com)


组合逻辑、锁存器、时序逻辑相关

欢迎来到ssy的世界