数字ic day1(1)

vcs编译

vcs -full64 -sverilog -debug_acc+all -timescale=1ns/1ps full_adder.v full_adder_tb.v -l com.log

解释:64位的软件需要添加 -full64 

Systemverilog

一、2值逻辑(0|1) 数据类型 (不声明数值时默认位0)

1、比特矢量Bit vector 

bit [msb:lsb] variable_name [=initial_value];//位宽:MSB最高位,LSB最低位

默认无符号数,有符号数需要加signed

2、

byte(8-bit 默认有符号数)

shortint(16-bit 默认有符号数)

int(32-bit  默认有符号数)

longint(64-bit 默认有符号数)

无符号需要加上unsigned

3、实型数据

real (等价于c语言的 double、64-bit、有符号数)

shortreal(等价于c语言的 float、32-bit、有符号数)

二、4值逻辑(0|1|x|z)(不声明数值时默认位x)

1、reg[msb:lsb] variable_name [=initial_value];

等同于verilog 无符号数、只能在(always,initial 语句块里面赋值)、在systeverilog可以有多个驱动

2、logic [msb:lsb]  variable_name [=initial_value];

等同于verilog 无符号数、可以连续赋值(除了always,initial还可以在assign里面赋值),只能有一个驱动

3、wire

在systeverilog可以有多个驱动

4、integer variable_name [=initial_value]; //32-bit有符号整数

5、time variable_name [=initial_value]; //64-bit有符号数

三、字符串变量类型string

string variable_name [=initial_value];

未赋值时初始值位空字符 “”

四、枚举类型

数据类型默认是 int,初始化值为0,可以使用.name显示字符

typedef enum [data_type] {named constants} enumtype;

声明: 

enum [data_type] {named constants} enum_var;

enumtype variable_name [=initial_value];

五、固定数组

type array_name[size] [=initial_value];

超过边界的写操作将被忽略

超过边界的读操作:2值返回0,4值返回  ‘x

支持多维数组

$dimensions(array_name) //函数返回数组的维数

$size(array_name,dimension)//函数返回给定维度的数组元素个数

六、数组

支持循环foreach、缩减、Reduction operators

array_name.sum();//求和

array_name.and();//数组数据相与

array_name.or();//数组数据相或

array_name.xor();//数组数据相逻辑异或

数组操作:

1)function array_type[$] array.find() with (expression) ;//查找所有满足的元素,返回匹配元素的队列,查询失败返回空队列

 2)function int_or_index_type[$] array.find_index with (expression) ;//查找所有满足的元素,返回匹配元素对应索引的队列

3)function array_type[$] array.find()_first() [with (expression)] ;//返回第一个满足的数组元素,如果没有表达式返回第一个元素,返回的第一个匹配的元素放到array_type[0]

 4)function int_or_index_type[$] array.find_first_index [with (expression)] ;//返回第一个满足的数组元素的索引,如果没有表达式返回第一个索引,返回的第一个匹配的元素放到int_or_index_type[0]

5)find_last(),find_last(),unique(),unique_index(),min(),max(),reverse(),sort(),rsort(),shuffle(),

1、动态数组

type array_name[] [=initial_value];

在仿真运行时,使用构造函数分配数组大小。越界读写时,仿真出错,只有一维。

例:

reg[7:0] ID[];

ID=new[100];//allocate meory

ID.delete();//de-allocate memory

2、队列

type array_name[$] [=initial_value];

在仿真运行时,分配或者释放数组的内存空间。

        push_back(),push_front(),insert()

        pop_back(),pop_front(),delete()

不能使用new[]函数创建内存空间

索引0指向队列最低索引,索引$指向队列最高索引

越界对队列进行读写会导致仿真错误

队列操作的效果类似于FIFO或堆栈(stack)

单一维度

3、联合数组

type array_name[index_type]; //索引使用特定类型,不一定时数字

type array_name[*]; //索引可以是任何类型

索引类型可以是数字、字符串、类

动态分配和释放内存空间

数组的移动搜索

        first(),next(),prev(),last()

num()函数决定了数组元素的个数

exists()函数可以判断有效索引是否存在

越界读操作时,如果是2值逻辑返回0,4值逻辑返回 'x

只支持一维

上一篇:网络编程


下一篇:【NOIP2021国庆集训Day1】A.撰写博客