interface my_if #(c_clk_high_time = 5, c_clk_low_time = 5) (input clk, en); specify specparam clk_high_time = c_clk_high_time; specparam clk_low_time = c_clk_row_time; $setup(en, negedge clk, clk_high_time * 4 / 5); $hold(negedge clk, en, clk_low_time * 4 / 5); endspecify endinterface;or
module timing_checks_in_sv (input clk, data, ...); ... event ev_data_delayed_toggled; always @(data) begin fork begin # tSetup; -> ev_data_delayed_toggled; end join_none end property setup_hold_time_checker; time curr_time; @(posedge clk) (1, curr_time = $time) |-> @(ev_data_delayed_toggled) (($time - curr_time) > (tSetup + tHold)); // check data arrival time is meet $time - cur_time > (SetUp + Hold) endproperty : setup_hold_time_checker ASSERT_SETUP_HOLD: assert property setup_hold_time_checker; endmodule
ref :
http://learn-systemverilog.blogspot.tw/2010/07/writing-systemverilog-assertion-for.html
http://www.ee.ed.ac.uk/~gerard/Teach/Verilog/me5cds/me95rh.html
沒有留言:
張貼留言