EBMC – Verilog Language Features
Synthesizable Subset of Verilog
EBMC
supports most of those parts of the IEEE 1800-2017 SystemVerilog standard
that are commonly considered "synthesizable".
Construct | Keywords | Notes | Supported? |
---|---|---|---|
ports | input, output, inout | Use inout port only at IO level | ✔ |
parameters | parameter | Allows more generic design style | ✔ |
module definition | module | Used to define Verilog module structure | ✔ |
signals and variables | wire, reg, tri | different signal types, allows vector type | ✔ |
instantiation | module instance/primitive gate level instances | Used to instantiate one module inside another | ✔ |
function and tasks | function, task | reduces repeated code, doesnot allow timing | ✔ |
procedural constructs | always, if, else, case, casex, casez | synthesizable set except initial block | ✔ |
procedural block | begin, end, named blocks, disable | Allows disabling of named blocks | ✔ |
procedural assignments | blocking, non-blocking | allows assignments to registers in blocking or non-blocking fashion | ✔ |
Assignment | assign | continuous assignment to wires in combinatorial block | ✔ |
loops | for, while, forever | looping constructs used in Verilog | ✔ |
named blocks | disable | Supports disabling of named blocks | ✘ |
Non-synthesizable Subset of Verilog
EBMC
gives verification semantics to some
parts of the IEEE 1800-2017 SystemVerilog standard
that are not commonly considered "synthesizable".
Construct | Keywords | Notes | Supported? |
---|---|---|---|
initial | Used only in test benches | ✔ | |
events | Used in test benches for syncing test bench components | ✘ | |
real | Real data type not supported | ✘ | |
force, release | Force and Release data-types not supported | ✘ | |
assign, deassign | assign and deassign on reg type data not supported, but assign supported on wire data type | ✔ | |
fork, join | Not supported. Can be simulated using nonblocking assignments | ✘ | |
primitives | only gate level primitives supported | ✔ | |
UDP and tables | ✘ |