OpenASIP
2.0
|
Basic idea of HDLGenerator is to construct objects (modules, ports, behavioral code constructs, etc), assign them to the object wich they logically belong to, and finally call implement for the module. Calling implement builds the code, does some limited validity checks, and spits either Verilog or VHDL.
Only a limited subset of code constructs are present as not all were relevant for efficient hdl.
Some options can be used to guide the generation: "asynchronous reset" - Self-explanatory. "synchronous reset" - Self-explanatory. "reset everything" - Without this only registers with ResetOption::Mandatory will be assigned a value in reset.
What can be assigned to: Module << Register / Wire / InPort / OutPort / Parameter / Option Module << (std::string comment) / BinaryConstant / IntegerConstant Module << Behaviour / Module Behaviour << Assign / Asynchronous / Synchronous Asynchronous / Synchronous << SequentialStatement / Variable If << Else / SequentialStatement Switch << Case / DefaultCase Case / DefaultCase << HDLOperation / Assign / If
Case clauses: Case / DefaultCase << BinaryLiteral / (int) / (std::string)