2011年5月26日 星期四

Structural Checking of Voltage-Island and Power Gating Low-Power Logic Design

小弟最近花了點時間在弄 IC/CAD Structural Checking of Voltage-Island and Power Gating Low-Power Logic Design 的題目. 寫了一堆很像的程式碼, 主要功能是 "驗證 Design 是否滿足 Isolation Condition Constrain". 如果你有興趣,就不妨參考看看吧...XD. 感覺裡面還有很多可以改進的地方, 如 class 的分層部份,可以預先加入 Verify 的條件判斷. 雖然目前只是驗證 Design 是否滿足Constrain, 但將來也有可能要 update Design 時候. 那時就需要 register Verify 來確保每次 update 是否還維持其 Design 的完整性. 還有 ISO Rule Check 部份, 可以考慮其相依性, 減少 Search/Loop 的次數. 這邊小弟只寫了 ISO2, ISO3, ISO4, ISO5 的條件判斷. 剩下的部份就請好心人事把他完成吧. Flow 大致是如此, Parser 出我們要的 Class type, 依序建立在 ISO_Table, SC_Table.底下. 之後透過 SC_Util, ISO_Util 來 Access SC_Table, ISO_Table.. 底下用個簡單的 sample code 來抓取 Design port 的 Deepest Fan-In port lists.
SC_Util *sc_util = new SC_Util();

typedef std::vector<SC_Module::SC_Port_D*>           PtVec;
typedef std::vector<SC_Module::SC_Port_D*>::iterator PtVec_iter;

PtVec   pt_vv;

SC_Module::SC_Port_D *sc_port = sc_util->split_path_2_Port(sc_root,"u1/u2/u3/CPF_ISO__cell_368/Ib");

//get Deepest Fain Vector
sc_util->get_PreestVec(sc_port,&pt_vv);

sc_port->dump_Context();
std::cout << sc_util->get_HierarchyName(sc_port) << std::endl;


for(PtVec_iter pt_it  = pt_vv.begin();
              pt_it != pt_vv.end();  ++pt_it){

   SC_Module::SC_Port_D *sc_preest_p = static_cast<SC_Module::SC_Port_D*>(*pt_it);
                         sc_preest_p->dump_Context();

   std::cout << sc_util->get_HierarchyName(sc_preest_p) << std::endl;
}

delete sc_util;
project : https://github.com/funningboy/iso_cell_rc1 Refs: http://lowpowerdesign.blogspot.com/ http://cad_contest.cs.nctu.edu.tw/cad11/Problems.htm GCC Optimization results in “Undefined symbol” at runtime Bison 2.5 Code-Level And API Options

2011年5月17日 星期二

verilog gate parser @ boost

最近真是煩悶阿...., 不是系統太大導致之前寫的 code 爆掉. 不然就是進度完全的 Delay..., 看來用 "perl" 來硬幹 "大系統" 真的就只有蠢, 本來想說能夠快速的系統開發,不考慮很底層的東西.看著 hash table 愈建愈大, 即使release 了一些,還是不能滿足需求阿... 所以只好砍掉重練了XD. 目前先用 C++ 來建底層的 interface. 而 Parser 的部份採用 Boost c++ 的 Spirit library, 用過的人都知道,這真是個好物阿.... sample case.
module SC_BUF  (A, Y);
  input  A;
  output Y;
     buf (Y, A);
endmodule
project: https://sites.google.com/site/funningboy/c/ParseVerilog.cpp?attredirects=0&d=1