![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
SV
ICer_Wx
这个作者很懒,什么都没留下…
展开
-
SV---随机控制
1.随机序列1)产生事务序列的另一个方法是使用SV的randsequence结构。这对于随机安排组织原子(atomic)测试序列很有帮助。initial begin for (int i=0;i<15;i++) begin randsequence (steam) steam : cfg_read := 1 | io_read := 2 | mem_read := 5; cfg_read : {cfg_read_task;} | {cfg_read_task;原创 2020-07-20 20:32:06 · 1034 阅读 · 0 评论 -
SV---数组约束
1.数组的属性约束1)在约束随机标量的同时,我们还可以对随机化数组进行约束。class dyn_size; rand logic [31:0] d[]; constraint d_size {d_size() inside {[1:10]};}//约束动态数组d的size在1-10.即每个数组有1-10个数endclass2)多数情况下,数组的大小应该给定范围,防止生成体积过大的数组或者空数组。3)还可以在约束中结合数组的其他方法,如:求和sum(),求积product(),与and原创 2020-07-20 00:57:13 · 6354 阅读 · 0 评论 -
SV---随机函数
1.pre_randomize()和post_randomize()函数1)有时需要在调用randomize()之前或之后立即执行一些操作,例如在随机前设置类里的一些非随机变量,(上下限、条件值、权重),或者在随机化之后需要计算随机数据的误差、分析和记录随机数据等。2)SV提供了两个预定义的void类型函数pre_randomize()和post_randomize()函数。用户可以在类中定义这两个函数,分别在其中定义随机化前的行为和随机化后的行为。3)如果某个类中定义了pre_randomiz原创 2020-07-19 20:13:56 · 9671 阅读 · 0 评论 -
SV---约束块控制
1.打开或关闭约束1)p.constraint_mode(0)是关闭约束2)p.constraint_mode(1)是打开约束class Packet; rand int length; constraint c_short {length inside {[1:32]};} constraint c_long {length inside {[1000:1023]};}endclassPacket P;initial begin p = new(); //创建一个long p原创 2020-07-18 20:26:13 · 4014 阅读 · 1 评论 -
SV---随机约束和分布
为什么需要随机1.芯片越来越复杂,定向测试已经无法满足验证的需求,而随机测试的比例逐渐提高。2.定向测试能找到你认为可能存在的缺陷,而随机测试可以找到连你自己都想不到的缺陷。为什么需要约束没有约束,产生有效激励的同时也产生了很多无效和非法的激励。1.声明随机变量的类关键字:rand/randc,只能出现在class中,用来修饰成员变量。rand:每次随机的概率都是一样的,假设随机10次,每次都是1/10。randc:每做一次随机,总数会减1,假设随机10次,第一次随机..原创 2020-07-17 17:42:54 · 4778 阅读 · 0 评论 -
SV---包的使用
1.包的意义2.包的定义package regs_pkg; `include "stimulator.sv" `include "monitor.sv" `inclide "chker.sv" `include "env.sv"endpackagepackage arb_pkg; `include "stimulator.sv" `include "monitor.sv" `inclide "chker.sv" `include "env.sv"endpackage原创 2020-07-17 10:38:11 · 1808 阅读 · 2 评论 -
SV---句柄的使用
1.句柄的传递1)句柄可以作为形式参数通过方法来完成对象句柄的传递,从外部传入方法内部。2)句柄也可以在方法内部首先完成修改,而后再由外部完成使用例题:下述代码最后显示的t.addr的数值是多少?function void create (Transaction tr); tr = new(); tr.addr = 100; ...endfunctionTransaction t;initial begin create(t); t.addr = 10; $dis原创 2020-07-16 21:26:51 · 3789 阅读 · 0 评论 -
SV---类的继承
1.继承性关键词:extends例题class cat; protected cloor_t color; local bit is_good; function set_good(bit s); this.is_good = s; endfunctionendclassclass black_cat extends cat; function new(); this.color = BLACK; endfunctionendclassclass white_原创 2020-07-16 17:07:51 · 8173 阅读 · 1 评论 -
SV---类的成员
1.概述1)如果没有指明访问类型,那么成员的默认类型是public,子类和外部据可以访问成员。2)如果指明是protected,那么只有该类或者子类可以访问成员,而外部无法访问。3)如果指明是local,那么只有该类可以访问成,子类和外部均无法访问。例题代码中ck.get_clock和ck.nclock数值分别是多少?class clock local bit is_summer = 0; local int nclock = 6; function int get_cl原创 2020-07-16 14:44:59 · 1512 阅读 · 0 评论 -
SV---类和对象
1.OOP的概念要素1)Class(类):包含变量和方法的基本模块,是“软件”盒子。2)Ojbect(对象):类的实例,,在SV中可以使用class来例化,是“软件”例化。3)Handle(句柄):用来指向对象的指针,来索引对象的变量和方法。4)Property(属性):在类中声明的存储数据的变量,和Verilog中的wire和reg一样。5)Method(方法):类中可以使用task或者function来定义方法以便处理自身或者外部传入的数据。2.第一个事务类(Transactio原创 2020-07-15 17:35:38 · 2740 阅读 · 1 评论 -
SV---设置断点和查看变量
1.断点设置方法:在object中双击变量打开代码,在代码前面单机设置断点上述在第八行和十四行设置断点,在这两处result数值分别是多少?答:第一个initial中调用两次incr_static(静态),第一次执行incr_static,result为0,因为加1还没进行,由于是静态所以第二次执行incr_static,result为1. 第二个initial中调用两次incr_dynamic(动态),第一次执行incr_dynamic,result为0,同样因为加1还没进行,由于是.原创 2020-07-15 14:53:14 · 1053 阅读 · 1 评论 -
SV---仿真的结束
1.结束方式1) $finish 2) $stop3)program隐式结束program pgm1; initial begin : proc1 #100ns; $display("@%0t p1.proc1 finished",$time); end initial begin : proc2 #400ns; $display("@%0t p1.proc2 finished",$time); endendprogramprogram ...原创 2020-07-15 11:56:17 · 2674 阅读 · 0 评论 -
SV---采样和数据驱动
1.竞争问题如何避免采样的竞争问题:1)在驱动时,添加相应的人为延迟 2)在采样事件前某段时刻中进行采样`timescale 1ns/1psmodule race1; bit clk1,clk2; bit rstn; logic [7:0] d1;initial begin forever #5 clk <= !clk;end always @ (clk1) ...原创 2020-07-14 17:40:48 · 2682 阅读 · 0 评论 -
SV---接口
接口(interface)1.接口可以用作设计,也可以用作验证2.与module的使用性质很像,可以定义端口,也可以定义双向信号;可以使用initial和always,也可以定义function和task。3.TB和DUT是相互独立的,通过interface连接。4.在interface的端口列表中只需要定义时钟、复位等公共信号,或者不定义任何端口信号。module调用interfaceinterface arb_if(input bit clk); logic [1:0]原创 2020-07-14 12:13:34 · 1199 阅读 · 4 评论 -
SV变量生命周期
1.在SV中,我们将数据的生命周期分为动态(automatic)和静态(static)2.局部变量是动态生命周期,其生命周期同所在域共存亡,例如function/task中的临时变量,调用结束后,临时变量的生命也将终结。3.全局变量是静态生命周期,从程序执行开始到结束一直存在,例如module中的变量默认都是全局变量。4如果数据变量被声明为automatic,那么在进入该进程/方法后,automatic变量会被创建,离开后会被销毁。 而static变量从仿真开始时就被创建,在进程/方法执行.原创 2020-06-30 22:39:03 · 1515 阅读 · 0 评论 -
SV-任务(task)
task: 1)task无法通过return返回结果,因此只能通过output、inout或者ref的参数来返回。 2)task内可以置入耗时语句,而function不能,常见的耗时语句有:@event、wait event、#delay等。task mytask1 (output logic [31:0] x, input logic y); ...endtastps: 1)在非耗时方法定义时使用function, 2)在内置耗时语句时使...原创 2020-06-30 22:06:08 · 5128 阅读 · 0 评论 -
SV-函数(function)
function:1)可以在参数列表中指定输入参数(input)、输出参数(output)、输入输出参数(inout)、引用参数(ref)。2)可以返回数值或者不返回数值(void)function int double (input a); return 2*a;endfunctioninitial begin $display ("double of %0d is %0d",10,double(10));end3)function默认数据类型为logic,例如:i原创 2020-06-30 18:06:18 · 8032 阅读 · 0 评论 -
SV过程块(always、initial)
module,interface认为是硬件;program,class认为是软件过程块:1)always(可综合) 2)initial(不可综合)always:可用于module和interface中always @ (posedge clk)----时序逻辑 " <= "always @ ( * )----组合逻辑 " = "eg:上文提到了always具备描述硬件电路行为和核心要素,你认为下列选项哪些是正确使用always的方式?...原创 2020-06-30 17:35:06 · 4913 阅读 · 0 评论 -
SV数据类型-结构体、枚举类型、字符串
结构体1.Verilog的最大缺陷之一是没有数据结构,在SV中可以使用struct语句创建结构,跟c语言类似。2.不过struct的功能少,它只是一个数据的集合,其通常的使用方式是将若干相关的变量组合到一个struct结构定义中。3.伴随typedef可以用来创建新的类型,并利用新类型来声明更多变量。//为了共享该类型,通过typedef来创建新类型typedef struct {bit [7:0] r,g,b;} pixel_s;pixel_s my_pixel; //声明变量my原创 2020-06-29 16:10:44 · 3548 阅读 · 2 评论 -
SV数据类型-关联数组
关联数组:用于保存稀疏矩阵的元素。当你对一个非常大的地址空间寻址时,该数组只为实际写入的元素分配空间,这种实现方法所需的空间比定宽或动态数组所占用的空间要小得多。其他语言也有类似的数据存储结构,如哈希(hash)和python中的词典(dictionary),可以灵活赋予键值(key)和数值(value)。bit [63:0] assoc[int],idx = 1;repeat (64) begin //对稀疏分布的元素进行初始化 assoc[idx] = idx; //原创 2020-06-29 15:00:34 · 7209 阅读 · 3 评论 -
SV数据类型-队列
1.队列结合了链表和数组的优点,可以在它的任何地方添加或删除元素,并且通过索引实现对任一元素的访问。2.队列的声明是使用带有美元符号的下标:[$],队列元素的标号从0到$。3.队列不需要new[ ]去创建空间,只需要使用队列的方法为其增减元素,一开始其空间为0。4队列的一个简单使用:通过其自带方法push_back( )和pop_front( )的结合来实现FIFO的用法。(从back往里放,从front往外拿)eg:int j = 1, q2[$] = {3,4},q[$] =..原创 2020-06-29 10:15:31 · 14440 阅读 · 2 评论