System verilog SystemVerilog数据类型的差异(reg、逻辑、位)

System verilog SystemVerilog数据类型的差异(reg、逻辑、位),system-verilog,System Verilog,systemverilog中有不同的数据类型,可以使用如下方式: reg [31:0] data; logic [31:0] data; bit [31:0] data; 这三种类型有何不同?reg和wire是原始类型。导线不断分配,并在特定点对REG进行评估,此处的优势在于模拟器可进行优化 wire w_data; assign w_data = y; // Same function as above using reg reg r_data; always @* r_data =

systemverilog中有不同的数据类型,可以使用如下方式:

reg [31:0] data;
logic [31:0] data;
bit [31:0] data;

这三种类型有何不同?

reg
wire
是原始类型。导线不断分配,并在特定点对REG进行评估,此处的优势在于模拟器可进行优化

wire w_data;
assign w_data = y;

// Same function as above using reg
reg r_data;
always @* 
  r_data = y ;
学习Verilog时的一个常见错误是假设A reg类型意味着硬件中的寄存器。模拟器的早期优化可以通过其使用环境来完成

这引入了
逻辑
,可以用来代替导线和寄存器

logic  w_data;
assign w_data = y;

// Same function as above using reg
logic r_data;
always @* 
  r_data = y ;
还创建了类型
字节
,它们只能保存两种状态0或1 no x或z<代码>字节表示
位[7:0]
。使用这些类型可以稍微提高速度,但我建议不要在RTL中使用它们,因为您的验证可能会错过未初始化的值或关键重置

在测试台组件中,
字节
的使用更为常见,但如果必须驱动x来刺激数据损坏和恢复,则可能会导致问题


更新

在撰写本文时,我的印象是,
logic
不能用于tristate,我无法找到我基于此的原始论文。在进一步更新、注释或编辑之前,我撤销了逻辑不能用于创建三态线的断言


添加了
tri
类型,用于显式定义三态线。它基于
导线的属性
逻辑
基于
reg
的属性

tri t_data;
assign t_data = (drive) ? y : 1'bz ;

如果您不再需要支持向后兼容的Verilog,那么我建议您切换到使用
logic
tri
。使用
logic
有助于重新分解,而
tri
反映了三态线的设计意图。

由于我无法添加注释,我不得不写一个看起来像新答案但不是新答案的东西。唉

@e19293001,@Morgan,
logic
定义了一个不同于
bit
的4状态变量,因此
logic
变量可用于存储
1'bz
,因此以下代码有效并可编译:

logic t_data;
assign t_data = (drive) ? y : 1'bz ;

但我同意在这些情况下,为了反映设计意图,应该使用
tri
而不是
logic
(尽管我必须说,我没有看到人们经常使用
tri
而不是
logic
/
wire

逻辑数据类型不允许多个驱动程序。如果有多个分配,则最后一个分配获胜。如果多个驱动程序尝试使用不同的值驱动它们,则Reg/Wire数据类型给出X。逻辑数据类型只分配最后一个赋值。

  • 选择名称
    reg
    ,因为寄存器的存在是根据赋值的执行方式推断出来的。因此,
    reg
    的使用基本上被弃用,取而代之的是实际上是相同类型的
    逻辑

  • 逻辑
    是一种1位4状态数据类型

  • 是一种1位、2状态的数据类型,其模拟速度可能快于
    逻辑
  • 如果
    逻辑
    也被声明为
    导线
    ,则它具有支持多个驱动程序的附加功能。请注意,默认情况下,
    wire
    等同于
    wire logic
  • 一般来说,“”(例如
    导线
    tri
    )最适合设计通信总线
实际上,因为无论您是使用
reg
、还是
logic
、还是
wire
进行声明,通常都无关紧要。但是,如果必须对4状态类型进行显式声明(与之相反),则通常应选择
logic
,因为这是该语言的目的


相关文章:


reg和逻辑完全相同。这些数据类型出现在always或initial块内,并存储值,即always@(a)b我知道逻辑包含4个值(0,1,z,x),但我确信将其用于三态时存在问题。我在LRM中找不到这样的文件或章节。我想你可能是对的,逻辑可以用来驱动三态。看看有一种情况,逻辑不能和电线在同一个地方使用。看看评论,“相关文章”下的第二个链接已经失效:(