SystemC-2.3インストール(clang3.3)

clang 3.3で SystemC-2.3をインストールしようとした際のメモ。

$> ../configure CC=clang CXX=clang++ 
:
:
configure: error: "sorry...compiler not supported"

ってな感じでエラーが出ます。
どうやら、INSTALLには記載があるのに、clangは使えないようです。

っとそんなはずはない!っと思ったのですが。。。
結局、configureを修正します。
configureでは「$CXX_COMP」という形で、c++ compilerを検査してます。
なので、ここに clang++を追加することで configのエラー回避出来ます。

例えば、Linux OSだと 5082行目です。

--- ../configure.org 2013-04-25 23:19:19.918563992 +0900
+++ ../configure  2013-04-25 23:38:35.215930881 +0900
@@ -5079,7 +5079,7 @@
             ;;
         esac
         case "$CXX_COMP" in
-            c++ | g++)
+            c++ | g++ | clang++)
                 EXTRA_CXXFLAGS="${EXTRA_CXXFLAGS} -m${CPU_ARCH}"
                 EXTRA_ASFLAGS="-m${CPU_ARCH}"
                 ;;

これで、make すると

$> make
:
/bin/sh ../../../libtool --tag=CXX   --mode=compile clang++ -DSC_INCLUDE_FX   -I. -I../../../../src/sysc/kernel -I../../../../src   -Wall -m32 -c -o sc_attribute.lo ../../../../src/sysc/kernel/sc_attribute.cpp
libtool: compile:  clang++ -DSC_INCLUDE_FX -I. -I../../../../src/sysc/kernel -I../../../../src -Wall -m32 -c ../../../../src/sysc/kernel/sc_attribute.cpp  -fPIC -DPIC -o .libs/sc_attribute.o
libtool: compile:  clang++ -DSC_INCLUDE_FX -I. -I../../../../src/sysc/kernel -I../../../../src -Wall -m32 -c ../../../../src/sysc/kernel/sc_attribute.cpp -o sc_attribute.o >/dev/null 2>&1
:
:

ってな感じで、完了します。
あとは $> make install で完了です。

あと。SystemC Forumでもスレッドが立ってました。
- SystemC install clang

最終的には「configure.in」を修正して、

$> autoreconf -ivf

を行いインストールしました。

関連記事

HLSで「等価性検証は必要ないのか?」と質問された時の正解

元ネタ:TDDで「テストばかり書いて間に合うのか?」と質問されたときの正解

高位合成/動作合成のツールを使った設計において、顧客などから
「等価性検証は必要ないのか?」
などと質問されることがあると思います。

そんな時には、後ろからそっと抱きしめて
「そんな質問させてごめんな」
が正解です。

SystemVerilog:bitスライスと初期値代入

problem about variable part select in SystemVerilog

確かに、こういう風に書きたいと思った時もありますね。

