先放结论: 枚举可以直接赋值给logic, logic赋值给枚举需要做类型转换 测试代码如下 typedef enum logic [1:0] { TYPEA = 2'd0, TYPEB = 2'd1, TYPEC = 2'd2, TYPED = 2'd3 } enum_type_t; module top_module; enum_type_t enum_val1 = TYPEA; enum_type_t enum_val2 = TYPEB; logic ...
SV语法(1) data_type Verilog 的数据类型主要是线网和变量,即 wire, reg, integer,都是四值逻辑(0、1、x、z) 在verilog基础上,SV增加了二值逻辑(0、1)变量来简化运算, 包含 bit, byte, shortint, int, longint 变量。 SV中logic与verilog中的reg变量对应,为四值逻辑的无符号数;bit为二值逻辑的无符号...
SystemVerilog 引入了一种全新的四态数据类型,称为logic,它可在过程块和连续assign语句中驱动。但对于含多个驱动程序的任一信号,您都需要为其声明 net 类型(如wire),这样 SystemVerilog 才能解析最终值。 logic module tb; logic [3:0] my_data; // Declare a 4-bit logic type variable logic en; // Dec...
关键字logic实际上不是变量类型,它是一种数据类型,表示网络或变量可以有4态值。但是,当logic关键字单独使用或与模块输出端口的声明结合使用时,会推断变量。当logic与input or inout端口的声明结合使用时,如果logic不推断变量,则会推断网络类型. 过时的reg数据类型 reg数据类型是原始Verilog语言遗留下来的过时数据类型。
verilog中将寄存器(register)类型reg和线网(net)类型wire区分的较为清楚,SV则在此基础上引入了一个新的数据类型logic。 SV作为侧重于验证的语言,并不十分关切logic对应的逻辑应该被综合为寄存器还是线网,因为logic被使用的场景如果是验证环境,那么它只会作为单纯的变量进行赋值操作,而这些变量也只属于软件环境构建。
SystemVerilog对经典的reg数据类型进行了改进,使得他除了作为一个变量以外,还可以被连续赋值、门单元和模块所驱动。为了与寄存器类型相区别,这种改进的数据类型称为logic。任何使用线网的地方均可以使用logic,但是要求logic不能有多个结构性的驱动,例如在对双向总线建模的时候,此时,需要使用线网类型,例如wire,SystemVerilog...
通过将输入端口显式声明为var logic类型,可以防止输入端口的意外多个驱动程序。变量不允许多个驱动源。在编译和详细阐述设计模块时,意外的多个驱动程序将被报告为编码错误。 使用uwire防止多个驱动程序。uwire网络类型还可用于防止输入端口的多个无意驱动源。uwire类型作为1364-2005 Verilog标准的一部分添加到SystemVerilog...
system verilog数据类型强制转换 第二章 数据类型 1.内建数据类型 1.1 logic类型 原本的verilog代码中,需要分辨reg以及wire两种类型。在sv中,新加入了logic类型(逻辑类型)。 logic类型既可以代替reg,也可以代替wire。但是logic不能有多个结构性的驱动,所以在对双向总线建模时,不能使用logic,而是应该使用wire类型...
在systemverilog协议中,logic定义四态值,即向量(vector)的每个位(bit)可以是逻辑0, 1, Z或X,与verilog协议中的reg很接近。但是logic有个很明显的优势,不允许多驱动。 多驱动对关键字logic而言是语法错误,在VCS编译阶段就能够发现,能够更早得发现错误。
在SystemVerilog中变量的声明是通过var开始的,只是在具体使用时经常将这个关键字省略。而reg、logic等则不是表示指示变量的,而是表示数据类型(data type),在SystemVerilog中常用的数据类型如下表所示: 变量(var) 默认值 4-state integral(integer、reg、logic、time) X 2-state integral(byte、shortint、int...