SystemVerilog教程第二章数据类型:logic 和 bit

您所在的位置:网站首页 verilogassign语句四选一 SystemVerilog教程第二章数据类型:logic 和 bit

SystemVerilog教程第二章数据类型:logic 和 bit

2023-03-14 21:24| 来源: 网络整理| 查看: 265

本文首发于VX小石头的芯语芯愿,欢迎前往围观SystemVerilog logic 和 bit

在前文中提供了主要数据类型的概述。在本节会话中,我们将了解下四态和二态变量以及两个新的数据类型,分别名为 logic 和 bit。

四态数据类型

具有下列四种状态的数据类型即称为四态类型:未知 (X)、高阻抗 (Z) 值、零 (0) 和一 (1)。请注意,reg 只能在 always 之类的 initial 过程块中驱动,而 wire 数据类型则只能在 assign 语句中驱动。SystemVerilog 引入了一种全新的四态数据类型,称为 logic,它可在过程块和连续 assign 语句中驱动。但对于含多个驱动程序的任一信号,您都需要为其声明 net 类型(如 wire),这样 SystemVerilog 才能解析最终值。

logic

module tb; logic [3:0] my_data; // Declare a 4-bit logic type variable logic en; // Declare a 1-bit logic type variable initial begin $display ("my_data=0x%0h en=%0b", my_data, en); // Default value of logic type is X my_data = 4'hB; // logic datatype can be driven in initial/always blocks $display ("my_data=0x%0h en=%0b", my_data, en); #1; $display ("my_data=0x%0h en=%0b", my_data, en); end assign en = my_data[0]; // logic datatype can also be driven via assign statements endmodule

仿真 log 日志

ncsim> run my_data=0xx en=x my_data=0xb en=x my_data=0xb en=1 ncsim: *W,RNQUIE: Simulation is complete.二态数据类型

在典型的验证测试激励文件中,大多数情况下并不真的需要全部 4 个值(0、1、x 和 z),例如,如果网络包中含有头文件,用于指定此包的长度,那么此网络包建模时就是如此。长度通常是数值,而非 X 和 Z。SystemVerilog 添加了诸多新的二态数据类型,仅用于存储 0 和 1 值,并且只能取这两个值。这有助于加速仿真、减少占用的存储器,并且在某些设计风格中这是首选方法。

如果将四态值转换为二态值,那么未知位或高阻抗位应转换为零 (0)。

最重要的二态数据类型是 bit,常用于测试激励文件中。bit 类型的变量可取值 0 或 1,用于表示单个位。如需使其能表示和存储多个位,则应提供从 MSB 到 LSB 的范围。

bit

module tb; bit var_a; // Declare a 1 bit variable of type "bit" bit [3:0] var_b; // Declare a 4 bit variable of type "bit" logic [3:0] x_val; // Declare a 4 bit variable of type "logic" initial begin // Initial value of "bit" data type is 0 $display ("Initial value var_a=%0b var_b=0x%0h", var_a, var_b); // Assign new values and display the variable to see that it gets the new values var_a = 1; var_b = 4'hF; $display ("New values var_a=%0b var_b=0x%0h", var_a, var_b); // If a "bit" type variable is assigned with a value greater than it can hold // the left most bits are truncated. In this case, var_b can hold only 4 bits // and hence 'h481 gets truncated leaving var_b with only 'ha; var_b = 16'h481a; $display ("Truncated value: var_b=0x%0h", var_b); // If a logic type or any 4-state variable assigns its value to a "bit" type // variable, then X and Z get converted to zero var_b = 4'b01zx; $display ("var_b = %b", var_b); end endmodule

仿真 log 日志

ncsim> run Initial value var_a=0 var_b=0x0 New values var_a=1 var_b=0xf Truncated value: var_b=0xa var_b = 0100 ncsim: *W,RNQUIE: Simulation is complete.



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3