掃描二維碼
隨時(shí)隨地手機(jī)看文章
//文件dut.v , dut很簡(jiǎn)單,每個(gè)clk上升沿到來時(shí)對(duì)輸入a取反。`timescale 1ns/1nsmodule DUT (clk,a,b);input clk;input a;output b;reg b; always?@?(posedge?clk?)begin b<=~a;end`include "assertion.svh"endmodule//文件 test.v`timescale 1ns/1nsmodule TOP;reg clk;reg a;wire b;always #5 clk=~clk;initial begin clk <=0; a <=1;#30?$finish;endDUT dut(.clk(clk),.a(a) ,.b(b));//bind TOP.dut dut_assertion dut_assertion_check(.a_(a),.b_(b),.clk_(clk));endmodule每個(gè)clk上升沿,如果a=0,則是空成功,不滿足第一個(gè)a=1的條件,b就不需要判斷是否等于1,直接判斷為成功。如果a=1,則對(duì)b進(jìn)行判斷,b為1則為成功,否則斷言失敗。//assertion.svh文件property check_p; @(posedge clk) a |->b;endpropertycheck_a : assert property (check_p);運(yùn)行命令:irun -sv dut.v test.vERROR:ncsim:?*E,ASRTST (./assertion.svh,6):?(time 5 NS) Assertion TOP.dut.check_a has failedmodule dut_assertion(a_,b_,clk_);input logic a_,b_,clk_;property check_p;@(posedge clk_) a_ |->b_;endproperty check_a : assert property (check_p);endmodule運(yùn)行命令:irun -sv dut.v test.v assertion_module.svERROR:ncsim: *E,ASRTST (./assertion_module.sv,12): (time 5 NS) Assertion TOP.dut.dut_assertion_check.check_a has failed