SystemCによるRTL記述
Verilog-HDLとSystemC記述の対比一覧
Verilog-HDL記述 | SystemCでは | 備考 |
module M; ~ endmodule |
SC_MODULE(M) { ~ }; |
モジュール定義 |
input [7:0] in_data; | sc_in<8> in_data; | 入力信号 |
output [15:0] out_data; | sc_out<16> out_data; | 出力信号 |
reg [31:0] tmp_reg; | sc_uint<32> tmp_reg; もしくは sc_signal< sc_uint<32> > tmp_reg; |
1つのプロセス内ならデータ型 プロセス間通信ならsc_signal<>を使う |
wire [31:0] mm2mn_data; | sc_signal<32> mm2mn_data; | モジュール間信号接続 |
always @ (posedge(clk))begin ~ end |
SC_METHOD(method); sensitive << clk.pos(); void method() { ~ } |
FF推定 |
always @ (a or b)begin ~ end |
SC_METHOD(method); sensitive << a << b; void method() { ~ } |
組み合わせ |
initial begin ~ end |
SC_THREAD(thread); void thread() { ~ } |
|
assign文 | なし | methodの組み合わせで表現 |
# 10 //ns | wait(10,SC_NS) | 遅延 |
@(posedge(clk)) | wait(); | クロック立ち上がりを待つ |
parameter width=5; | const unsigned width=5; | |
x[m:n] | x.range(m,n) | ビットアクセス |
{x, y} | (x, y) | 連節 |
ただし、SystemCでRTL記述をしても、あまり利点がない。
シミュレーション速度は逆にSystemCのほうが遅くなるかもしれない。
シミュレーション速度は逆にSystemCのほうが遅くなるかもしれない。
RTLから抽象度をあげるには
以下の点を実施すると抽象度があがっていくはず。
- SC_METHODからSC_THREADを使用する
- クロック信号を使わない
- プロセス関数を少なくする
- waitの数を少なくする
- ステートマシンを記述しない
- 入出力信号をsc_fifo等を使用する(関数でデータの受け渡しをする)
抽象度をあげることで、SW協調モデルとして利用性が高くなる。
SW協調モデルに求められるのは、タイミング精度はそこそこで、シミュレーション速度が優先。TLMレベル。
SW協調モデルに求められるのは、タイミング精度はそこそこで、シミュレーション速度が優先。TLMレベル。