addr[8-:idx_bits] = {idx_bits{1'b1}};

☆ここでのポイント

addr[ const_or_var : const ] = { const { const_or_var } };

  • ビットスライス右側の部分は定数

addr[ const_or_var [+/-]: const ]

  • 初期値宣言の範囲は定数

= { const { const_or_var } };

Vim: +Lua にてインストール(Ubuntu12.04)

Vimにて、if_luaを有効にしたかったので、その時のメモを。

Lua5.2のインストール

$> sudo apt-get install lua5.2

これだけだと、「lua.h」が見つからないということで 有効化されません。
なので、こちらもインストールする必要があります。
@h_east さんありがとうございます。

$> sudo apt-get install liblua5.2-dev 

configureの設定

「 --enable-luainterp=yes 」をつけて configします。

$> ./configure  --enable-luainterp=yes
  • 見るべきポイント
:
checking --disable-xsmp argument... no
checking --disable-xsmp-interact argument... no
checking --enable-luainterp argument... yes
checking --with-lua-prefix argument... no
checking LUA_PREFIX environment var... not set, default to /usr
checking for lua... (cached) /usr/bin/lua
checking Lua version... (cached) 5.2
checking if lua.h can be found in /usr/include... no
checking if lua.h can be found in /usr/include/lua5.2... yes
checking --enable-mzschemeinterp argument... no
checking --enable-perlinterp argument... yes
:

きちんと「lua.h」が見つかっていることを確認してください。
あとは、make; make install で完了です。

f:id:kocha2012:20130603225343p:plain

改めて、Vim Girlかわいい!!!

SystemC:未使用 or 固定値端子を隠蔽出来る闇記述

前に SystemC:未使用 or 固定値端子の処理
を書いた際に思ったことがあります。

先ずはこちらのコードをみてください。

#include <systemc.h>

//---------------------------------------------//
static struct {

  template < typename T >
  operator sc_core::sc_signal_inout_if<T> & () const
  {
    return *(new sc_core::sc_signal<T>(sc_core::sc_gen_unique_name("vh_open")));
  }

} const vh_open = {};
//---------------------------------------------//
template<typename T>
sc_core::sc_signal_in_if<T> const &
vh_const( T const & v ) // keep the name consistent with vh_open
{
  // Yes, this is an (elaboration-time) memory leak.  You can avoid it with some extra effort
  sc_core::sc_signal<T>* sig_p = new sc_core::sc_signal<T>( sc_core::sc_gen_unique_name("vh_const") );
  sig_p->write( v );
  return *sig_p;
}
//---------------------------------------------//

SC_MODULE( hoge ){
  sc_in <int>  a;
  sc_in <int>  b;
  sc_in <int>  c;

  sc_out<int>  out;
  sc_out<bool> irq;

  void process(){
    out = a + b + c;
    irq = ((a+b+c) > 10)? 1 : 0;
  }

  SC_CTOR( hoge )
  {
    c(vh_const(42));
    irq(vh_open);

    SC_METHOD( process );
    sensitive << a << b << c ;
  }
};

int sc_main( int argc, char* argv[] ) {

  sc_signal<int>  sig_a;
  sc_signal<int>  sig_b;
  sc_signal<int>  sig_c;
  sc_signal<int>  sig_out;
  sc_signal<bool> sig_irq;

  hoge uhoge("hoge");
  uhoge.a(sig_a);
  uhoge.b(sig_b);
  uhoge.out(sig_out);

  sig_a = 1;
  sig_b = 2;
  sig_c = 3;

  sc_start(1.0, SC_PS);

  cout << "a = " ; sig_a.print(); cout << ", ";
  cout << "b = " ; sig_b.print(); cout << ", ";
  cout << "c = " ; sig_c.print(); cout << ", ";
  cout << "out = "; sig_out.print(); cout << ", ";
  cout << "irq = "; sig_irq.print(); cout << endl;

  sig_a = 3;
  sig_b = 4;
  sig_c = 5;

  sc_start(1.0, SC_PS);

  cout << "a = " ; sig_a.print(); cout << ", ";
  cout << "b = " ; sig_b.print(); cout << ", ";
  cout << "c = " ; sig_c.print(); cout << ", ";
  cout << "out = "; sig_out.print(); cout << ", ";
  cout << "irq = "; sig_irq.print(); cout << endl;

  return 0;
}

違い分かりますでしょうか?
実は、56行目から59行目までの hogeモジュールの接続に「c」「irq」が無いんです。
無くても問題ないんです!!!

実行結果

a = 1, b = 2, c = 3, out = 45, irq = 0
a = 3, b = 4, c = 5, out = 49, irq = 0

ってことは、「c」「irq」は何処へ?というと
hogeモジュールの中なんです!!!

  SC_CTOR( hoge )
  {
    c(vh_const(42));
    irq(vh_open);
  :

あくまで、モデルを作る人が隠したい場合に使えるかなと思っているのですが、
こういった記述は Verilog HDLや VHDLだと出来ないのでなかなかの闇記述ですよね。