SV 学习笔记(一)数据类型

数据类型

数据类型分类

双状态:bit byte shortint int longint real
四状态:logic integer time net-type(reg wire tri)
有符号:byte shortint int logint integer
无符号:bit logic reg net-type

定宽数组

多维数组声明
初始化与赋值

//声明
int a[0:15]; 
int a[16];
int a2[0:7][0:15]; 
int a2[8][16];
//初始化
int a[2] = '{1,2};
a[0:1] = '{3,4};
a = '{2{2}};
a = '{1,default:1}

合并数组:(从左到右维度依次降低) bit[3][7:0] a;占3*8=24bit,一个word
非合并数组:(高维度在右边) bit[7:0] a[3];占3个word

动态数组

声明 int a[];
new创建数组

int dyn[],d2[];//声明
initial begin
	dyn = new[5];//分配元素
	foreach(dyn[j]) dyn[j] = j;
	d2 = dyn;//复制一个数组
	dyn = new[20](dyn);//分配
	dyn.delete();//删除
end 

队列

声明int a[$]
赋值不需要’
insert(a,loc)
delete(loc)
push_back();push_front();pop_front();pop_back()

int q[$]={3,4};//声明与赋值,不需要';$表示末尾最后一个
q.insert(data,locs);//插入
q.delete(locs);//删除
q.delete();//删全部
q={};//删全部
q.push_back(data);//队尾输入
data = q.pop_front();//队首弹出
//不咋用//
q.push_front(data);//队首插入
data = q.pop_back();//队尾弹出
q={1,q};//队首插入
foreach(q[i])
	$display(q[i]);//打印
end

关联数组

bit[8] a[string], idx = ‘a’;声明放数据类型
a[idx]=2;
assoc.first(idx),得到第一个索引存放在idx中
assoc.next(idx),得到下一个索引存放在idx中
assoc.delete(idx),删除该元素

bit [63:0] assoc[int], idx = 1;//声明,索引一定是类型
repeat (64) begin //对稀疏分布的元素进行初始化
	assoc[idx] = idx;
	idx=idx<<1;
end
foreach (assoc[i]) // 使用foreach遍历数组
	$display("assoc[&h] = h", i, assoc[i]) ;
//使用函数遍历数组
if (assoc.first(idx)) begin //得到第一个索引
	do
		$display ("assoc[&h]=&h", idx, assoc[idx]) ;
	while (assoc.next(idx)); // Get next index
end
//找到并删除第一个元素
assoc.first(idx) ;
assoc.delete(idx) ;

结构体

struct {bit [7:0] r, g, b;} pixel; //创建一个pixel结构体
//为了共享该类型,通过typedef来创建新类型
typedef struct {bit [7:0] r, g, b; } pixel_ s;
pixel_s my_pixel; //声明变量
my_pixel = '{'h10, 'h10, 'h10}; //结构体类型的赋值

枚举类型

typedef enum {INIT, DECODE, IDLE} fsmstate_e;//INIT:0.....
fsmstate_e pstate, nstate; //声明自定义类型变量
case (pstate)
	IDLE: nstate = INIT; //数值赋值,不能将整型赋值给枚举类型
	INIT: nstate = DECODE;//fsmstate_e'(1)
	default: nstate = IDLE;//$cast(pstate,p);将整型显示转换为枚举类型
endcase
$display("Next state is号s", nstate.name()); //显示状态名

字符串

string s;//声明 ""
initial begin
	s ="IEEE ";
	$display(s.getc(0)); //显示‘I'
	$display(s.tolower()); //显示ieee
	s.putc(s.len()-1"-"); // 将空格变为:-'
	s = {s, "P1800"}; // "IEEE-P1800"
	$display(s.substr(2,5)); //显示EE-P
	//创建一个临时字符串并将其打印
	my_log($psprintf("%s %5d", s, 42)) ;
end
task my_log (string message); //打印消息
	$display("@80t: s", $time, message) ;
endtask

相关语法

  1. 静态转换与动态转换:
	byte a = 8'1000_0000;
	bit [8:0] a_s;
	bit [8:0] a_d;
	a_s = unsigned'(a);//静态转换
	$cast(a_d,a);//动态转换
  1. for each:
bit[31:0] src[5],dst[5];//$size(src)
foreach (dst[i])
	dst[i] = 2*src[i];
end
bit[31:0] src1[5],dst1[5];
foreach (dst1[i,j])
	dst1[i][j] = 2*src[i][j];
end

3.$urandom_range(1,3); //产生1-3内的随机整数

相关题目

  1. 类型转换:有符号向无符号转换需要考虑高位的符号位
    在这里插入图片描述

答案:'h180’h080

未完:不同类型赋值是否带 ',怎么存储的

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小鱼爱学习,每天好心情

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

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

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

打赏作者

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

抵扣说明:

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

余额充值