数字IC验证学习(一)

本文详细介绍了Verilog HDL中的多种数据类型,包括logic、二值逻辑、定宽数组、动态数组、队列及其操作方法,并讨论了结构和枚举的特点。此外,还探讨了函数和任务的过程块及方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、数据类型

1、logic

logic类型只能有一个驱动。使用wire和reg的地方均可使用logic,但如双向总线等有多个驱动的地方,则不可使用logic。

2、二值逻辑

对于二值逻辑变量与DUT中的四值逻辑变量连接时,如果DUT中产生了X和Z,会被转换成双状态值。使用($isunknown)操作符,可以在表达式的任意位出现X或Z的时候返回1。用来检查未知值的传播。

3、定宽数组

多维数组的foreach循环,以两维数组为例:foreach(md[i,j])。

数组下标和位下标可以同时使用。

需要等待数组中的变化(@ event)时,必须使用合并数组。

4、动态数组

只要基本数据类型相同,定宽数组和动态数组之间就可以相互赋值,在元素数目相同的情况下,可以把动态数组的值复制到定宽数组。

5、队列

队列的常量初始化中,无需使用单引号。

对于一些非合并的数据类型(非连续存放),需要使用单引号进行标量初始化赋值;对于合并的数据类型(连续存放),不需要使用单引号进行标量初始化赋值

队列中的元素是连续存放的,队头或队尾存取数据非常方便,常用来作为FIFO。

6、数组的方法

1)缩减

sum,product,and,or,xor

对于定宽数组、动态数组、队列和关联数组,从其中随机取数可以使用$urandum_range($size(array)-1);特别地,队列和动态数组可以使用$urandum_range($array.size()-1)。

2)定位

min,max,unique

find:使用with来限定条件;还有find_index,find_first,find_first_index,find_last,find_last_index(返回索引的方法,返回值类型为int)

3)排序

改变了原始的数组,reverse,sort,rsort,shuffle,其中sort和rsort可以带with进行条件选择

7、结构

可以将结构定义为合并结构:typedef struct packed {bit[7:0] r,g,b;} pixel_p_s;

如果需要经常对整个结构体进行复制,那么,合并结构的效率会高一点;但是,对于合并结构中尺寸不规则的元素进行读写,需要移位和屏蔽操作,代价很高。

8、枚举

枚举默认值为从0开始递增的整数,默认类型为int。

可以指定枚举值,如:typedef enum {INIT, DECODE =2 , IDLE} fsmtype_e;

9、字符串

string用来保存长度可变的字符串,结尾不带标识符null

二、过程块和方法

1、函数和任务

参数的默认值和方向为logic输入。

允许不带ref进行数组参数的传递,这时数组会被复制到堆栈区,代价很大。

ref参数在任务里可以修改变量而且修改结果对调用它的函数随时可见。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沧海一升

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值