diff --git a/CMakeLists.txt b/CMakeLists.txt index 5c7a36583..1498562aa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,7 +11,7 @@ endif() # PROJECT # name version language # ---------------------------------------------------------------------------- # -project(ilang VERSION 1.1.3 +project(ilang VERSION 1.1.4 LANGUAGES CXX ) diff --git a/README.md b/README.md index 155a6e543..dd536e1b9 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,6 @@ [![Build Status](https://travis-ci.com/Bo-Yuan-Huang/ILAng.svg?branch=master)](https://travis-ci.com/Bo-Yuan-Huang/ILAng) [![Build Status](https://ilang.semaphoreci.com/badges/ILAng.svg)](https://ilang.semaphoreci.com/projects/ILAng) [![Build status](https://ci.appveyor.com/api/projects/status/cwhlq09513art6hw/branch/master?svg=true)](https://ci.appveyor.com/project/Bo-Yuan-Huang/ilang/branch/master) -[![Coverity Scan Build Status](https://scan.coverity.com/projects/17719/badge.svg)](https://scan.coverity.com/projects/bo-yuan-huang-ilang) [![Coverage Status](https://coveralls.io/repos/github/Bo-Yuan-Huang/ILAng/badge.svg?branch=master)](https://coveralls.io/github/Bo-Yuan-Huang/ILAng?branch=master) [![Language grade: C/C++](https://img.shields.io/lgtm/grade/cpp/g/Bo-Yuan-Huang/ILAng.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/Bo-Yuan-Huang/ILAng/context:cpp) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/b120e2527cc04d4aacd1dc11581e2f30)](https://www.codacy.com/app/Bo-Yuan-Huang/ILAng?utm_source=github.com&utm_medium=referral&utm_content=Bo-Yuan-Huang/ILAng&utm_campaign=Badge_Grade) diff --git a/include/ilang/ila-mngr/u_abs_knob.h b/include/ilang/ila-mngr/u_abs_knob.h index 7d6b07de1..4adc03c60 100644 --- a/include/ilang/ila-mngr/u_abs_knob.h +++ b/include/ilang/ila-mngr/u_abs_knob.h @@ -9,8 +9,8 @@ /// \namespace ilang namespace ilang { -/// \namespace AbsKnob -namespace AbsKnob { +/// \namespace absknob +namespace absknob { /****************************************************************************/ /// Add all dependent vars of the expr to the set. void InsertVar(const ExprPtr& e, ExprSet& vars); @@ -108,7 +108,7 @@ InstrPtr DuplInstr(const InstrCnstPtr instr_src, const InstrLvlAbsPtr& dst, /// Duplicate instruction sequence to dst. NOT IMPLEMENTED YET. void DuplInstrSeq(const InstrLvlAbsCnstPtr& src, const InstrLvlAbsPtr& dst); -}; // namespace AbsKnob +}; // namespace absknob } // namespace ilang diff --git a/include/ilang/target-sc/ilator.h b/include/ilang/target-sc/ilator.h index 36321853d..0fa5cccd2 100644 --- a/include/ilang/target-sc/ilator.h +++ b/include/ilang/target-sc/ilator.h @@ -77,6 +77,8 @@ class Ilator { /// Generation bootstrap, e.g., creating directories. bool Bootstrap(const std::string& root, bool opt); + /// Interpret non-instr basics, e.g., valid. + bool GenerateIlaBasics(const std::string& dir); /// Interpret instruction semantics (decode and state updates). bool GenerateInstrContent(const InstrPtr& instr, const std::string& dir); /// Special handle for memory updates. @@ -143,6 +145,8 @@ class Ilator { static std::string GetCxxType(const SortPtr& sort); /// Get the variable name in SystemC. static std::string GetCxxName(const ExprPtr& expr); + /// Get the valid function name of the ILA. + static std::string GetValidFuncName(const InstrLvlAbsCnstPtr& m); /// Get the decode function name of the instruction. static std::string GetDecodeFuncName(const InstrPtr& instr); /// Get the state update function name of the instruction. diff --git a/src/ila-mngr/p_sanity_check_and_fix.cc b/src/ila-mngr/p_sanity_check_and_fix.cc index 34b2a7384..d8ebebada 100644 --- a/src/ila-mngr/p_sanity_check_and_fix.cc +++ b/src/ila-mngr/p_sanity_check_and_fix.cc @@ -65,7 +65,7 @@ bool SanityCheckAndFix(const InstrLvlAbsPtr& m) { // check completeness auto acc = asthub::BoolConst(false); - for (const auto& instr : AbsKnob::GetInstrTree(m)) { + for (const auto& instr : absknob::GetInstrTree(m)) { auto host = instr->host(); ILA_NOT_NULL(host); auto valid = host->valid() ? host->valid() : asthub::BoolConst(true); @@ -78,7 +78,7 @@ bool SanityCheckAndFix(const InstrLvlAbsPtr& m) { if (!is_complete) { ILA_WARN << "Incomplete instruction set - create default instruction"; auto clean = true; - for (const auto& var : AbsKnob::GetVar(acc)) { + for (const auto& var : absknob::GetVar(acc)) { auto is_top_state = m->find_state(var->name()); auto is_top_input = m->find_input(var->name()); clean &= (is_top_state || is_top_input); diff --git a/src/ila-mngr/u_abs_knob.cc b/src/ila-mngr/u_abs_knob.cc index 11342e623..a575ec335 100644 --- a/src/ila-mngr/u_abs_knob.cc +++ b/src/ila-mngr/u_abs_knob.cc @@ -8,7 +8,7 @@ namespace ilang { -namespace AbsKnob { +namespace absknob { ExprPtr DuplInp(const InstrLvlAbsPtr& m, const ExprPtr& inp) { ILA_ASSERT(inp->is_var()) << "Creating input from non-var Expr."; @@ -392,6 +392,6 @@ void DuplInstrSeq(const InstrLvlAbsCnstPtr& src, const InstrLvlAbsPtr& dst) { // TODO } -} // namespace AbsKnob +} // namespace absknob } // namespace ilang diff --git a/src/ila-mngr/u_rewrite_ila.cc b/src/ila-mngr/u_rewrite_ila.cc index 72123a970..29a0191a3 100644 --- a/src/ila-mngr/u_rewrite_ila.cc +++ b/src/ila-mngr/u_rewrite_ila.cc @@ -27,9 +27,9 @@ bool FuncObjRewrIla::pre(const InstrLvlAbsCnstPtr& src) { << "Rewriting ILA to partially constructed ILA not support."; // input - AbsKnob::DuplInp(src, dst, expr_map_); + absknob::DuplInp(src, dst, expr_map_); // state - AbsKnob::DuplStt(src, dst, expr_map_); + absknob::DuplStt(src, dst, expr_map_); // child for (decltype(src->child_num()) i = 0; i != src->child_num(); i++) { @@ -40,20 +40,20 @@ bool FuncObjRewrIla::pre(const InstrLvlAbsCnstPtr& src) { } // fetch - AbsKnob::DuplFetch(src, dst, expr_map_); + absknob::DuplFetch(src, dst, expr_map_); // valid - AbsKnob::DuplValid(src, dst, expr_map_); + absknob::DuplValid(src, dst, expr_map_); // init - AbsKnob::DuplInit(src, dst, expr_map_); + absknob::DuplInit(src, dst, expr_map_); // instruction && child-program for (decltype(src->instr_num()) i = 0; i != src->instr_num(); i++) { auto i_src = src->instr(i); - AbsKnob::DuplInstr(i_src, dst, expr_map_, ila_map_); + absknob::DuplInstr(i_src, dst, expr_map_, ila_map_); } // sequence - AbsKnob::DuplInstrSeq(src, dst); + absknob::DuplInstrSeq(src, dst); return false; } @@ -84,7 +84,7 @@ bool FuncObjFlatIla::pre(const InstrLvlAbsCnstPtr& src) { valid_cond_ = asthub::BoolConst(true); } #ifdef VALID_STACK - valid_cond_ = AbsKnob::Rewrite(valid_cond_, expr_map_); + valid_cond_ = absknob::Rewrite(valid_cond_, expr_map_); valid_cond_stack_.push(asthub::And(valid_cond_stack_.top(), valid_cond_)); const auto& hierarchical_valid_cond = valid_cond_stack_.top(); #endif // VALID_STACK @@ -92,7 +92,7 @@ bool FuncObjFlatIla::pre(const InstrLvlAbsCnstPtr& src) { // instruction && child-program for (decltype(src->instr_num()) i = 0; i != src->instr_num(); i++) { auto i_src = src->instr(i); - auto i_dst = AbsKnob::DuplInstr(i_src, dst, expr_map_, ila_map_); + auto i_dst = absknob::DuplInstr(i_src, dst, expr_map_, ila_map_); #ifdef VALID_STACK auto new_decode = asthub::And(i_dst->decode(), hierarchical_valid_cond); i_dst->ForceSetDecode(new_decode); @@ -100,7 +100,7 @@ bool FuncObjFlatIla::pre(const InstrLvlAbsCnstPtr& src) { } // sequence - do we need to do this? - // AbsKnob::DuplInstrSeq(src, dst); + // absknob::DuplInstrSeq(src, dst); return false; } diff --git a/src/ila-mngr/u_unroller.cc b/src/ila-mngr/u_unroller.cc index cc7d47ba4..fd6fdb85f 100644 --- a/src/ila-mngr/u_unroller.cc +++ b/src/ila-mngr/u_unroller.cc @@ -341,7 +341,7 @@ void PathUnroll::DefineDepVar() { // collect the set of vars auto dep_var = ExprSet(); for (auto it = seq_.begin(); it != seq_.end(); it++) { - AbsKnob::InsertStt(*it, dep_var); + absknob::InsertStt(*it, dep_var); } // update to the global set vars_.clear(); @@ -404,7 +404,7 @@ ZExpr MonoUnroll::MonoIncr(const InstrLvlAbsPtr& top, const int& length, void MonoUnroll::DefineDepVar() { vars_.clear(); - auto dep_var = AbsKnob::GetSttTree(top_); + auto dep_var = absknob::GetSttTree(top_); // update global ILA_ASSERT(!dep_var.empty()) << "No state var found."; for (auto it = dep_var.begin(); it != dep_var.end(); it++) { @@ -423,7 +423,7 @@ void MonoUnroll::Transition(const int& idx) { } // extract the set of insturctions - auto instr_set = AbsKnob::GetInstrTree(top_); + auto instr_set = absknob::GetInstrTree(top_); // create the set of selection bits std::vector sel_bits; diff --git a/src/ila-mngr/u_unroller_smt.cc b/src/ila-mngr/u_unroller_smt.cc index 5bdeff788..5f1010485 100644 --- a/src/ila-mngr/u_unroller_smt.cc +++ b/src/ila-mngr/u_unroller_smt.cc @@ -84,7 +84,7 @@ template class UnrollerSmt; template void PathUnroller::SetDecidingVars() { ExprSet unique_vars; for (const auto& instr : seq_) { - AbsKnob::InsertStt(instr, unique_vars); + absknob::InsertStt(instr, unique_vars); } // move to global order this->deciding_vars_.clear(); diff --git a/src/ila-mngr/v_eq_check_crr.cc b/src/ila-mngr/v_eq_check_crr.cc index a980428b9..8e1a669de 100644 --- a/src/ila-mngr/v_eq_check_crr.cc +++ b/src/ila-mngr/v_eq_check_crr.cc @@ -186,8 +186,8 @@ void CommDiag::Init() { un.AddGlobPred(ref->flush()); } // state vars of each ILA - stts_a_ = AbsKnob::GetSttTree(crr_->refine_a()->ila()); - stts_b_ = AbsKnob::GetSttTree(crr_->refine_b()->ila()); + stts_a_ = absknob::GetSttTree(crr_->refine_a()->ila()); + stts_b_ = absknob::GetSttTree(crr_->refine_b()->ila()); } CommDiag::Unroll& CommDiag::GetUnrl(const UID& uid) { @@ -322,8 +322,8 @@ bool CommDiag::IncEqCheck(const int& min, const int& max, const int& step) { const auto ma = crr_->refine_a()->coi(); // representative ILA const auto mb = crr_->refine_b()->coi(); - const auto stts_a = AbsKnob::GetSttTree(ma); // used for marking - const auto stts_b = AbsKnob::GetSttTree(mb); + const auto stts_a = absknob::GetSttTree(ma); // used for marking + const auto stts_b = absknob::GetSttTree(mb); auto s = z3::solver(ctx_); // solver { // default basic condition (old/new/apply path & assm & prop) @@ -528,7 +528,7 @@ bool CommDiag::SanityCheckRefinement(const RefPtr ref) { // check: /\s_n, a_n -> (a_n & f_o & eq_o_n) s.reset(); auto appl_z3 = z3::expr_vector(ctx_); - auto appl_vars = AbsKnob::GetVar(a); + auto appl_vars = absknob::GetVar(a); for (auto it = appl_vars.begin(); it != appl_vars.end(); it++) { appl_z3.push_back(unroll_appl_.CurrState(*it, 0)); } @@ -550,11 +550,11 @@ bool CommDiag::SanityCheckRelation(const RelPtr rel, const InstrLvlAbsPtr& ma, ILA_NOT_NULL(rel); auto rel_expr = rel->get(); - auto rel_vars = AbsKnob::GetVar(rel_expr); + auto rel_vars = absknob::GetVar(rel_expr); auto ref_vars = ExprSet(); - AbsKnob::InsertStt(ma, ref_vars); - AbsKnob::InsertStt(mb, ref_vars); + absknob::InsertStt(ma, ref_vars); + absknob::InsertStt(mb, ref_vars); // check: rel_vars <= ref_vars for (auto it = rel_vars.begin(); it != rel_vars.end(); it++) { @@ -709,7 +709,7 @@ z3::expr CommDiag::GetZ3ApplInstr(const ExprSet& stts, const RefPtr ref) { z3::expr CommDiag::GenInit(const RefPtr ref) { // default equivalence: state variables (not including inputs) - auto vars = AbsKnob::GetSttTree(ref->coi()); + auto vars = absknob::GetSttTree(ref->coi()); auto eq = ctx_.bool_val(true); for (auto it = vars.begin(); it != vars.end(); it++) { auto so = unroll_orig_.CurrState(*it, 0); @@ -833,7 +833,7 @@ z3::expr CommDiag::UnrollFlush(MonoUnroll& unroller, const RefPtr ref, // unroll auto path = unroller.MonoAssn(ref->coi(), length, base); - auto vars = AbsKnob::GetStt(ref->coi()); + auto vars = absknob::GetStt(ref->coi()); auto mark = ctx_.bool_val(true); // mark complete step with representing state for (auto i = start; i <= base + length; i++) { diff --git a/src/ila-mngr/v_refinement.cc b/src/ila-mngr/v_refinement.cc index 9a1604505..fc8a683fd 100644 --- a/src/ila-mngr/v_refinement.cc +++ b/src/ila-mngr/v_refinement.cc @@ -19,7 +19,7 @@ void RefinementMap::set_tgt(const InstrLvlAbsPtr& tgt) { void RefinementMap::set_tgt(const InstrPtr& tgt) { ILA_ASSERT(tgt && tgt->host()); - coi_ = AbsKnob::ExtrDeptModl(tgt, tgt->host()->name().str()); + coi_ = absknob::ExtrDeptModl(tgt, tgt->host()->name().str()); } void RefinementMap::set_appl(const ExprPtr& appl) { diff --git a/src/ilang++.cc b/src/ilang++.cc index 7a3f5aba8..6091c964e 100644 --- a/src/ilang++.cc +++ b/src/ilang++.cc @@ -584,8 +584,8 @@ void InstrRef::ExportToVerilog(std::ostream& fout) const { } void InstrRef::ExportToVerilogWithChild(std::ostream& fout) const { - auto dept_ila_ptr = AbsKnob::ExtrDeptModl(ptr_, ptr_->name().str() + "_ila_"); - AbsKnob::FlattenIla(dept_ila_ptr); + auto dept_ila_ptr = absknob::ExtrDeptModl(ptr_, ptr_->name().str() + "_ila_"); + absknob::FlattenIla(dept_ila_ptr); VerilogGenerator vgen(VerilogGenerator::VlgGenConfig( true)); // overwrite default configuration : memory is external @@ -693,7 +693,7 @@ void Ila::ExportToVerilog(std::ostream& fout) const { vgen.DumpToFile(fout); } -void Ila::FlattenHierarchy() { AbsKnob::FlattenIla(ptr_); } +void Ila::FlattenHierarchy() { absknob::FlattenIla(ptr_); } bool Ila::ExecutePass(const std::vector& passes) const { auto status = true; diff --git a/src/target-sc/ilator.cc b/src/target-sc/ilator.cc index 9996dc99e..69cb53275 100644 --- a/src/target-sc/ilator.cc +++ b/src/target-sc/ilator.cc @@ -77,8 +77,11 @@ void Ilator::Generate(const std::string& dst, bool opt) { auto status = true; ILA_INFO << "Start generating SystemC simulator of " << m_; + // non-instruction basics + status &= GenerateIlaBasics(os_portable_append_dir(dst, kDirSrc)); + // instruction semantics (decode and updates) - for (auto& instr : AbsKnob::GetInstrTree(m_)) { + for (auto& instr : absknob::GetInstrTree(m_)) { status &= GenerateInstrContent(instr, os_portable_append_dir(dst, kDirSrc)); } @@ -165,6 +168,38 @@ bool Ilator::Bootstrap(const std::string& root, bool opt) { return status; } +bool Ilator::GenerateIlaBasics(const std::string& dir) { + StrBuff buff; + + // include headers + fmt::format_to(buff, "#include <{}.h>\n", GetProjectName()); + + // generate valid func for each ILA + auto PerIla = [this, &buff](const InstrLvlAbsCnstPtr& m) { + ILA_NOT_NULL(m); + auto valid_expr = m->valid(); + if (!valid_expr) { + valid_expr = asthub::BoolConst(true); + ILA_WARN << "Use default (true) valid for " << m; + } + auto valid_func = RegisterFunction(GetValidFuncName(m), valid_expr); + BeginFuncDef(valid_func, buff); + ExprVarMap lut; + ILA_CHECK(RenderExpr(valid_expr, buff, lut)); + fmt::format_to(buff, "auto& {universal_name} = {local_name};\n", + fmt::arg("universal_name", GetCxxName(valid_expr)), + fmt::arg("local_name", LookUp(valid_expr, lut))); + EndFuncDef(valid_func, buff); + }; + + // traverse the hierarchy + m_->DepthFirstVisit(PerIla); + + // record and write to file + CommitSource("all_valid_funcs_in_hier.cc", dir, buff); + return true; +} + bool Ilator::GenerateInstrContent(const InstrPtr& instr, const std::string& dir) { StrBuff buff; @@ -387,7 +422,7 @@ bool Ilator::GenerateInitialSetup(const std::string& dir) { std::map init_values; auto model = solver.get_model(); - auto refer_vars = AbsKnob::GetVar(init); + auto refer_vars = absknob::GetVar(init); for (const auto& var : refer_vars) { auto var_value = model.eval(gen.GetExpr(var)); try { @@ -459,21 +494,22 @@ bool Ilator::GenerateExecuteKernel(const std::string& dir) { auto ExecInstr = [this, &buff](const InstrPtr& instr, bool child) { fmt::format_to( buff, - "if ({decode_func_name}()) {{\n" + "if ({valid_func_name}() && {decode_func_name}()) {{\n" " {update_func_name}();\n" " {child_counter}" "#ifdef ILATOR_VERBOSE\n" " LogInstrSequence(\"{instr_name}\");\n" "#endif\n" "}}\n", + fmt::arg("valid_func_name", GetValidFuncName(instr->host())), fmt::arg("decode_func_name", GetDecodeFuncName(instr)), fmt::arg("update_func_name", GetUpdateFuncName(instr)), fmt::arg("child_counter", (child ? "schedule_counter++;\n" : "")), fmt::arg("instr_name", instr->name().str())); }; - auto top_instrs = AbsKnob::GetInstr(m_); - auto all_instrs = AbsKnob::GetInstrTree(m_); + auto top_instrs = absknob::GetInstr(m_); + auto all_instrs = absknob::GetInstrTree(m_); // top-level instr for (auto& instr : top_instrs) { @@ -518,7 +554,7 @@ bool Ilator::GenerateGlobalHeader(const std::string& dir) { fmt::arg("project", GetProjectName())); // input - for (auto& var : AbsKnob::GetInp(m_)) { + for (auto& var : absknob::GetInp(m_)) { fmt::format_to(buff, " sc_in<{var_type}> {var_name}_in;\n" " {var_type} {var_name};\n", @@ -527,7 +563,7 @@ bool Ilator::GenerateGlobalHeader(const std::string& dir) { } // state and global vars (e.g., CONCAT) - for (auto& var : AbsKnob::GetSttTree(m_)) { + for (auto& var : absknob::GetSttTree(m_)) { fmt::format_to(buff, " {var_type} {var_name};\n", fmt::arg("var_type", GetCxxType(var)), fmt::arg("var_name", GetCxxName(var))); @@ -563,7 +599,7 @@ bool Ilator::GenerateGlobalHeader(const std::string& dir) { " SC_METHOD(compute);\n" " sensitive", fmt::arg("project", GetProjectName())); - for (auto& var : AbsKnob::GetInp(m_)) { + for (auto& var : absknob::GetInp(m_)) { fmt::format_to(buff, " << {input_name}_in", fmt::arg("input_name", GetCxxName(var))); } @@ -784,6 +820,10 @@ std::string Ilator::GetCxxName(const ExprPtr& expr) { } } +std::string Ilator::GetValidFuncName(const InstrLvlAbsCnstPtr& m) { + return fmt::format("valid_{host}", fmt::arg("host", m->name().str())); +} + std::string Ilator::GetDecodeFuncName(const InstrPtr& instr) { return fmt::format("decode_{host}_{instr}", fmt::arg("host", instr->host()->name().str()), diff --git a/test/t_case_aes_eq.cc b/test/t_case_aes_eq.cc index 011591798..4a380d313 100644 --- a/test/t_case_aes_eq.cc +++ b/test/t_case_aes_eq.cc @@ -100,7 +100,7 @@ TEST(TestCase, AES_V_C_EQ) { ref->set_flush(asthub::Not(has_instr)); // ready - auto instrs = AbsKnob::GetInstrTree(ila); + auto instrs = absknob::GetInstrTree(ila); auto ready = asthub::BoolConst(true); for (auto it = instrs.begin(); it != instrs.end(); it++) { auto instr = *it; diff --git a/test/t_copy.cc b/test/t_copy.cc index a40544fbf..9276f4180 100644 --- a/test/t_copy.cc +++ b/test/t_copy.cc @@ -19,7 +19,7 @@ void Copy(const std::string& dir, const std::string& file, bool check = true) { auto ila_file = os_portable_append_dir(file_dir, file); auto ila = ImportIlaPortable(ila_file).get(); - auto copy = AbsKnob::CopyIlaTree(ila, "copied"); + auto copy = absknob::CopyIlaTree(ila, "copied"); if (check) { Check(ila, copy); diff --git a/test/t_eq_check.cc b/test/t_eq_check.cc index 41c1ebc18..4988e861a 100644 --- a/test/t_eq_check.cc +++ b/test/t_eq_check.cc @@ -137,7 +137,7 @@ RefPtr TestEqCheck::GetRefine(const InstrLvlAbsPtr top, const int& instr_idx, // flush ref->set_flush(Not(top->input("start"))); // complete - auto instrs = AbsKnob::GetInstrTree(top); + auto instrs = absknob::GetInstrTree(top); auto cmpl = BoolConst(true); for (auto it = instrs.begin(); it != instrs.end(); it++) { auto instr = *it; diff --git a/test/t_mngr_absknob.cc b/test/t_mngr_absknob.cc index 0ce7c7fbc..7ca9f71cc 100644 --- a/test/t_mngr_absknob.cc +++ b/test/t_mngr_absknob.cc @@ -1,5 +1,5 @@ /// \file -/// Tests for ILA manager utility - AbsKnob +/// Tests for ILA manager utility -absknob #include @@ -7,7 +7,7 @@ namespace ilang { -TEST(TestMngrAbsKnob, FlattenIla) { +TEST(TestMngrabsknob, FlattenIla) { // parent auto m = Ila("parent"); auto x = m.NewBvState("x", 8); diff --git a/test/t_verilog_gen.cc b/test/t_verilog_gen.cc index 6279f45f2..251ecd007 100644 --- a/test/t_verilog_gen.cc +++ b/test/t_verilog_gen.cc @@ -66,8 +66,8 @@ class TestVerilogGen : public ::testing::Test { void FlattenIla(const InstrLvlAbsPtr& ila) { for (auto i = 0; i < ila->instr_num(); i++) { - auto dep_ila = AbsKnob::ExtrDeptModl(ila->instr(i), "Flatten"); - AbsKnob::FlattenIla(dep_ila); + auto dep_ila = absknob::ExtrDeptModl(ila->instr(i), "Flatten"); + absknob::FlattenIla(dep_ila); auto vgen = VerilogGenerator(); vgen.ExportIla(dep_ila);