|
ilang
1.1.4
ILAng: A Modeling and Verification Platform for SoCs
|
Base class of VerilogGenerator. More...
#include <verilog_gen.h>
Classes | |
| struct | function_app_t |
| Type of app func. More... | |
| struct | mem_write_entry_t |
| This is type of an individual write. More... | |
| struct | mem_write_t |
| This is the write and its associated condition. More... | |
| struct | rport_t |
| type of read port More... | |
| struct | state_update_unknown |
| Type of ite update unknown. More... | |
| struct | VlgGenConfig |
| the structure to configure the verilog generator More... | |
| struct | wport_t |
| type of write port More... | |
Public Types | |
| using | IlaBoolValType = bool |
| The type of bool value in ila. | |
| using | IlaBvValType = BvVal::BvValType |
| The type of bitvector value in ila. | |
| using | IlaBvValUnsignedType = BvVal::BvValType |
| The unsigned type of bitvector value in ila. | |
| typedef std::string | vlg_name_t |
| Type of Verilog id names. | |
| typedef std::string | vlg_stmt_t |
| Type of Verilog statement. | |
| typedef std::string | vlg_const_t |
| Type of Verilog constants. | |
| typedef std::string | vlg_addr_t |
| Type of Verilog address. | |
| typedef std::string | vlg_data_t |
| Type of Verilog data. | |
| typedef std::vector< vlg_name_t > | vlg_stmts_t |
| Type of Verilog statements (a vector) | |
| typedef std::vector< vlg_name_t > | vlg_names_t |
| Type of Verilog names (a vector) | |
|
typedef std::pair< vlg_name_t, int > | vlg_sig_t |
| Type of Verilog signal, name & bw. | |
| typedef std::vector< vlg_sig_t > | vlg_sigs_t |
| Type of Verilog signals (a vector) | |
| typedef std::map< vlg_name_t, int > | vlg_sigs_map_t |
| Type of Verilog signals (a vector) | |
|
typedef std::map< vlg_name_t, bool > | vlg_sig_keep_t |
| Type of a map: name -> need to add keep? | |
| typedef std::set< vlg_sig_t > | vlg_sigs_set_t |
| Type of set of Verilog signals. | |
|
typedef std::tuple< vlg_stmt_t, vlg_stmt_t, vlg_stmt_t > | vlg_ite_stmt_t |
| Type of Verilog ITEs (IN sequential block) | |
|
typedef std::vector < vlg_ite_stmt_t > | vlg_ite_stmts_t |
| Type of Verilog ITEs statements. | |
|
typedef std::tuple< vlg_name_t, int, int, int > | vlg_mem_t |
| Type of the memorys that are going to be created. | |
|
typedef std::map< vlg_name_t, vlg_mem_t > | vlg_mems_rec_t |
| Type of collection of memorys. | |
|
typedef std::list < mem_write_entry_t > | mem_write_entry_list_t |
| This is type of a list of writes. | |
|
typedef std::list < mem_write_entry_list_t > | mem_write_entry_list_stack_t |
| Type of a stack of writes use in visitMemNodes. | |
| typedef std::list< mem_write_t > | mem_write_list_t |
| List of writes w. associated conditions. | |
|
typedef std::vector < function_app_t > | function_app_vec_t |
|
typedef std::map< std::string, state_update_unknown > | state_update_ite_unknown_map_t |
|
typedef std::unordered_map < const ExprPtr, vlg_name_t, VerilogGenHash > | ExprMap |
| Type for caching the generated expressions. | |
|
typedef std::map< std::pair < IlaBvValType, unsigned > , vlg_name_t > | CnstMap |
| Type for cacheing the constant. | |
|
typedef std::map< std::string, bool > | memory_export_annotation_t |
| Type for memory annotation. | |
Public Member Functions | |
| void | add_input (const vlg_name_t &n, int w) |
| record an input signal | |
| void | add_output (const vlg_name_t &n, int w) |
| record an output signal | |
| void | add_wire (const vlg_name_t &n, int w, bool keep=false) |
| record a wire | |
| void | add_reg (const vlg_name_t &n, int w) |
| record a register | |
| void | add_stmt (const vlg_stmt_t &s) |
| record a stmt (outside the always block) | |
| void | add_assign_stmt (const vlg_name_t &l, const vlg_name_t &r) |
| record an assignment stmt (outside the always block), will call add_stmt | |
| void | add_always_stmt (const vlg_stmt_t &s) |
| void | add_init_stmt (const vlg_stmt_t &s) |
| record an assignemnt in the always block (in if(rst) branch ) | |
| void | add_ite_stmt (const vlg_stmt_t &cond, const vlg_stmt_t &tstmt, const vlg_stmt_t &fstmt) |
| void | add_internal_mem (const vlg_name_t &mem_name, int addr_width, int data_width, int entry_num) |
| record an internal memory | |
| void | add_external_mem (const vlg_name_t &mem_name, int addr_width, int data_width, int entry_num) |
| record an external memory | |
| void | add_preheader (const vlg_stmt_t &stmt) |
| add an item to the preheader | |
| VerilogGeneratorBase (const VlgGenConfig &config=VlgGenConfig(), const std::string &modName="", const std::string &clk="clk", const std::string &rst="rst") | |
| virtual void | DumpToFile (std::ostream &fout) const |
| void | AnnotateMemory (const memory_export_annotation_t &annotation) |
| add memory annotation, please invoke right after constructor | |
Static Public Member Functions | |
| static vlg_name_t | sanitizeName (const vlg_name_t &n) |
| sanitize a name string, so it will generate illegal verilog identifier | |
| static vlg_name_t | sanitizeName (const ExprPtr &n) |
| static vlg_const_t | ToVlgNum (IlaBvValType value, unsigned width) |
| will force to be hex | |
Protected Member Functions | |
| bool | check_reserved_name (const vlg_name_t &n) const |
| Check if a name is reserved (clk/rst/modulename/decodeName/ctrName) | |
| vlg_name_t | new_id () |
| get a new id | |
| vlg_name_t | new_id (const ExprPtr &e) |
Static Protected Member Functions | |
| static int | get_width (const ExprPtr &n) |
| Get the width of an ExprPtr, must be supported sort. | |
| static std::string | WidthToRange (int w) |
| convert a widith to a verilog string | |
Protected Attributes | |
| vlg_name_t | moduleName |
| Verilog Module Name. | |
| vlg_name_t | clkName |
| Clock signal name. | |
| vlg_name_t | rstName |
| Reset signal name. | |
| vlg_names_t | decodeNames |
| vlg_name_t | validName |
| vlg_name_t | startName |
| start signal name, may not be used | |
| vlg_sig_t | grantAccName |
| vlg_sig_t | decodeAccName |
| accumulated decode signals | |
| vlg_name_t | counterName |
| The name of internal counter. | |
| vlg_sigs_map_t | inputs |
| vector of input signals | |
| vlg_sigs_map_t | outputs |
| vector of output signals | |
| vlg_sigs_t | mem_i |
| vector of memory input signals | |
| vlg_sigs_t | mem_o |
| vector of memory output signals | |
| vlg_sigs_t | mem_probe_o |
| vector of signals that probe each element of a memory | |
| vlg_sigs_map_t | wires |
| vector of wires to be defined | |
| vlg_sig_keep_t | wires_keep |
| a map to store if a wire needs to keep | |
| vlg_sigs_t | regs |
| vector of regs to be defined | |
| vlg_mems_rec_t | mems_internal |
| vector of mems to be defined | |
| vlg_mems_rec_t | mems_external |
| vector of mems from outside (will not be defined) | |
| vlg_stmts_t | init_stmts |
| vlg_stmts_t | init_assumpts |
| vlg_stmts_t | statements |
| statements to be outside the always block | |
| vlg_stmts_t | always_stmts |
| statements to be used in the always block but out of the reset | |
| vlg_ite_stmts_t | ite_stmts |
| vlg_stmt_t | preheader |
| For auxiliary definitions. | |
| ExprMap | nmap |
| The map to cache the expression (we only need to store the name) | |
| CnstMap | cmap |
| mem_write_list_t | current_writes |
| For traverse a mem expression. | |
| mem_write_list_t | past_writes |
| vlg_sigs_set_t | all_valid_names |
| to hold all valid names, a sanity check | |
| std::map< std::string, std::map< unsigned, rport_t > > | ila_rports |
|
std::map< std::string, std::map< unsigned, wport_t > > | ila_wports |
| ila write ports | |
| function_app_vec_t | ila_func_app |
| a collection of all function application | |
| state_update_ite_unknown_map_t | state_update_ite_unknown |
| a collection of all state update ite unknown | |
| memory_export_annotation_t | memory_export_annotation |
| unsigned | idCounter |
| The id counter. | |
| const VlgGenConfig | cfg_ |
| The configuration. | |
|
std::map< std::string, std::string > | reference_name_set |
| reference name list | |
| std::set< FuncPtr > | func_ptr_set |
Friends | |
| class | TestVerilogExport |
| let the test class use this module | |
| class | VlgSglTgtGen |
| let VlgVerifTgtGen use this module to generate the wrapper module | |
| class | IntefaceDirectiveRecorder |
| std::ostream & | operator<< (std::ostream &out, const mem_write_entry_t &mwe) |
| std::ostream & | operator<< (std::ostream &out, const mem_write_entry_list_t &mwel) |
| std::ostream & | operator<< (std::ostream &out, const mem_write_entry_list_stack_t &mwel) |
| std::ostream & | operator<< (std::ostream &out, const mem_write_t &mw) |
| std::ostream & | operator<< (std::ostream &out, const mem_write_list_t &mwl) |
Base class of VerilogGenerator.
| ilang::VerilogGeneratorBase::VerilogGeneratorBase | ( | const VlgGenConfig & | config = VlgGenConfig(), |
| const std::string & | modName = "", |
||
| const std::string & | clk = "clk", |
||
| const std::string & | rst = "rst" |
||
| ) |
| [in] | Configuration | |
| [in] | Top | module name, if empty, get it from instruction name |
| [in] | clock | signal name |
| [in] | reset | signal name |
| void ilang::VerilogGeneratorBase::add_always_stmt | ( | const vlg_stmt_t & | s | ) |
record an assignment in the always block (after the reset, in the else branch, guarded by the valid condition )
| void ilang::VerilogGeneratorBase::add_ite_stmt | ( | const vlg_stmt_t & | cond, |
| const vlg_stmt_t & | tstmt, | ||
| const vlg_stmt_t & | fstmt | ||
| ) |
record an ite assignment, (after the reset, in the else branch, guarded by the valid condition ), (if fstmt == "", will not generate its else block)
|
virtual |
after parsing either the Instruction/ILA, use this function to dump to a file.
|
protected |
if the exprptr contains some meaning in its name, will try to incorporate that to the name;
|
static |
sanitize the name of an expr, so it will generate illegal verilog identifier
|
friend |
let IntefaceDirectiveRecorder use this module to generate the wrapper module
|
protected |
The map to cache the constants (o.w. there will be overhead, as each constant may appear multiple times)
|
protected |
Output signals that allows to determine if an instruction's decode is true, not need for width
|
protected |
Set of functions that need to be translated, we will collect this while translating the exprs
|
protected |
An input, that can be used to control which instruction you would like to execute if more than one is ready you can assume in JasperGold that: $onehot(grant) && ( grant & decodeAccName == grant ) to enforce that: you only grant to one and only one instruction whose decode is true. another approach is to set grant to all 1s.
|
protected |
To record which mem interface signal correspond to what... ila read ports
|
protected |
The other part will be put into SVA assumptions, and the module will have a sparate counter to enforce the assumptions
|
protected |
statements to be used when reset, for initial conditions, it will try to translate, but won't guarantee
|
protected |
statements to be used in the always block but out of the reset with ITE conditions
|
protected |
For traverse a mem expression, hold a pointer to the writes, so they will not be destroyed before used
|
protected |
Output signals that allows to determine if an instruction's valid is true, not need for width
1.8.5