crazybird

【SystemVerilog断言学习笔记5】“##”的解读与运用

0
阅读(4380)

有时候,我们需要检查几个时钟周期才能完成的事务。在SVA中,可以用“##”表示时钟周期延迟,如“ a ##2 b”即当a为高电平时,2个时钟周期之后b应为高电平。下面举个简单的例子来说明:

测试代码:

/******************************************************* 作者 : CrazyBird 文件 : assert_test2.sv 日期 : 2015-5-7 功能 : 时钟周期延时“##”的测试 ********************************************************/ `timescale 1ns/1ps module assert_test2( output reg clk, output reg a, output reg b ); // 产生时钟 parameter PERIOD = 10; initial begin clk = 0; forever #(PERIOD/2) clk = ~clk; end // 产生激励 initial begin a = 1; b = 1; repeat(20)@(negedge clk) begin a = {$random()}%2; b = {$random()}%2; end @(negedge clk); $stop; end //建立序列 sequence s1; a ##2 b; endsequence // 建立属性 property p1; @(posedge clk) s1; endproperty // 断言属性 a1 : assert property(p1); endmodule

按照代码的描述,其任务是检查信号a在给定的时钟上升沿是否为高电平。若a为低电平,断言直接失败;若a为高电平,则延迟2个时钟周期后检查b是否为高电平。若b为高电平,表示断言成功;若b为低电平,表示断言失败。

其仿真结果如下所示:

5

# ** Error: Assertion error. # Time: 15 ns Started: 15 ns Scope: assert_test2.a1 File: D:/electron/modelsim/assert_test2/assert_test2.sv Line: 49 # ** Error: Assertion error. # Time: 45 ns Started: 25 ns Scope: assert_test2.a1 File: D:/electron/modelsim/assert_test2/assert_test2.sv Line: 49 # ** Error: Assertion error. # Time: 65 ns Started: 65 ns Scope: assert_test2.a1 File: D:/electron/modelsim/assert_test2/assert_test2.sv Line: 49 # ** Error: Assertion error. # Time: 75 ns Started: 55 ns Scope: assert_test2.a1 File: D:/electron/modelsim/assert_test2/assert_test2.sv Line: 49 # ** Error: Assertion error. # Time: 95 ns Started: 75 ns Scope: assert_test2.a1 File: D:/electron/modelsim/assert_test2/assert_test2.sv Line: 49 # ** Error: Assertion error. # Time: 115 ns Started: 115 ns Scope: assert_test2.a1 File: D:/electron/modelsim/assert_test2/assert_test2.sv Line: 49 # ** Error: Assertion error. # Time: 125 ns Started: 125 ns Scope: assert_test2.a1 File: D:/electron/modelsim/assert_test2/assert_test2.sv Line: 49 # ** Error: Assertion error. # Time: 125 ns Started: 105 ns Scope: assert_test2.a1 File: D:/electron/modelsim/assert_test2/assert_test2.sv Line: 49 # ** Error: Assertion error. # Time: 135 ns Started: 135 ns Scope: assert_test2.a1 File: D:/electron/modelsim/assert_test2/assert_test2.sv Line: 49 # ** Error: Assertion error. # Time: 145 ns Started: 145 ns Scope: assert_test2.a1 File: D:/electron/modelsim/assert_test2/assert_test2.sv Line: 49 # ** Error: Assertion error. # Time: 175 ns Started: 175 ns Scope: assert_test2.a1 File: D:/electron/modelsim/assert_test2/assert_test2.sv Line: 49 # ** Error: Assertion error. # Time: 175 ns Started: 155 ns Scope: assert_test2.a1 File: D:/electron/modelsim/assert_test2/assert_test2.sv Line: 49 # ** Error: Assertion error. # Time: 185 ns Started: 185 ns Scope: assert_test2.a1 File: D:/electron/modelsim/assert_test2/assert_test2.sv Line: 49 # ** Error: Assertion error. # Time: 195 ns Started: 195 ns Scope: assert_test2.a1 File: D:/electron/modelsim/assert_test2/assert_test2.sv Line: 49

6

待续~~~

Baidu
map