|
ilang
1.1.4
ILAng: A Modeling and Verification Platform for SoCs
|
The base class for memory models. More...
#include <memory_model.h>
Public Types | |
| using | ZExpr = TraceStep::ZExpr |
| Type alias for z3::expr. | |
| using | ZExprVec = TraceStep::ZExprVec |
| Type for containing a vector of z3::expr. | |
| using | TraceStepPtr = TraceStep::TraceStepPtr |
| Type of trace step shared pointers. | |
| using | TraceStepPtrSet = TraceStep::TraceStepPtrSet |
| Type of trace steps, we need to collect the set of trace steps (WRITE) | |
| using | TraceStepType = TraceStep::TraceStepType |
| Type of trace step type, INIT/INST/FACET. | |
| using | StateNameSet = TraceStep::StateNameSet |
| Type of set of state names. | |
| using | AddrDataVec = TraceStep::AddrDataVec |
| Type of vector of (addr,data) pair. | |
| typedef std::vector< InstrPtr > | InstrVec |
| Type of an instruction vector to represent a sequence. | |
| typedef std::vector< InstrVec > | ProgramTemplate |
| typedef std::vector < std::vector< TraceStepPtr > > | PerILATraceStepPtrSet |
|
typedef std::map< std::string, StateNameSet > | ILANameStateNameSetMap |
| Type of map ila-name to state-set. | |
Public Member Functions | |
| ZExpr | ConvertZ3 (const ExprPtr &ast, const std::string &suffix) const |
| Return the z3 converter used by this memory model. | |
| virtual void | InitSize (const ProgramTemplate &_tmpl) |
| To initialize the inner storage space. | |
| virtual void | RegisterSteps (size_t regIdx, const InstrVec &_inst_seq)=0 |
| virtual void | FinishRegisterSteps ()=0 |
| virtual void | ApplyAxioms ()=0 |
| To apply the axioms, the complete program should be given. | |
| virtual void | SetLocalState (const std::vector< bool > &ordered) |
| virtual void | AddSingleTraceStepProperty (const ExprPtr &property, std::function< bool(const TraceStep &)> filter) |
| Assert a property that some trace step (decided by filter) should follow. | |
| virtual void | GetSingleTraceStepProperty (const ExprPtr &property, std::function< bool(const TraceStep &)> filter, std::function< void(const z3::expr &)> collector) |
| Get the z3 expression of a property on a trace step. | |
| virtual void | SetFinalProperty (const ExprPtr &property)=0 |
| Set the assertion on the final state. | |
| virtual void | AddDoubleTraceStepProperty (std::function< z3::expr(const TraceStep &, const TraceStep &)>, std::function< bool(const TraceStep &, const TraceStep &)>) |
| MemoryModel (z3::context &ctx, ZExprVec &_cstrlist, const StateNameSet &shared_states, const ILANameStateNameSetMap &private_states, const InstrLvlAbsPtr &global_ila_ptr) | |
| const TraceStepPtrSet & | GetAllTraceSteps () const |
| Determine if an instruction access a shared state. | |
Protected Types | |
| enum | StaticResult { STATIC_TRUE = 1, STATIC_FALSE, STATIC_UNKNOWN } |
| enum | AxiomFuncHint { HINT_NONE = 0, HINT_READ = 1, HINT_WRITE } |
Protected Member Functions | |
| z3::context & | ctx () const |
| Return the context (for variable creation) | |
| TraceStepPtr | CreateGlobalInitStep () |
| A function for dervied classes to create init trace step. | |
| TraceStepPtr | CreateGlobalFinalStep (const ExprPtr &property) |
| A function for dervied classes to create final trace step. | |
| z3::expr | HB (const TraceStep &l, const TraceStep &r) const |
| z3::expr | Sync (const TraceStep &l, const TraceStep &r) const |
| z3::expr | PO (const TraceStep &l, const TraceStep &r) const |
| z3::expr | SameAddress (const TraceStep &l, const TraceStep &r, const std::string &sname, AxiomFuncHint lhint=HINT_NONE, AxiomFuncHint rhint=HINT_NONE) const |
| z3::expr | Decode (const TraceStep &l) const |
| z3::expr | SameData (const TraceStep &l, const TraceStep &r, const std::string &sname, AxiomFuncHint lhint=HINT_NONE, AxiomFuncHint rhint=HINT_NONE) const |
| bool | SameCore (const TraceStep &l, const TraceStep &r) const |
| StaticResult | SameAddressStatic (const TraceStep &l, const TraceStep &r) const |
| StaticResult | DecodeStatic (const TraceStep &l) const |
| StaticResult | SameCoreStatic (const TraceStep &l, const TraceStep &r) const |
| z3::expr | Z3ForallList (const ZExprVec &l) const |
| This is to deal with forall (if does not exist, it should be true also) | |
| z3::expr | Z3ExistsList (const ZExprVec &l) const |
| This is to apply to exists, (if does not exist, it should be false) | |
Protected Attributes | |
| TraceStepPtr | _init_trace_step |
| The pointer to the initial trace step. | |
| TraceStepPtr | _final_trace_step |
| The pointer to the final trace step. | |
| TraceStepPtrSet | _all_trace_steps |
| The set of all trace steps. | |
| TraceStepPtrSet | _all_inst_trace_steps |
| The set of all instruction trace steps. | |
| PerILATraceStepPtrSet | _ila_trace_steps |
| const StateNameSet & | m_shared_state_names |
| The set of names of shared states. | |
| const ILANameStateNameSetMap & | m_ila_private_state_names |
| The internal storage of all private states of all ilas. | |
| InstrLvlAbsPtr | m_p_global_ila |
| The pointer to the (dummy) global ILA. | |
| z3::context & | _ctx_ |
| ZExprVec & | _constr |
| A reference to the constraint list. | |
| Z3ExprAdapter | _expr2z3_ |
| NestedMemAddrDataAvoider | nested_finder_ |
| An AST traversor, make sure there are no nested asts. | |
The base class for memory models.
| typedef std::vector<std::vector<TraceStepPtr> > ilang::MemoryModel::PerILATraceStepPtrSet |
Type of TraceStep set grouped by ILA (the same sequence as given to the register steps)
| typedef std::vector<InstrVec> ilang::MemoryModel::ProgramTemplate |
Type of a vector of instruction sequences (currently please represent holes via 0-ary functions)
|
virtual |
Assert a property that some pair of trace steps (decided by filter) should follow
|
pure virtual |
To do some extra bookkeeping work when it is known that no more instruction steps are needed.
Implemented in ilang::Tso, and ilang::Sc.
|
pure virtual |
To create more view operations associated with an instruction, and also to add them to the set
Implemented in ilang::Tso, and ilang::Sc.
|
virtual |
To constrain on the local states, based on whether they are in order or not, can be overwritten by the specific model.
|
protected |
A reference to Z3 context , even in the sence of const, it should allow us to allocate new variables
|
mutableprotected |
An adapter that trace step can share, will allocate internally, by the constructor
|
protected |
The set of TraceStep set grouped by ILA (the same sequence as given to the register steps)
1.8.5