摘要:三态门主要有bufif0/bufif1/notif0/notif1 三态使能门实例声明语法: gate_instantiation ::= enable_gatetype [drive_strength] [delay3] enable_gate_instance { , enable_gate_i
阅读全文
摘要:你需要在测试平台中创建线程,也会需要停止线程。 verilog中的disable语句可以用于停止systemverilog中的线程。 SystemVerilog提供了两大类process的控制方式,分别为wait和disable。 disable语句常用的多种方式包括:disable block_n
阅读全文
摘要:在实际的硬件中,时序逻辑通过时钟沿来激活,组合逻辑的输出则随着输入的变化而变化。所有这些并发的活动在verilog的寄存器传输级上是通过initial和always块语句,实例化和连续赋值语句来模拟的。 每个线程总是会跟相邻的线程通信。systemverilog中常见的线程间的通信有标准的veril
阅读全文
摘要:uvm_enent的方法有wait_on、wait_off、wait_trigger、wait_ptrigger、get_num_waiters、 1.wait_on:等待事件第一次被触发; 2.wait_off:如果事件已经被触发且保持on的状态,这个任务等待通过调用reset关闭; 3.wait
阅读全文
摘要:在SV中用来做线程间同步的几种方法,它们分别是semaphore、event和mailbox。 而在UVM中event进化成uvm_event,不仅仅拥有达成不同组件进程之间同步的功能,还能像TLM通信一样传递数据,并且作用范围更广(TLM通信只能在uvm_component之间,而uvm_even
阅读全文
摘要:在sequence中可以使用starting_phase来控制验证平台的关闭。 有两种方式为starting_phase赋值。 第一种:手工启动sequence时为starting_phase赋值。 例如:seq.start(env.i_agt.sqr); class my_case0 extend
阅读全文
摘要:第一种时利用uvm_do系列宏 在一个sequence的body中,除了可以使用uvm_do宏产生transaction外,还可以启动其它sequence,这就是嵌套sequence。 uvm_do系列宏有uvm_do/uvm_do_pri/uvm_do_with/uvm_do_pri_with/u
阅读全文
摘要:当不在sequence组件中时,提起和撤销objection的方式: 当不在sequence中可以使用phase来控制验证平台的开启和关闭。 在driver中: task my_driver::main_phase(uvm_phase phase); my_transaction tr; phase
阅读全文
摘要:sequence中的objection的控制策略 在整颗UVM树中,树的结点很多,理论来说在任何组件中都可以控制objection。一般在sequence和virtual sequence中,也有在scoreboard和test中。 一般来说,在一个实际的验证平台中,通常会有以下两种objectio
阅读全文
摘要:每一个sequence都应该派生自uvm_sequence,并且在定义时指定要产生的transaction。 每一个sequence都有一个body任务,当一个sequence启动之后,会自动执行body中的代码。 第一种:使用宏uvm_do: class case0_sequence extend
阅读全文
摘要:第一种: 当完成一个sequence的定义后,可以使用start任务将其启动: task my_env::main_phase(uvm_phase phase); my_sequence seq; // phase.raise_objection(this); seq = my_sequence::
阅读全文
摘要:uvm中void'(A_port.try_put(tr)) 其中使用void'的意义表示不考虑返回值。对于括号中有返回值的函数,加上void'操作符的意思就是告诉仿真器这个函数虽然有返回值,但是我不需要这个返回值。 加上这个的唯一好处是可以让仿真器闭嘴:本来函数有返回值,但是你不使用,这时仿真器会抛
阅读全文
摘要:文件I/O任务和函数(IEEE Standard for SystemVerilog 21) 将数据格式化为字符串(IEEE Standard for SystemVerilog 21.3.3) variable_format_string_output_task $sformat ( output
阅读全文
摘要:使用SystemVerilog中的rand机制, 经常会用到
urandomrange()这个函数, 得到一个无符号的整型数.语法:urandom_range(int unsigned maxval,int unsigned minval = 0); 有两个参数,一个上限参数和一个可选的下限
阅读全文
摘要:在SystemVerilog中,用来触发事件时,使用->;用来等待事件使用@或者wait。那么@和wait有什么区别呢? 在Verilog中当一个线程在一个事件上发生阻塞的同时,正好另一个线程触发了这个事件,则竞争就出现了。如果触发线程先于阻塞线程,则触发无效(触发是一个零宽度的脉冲); 例如:ve
阅读全文
摘要:测试平台通过已有的结构如事件、@事件控制、wait和disable语句、以及新的语言元素(如旗语和信箱),来实现线程间的通信、同步以及线程的控制。 标准的Verilog对语句有两种分组方式,使用begin...end或fork...join。 begin...end中的语句以顺序方式执行,而fork
阅读全文
摘要:在systemverilog中new()和new[]有什么区别? **new()**为一个对象分配空间,初始化变量,并返回保存对象的地址。 **new[]**设定动态数组的大小。动态数组在编译时不知道元素个数,也就是数组的宽度,在运行仿真才知道。 相同点:他们都申请内存并且初始化变量。 不同点:最大
阅读全文
摘要:所谓层次化的事件队列指的是用于调度仿真事件的不同的Verilog事件队列,在IEEE verilog标准中,层次化事件队列被看做一个概念模型。设计仿真工具的厂商如何来实现事件队列,关系到仿真器的效率,是技术秘诀。 在IEEE 1364-1995 Verilog标准的5.3节中定义了层次化事件队列在逻
阅读全文
摘要:event变量声明为: event var; event触发为:->var; 捕获触发为:@(var); 10个时间单位后reset_trigger事件被触发,捕获后将reset设置一个时钟周期再触发reset_done_trigger。之后再分别设置10个周期的随机信号给enable和reset。
阅读全文
摘要:verilog中的语句 赋值语句: 阻塞赋值语句(=)、非阻塞赋值语句(<=) 块语句 : 顺序块(begin...end)、并行块(fork...join) 条件语句: if...else语句、case语句 循环语句: forever语句 repeat语句、while语句、for语句 生成语句:
阅读全文
摘要:input端口是输入端口;output是输出端口;还有inout端口。 inout端口用于双向连接。如果使用多个inout端口驱动一个信号,sv将会根据所有驱动器的值,驱动强度来计算最终的值。 ref是对变量(不能是net)的应用,它的值是该变量最后一次赋的值。如果将一个变量连接到多个ref端口,就
阅读全文
摘要:1. 连续赋值语句(Continuous Assignments) 连续赋值的主要特点: 1)语法上,有关键词“assign”来标识; 2)连续赋值语句不能出现在过程块中(initial/always); 3)连续赋值语句主要用来对组合逻辑进行建模以及线网数据间进行描述; 4)左侧被赋值的数据类型必
阅读全文
摘要:verilog在20世纪80年代被创建的时,最初的目的用来描述硬件。**因此语言中的所有对象都是静态分配的。**特别是,子程序参数和局部变量是被存放在固定位置的,而不像其他编程语言那样存放在堆栈区里。 在verilog-1995中,如果你试图在测试程序里的多个地方调用同一任务,由于任务里的局部变量会
阅读全文
摘要:**测试平台中的所有线程都需要同步并交换数据。**例如在最基本的层面,一个线程等待另一个,多个线程可能会同时访问同一资源;在最高的层面上,线程间需要彼此交换数据。 systemverilog线程间的通信有三种: 1)事件 event 在verilog中,当一个线程在一个事件上发生阻塞的同时,正好另一
阅读全文
摘要:systemverilog中的类型转换 显式转换包含动态转换和静态转换 静态转换需要在转换的表达式前加上单引号,该方式并不会对转换值做检查,如果发生转换失败,无法获取相应的警告信息。 在verilog中,对整数和实数类型,或者不同位宽的向量之间进行隐式转换。 静态转换 静态转换失败,不会有任何提示。
阅读全文
摘要:verilog中的task和function不同点如下: 1)函数只能与主模块共同用同一个仿真时间单位,而任务可以定义自己的仿真时间单位; 2)函数不能启动任务,而任务能启动其他函数和任务; 3)函数至少要有一个输入变量,而任务可以没有或有多个任何类型的输入变量; 4)函数返回一个值,而任务则不返回
阅读全文
摘要:systemverilog中常见的数据类型 verilog作为硬件描述语言,属于硬件世界,四值逻辑属于硬件世界; systemverilog侧重于验证的语言,属于软件世界。二值逻辑属于软件世界; verilog中的数据类型bit,bit为二值逻辑,与systemverilog对应的数据类型为logi
阅读全文
摘要:这些不同变成语言之间的调用主要包括以下几种方式: 1、verilog和c之间的相互调用; 2、systemverilog和c之间的相互调用; 3、systemverilog中调用systmc; 4、通过CPU执行c代码,从而实现Verilog和c的交互 **第一种,verilog中调用c函数** v
阅读全文
摘要:当使用继承来扩展类的功能的时候,需要一些OOP技巧来控制对象和功能。 如果将子类句柄赋值给父类句柄时,编译器则认为赋值是合法的,但分别利用子类句柄和父类句柄调用相同对象的成员时,将可能有不同的表现。 例1:不加virtual的function class Transaction; rand bit
阅读全文
摘要:在verilog中,任务task和函数function之间有明显的区别,例如任务可以消耗时间而函数不能,函数里面不能带有诸如#100的时延语句或诸如@(posedge clock)、wait(ready)的阻塞语句,也不能调用任务,还有verilog中的函数必须有返回值,并且返回值必须被使用,例如用
阅读全文
摘要:systemverilog可以采用define与parameter等方式定义变量,但是需要在编译前完成变量的定义,编译之后不能修改。当需要改变编译条件时,经常需要重新编译。并且一旦编译通过,在编译阶段指定的宏定义在整个仿真运行过程中一直有效,因此,如果需要修改宏定义,则需要重新进行编译,从而降低了仿
阅读全文
摘要:systemverilog中位向量系统函数有如下五个: 1、**
$countbits ( expression , control_bit { , control_bit }** 此函数
$countbits()的作用是计算位向量中指定的0 1 x z的数量;返回值位一个整数,这个整数就是指定的c
阅读全文