スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

SystemCのオススメ記述スタイルとは

初心にかえって「基礎から学ぶSystemC」を読んでいるところです。
(書評は読み終わってから)

その中で、5.8章で記述スタイルについて書いてあったのですが、
イメージがわかなかったので、試しに書いてみました。
Example は Write/Readするような Memory(RAM)にしました。

従来型スタイル


○ram.h
 1 #ifndef RAM_H
 2 #define RAM_H
 3 
 4 #include "memory.h"
 5 
 6 SC_MODULE( ram ){
 7 
 8     sc_in<bool>          clk;   // Clock
 9     sc_in<bool>          xrst;  // Asynchronous Reset : Active Low
10     sc_in<sc_uint<4> >   addr;  // Address
11     sc_in<sc_uint<32> >  wdata; // Write Data
12     sc_in<bool>          ce;    // Chip Enable  : Active High
13     sc_in<bool>          we;    // Write Enable : Low:Read, High:Write
14     sc_out<sc_uint<32> > rdata; // Read Data
15 
16     memory<sc_uint<32> > mem;   // Memory Module Instance
17 
18     void process_method();
19 
20     SC_CTOR( ram )
21         : mem("mem"16// 要素数:16
22     {
23         
24         SC_METHOD( process_method );
25         sensitive << clk.pos();
26         sensitive << xrst.neg();
27 
28         rdata.initialize(0);
29 
30     }
31 };
32 #endif
33 

○ram.cpp
 1 
 2 #include <systemc.h>
 3 #include "ram.h"
 4 
 5 void ram::process_method() {
 6 
 7     sc_uint<4> w_addr = addr;
 8 
 9     if( xrst == 0) { // Reset
10         rdata.write( 0 );
11         mem.init(0);
12     } else { // CLK posedge
13         if( ce && we ) { // Write
14             mem.write(w_addr,wdata);
15         } else if( ce && (~we)) { // Read
16             rdata = mem.read(w_addr);
17         }
18     }
19 
20 }
21 

推奨型スタイル


○ram.h
 1 #ifndef RAM_H
 2 #define RAM_H
 3 
 4 #include "memory.h"
 5 
 6 SC_MODULE( ram ){
 7 
 8     sc_in<bool>          clk;   // Clock
 9     sc_in<bool>          xrst;  // Asynchronous Reset : Active Low
10     sc_in<sc_uint<4> >   addr;  // Address
11     sc_in<sc_uint<32> >  wdata; // Write Data
12     sc_in<bool>          ce;    // Chip Enable  : Active High
13     sc_in<bool>          we;    // Write Enable : Low:Read, High:Write
14     sc_out<sc_uint<32> > rdata; // Read Data
15 
16     memory<sc_uint<32> > *mem;  // Memory Module Define
17 
18     void process_method();
19 
20     SC_CTOR( ram );
21 };
22 #endif
23 

○ram.cpp
 1 
 2 #include <systemc.h>
 3 #include "ram.h"
 4 
 5 ram::ram(sc_module_name nm)
 6     : sc_module(nm)
 7 {
 8     mem = new memory<sc_uint<32> >("mem"16); // SubModule Allocations
 9 
10     SC_METHOD( process_method );
11     sensitive << clk.pos();
12     sensitive << xrst.neg();
13 
14     rdata.initialize(0);
15 }
16 
17 void ram::process_method() {
18 
19     sc_uint<4> w_addr = addr;
20 
21     if( xrst == 0) { // Reset
22         rdata.write( 0 );
23         mem->init(0);
24     } else { // CLK posedge
25         if( ce && we ) { // Write
26             mem->write(w_addr,wdata);
27         } else if( ce && (~we)) { // Read
28             rdata = mem->read(w_addr);
29         }
30     }
31 
32 }
33 

という感じの違いらしい。あまりメリットがわからないけど。。。
これって new してるからデストラクタを定義して deleteした方がいいんだよね?
そこまで書いてないけどなー
関連記事

コメントの投稿

非公開コメント

プロフィール

Kocha

Author:Kocha
なんでもチャレンジ!(^o^)/
E-mail
github:Kocha
イベントカレンダー

カレンダー
07 | 2017/08 | 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
カテゴリ
OVP (4)
最新記事
最新コメント
アーカイブ
リンク
Twitter
アクセス人数
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。