SystemVerilog句柄的使用

一、句柄的传递

  • 句柄可以作为形式参数通过方法来完成对象指针,从外部传入方法内部
    在这里插入图片描述
  • 句柄也可以在方法内部首先完成修改,而后再由外部完成使用
function void create(ref Transaction tr);		//ref或者inout
	tr = new();
	tr.addr = 100;
	...
endfunction

Transaction t;		//此时t=null
initial begin
	create(t);
	t.addr = 10;
	$display(t.addr);
end

二、句柄的动态修改

在程序执行时,可以在任何时刻为句柄创建新的对象,并将新的指针赋值给句柄

task generate_trans();
	Transaction t;
	Transaction fifo[$];
	t = new();
	for(int i = 0; i < 3; i++) begin		//通过for循环向队列里存放了3个句柄,而不是存放了3个对象
		t.addr = i << 2;
		fifo.push_back(t);
	end
	t = fifo.pop_front();					//从队头取出第一个元素,此时t.addr=8
endtask

这个程序只创建了一个对象t,for循环的三次修改的其实是同一个对象的addr值,队列里面存放的是指向同一个对象t的上三个句柄,而并不是存放了三个不同的对象。所有最后addr的值为8。
在这里插入图片描述

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在SystemVerilog中,约束(constraint)用于对随机变量进行限制,以确保生成的随机值满足特定的条件。约束可以应用于标量、数组和句柄数组。 对于数组的约束,可以限制数组的大小范围,防止生成过大或空的数组。可以使用数组的方法(sum()、product()、and()、or()、xor())结合约束条件。对于动态数组,可以使用foreach循环对每个元素进行约束,这比直接对固定大小数组的每个元素进行约束更简洁。 为了生成唯一元素值的数组,可以使用randc变量辅助。通过创建一个randc变量,并在foreach循环中为数组的每个元素赋值,确保每个元素的值都是唯一的。 对于随机化句柄数组,需要在声明时添加rand属性,并在调用随机函数之前为每个句柄元素构建对象。可以使用动态数组来分配最大数量的元素,并使用约束来减小数组的大小。在随机化时,动态句柄数组的大小可以保持不变或减小,但不能增加。 如果要生成一个随机数组,其中每个元素的值都是唯一的,可以使用双重嵌套循环。在约束中使用foreach循环遍历数组的每个元素,并使用条件判断确保每个元素与其他元素的值都不相同。 以上是关于SystemVerilog中约束的一些说明。 #### 引用[.reference_title] - *1* *2* *3* [SystemVerilog数组约束](https://blog.csdn.net/qq_39794062/article/details/113764376)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值