【SystemVerilog基础】1.数据类型

1.1 logic类型

Verilog中有线网类型(net)和变量类型(variable)这两种,都是四值逻辑的,声明都是类型+声明列表,wire类型只可以被连续赋值,reg只可以被过程赋值,使用reg的时候不一定会生成寄存器,是因为从仿真的角度来看需要一个寄存器来储存变量,和综合过后的电路没有直接的联系。

Systemverilog里面也是网类型(net)和变量类型(variable)这两种,声明的方式为:类型+数据类型+声明列表,线网的类型一般有wire、tri、wand、wor等等,变量类型只需要关键字var即可,而且var还是可以省略的。SV对reg数据类型进行了改动,除了可以作为一个变量以外还可以被连续赋值、门单元和模块所驱动,称为logic,任何可以使用线网的地方都可以使用logic,但是要求logic不能拥有多个结构性驱动。

logic使用的场景如果是验证的话,那么他只会作为单纯的变量进行赋值,这些变量也只属子软件环境构建。因为SV作为侧重验证的语言、并不十分关切logi对应的逻辑应该被综合为寄存器还是线网。logic被推出的另外一个原因也是为子方便验证人员驱动和连接硬件模块、而省去考虑究竟该使用reg还是wire的精力。这既节省了时间,也避免了出错的可能。

在SV里面连续赋值的左值支持变量类型,而Verilog里面仅支持线网类型。

1.2 二值变量和四值变量

四状态的默认值是x,双状态的默认值是0,但是线网的没有驱动的情况下输出是Z;将四值变量赋值给二值变量X和Z值会转变为0,可以利用$inunknown(变量名)来检查表达式里面是否有X或者Z

1.3 有符号和无符号、四值逻辑和二值逻辑

四值逻辑类型integer、logic、reg、net-type
二值逻辑类型byte、shortint、longint、int、bit
有符号类型byte、short、int、longint、integer
无符号类型bit、logic、reg、net-type

在进行不同数据类型操作的时候荧光着重注意变量的:逻辑数值类型、符号类型、矢量位宽

1.4 固定数组

定宽数组: 

int lo_hi [0:15];

int array2 [0:7] [0:3]; //多维数组

 初始化和赋值:

常量数组:单引号+大括号=初始化数组

int ascend [4] =`{0,1,2.3}

同时使用为下标和数组下标:

initial  begin
    bit [31:0] scr[5] =`{5[5]};
        display ( scr[0],,          //'b101
                   scr[0][0],,      //'b1
                    scr[0][2:1]     //'b10
            )

end

1.5 合并数组 

数组格式大小必须是[msb:lsb],而不是 [size].

合并数组:

int [3:0] [7:0] a;

 非合并数组:[7:0]是列,[3:0]是行

int [7:0] a [3:0];

 

1.6 动态数组 

动态数组再声明的时候使用的空的下标,表明数组的宽度不在编译时给出,而是在程序运行的时候再指明。使用new[  ] 来分配空间。

//动态数组保存元素数量不定的列表
bit [7:0] mask [ ] = `{8'b0000_0000, 8'b0000_0001, 8'b0000_0011, 8'b0000_0111, 
                        8'b0000_1111, 8'b0001_1111, 8'b0011_1111, 8'b0111_1111,                                     
                       8'b1111_1111 };

1.7 队列

队列的声明是使用带有美元符号的下标,结合了链表和数组的优点,可以在任何一个队列中增加或者删除元素,在性能损失上会小很多。

q[$]={0,2,5};

 

1.8 关联数组 

关联数组采用在方括号中放置数据类型的形式进行声明。

initial begin
    bit [63:0] assoc[bit[63:0]],idx=1;
    
    repeat(64) begin
        assoc[idex]=idex;
        idex=idex<<1;

   end 

end 

1.9 数组操作

for和foreach:

复制和比较:

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SystemVerilog是一种硬件描述语言(HDL),用于描述数字电路的行为和结构。它是Verilog语言的扩展,引入了许多新的特性和语法。 以下是SystemVerilog的一些基础语法: 1. 模块定义:使用`module`关键字定义模块,模块是SystemVerilog中的基本构建单元。例如: ``` module MyModule(input wire clk, input wire rst, output reg data); // 模块内部逻辑 endmodule ``` 2. 端口声明:模块的输入输出端口使用`input`和`output`关键字声明,可以使用`wire`或`reg`类型进行声明。例如: ``` input wire clk; // 输入端口 input wire rst; output reg data; // 输出端口 ``` 3. 数据类型:SystemVerilog支持多种数据类型,包括整数、浮点数、位向量、数组等。例如: ``` int a; // 整数类型 real b; // 浮点数类型 bit [7:0] c; // 8位位向量类型 reg [3:0] d; // 4位寄存器类型 int e [3:0]; // 整数数组类型 ``` 4. 运算符:SystemVerilog支持常见的运算符,包括算术运算符、逻辑运算符、位运算符等。例如: ``` a = b + c; // 加法 d = a & b; // 位与 e = (a > b) ? c : d; // 条件运算符 ``` 5. 控制语句:SystemVerilog支持常见的控制语句,如条件语句、循环语句等。例如: ``` if (a > b) begin // 执行语句 end else if (a < b) begin // 执行语句 end else begin // 执行语句 end for (int i = 0; i < 10; i++) begin // 循环体语句 end while (condition) begin // 循环体语句 end ``` 这些是SystemVerilog的一些基础语法,还有其他更高级的特性和语法可以用于描述复杂的数字电路。希望这些信息对你有帮助!如果你还有其他问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值