目录
1. logic
1.1 logic的作用
简单来说,sv中引入logic变量类型,一方面logic拥有四值逻辑(x,z,0和1),能够更好地反映实际电路中的状态;另一方面,相比verilog中的reg和wire,sv中logic几乎在所有情况下都可以同时承担reg和wire的作用,使得在设计时,我们可以将更多的关注点放在代码设计上,而不是纠结使用reg还是wire。
注:sv中,logic可以在过程语句和连续赋值语句(assign)中使用。而verilog中reg只能用于过程语句(initial或者always),wire只能用于连续赋值语句(assign)。但sv中logic也不是万能使用的。如果遇到一个被多个驱动源驱动的信号,那么这个信号必须用wire类型。(不理解先记着)
1.2 logic的使用
module example;
logic A;
logic[3:0] B;
initial begin
$display("A=%b, B=%b", A,B); //打印结果A=x,B=xxxx;因为logic默认值为x
B=4'b0011;
assign A=B[1];
$display("A=%b,B=%b",A,B); //打印结果A=1,B=0011;数据左边为低位,右边为高位,
//这里把B的第二位赋值给A
end
endmodule
2. bit
2.1 bit的作用
有些情况下(比如表示一个数据包的长度),x和z值并不会出现,或者不被需要,那么采用二值逻辑bit可以大大减少存储所需的空间,加快仿真。
module example1;
bit var_1;
bit [3:0] var_2;
logic [2:0] var_3;
initial begin
$display("var_1=%b, var_2=%b, var_3=%b", var_1, var_2, var_3);
//var_1=0, var_2=0000,
//var_3=xxx; bit默认值为0
var_2=4'b01zx;
$display("var_2=%b",var_2); // var_2=0100;x和z赋值给二值逻辑时,会转成0
endmodule
3.总结
logic和bit在sv中会频繁使用,一般来说,需要记住的点是:
1.logic四值逻辑,默认值为x;bit二值逻辑,默认值0;
2.除了被多驱动驱动的信号需要被声明为wire,其他情况基本都可以声明为logic;
3.当从四值逻辑变为二值逻辑时,x和z会转化成0
1321



被折叠的 条评论
为什么被折叠?



