System Verilog的约束constraint


约束编程是system verilog中一个很强大的编程方法,它让我们创建的对象可以很轻松扩展功能或约束对象实现指定的功能

1、约束块(constraint block)

约束块是类的成员,像变量、task和function一样,约束块的名字在一个类里是唯一的,约束块的声明如下:

class bus;
	rand bit [31:0] addr,data
	constraint addr_c {
		addr[1:0] == 2'b0;
	}
endclass

上面的代码中构建了一个约束块addr_c,约束快的修饰符是constrain,约束的内容是地址的低2bit为0,在调用randomize()函数随机时,随机出的地址,低2bit一直为0;

class test_a;
	bus bus_a = new();
	task bus_test;
		repeat(50) begin
			if(bus_a.randomize() == 1)
				$display ("addr = %0h data = %h\n", bus.addr, bus.data);
			else
				$display ("Randomization failed.\n");
		end
	endtask
endclass

2、约束块的取值

A、简单表达式

在约束块中,只能使用关系操作符(<,<=,==, >=,>),一个表达式只能使用一个关系操作符。

class bus
	....
	constraint data_c { 
			data > 20;
			data<100;//不能写为20<data<100,这样一个表达式就有两个关系符,
	}
endclasss

等效表达式:==,表示约束的随机值取固定值,如上面的constrain addr_c,约束地址的低2bit取0

class bus
	....
	constraint data
  • 10
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值