SystemVerilog Assertions应用指南 第一章(1.28章节 内建的系统函数)

SVA提供了几个内建的函数来检查一些最常用的设计条件。

onehot(expression)---检验表达式满足"one-hot",换句话说,就是在任意给定的时钟沿,表达式只有一位为高。 onehot0( expression)---检验表达式满足" zero one-hot",换句话说,就是在任意给定的时钟沿,表达式只有一位为高或者没有任何位为高。
isunknown( expression)---检验表达式的任何位是否是Ⅹ或者Z。 countones( expression)---计算向量中为高的位的数量。
断言语句a33a检验向量" state"是"one-hot"。断言语句a33b检验向量" state"是" zero one-hot",断言语句a33c检验向量"bus"是否有任何位为X或Z。断言语句a33d检验向量"bus"中等于1的位的个数大于1。

复制代码
module routines;

logic clk;

logic [3:0] state;
logic [4:0] bus;
integer i;

initial $vcdpluson();

initial
begin
clk = 1'b0; state = 4'd0; 
@(posedge clk);

for(i=0; i<3; i++)
begin
	state = i*2;
	bus = $random();
	@(posedge clk);
end

for(i=0; i<3; i++)
begin
	state = $random() % 16;
	bus = 8'dz;
	@(posedge clk);
end

bus = 4'd10;
repeat(2) @(posedge clk);

$finish();
end

// builtin system functions

a33a: assert property(@(posedge clk) $onehot(state));
a33b: assert property(@(posedge clk) $onehot0(state));
a33c: assert property(@(posedge clk) $isunknown(bus));
a33d: assert property(@(posedge clk) $countones(bus) > 1);


initial forever clk = #25 ~ clk;

endmodule

图1-35显示了上述断言在模拟中的响应。表1-16总结了每个断言的状态和向量" state"和"bus"的采样值。注意,断言a33a在时钟周期2失败,因为所有位都为零。"one-hot"要求在任何时钟上升沿都只有一位为高。另一方面,断言a33b成功因为它检查" zero one-hot",而对于这种构造,所有位都为零是合法的a33a和a3b都在时钟周期5,6,7,8失败,因为有超过一位为高。断言a33c在任何时候向量"bus"的值不为X或Z时失败。它在时钟周期5,6,7成功,因为向量的值为Z。断言a33d在时钟周期2,3,5,6,7失败,因为值为高的位的个数没超过1。断言a33d在时钟周期4,8成功,因为向量"bus"在这两个时刻都有两位为高。

相关推荐
技术性摸鱼6 小时前
FPGA选型参数
fpga开发
FPGA_小田老师9 小时前
ibert 7 Series GT:IBERT远近端(内外)环回测试
fpga开发·ibert·gt测试·近端pcs环回·近端pma环回·远端pcs环回·远端pma环回
尤老师FPGA9 小时前
【无标题】
fpga开发
1750633194513 小时前
VIVADO VLA VIO 硬件调试 降采样
fpga开发
FPGA小迷弟13 小时前
基于FPGA开发高速ADC/DAC芯片笔记
图像处理·fpga开发·数据采集·fpga·adc
ZYNQRFSOC1 天前
基于XCKU5P纯逻辑 NVME测试
fpga开发
FPGA小迷弟1 天前
使用FPGA开发高速AD/DA芯片的接口学习
fpga开发
stars-he1 天前
FPGA学习笔记(6)逻辑设计小结与以太网发送前置
笔记·学习·fpga开发
燎原星火*1 天前
FPGA 逻辑级数
fpga开发
175063319452 天前
Vivado Zynq7020 生成正弦波(查表法) + 行为级仿真
fpga开发