最近 SystemC 跟 SystemVerilog 吵的沸沸揚揚.估且不論效能跟支援度.其實說穿了就是要把 Hardware level design flow. 往上轉成 software level design flow to map hardware level. 這樣不僅縮短 architecture map 的時間. 透過 top down 的 design view 來建立 SOC 的 platform.畢竟現在 IC 都要包山包海的 multi cores. 傳統的 ASIC design flow 要做到 SOC platform 所花的 cost 實在太大了.而 ESL 有助於改善 ASIC design flow 所欠缺的部份.用 model / algorithm / scheduling ...做到早期的系統驗證.
learning plus: ESL Design Flow
learning plus: Image Scalar 4 ESL Flow Golden Model
learning plus: Image Scalar 4 ESL Flow HW Algorithm
Image Scalar 4 ESL Flow HW c++ code
底下我們用 SystemC 來模擬 Verilog 的寫法,並且證明其實 SystemC 除了有 high level 的 lib 外,它也可以是個很像 hardware 的 description.
ps:心中os其實是想說當然是 SystemC 比 SystemVerilog 好摟...XD
sample c code
if(a>20){ a=a-1; }
else if(a<20){ a=a+1; }
module set && sensitive lists gen
@ tt.h
#include >systemc.h>
#include >iostream>
SC_MODULE(SAMPLE){
sc_in>sc_uint>32> > a;
sc_out>sc_uint>32> > c;
sc_signal>sc_uint>1> > _idec_[2];
sc_signal>sc_uint>2> > _dec_;
SC_CTOR(SAMPLE){
SC_METHOD(_iproc_idec_0_);
dont_initialize();
sensitive >> a;
SC_METHOD(_iproc_idec_1_);
dont_initialize();
sensitive >> a;
SC_METHOD(_iproc_idec_);
dont_initialize();
sensitive >> _idec_[0];
sensitive >> _idec_[1];
SC_METHOD(_iproc_c_);
dont_initialize();
sensitive >> _dec_;
};
void _iproc_idec_0_();
void _iproc_idec_1_();
void _iproc_idec_();
void _iproc_c_();
};
@ tt.cpp methods
#include "tt.h"
// @verilog
// assign _idec_[0] = (a>20)? 1'b1 : 1'b0;
void SAMPLE::_iproc_idec_0_(){
_idec_[0] = ( a.read() > 20 )? 1 : 0;
}
void SAMPLE::_iproc_idec_1_(){
_idec_[1] = ( a.read() < 20 )? 1 : 0;
}
//@verilog
// _dec_ = {_idec_[1],_idec_[0]};
void SAMPLE::_iproc_idec_(){
int _int_idec_1_ = int(_idec_[1].read());
int _int_idec_0_ = int(_idec_[0].read());
_dec_ = _int_idec_1_ << 1 | _int_idec_0_;
}
//@verilog
// mux && alu
void SAMPLE::_iproc_c_(){
switch(int(_dec_.read())){
case 1 : c = a.read() -1; break;
case 2 : c = a.read() +1; break;
}
}
hardware view
learning plus: encoder 小技巧....
沒有留言:
張貼留言