$countones で bitランダム

きっかけはこちらの Verification Academyにて

"hot bit" randomization

このスレッドにCVCの方が回答したものが、こちらになります。

Smart constraint modeling in SystemVerilog

class c;
  rand bit[31:0] vec_1;
    constraint cst_max_2_hot_bits {
      $countones(vec_1) inside {1,2};
    }

この記述すごく簡素ですよね。
$countones 使うとこんなに簡単に出来るとは。

one hotだと $onehot を使えば良いと思います。

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かわいい!!!