日常记录(61)全视界-SV2
这本书的整体结构也只能将就看看,无论是从代码缩进还是语句,整体行文逻辑实在是有点混乱。另外一些代码无法编译通过,或者给出了错误的结论(vcs2016)
比较器的验证计划
异常检查:如复位,等异常
常规检查:数据完整性,功能配置
时序检查:时序是否符合预期
package的语法注意
1. 优先使用内部的类实例化
package被import后(且使用import pkg::*),如果内部有同样的类名定义,则优先使用内部的类实例化。
package a_pkg;
class mon;
static function void display1();
$info("this is a package class");
endfunction: display1
endclass
endpackage
module module1;
class mon;
static function void display1();
$info("this is a module class");
endfunction: display1
endclass
import a_pkg::*;
mon mon1 = new();
initial begin
mon::display1();
end
endmodule
如下输出为
Info: "module1.sv", 13: module1: at time 0
this is a module class
2. 同名冲突错误
package被import后(且使用import pkg::class_name),如何内部有相同的class_name,则发生冲突错误。
import改为:
import a_pkg::mon;
3. 使用export
package嵌套后,被嵌套的package不可见,需要使用export方式。
mon2不可见,报错。
package b_pkg;
class b_mon;
endclass
endpackage
package a_pkg;
import b_pkg::b_mon;
class a_mon;
endclass
endpackage
module module1;
import a_pkg::*;
a_mon mon1 = new();
b_mon mon2 = new();
endmodule
使用export
查看代码
package b_pkg;
class b_mon;
endclass
endpackage
package a_pkg;
import b_pkg::b_mon;
export b_pkg::b_mon;
class a_mon;
endclass
endpackage
module module1;
import a_pkg::*;
a_mon mon1 = new();
b_mon mon2 = new();
endmodule
4. 系统默认
系统默认的randomize是在std包中。
process控制下的线程并发
常用方法有:状态:status,挂起suspend,恢复resume等。
`timescale 1ns/1ns
module proc_case1;
process p1;
process p2;
task t1();
p1 = process::self();
$display("@%0t t1 started", $time);
#15ns;
$display("@%0t t1 running", $time);
#15ns;
$display("@%0t t1 finished", $time);
endtask
task t2();
p2 = process::self();
$display("@%0t t2 started", $time);
#20ns;
$display("@%0t t2 finished", $time);
endtask
initial begin
fork: thread_trigger
t1();
t2();
join_none
fork
begin
#5ns;
p1.suspend();
$display("@%0t t1 state is %s", $time, p1.status());
end
begin
#5ns;
p2.kill();
$display("@%0t t2 state is %s", $time, p2.status());
end
join
#20ns;
p1.resume();
end
endmodule
vcs下的输出结果。
t1走了5ns以后,就停住了,恢复时候仍然继续延时剩下的10ns,打印running。
@0 t1 started
@0 t2 started
@5 t1 state is SUSPENDED
@5 t2 state is KILLED
@35 t1 running
@50 t1 finished
Le vent se lève! . . . il faut tenter de vivre!
Le vent se lève! . . . il faut tenter de vivre!