文章目录
2、程序块(Program Block)和时序区域(Timing Region)
一、数据类型
1、内建数据类型
(1)逻辑类型
a、四值逻辑
可以表示0、1、X、Z四种状态,默认初始值为x
wire,reg,logic,integer,time
b、二值逻辑
只可以表示0和1两种状态,默认初始值为0。
bit:可自定义位宽
byte:8位宽,取值范围:-128~127
shortin:16位宽,取值范围:
~
int:32位宽,取值范围:
~
longint:64位宽,取值范围:
~
(2)符号类型
a、有符号类型
byte、shortint、int、longint、integer
b、无符号类型
wire、reg、logic、bit
(3)类型转换
a、隐式转换
b、显示转换
静态转换
动态转换
注意:
1 四值逻辑中的x赋值给二值逻辑的时候,就是0
2 赋值只能在声明的时候直接赋值,或者在过程块里面赋值
3 变量的赋值必须在声明之后
二、随机化
1、修饰符
(1)rand
表示每次随机化类时,这些变量都会赋一个值
(2)randc
表示周期随机性,即所有可能的值都赋过值后随机值才可能重复
2、随机约束种类
使用关键字constraint来添加约束语句块,指定随机变量的取值范围,或者各个变量之间的相互关系。约束块不是自上而下执行的程序性代码,而是声明性代码,是并行的,所以所有的约束表达式同时有效。
(1)布尔表达式 Boolean expressions
布尔表达式就是用最简单的不等式规定变量的取值范围或者相互之间的大小关系。约束块中只能包含表达式:<、<= 、== 、>= 、>。在一个表达式中最多只能使用一个关系操作符。
class order;
rand bit [7:0] low, num, high;
constraint c_boolean{
low<num;
num<high;
}
endclass
(2)权重分配 Weighted distributions
dist操作符允许产生权重分布,这样某些值得选取机会要比其他值更大。权重分配有两种表达方式,分别为:=和:/。:=表示值范围内的每一个值得权重是相同的,:/表示权重要均分到值范围内的每一个值。
class weighted
rand int src, dst;
constraint c_weighted{
src dist{0:=40, [1:3]:=60};
dst dist{0:/40, [1:3]:/60};
}
endclass
(3)范围表达式 Range expression
class range
rand int a;
int low, high;
constraint c_range_a{
a inside{[low:high]};
}