网络和网站的区别,企业网站的策划书,东莞做网站建设公司,网站建设高端培训数据类型规则的放宽
SystemVreilog放宽了使用变量的限制 SystemVreilog放宽了变量的使用规则#xff0c;大大简化了模型中数据类型的使用。在SystemVreilog中共#xff0c;任何数据类型的变量都可以通过下列方式赋值#xff0c;但只能采用其中的一种方式。 #xff08;1大大简化了模型中数据类型的使用。在SystemVreilog中共任何数据类型的变量都可以通过下列方式赋值但只能采用其中的一种方式。 1在任意的initial或always的过程中赋值 2在单个always_combalways_ff或always_latch过程块中赋值 3通过单个的持续赋值语句赋值 4通过单个模块或原语的output/inout端口驱动赋值 大部分信号可以声明为logic或bit 这些变量使用规则的放宽允许模型中的大部分信号声明为一个变量类型如bit或logic。不用事先确定信号使用的上下文模型由系统级转换到RTL级或门级也不用改变信号的数据类型
module compare(output logic lt,eq,gt,input logic [63:0] a,b);
always(a,b)if(a b) lt 1b1; //过程赋值else lt 1b0;assign gt (ab); //持续赋值
comparator u1 (eq,a,b);//模块实例化
endmodulemodule comparator(output logic eq,input [63:0] a,b
);
always(a,b)eq (a b);
endmole对变量使用的限制可以防止设计错误
注意变量不能被多个源驱动SystemVreilog使用变量的约束 在SystemVreilog中下列使用是错误的多个输出端口驱动一个变量或者对一个变量进行多次持续赋值或者对一个变量同时使用过程赋值和持续赋值。 对变量的这些 限制是因为变量没有内置决断函数当多个器件驱动同一输出时无法得到最终值。
module add_and_increment(output logic [63:0] sum,output logic carry,input logic [63:0] a,b
);
always(a,b)sum a b;//sum的过程赋值assign sum sum 1; //错误sum已经赋了一个值look_ahead i1(carry,a,b);//实例化模块驱动carry
overflow_check i2(carry,a,b);//错误对carry进行第二次驱动
endmoudlemodule look_ahead (output wire carry,input logic[63:0]a,b);
...
endmodulemodule overflow_check (output wire carry,input logic[63:0]a,b);
...
endmodule单驱动逻辑使用变量多驱动逻辑使用线网 SystemVreilog对于变量不能有多个驱动源的限制避免了设计错误。如果设计中的一个信号只有源那么可以使用变量就可以使用过程赋值、持续赋值、模块或原语的一个输出/输入端口。如果不小心使一个信号连接了两个驱动则会报错因为一个变量只能有一个源。 SystemVreilog允许一个变量在多个always过程块中赋值虽然着也是一种多驱动形式但是一些新的过程块always_comb,always_latch和always_ff。也限制了一个变量只能在一个过程块中赋值。 只有net数据类型可以有多个驱动如多次持续赋值和/或多个模块或者原语实例化输出端口的连接。因此设计中可以被多个器件驱动的信号如数据总线或者地址总线应该被声明为Verilog的net数据类型如wire。即可用于输入又可用输出的双向端口也应该被声明为net数据类型。 通过持续赋值或模块输出给自动变量赋值也是非法的。只用静态变量可以被持续赋值或连接到输出端口。之所以需要静态变量是为了能持续赋值变量需要在整个仿真过程中都存在。自动变量则不会存在于整个仿真运行时间。
有符号修饰和无符号修饰
Verilog-2001有符号和无符号类型
允许将任何数据类型声明为有符号数缺省的数据类型为无符号数reg [63:0] u;//无符号64位变量
reg signed [63:0] s ;//有符号64位变量SystemVreilog增加了缺省为有符号的数据类型。这些数据类型包括byte、shortint、int和longint。SystemVreilog使用insigned关键字可以将这些有符号的数据类型定义为无符号的。
int s_int ;//有符号32位变量
int unsiged u_int; //无符号32位变量