blob: 86f50b702a7e13a8ae4ca0c30424b77dec563a23 [file] [log] [blame]
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
// Macro bodies included by prim_assert.sv for formal verification with Yosys. See prim_assert.sv
// for documentation for each of the macros.
`define ASSERT_I(__name, __prop) \
always_comb begin : __name \
assert (__prop); \
end
`define ASSERT_INIT(__name, __prop) \
initial begin : __name \
assert (__prop); \
end
`define ASSERT_INIT_NET(__name, __prop) \
initial begin : __name \
#1ps assert (__prop); \
end
// This doesn't make much sense for a formal tool (we never get to the final block!)
`define ASSERT_FINAL(__name, __prop)
`define ASSERT(__name, __prop, __clk = `ASSERT_DEFAULT_CLK, __rst = `ASSERT_DEFAULT_RST) \
always_ff @(posedge __clk) begin \
if (! (__rst !== '0)) __name: assert (__prop); \
end
`define ASSERT_NEVER(__name, __prop, __clk = `ASSERT_DEFAULT_CLK, __rst = `ASSERT_DEFAULT_RST) \
always_ff @(posedge __clk) begin \
if (! (__rst !== '0)) __name: assert (! (__prop)); \
end
// Yosys uses 2-state logic, so this doesn't make sense here
`define ASSERT_KNOWN(__name, __sig, __clk = `ASSERT_DEFAULT_CLK, __rst = `ASSERT_DEFAULT_RST)
`define COVER(__name, __prop, __clk = `ASSERT_DEFAULT_CLK, __rst = `ASSERT_DEFAULT_RST) \
always_ff @(posedge __clk) begin : __name \
cover ((! (__rst !== '0)) && (__prop)); \
end
`define ASSUME(__name, __prop, __clk = `ASSERT_DEFAULT_CLK, __rst = `ASSERT_DEFAULT_RST) \
always_ff @(posedge __clk) begin \
if (! (__rst !== '0)) __name: assume (__prop); \
end
`define ASSUME_I(__name, __prop) \
always_comb begin : __name \
assume (__prop); \
end