SV 数据类型

发布时间 2023-12-09 20:40:07作者: Icer_Newer

Verilog数据类型

  • 变量类型 - 用于存储值
  • 线网类型 - 用于连接硬件模块
  • reg - 在硬件中可能会被综合成DFF和Latch

线网类型

  • 线网的驱动 - 可以是门,也可以是实例化的门

  • 变量只能通过过程赋值进行赋值 - initial/always
  • integer - 32bit,有符号数 - 通常循环变量的时候会使用

System Verilog新添加的数据类型

  • x - 真实的电路中是没有的x的状态,x表示真实电路中不稳定的状态(可能是1或者是0)
  • z - 表示没有驱动(悬空),如果DFF没有复位的时候,Q端是x;D端如果没有输入(驱动),Q端就是z
  • SV - 具有数据类型
  • SV中对于线网类型 - 通过使用连续赋值;变量类型使用连续赋值(assign)或者是过程赋值(always)
  • 数据类型的三个方面:线网类型还是变量类型\2值逻辑还是4值逻辑\有符号还是无符号

  • BD

SV中的assign连续赋值可以赋值给logic(var)类型吗?

  • 在SV中可以使用logic替代(wire和reg)
  • 多驱动源的情况下或者设计模块端口是双向的(inout)的时候 - 不适用logic
module tb;
  wire w1;
  logic r; // logic (var)
  assign  w1 = 1'b1;
  assign r1 = 1'b0;
  
  wire w2;
  var logic r2;
  assign w2 = 1'b1;
  assign r2 = 1'b0;
  
  initial begin
    #1ns;
    $display("w1 = %b,r1 = %b",w1,r1);
    $display("w1 = %b,r1 = %b",w2,r2);
  end
endmodule

四值逻辑数据类型

  • logic - 硬件中可以综合,软件中也可以使用
  • logic [63:0] - 每1bit都是独立的,只要有一位是x,返回的数值就是不确定的

二值逻辑数据类型

  • 二值逻辑bit/byte/shortint/int/longint - 可以进行综合,但是综合出来的电路会失真,使用二值逻辑表示不了延时和亚稳态
  • bit类型也是变量类型

  • int(二值逻辑)/integer(四值逻辑)/shortint/byte

有符号数和无符号数

  • 有符号数和无符号数不要进行运算
  • 硬件验证和测试,发送激励的时候只需要考虑发送0和1就可以,不需要发送x和z,所以使用二值逻辑即可
  • SV中的四值逻辑和C中变量没有直接的对应关系

内建数据类型

仿真行为


  • 四值逻辑转变为二值逻辑的时候,x和z转变为0

其他类型

  • void - 其他类型