
System Verilog
qq_38453556
这个作者很懒,什么都没留下…
展开
-
Systemverilog 第十二课 线程
线程两种分组语句:begin/end:串行执行fork/jion:并行执行join,join_none,join_anyjoin必须要执行完程序段内所有的进程才会跳出在上述程序中理论上两个$display没有先后关系,但是仿真器会先后输出两句话(输出顺序无参考价值),因此应当尽量避免这种写法。整个程序段在至少经过20ns并且eventA执行完毕后才会跳出。** join_any**等到任何一个进程执行完毕即可跳出,但是剩下的进程会继续执行join_none程序段内的进原创 2020-08-24 09:47:28 · 287 阅读 · 0 评论 -
Systemverilog 第十课 随机化
第十课 RandomizationRandomization关键词:randrand[7:0] y;y会在0~255之间随机生成。关键词:randcrandc[1:0] y;y会在0~3之间随机生成,并且必定以四个为循环生成互不相同的数字,只能对bit 或enum类型使用这个关键词。关键字:constraint对于声明过rand/randc的变量可以使用constraint限定randomize()函数randomize属于内嵌的系统函数 ,函数会给所有object里原创 2020-08-24 09:47:11 · 971 阅读 · 0 评论 -
Systemverilog 第九课 面向对象高级编程
第九课 面向对象高级编程new的时候括号可加可不加,如果有参数列表则必须含有括号。Polymorphism 多态当类派生出子类时,基类中的一些方法可能需要被重写,对象中的类型来决定调用方法的实现方式,通常这是一个动态的过程,动态的选择方法的方式叫多态。虚方法(virtual function)的重写与实现就是多态。例子:实方法和虚方法的区别就在于是否有关键字virtual注意:基类当中如果定义了virtual,子类当中继承的基类即使不加关键字,也会默认认为是虚类上述例子中,两边第一次dis原创 2020-08-24 09:47:04 · 206 阅读 · 0 评论 -
Systemverilog 第八课 面向对象编程
第八课 OOP什么是OOP?可以帮助你搭建并维护一个大型的testbench;提升代码效率;提升代码的复用性。TerminologyClass(类,蓝图) -> Object(对象,表示具体的物件) -> Handle(句柄,指向对象的指针/地址)-> Properties(属性,类当中定义的变量)-> Methods(方法,控制属性的方法)SV当中尽量不要写always,而是用task和function处理任务的过程(偏软件思维)OOP的三大特点:封装、继承、多态原创 2020-08-24 09:46:56 · 640 阅读 · 0 评论 -
Systemverilog 第七课 Structure
第七课Structurestructure是一组变量或者常数的集合,能够更方便地同时访问其中的元素。语法:struct{ int a,b; logic[7:0] opcode; logic[23:0] address; bit error;} Instruction_Word最后一行是这个structure的名字,引用变量时的格式为:Instruction_Word.address = 24'hF0000;Packed structurestructure默认状态下在内存当中原创 2020-08-24 09:46:43 · 825 阅读 · 0 评论 -
Systemverilog 第六课 Array/Queue/Method
第六课Dynamic array1.动态数组在定义时不需要确定数组的大小,用空括号[]声明,但是在仿真时需要声明,完成仿真后即可释放。2.当元素个数以及元素基本类型相同时,固定长度的数组可以被assign给动态数组3.$size函数可以用于返回固定长度/动态数组的长度。data_type name_of_dynamic_array[];name_of_dynamic_array = new[number of elements];图中new[20] (dyn)在重新定义动态数组元素宽度的同原创 2020-08-24 09:46:36 · 2031 阅读 · 0 评论 -
Systemverilog 第五课
ProgramQ:Program能不能含有always块?A:不能,因为program不能含有module,因此必然不会含有always块。要生成图中激励,可以写出如下的代码:program test(arb_if.TB arbif);initial begin //asynch drive reset arbif.reset <= 0; #15ns arbif.reset <= 1; #35ns arbif.reset <= .原创 2020-08-24 09:46:12 · 360 阅读 · 0 评论 -
Systemverilog 第四课 Interface and program
P13 Interface and Program正式运行testcase之前需要做好的准备:1.对CLK和RESET进行规划,DUT和TB都需要时钟和复位信号。2.对于第一个testcase用log记录仿真过程,并用display显示仿真结果。3.首先排除tb的错误,再检查tb给dut环境设置是否错误,全都没错才去检查RTL的错误。Q:logic数据类型有几个状态?A:4个,01xzInterfaceQ:如何连接testbench与DUT?A:先定义连接途径,并利用例化将端口连接起来原创 2020-08-24 09:45:55 · 1000 阅读 · 0 评论 -
Systemverilog 第一课
P9 课程概述课程内容Verilog Testbench功能算法需要用C/C++进行描述· 产生激励 Generate stimulus· 将激励输入到待测设计 (DUV-Design Under Verification)· 获取响应 Capture response· 检查响应的正确性 Check the response for correctness· 根据验证目标评估验证进度 Measure the progress against the overall verif原创 2020-08-24 09:45:26 · 346 阅读 · 0 评论