英文网站推荐,海外推广媒体,百度做广告费用,专业网站建设机构SystemVerilog笔记
使用#xff08;$isunknown#xff09;操作符#xff0c;可以在表达式的任意位出现X或Z时返回1。$size函数返回数组的宽度关联数组switch#xff0c;以实现从字符串到数字的映射。函数exists()来检查元素是否存在。方法unique返回的是在数组中具有唯一值…SystemVerilog笔记
使用$isunknown操作符可以在表达式的任意位出现X或Z时返回1。$size函数返回数组的宽度关联数组switch以实现从字符串到数字的映射。函数exists()来检查元素是否存在。方法unique返回的是在数组中具有唯一值的队列即排除掉重复的数值。with可以指示SystemVerilog如何进行搜索。在条件语句with中item被称为重复参数它代表了数组中一个单独的元素。struct只是数据的集合。要想在端口和程序中共享它则必须创建一个新的类型。$cast动态转换函数目的在于把其右边的值赋给左边的量如果赋值成功 $cast()返回1对越界的数值进行检查。流操作符 和 用在赋值表达式的右边后面带表达式、结构或数组。流操作符用于把其后的数据打包成一个比特流。操作符把数据从左至右变成流而则把数据从右至左变成流。下标[256]等同于[0:255]而非[255:0]。ATM以信元为基本传输单位信元由信头和信报组成。每个ATM信元包含53字节其中5字节的头部信息48字节的数据。百分之十的头部开销显得特别高所以工程人员戏称这种开销为信元税cell tax。枚举创建了一种强大的变量类型它仅限于一些限定名称的集合。name可以得到枚举变量值对应的字符串。next(N)返回以后第N个枚举常量。prev(N)返回以前第N个枚举变量。当到达枚举常量列表的头或尾时函数next和prev会自动以环形方式绕回。函数getc(N)返回位置N上的字节toupper返回一个所有字符大写的字符串tolower返回一个小写的字符串。任务putc(M,C)把字节C写到字符串的M位上M必须介于0到len所给出的长度之间。函数substr(start,end)提取出从位置start到end之间的所有字符。foreach主要用于执行遍历功能的循环。 $timeformat的语法如下 $timeformat(units_number, precision_number,suffix_string, minimum_field_wdith); 其中 units_number 是 0 到-15之间的整数值表示打印的时间值的单位0 表示秒-3 表示毫秒-6 表示微秒-9 表示纳秒 -12 表示皮秒 -15表示飞秒中间值也可以使用例如-10表示以100ps为单位。其默认值为timescalse所设置的仿真时间单位。 precision_number 是在打印时间值时小数点后保留的位数。其默认值为0。 suffix_string是在时间值后面打印的一个后缀字符串。其默认值为空字符串。 MinFieldWidth是时间值字符串与后缀字符串合起来的这部分字符串的最小长度若这部分字符串不足这个长度则在这部分字符串之前补空格。其默认值为20。接口信号必须使用非阻塞赋值来驱动。(posedge clk)定义了单时钟沿而(clk)定义了DDR时钟双数据率TPLH表示低电平到高电平的时间TPHL表示高电平到低电平的时间可以在program中使用initial块但是不能使用always块。.*隐式端口连接能自动在当前级别自动连接模块实例的端口到具体信号只要端口和信号的名字和数据类型相同。实例名$root允许你从顶层作用域开始明确地引用系统中的成员名。设计断言应该期望括号内的表达式为真否则输出一个错误。断言是声明性的代码它的执行过程和过程代码有很大差异。Clocking blocks在UVM的验证中使用非常重要主要用于对输入的激励驱动和对输出的采样。malloc时动态内存分配函数用于申请一块连续的指定大小的内存块区域以void*类型返回分配的内存区域地址.new函数不能有返回值因为构造函数总是返回一个指向类对象的句柄其类型就是类本身。new()函数仅创建了一个对象而new[]操作则建立一个含有多个元素的数组。new()可以使用参数设置对象的数值而new[]只需使用一个数值来设置数组的大小。Systemverilog的句柄只能指向一种类型即所谓的“安全类型”。this是当你使用一个变量名的时候SystemVerilog将在当前作用域内寻找接着在上一级作用域内寻找直到找到该变量为止。dist操作符带有一个值的列表以及相应的权重中间用:或:/分开。:操作符表示值的范围内的每一个值的权重是相同的:/操作符表示权重重要均分到值范围内的每一个值。-操作符可以产生和case操作符效果类似的语句块它可以用于枚举类型的表达式。handle.constrain.constrain_mode()控制一个约束块用handle.constraint_mode()控制对象的所有约束。线程。fork…join_none块在调度其块内语句是时父线程继续执行。fork…join_any块对块内语句进行调度当第一个语句完成后父线程才继续执行其他停顿的线程也得继续。triggered()函数可用于查询某个事件是否已被触发包括当前时刻。操作符是边沿敏感的所以它总是阻塞着等待事件的变换。其他的线程可以通过-操作符来触发事件接触对第一个线程的阻塞。可以使用电平敏感的wait(e1.triggered())来代替边沿敏感的阻塞语句e1。使用旗语可以实现对同一资源的访问控制。使用new方法可以创建一个带单个或多个钥匙的旗语使用get可以获得一个或多个钥匙而put则可以返回一个或多个钥匙。如果你试图获取一个旗语而希望不被阻塞可以使用try_get()函数。从硬件角度出发对信箱最简单的理解是把它看成一个具有源端和收端的FIFO。信箱是一种对象必须调用new函数来进行实例化。使用put任务把数据放入信箱里而使用get任务则可以移除数据。peek任务可以获取信箱里数据的拷贝而不移除它。继承允许从一个现存的类得到一个新的类并共享其变量和子程序。使用super前缀调用前一层类的成员。如果你的基类构造函数有参数那么扩展类必须有一个构造函数而且在其构造函数的第一行调用基类的构造函数。$cast子程序会检查句柄所指向的对象类型而不仅仅检查句柄本身。虚接口virtual interface是一个物理接口的句柄(handle)可以通过使用虚接口来做到这一点。