« April 2007 | Main | June 2007 »

2007.05.30

最近の読書

刀語:4、5と読んだ。もうgdgdです。ペース落として、じっくり書いて欲しい。

化物語 これは読みやすくて面白い。


ノーカット版 密閉教室 探偵気取りの主人公に、ヒロインが浴びせる言葉が面白かった。そうだ、探偵なんて何にもわかっちゃいないんだ。

食い逃げされてもバイトは雇うな
読みやすいので簡単に読めます。単純に費用対効果の話も多いんだけど、全体的にふーんって感じ。立ち読みして気に入ったら買おう。

Systemc: Methodologies and Applications6,7,8章は結構面白い。ESL的な話題や、ポインターを使わないでpolymorphismをどう実装するか等。

ESL DESIGN AND VERIFICATION 2.1.3.3 Configurabilityより
30年以上前にアプリケーションによって命令セットを動的に変えるプロセッサが存在してたなんて!リコンフィグを先駆けすぎ!

| | Comments (0) | TrackBack (0)

Amazon破産

先月のカードの請求書が12万円台だった。調べてみたら、12万円以上アマゾンで本を買っている。これに家に入れるお金を入れたらあっというまに今月の手取りを超えてしまった。破産一直線。

たまに、今まで電子辞書とかゲームとか買ったときに10万超えたことはあったけど、純粋に本だけで10万超えたのは初めて。Unixプログラミングの本と、Lispの本と、Perlの本を揃えたのが原因。組み込みLinuxの本は普通に本屋で買ったし、実は本にはもっと突っ込んでる。いつの間にか、現在入手可能なLispの本だいたいそろってきている。

在庫状況が残り1冊だったら買っちゃうよね。
買わずに後悔するより、買って後悔しよう。

| | Comments (0) | TrackBack (0)

Gauche-gtk

SICPがようやく絵を出すところまで来たので、gauche gtkをインストールしてみる。
gtktexttag.c でpad3なんてメンバーはいませんよとエラーが出る。
調べてみたら、インストールしてあるgtkが2.0で、gaucheが要求しているのが2.2だった。
gtkのインストールをしようとしたら、FreeBSDのportsは、Xorgの関係でFreezeしているらしい。もうちょっとまとう。

| | Comments (0) | TrackBack (0)

2007.05.26

Verilog-Perl

ちょっと評価するタイミングが遅れたけど、Verilog-Perl使ってみました。Monpe's Roomさんを参考に試してみました。

#!/usr/bin/perl -w

use strict;
use Verilog::Netlist;


my @FileList = ('ide_if.v', 'ide_reg.h', 'ide_reset.v',
'ide_sector_read.v', 'ide_sector_set.v',
'shallot.v', 'shallot_sm.v');


# Main ====================================================
my $NetList = new Verilog::Netlist;
ReadVerilogFiles($NetList, \@FileList);
PrintHier($NetList);

exit(0);

# Sub routines ============================================
sub ReadVerilogFiles {
my ($netlist, $r_filelist) = @_;

foreach my $file (@{$r_filelist}) {
$netlist->read_file(filename=>$file);
}

$netlist->link(); # connection resolve
}

sub PrintHier{
my ($nl) = @_;
# Read in any sub-modules
$nl->link();
$nl->lint();
$nl->exit_if_error();

foreach my $mod ($nl->top_modules_sorted) {
show_hier ($mod, " ", "", "");
}
}

sub show_hier {
my $mod = shift;
my $indent = shift;
my $hier = shift;
my $cellname = shift;
if (!$cellname) {$hier = $mod->name;} #top modules get the design name
else {$hier .= ".$cellname";} #append the cellname
printf ("%-45s %s\n", $indent."Module ".$mod->name,$hier);
foreach my $sig ($mod->ports_sorted) {
#printf ($indent." %sput %s\n", $sig->direction, $sig->name);
}
foreach my $cell ($mod->cells_sorted) {
#printf ($indent. " Cell %s\n", $cell->name);
foreach my $pin ($cell->pins_sorted) {
# printf ($indent." .%s(%s)\n", $pin->name, $pin->netname);
}
show_hier ($cell->submod, $indent." ", $hier, $cell->name) if $cell->submod;
}
}

自作のIDEコントローラを読ませると、
 Module shallot shallot
  Module ide_if shallot.ide_if
  Module ide_reset shallot.ide_reset
  Module ide_sector_read shallot.ide_sector_read
  Module ide_sector_set shallot.ide_sector_set
  Module shallot_sm shallot.shallot_sm
こんな感じで階層を出してくれます。もちろんソースのコメントアウトをはずすと、ポートとかインスタンス名(っぽい?)も出してくれます。


調子に乗って、たっくさんのmipsも試してみる。

my $opt = new Verilog::Getopt;
$opt->parameter( "-DALTERA");
でALTERAをdefineさせて実行すると、

%Error: uart_write_cyclone.v:29: Cannot find fifo512_cyclone
%Error: uart_write_cyclone.v:29: Cannot find fifo512_cyclone
%Error: uart_write_cyclone.v:29: Module reference not found: fifo512_cyclone
Exiting due to errors

残念ながら階層構造を作るところでエラー。しかし、dummyのfifo512_cycloneを用意してあげると普通に通る。


Module gen_1port_ram gen_1port_ram
Module ram_module_altera ram_module_altera
Module tb_wb_conbus tb_wb_conbus
Module hardware_top tb_wb_conbus.dut
Module wb_conbus_top tb_wb_conbus.dut.conbus
Module wb_conbus_arb tb_wb_conbus.dut.conbus.wb_conbus_arb
Module wishbone_yacc tb_wb_conbus.dut.yacc_as_wb_master
Module cache_module tb_wb_conbus.dut.yacc_as_wb_master.d_cache_module
Module single_port_ram tb_wb_conbus.dut.yacc_as_wb_master.d_cache_module.ram0
Module single_port_ram tb_wb_conbus.dut.yacc_as_wb_master.d_cache_module.ram1
Module single_port_ram tb_wb_conbus.dut.yacc_as_wb_master.d_cache_module.ram2
Module single_port_ram tb_wb_conbus.dut.yacc_as_wb_master.d_cache_module.ram3
Module icache_module tb_wb_conbus.dut.yacc_as_wb_master.i_cache_module
Module single_port_ram tb_wb_conbus.dut.yacc_as_wb_master.i_cache_module.ram0_way0
Module single_port_ram tb_wb_conbus.dut.yacc_as_wb_master.i_cache_module.ram0_way1
Module single_port_ram tb_wb_conbus.dut.yacc_as_wb_master.i_cache_module.ram1_way0
Module single_port_ram tb_wb_conbus.dut.yacc_as_wb_master.i_cache_module.ram1_way1
Module single_port_ram tb_wb_conbus.dut.yacc_as_wb_master.i_cache_module.ram2_way0
Module single_port_ram tb_wb_conbus.dut.yacc_as_wb_master.i_cache_module.ram2_way1
Module single_port_ram tb_wb_conbus.dut.yacc_as_wb_master.i_cache_module.ram3_way0
Module single_port_ram tb_wb_conbus.dut.yacc_as_wb_master.i_cache_module.ram3_way1
Module cpu_core tb_wb_conbus.dut.yacc_as_wb_master.yacc
Module mul_div tb_wb_conbus.dut.yacc_as_wb_master.yacc.MulDiv
Module alu tb_wb_conbus.dut.yacc_as_wb_master.yacc.alu1
Module substruct tb_wb_conbus.dut.yacc_as_wb_master.yacc.alu1.sub
Module gen_ram32x32 tb_wb_conbus.dut.yacc_as_wb_master.yacc.ram_regfile32xx32
Module shifter tb_wb_conbus.dut.yacc_as_wb_master.yacc.sh1
Module onchip_ram_top tb_wb_conbus.onchip_ram
Module lpm_ram_dq_bank tb_wb_conbus.onchip_ram.lpm_ram_dq_component_bank0
Module lpm_ram_dq_bank tb_wb_conbus.onchip_ram.lpm_ram_dq_component_bank1
Module lpm_ram_dq_bank tb_wb_conbus.onchip_ram.lpm_ram_dq_component_bank2
Module lpm_ram_dq_bank tb_wb_conbus.onchip_ram.lpm_ram_dq_component_bank3
Module virtual_io_port tb_wb_conbus.virtual_io_port
Module top top
Module uart_read uart_read
Module uart_write uart_write
Module fifo512_cyclone uart_write.fifo
Module yacc_test yacc_test
Module cpu_core yacc_test.new_yacc
Module mul_div yacc_test.new_yacc.MulDiv
Module alu yacc_test.new_yacc.alu1
Module substruct yacc_test.new_yacc.alu1.sub
Module gen_ram32x32 yacc_test.new_yacc.ram_regfile32xx32
Module shifter yacc_test.new_yacc.sh1
Module ram yacc_test.ram_module

すげー!。
やっぱりPerl最強。

| | Comments (0) | TrackBack (0)

Makefile

避けていたけど、しっかり勉強しておいた方が良さそうなので整理。
テスト時などで、ソースファイルとMakefileのディレクトリが違うとき、*.oファイルはMakeを実行した場所に作られるのに(gcc -cオプションのデフォ動作)、ソースファイルのィレクトリの*.oを探しに行くため、毎回全ファイルがコンパイルされてしまう。

元がこんな感じ。
SRCS = xst_log_file_tb.cpp ../../ucfgen/xst_log_file.cpp
OBJS = $(SRCS:.cpp=.o)

これを追加
OBJS_NODIR = $(notdir $(OBJS))

のように組み込み関数notdirを取った物を、依存関係に入れて処理するとうまくいく。

a.exe: $(OBJS_NODIR)
$(CC) $(CFLAGS) $(INCDIR) $(LIBDIR) -o $@ $(OBJS_NODIR) $(LIBS) 2>&1 | c++filt

もっとちゃんとした方法があると思うけど、とりあえこれでOK。

FreeBSDのmakeは、gnu makeと違うと気がつくまでずいぶん悩んだのは秘密。
なんでsystemcのインストール時にgmakeと打つのかようやくわかった。
Cygwinでも同じテクが使えるようにgmakeを使うようにしよう。

| | Comments (4) | TrackBack (0)

SystemCの書籍 2007年5月

SystemCの書籍 2007年5月
AVM chapter 7 で、コンパイルエラーが多発しちょっと半泣き。

もともとサンプルの写経なので、エラーが出たときにどうして良いのかが分からない。
問題切り分けの為のミニマムな記述ができずに時間だけが過ぎるのでいったん放置。
AVMのサンプルだって、かなり小さいのは理解しているのですが、それでも厳しい。
TLMの本を読んで、もうちょっとしっかりAVMとTLM勉強してから再挑戦しよう。
というわけで整理。

(1)Advanced Verification Techniques: A Systemc Based Approach For Successful Tapeout (終了)
そもそもSystemCに特化した本ではない。感想はこちら

(2)Transaction Level Modeling With SystemC: TLM Concepts And Applications for Embedded Systems

(3)Systemc: from the Ground Up (終了)
邦訳は基礎から学ぶSystemC 感想はこちら

第2版でたよ。

(4)System
Design With Systemc
(終了)
邦訳はSystemCによるシステム設計。
SystemCに関わる人必読。感想はこちら

(5)SystemC Kernel Extensions for Heterogeneous System Modeling: A Framework for
Multi-MoC Modeling & Simulation
(終了)
あまりSystemCとは関係無い本。感想はこちら

(6)Advanced Verification Methodology Cookbook
予想以上に参考になります。7章で中断。

(7)よくわかる SystemCによるシステムデザイン入門 (終了)
感想はこちら


(8)C/C++によるVLSI設計―SystemCによるJPEGコーデック設計 (終了)
なかなか良い本でした。私の感想はこちら。noboshemonさんの感想はこちら

(9)Systemc: Methodologies and Applications
ただいま6章。

(10)A SystemC Primer (終了)
入手困難ですが、最初の一冊にお勧め。感想はここ

(11)SystemCを使ったハードウェア設計 (終了)
合成について記述があり参考になる。最初の一冊には向かない。感想はこちら


(12)System Cプログラミング基礎講座 (終了)
いろいろと気になる点があり、お勧めはしません。感想はここ


(13) Performance Evaluation of Parallel Packet-processing Architectures Using SystemC-based Modeling and Refinement
ぱらぱらめくっただけですが、ソースコードは全然無く1事例のような感じです。


| | Comments (0) | TrackBack (0)

今日の日記

すげー!
http://civs.stat.ucla.eduFeng_han_research/compute_3d_shape.htm

謎のスクリプト言語
http://d.hatena.ne.jp/xtalco/

こんなの発見
http://www.city5.org/letsports.html
SystemCも送ってみるか・・・

| | Comments (0) | TrackBack (0)

最近の読書

SICP:もうすぐ2.2が終わり。次は絵を出すぞ!

刀語:3冊目まで読んだ。コストパフォーマンスが悪い気がするが、やっぱり面白い。家から会社付くまでに読み切れてしまう。もうちょっとボリュームをとは言わないが、もう少し安くても良い気がする。

迷いと決断:うーん、井出氏はSONYを普通の会社にしたかったのかなぁ。僕が求めるSONYはVAIOであり、CLIEであり、TypeUですよ。まあ、底辺エンジニアがどうこう言える人ではないけどね。

JavaからRubyへ:面白かった。やっぱり社内で新しいことをするためには、こっそりでもプロトタイプくらいは作って見せれないと駄目だ。そして、そのこっそりが許される社風ってのが大事だと思う。

ウルチモ・トルッコ犯人はあなただ!:アマゾンの書評https://app.cocolog-nifty.com/t/app/weblog/postと同じ。駄目じゃないけど、ふーんって感じ。

アマゾンで洋書を買うときAmazon.comで買った方が安いことを今更発見。
特に日本で一万を超えるような本は、Amazon.comで送料払った方が安い。

これこれとか

The Google Story:思ったより面白くない。肝心なところは秘密のままにして
ある気がする・・・

いつの間にか、本棚がLispとschemeの本でどんどん埋まっていく罠。


| | Comments (0) | TrackBack (0)

2007.05.25

AVM3.0 続き

AVM3.0 続き

AVM2.0に比べると、内容が楽しく、ソフトウェアエンジニア向けに書き直されています。
今、読んでいるchapter7でもこんな記述が増えている。

The engineer might have to go through thousands or millions of transactions.
Even if the sample space is small, if the engineer is doing the work late in
the evening after the caffeine has worn off or on a Friday afternoon
before a long weekend, that engineer is quite likely to miss important markers or patterns.


Analysis portsの説明も、デザパタを使って説明してある。

Analysis ports and analysis components together are an implementation of
the observer pattern, a well‐known object‐oriented pattern. In this pattern, the
publisher provides data and the subscribers consume data.

Mentorにgood job!と言いたい。
Chapter7からと言わず、最初から読み直したくなってきた。


| | Comments (2) | TrackBack (0)

2007.05.23

パルテノン!

総本山 http://www-lab09.kuee.kyoto-u.ac.jp/parthenon/NTT/index_j.htm
wiki http://slab.cis.nagasaki-u.ac.jp/~shibata/lab3/wiki/index.php?%B4%C4%B6%AD%A4%CE%C0%DF%C4%EA

ちょ、2006年になってこんなマイナーな言語やらされるのか!しかも、火曜の午後全部パルテノンかよ!NTTの陰謀だ!Computer Organization and Design が推薦図書になっているのだから、VerilogとSFLの選択にするべきだな。

「予約言なのになぜハイライトされないの~」がヒット。

| | Comments (4) | TrackBack (0)

2007.05.22

syctemc_testsを動かそう

普通に動かすと、例によって
Error: unsupported architecture 'FreeBSD 5.4-RELEASE' と言われるので、verify.plを変更
330行目くらい。

sub get_systemc_arch
{
local( $uname_s ) = `uname -s`;
local( $uname_r ) = `uname -r`;
local( $uname_m ) = `uname -m`;
local( $arch );
local( $cxx );
local( $cxx_comp );

chop( $uname_m );
chop( $uname_s );
chop( $uname_r );
# natu ここを追加
$uname_s = "Linux";
$uname_r = "2.6";


setenv SYSTEMC_HOME /home/natu/systemc/systemc-2.2.0/ で設定したlib-linuxを見に行くと思うので、lib-linuxフォルダーを作成し、lib-freebsdの下のlibsystemc.aをシンボリックリンク。

これで試験開始!

| | Comments (1) | TrackBack (0)

FreeBSDでSystemC 2.2をコンパイル

そのままではコンパイル通らない。
今までと同じようにtarget="linux"でだましても、../configureでMakefileを作ってくれない。confiug.logは、
## ----------- ##
## confdefs.h. ##
## ----------- ##

#define PACKAGE_BUGREPORT ""
#define PACKAGE_NAME ""
#define PACKAGE_STRING ""
#define PACKAGE_TARNAME ""
#define PACKAGE_VERSION ""
#endif
#ifdef __cplusplus
extern "C" void std::exit (int) throw (); using std::exit;

configure: exit 0

こんな感じで終わっていて、0返して正常終了していそう。

FreeBSDのPortsの様子を見ていると、FreeBSDでSystemCを使っていて、なおかインストール方法を公開しようという人間は世界で数名しかいないらしい。つまり、放置しておいていつの間にか動くようになる可能性は限りなく低い。しかたがないので、googleと格闘。

配布ファイルを展開したフォルダーにあるconfigure.inを修正。linuxと同じような感じで、FreeBSDを定義。

148行目に追加


*freebsd*)
case "$CXX_COMP" in
c++ | g++)
EXTRA_CXXFLAGS="-Wall"
DEBUG_CXXFLAGS="-g"
OPT_CXXFLAGS="-O3"
TARGET_ARCH="freebsd"
CC="$CXX"
CFLAGS="$EXTRA_CXXFLAGS $OPT_CXXFLAGS"
;;
*)
AC_MSG_ERROR("sorry...compiler not supported")
;;
esac
AS=as
QT_ARCH="iX86"
;;

configure.inがあるフォルダーでautoconfを実行。僕のマシンにはautoconf259が最新だったのでこんな感じ。
./autoconf259

cd objdirでobjdirに移動。gmake debugを実行すると、aclocal-1.6、autoconf、automake-1.6、autoheaderが無いと怒られるので、適当に、シンボリックリンクでごまかす。 (ln -s /usr/local/bin/automake19 ~/bin/automake-1.9 とか)
あとは、
gmake debug
gmake install
でOK。

| | Comments (0) | TrackBack (0)

AVM30

とりあえず、ファイルを解凍してincludeパスだけ変えてAVMのサンプルをコンパ
イルしてみた。こんなエラーが!

/home/natu/study/AVM/mentor/avm30/libraries/systemc/avm/avm_analysis/
analysis_port/analysis_port.h:163: error: `sc_port_policy' has not been
declared

sc_port_policyってなんだ?またも、noboshemonさんの所より。

sc_port.hにこんな感じで宣言されていて、
enum sc_port_policy 
{ 
     SC_ONE_OR_MORE_BOUND,   // Default 
     SC_ZERO_OR_MORE_BOUND, 
     SC_ALL_BOUND  
 }; 
sc_portがこうやって宣言されているはず。
template < class IF, int N = 1, sc_port_policy P = SC_ONE_OR_MORE_BOUND>
class sc_core::sc_port< IF, N, P >

僕の使っているsc_port.h (systemc2.1,v1)と全然違うよ。


template < class IF, int N = 1>
class sc_port
: public sc_port_b < IF >

SystemcもVerupしないといけないのか・・・
某Labさんが、HDDの中にいくつものバージョンを入れている意味が分かってきたよ。


| | Comments (0) | TrackBack (0)

2007.05.20

関数型言語で高位合成を その2

関数型言語で高位合成を その2

その1の続き。

①処理のアルゴリムを数式で書く
②'アルゴリズムを関数型言語で書き下ろす。
③RTLへ変換する。

のフローをうだうだと考える。
日本語の論文があるくらいだから、同じ事考えている人は世界中にいると思う。世の中にトランジスタによる論理回路と、ラッチという状態を保持する仕組みが生まれた後なら誰でも思いつくアイデアだ。このあたりを調べてもよいのだが、もう少し自分自身でLispを上手く処理できるようになろう。アイデアが昇華するかもしれない。

頑張って進めても、Lispマシーンそのものにはならないと思う。でも、Lispマシーンも調べたい。どちらかというと細かい演算CELLが並ぶ、ASICの世界のエミュレータ的なアーキテクチャになりそう。

今のFPGAは、大規模な組み合わせ回路は苦手だ。でもAPEXとかは、LUTとP-termを併せ持つハイブリッドなFPGAもあった。こういうアーキテクチャなら、組み合わせ回路の弱点を克服できると思う。リコンフィグはこういう所を狙え!

全部が全部このルールでRTLに落とせる必要はない。アルゴリズムの記述が、C言語が自然ならC言語からの合成をすればよいし、処理に特化したソフトCPUを毎回生成するという選択肢もある。

そんなアイデアを熱く職場の人に語っていたら「問題はブロックの合成じゃないんですよ。合成した回路を既存のRTLとどうつなぐかなんです」と言われた。おっしゃるとおりです。orz

自分にもっと文章力があれば、もっとわかりやすく書けたに違いない。

今のスキルを持ったまま大学生に戻りたい・・・

| | Comments (0) | TrackBack (0)

関数型言語で高位合成を

最近schemeを勉強していて思ったこと。
「関数型言語をそのまま論理合成できたらおもしろくない?」

ASIC/FPGAの信号処理の開発は、
①処理のアルゴリムを数式で書く
②アルゴリズムをC言語に書き直す。(C言語でテストを行う)
③RTLへ変換する。

の3段階が主流です。RTLの後もいろいろあるのですが、VerilogなりVHDLまで行ってしまえば、あとは枯れた技術なので何も手を入れる必要がない。SystemCとかは②と③の間全体を受け持ち、高位合成ツールというのは②から自動的に③を作る。ざっくりいうとそんな感じ。

①から②の本質は、逐次処理の追加である。
16個のある値を足す処理を考えると、①の段階では、y = Σni (1 <= i <= 16) のような表現になり、ここに時間の概念はない。一般的なプロセッサは同時に処理ができないので、C言語でこの数式を表すと、このようになる。


int i;
int sum;
sum = 0;
for(i = 0:i < 16; i++) {
sum += n[i];
}

同時に1からNまで足せないので、順番を与えて一回ずつ足している。

②から③の本質は、並列性の追加である。ループになっているところを、パイプライン化する、もしくは依存関係の無い演算を展開して一気に処理をする。Verilogだと、

always @ (posedge clk) begin
	sum1 <= n1 + n2 + n3 + n4;
	sum2 <= n5 + n6 + n7 + n8;
	sum3 <= n9 + n10 + n11 + n12;
	sum4 <= n13 + n14 + n15 + n16;
	sum_all <= sum1 + sum2 + sum3 + sum4
end
こんな感じで記述すれば、加算器5個で、レイテンシ2clkで、1clk毎に計算結果が出せる。加算器を1個にして、16CLKかけて計算することも可能だ。このあたりは、bit幅と加算器のコストのトレードオフで選択できるようになっている。 もちろん
always @ (posedge clk) begin
	sum_all <= n1 + n2 + n3 + n4 + ・・・・  + n16;
end
と書けば、1clkで計算可能だ。RTLレベルまで落とすことで、逐次処理を取り除いて、結果的に高速化を図る。RTLレベルになれば、一度に好きなだけの演算ができる。

もう一回整理。
①→②で逐次性を追加して、②→③で逐次処理を取り除く。②の処理ってもしかして無駄?

図で書くとこんな感じ。

話を関数型言語で考えてみる。関数型言語というのは、いわいるy=f(x)のような写像を元にプログラムを組み立てる。ある入力に対して一意の出力があるような、そんなシステムだ。実際には、写像だけでは処理しにくいので、状態を表せるような仕組みも持っている。
もし、①のアルゴリズムが関数型言語で表現できるなら、ASIC/FPGA化は簡単にできる気がする。本質的に、y=f(x)というのは単なる組み合わせ回路だ。そして、状態を表すのにフリップフロップが使える。再帰関数が、末尾最適化されているなら、計算の結果を特定のフリップフロップに上書きし続ければ、そのまま計算できる。

で、僕が思いついたフローはこれ。
①処理のアルゴリムを数式で書く
②'アルゴリズムを関数型言語で書き下ろす。
③RTLへ変換する。

図で書くとこんな感じ。


いったんC言語にするより、もっと直感的にRTLへ変換できると思う。


最上の日々の方に、もっとわかりやすく書いてあります。CPUに命令を追加するのではなく、CPUに相当するものを毎回作るところが違うけど。

| | Comments (2) | TrackBack (0)

2007.05.18

AVM3.0

Verification Engineerの戯言さんから。

えぇぇぇぇ。まだ2.0途中なのに・・。
http://www.mentor.com/products/fv/_3b715c/index.cfm

ざっとみると、11章がSystemCに対応したこと(2.0はSystemVerilogのみっぽい)と、AVM Encyclopediaが地味にうれしい。Randomizationで一章とってあるのも早く読みたいな。

ちょうど7章始まったところだし、7章から3.0にするか。

| | Comments (0) | TrackBack (0)

おばけかぞくのいちにち

ここで紹介されていたので買いました。

娘は2歳なので、まだまだ2つの家族がそれぞれ生活していることは理解できていない様子。ただただ、オバケの生活に興味があるようで大ヒット。

ちなみにそらまめくんも大好きです。

意外にもThe little schmerの象さんよりも、SICPの方が興味があるようす。表紙の人を、「じぃちゃん、じぃちゃん」と呼んでいる。

blogなつたんは、子育てとLispを愛する主婦層というニッチなとところを狙って記事を書いています。

| | Comments (0) | TrackBack (0)

今日の勉強

SCIPの勉強の傍らC++でsmorking_xstのコーディングを進める。AVMのソースを見ていて、はっと気がつく。
Schemeの影響からか、自分の書くC++のソースコードに参照渡しって全然でてこないな。関数呼び出しで、引数の値が変わるってのが気持ち悪い。

夜寝っ転がって、C++プログラミングの処方箋を見ていたら、参照渡しにしないとコピーコンストラクタが呼ばれる事を忘れるな!みたいなことが書いてあった。なるほど、参照渡しにはそういうメリットもあったんだ。忘れていた。constつけて、参照渡しにすればよいのかな。

| | Comments (2) | TrackBack (0)

分析分析

AVM 第7章へ。

Mentorの中の人もチェックする元気がなくなってきたのか、この辺りからソースコードの質がぶれてきている。

#include "random_stimulus.h"
#include "word_driver.h"
#include "p2s_dut.h"
#include "bit_monitor.h"
#include "in_order_comparator.h"
#include "controller.h"

in_order_comparator.hだけ全然違うところにあるんだから、改行入れて上なり、下の方に持って行って欲しかった。今まで、"avm.h"とかは、ちゃんと分かるようにincludeしてあったのに。

SC_INCLUDE_DYNAMIC_PROCESSES not definedでエラー。
例によってここで解決。分割コンパイルしたときにどうなるかよく分からないので、コンパイルオプション対応。
OTHER = -Wall -DSC_INCLUDE_DYNAMIC_PROCESSES
とりあえず、最初の例題動いた。

だんだん、何と何をつないでいるのかよく分からなくなってきた。早くスコアボードに行こう。

AVM打ち込んでいて思ったんだけど、SC_MODULEマクロ廃止したほうがよくね?どうみても意味がない。SC_HAS_PROCESSもどうかと思うが。

AVM日本語版持って行った同僚が「AVM動きました!」って言ってきた。さすが○○○○。ていうか動かないとおかしいけどね。僕は、FreeBSDとgccで進めるというイバラの道を選んだのでゆっくり進めよう。例によって、Mentorまんせーですが、微妙に関係者なのでさっ引いて読んでください。

| | Comments (0) | TrackBack (0)

2007.05.15

今日の日記

タイミング制約をGUIで設定したら、100GHzになっていてparが泣きを入れてきた。僕が悪かった。

日本語AVMを会社の同僚に持って行かれた。それは僕が個人的にもらってきた物で、会社としてどこかにもらっているはず。なんとか、6章突破。7章から英語なのか・・・。

SICPは一章おしまい。2章に入るぜ。

| | Comments (2) | TrackBack (0)

ウィキペ

ここから。
http://www.heiwaboke.com/2007/05/wikipedia.html
wikiといえば、MorphyOneが果たした役割は大きいと信じている今日この頃。

ここにとよごろをコピーしまくったら、次の日には時系列で整理され、太字/色分けが付いていたときの衝撃は今も忘れない。

僕はwikipediaは省略しない派。あえて省略するなら、ウィキペに一票。

| | Comments (0) | TrackBack (0)

2007.05.14

喫煙ダメダメ

GUIアプリは某チャットの人たちにより、smoking_xstとなりました。xstに関わる、非常にニッチな所を狙うアプリになる予定。CUIでの動作まで後一歩。ロジックの確認の後、Qt4からパラメータを設定できるようにしよう。

C++でプログラミングをしてみたが、書き捨てのプログラミングの書きにくいこと。コンパイル通るまでが結構大変。いったんコンパイル通ってテスト環境ができると、インクリメンタルなコード修正は楽かもしれない。最初の設計が大事。だけど、ちゃんと設計するためには、なにかしらコードを書いてみないと問題点がわからない。そして、なにかしらのコードを書くのにはそれなりの設計が必要というジレンマ。Lispのとりあえず、できるところから書いてボトムアップでつなげていくのとは対照的だ。大規模Lispなコードは書いたこと無いけど、多分普通の人間だと、Lispプログラムはどこかで破綻すると思う。自由度が高すぎる。

どっちも、長所短所あるんだけど、うだうだとプログラミングするにはLispというか、Perlとか軽い言語の方が良いと思う。

| | Comments (0) | TrackBack (0)

びっくりするほどQt4

Qt4のインストール。Hello Qt!の動作を確認。

Windowsのインストーラがある→バイナリファイルがインストールされ、環境変数(レジストリ)が勝手に設定されるという思いこみではまる。

Hint
・Installのドキュメントを読んでその通りにする。
 インストーラ付きだけど、ソースファイルしかインストールされない。
 コンパイルする必要有り。
 
・Cygwinでqt3とかインストールしていると環境変数がCygwinの下を探すので
 おかしくなる。set | grep Qで、QTっぽい環境変数を確認する。
 
・作業はDOS窓で。
 Cygwinプロンプトだと、g++がCygwinの物になるので上手く行かない。

| | Comments (0) | TrackBack (0)

2007.05.10

今日の勉強

またもシンボルが見つからない。ライブラリの海を探すのだ!

SICP
1.3まで来た。
Higher-Orderな例を見て感動する。C++のテンプレートなんていらないじゃん。
練習問題が面倒だが、そこはdon't rush upだ。
The Little Schemerより、例題が実践的なのが良い。

Systemc: Methodologies and Applications
4章終了。ASMモデルという記法を使って、SystemCカーネルの動きを教えてくれ
るのだが、かえってわかりにくい感じ。

Qt4
AirHでのダウンロードを繰り返しているうちに、AmazonからCD付きの書籍が届い
た。結果オーライ。

ESLの本
1章を読んだ。半分以上愚痴じゃね?

| | Comments (0) | TrackBack (0)

2007.05.08

ESL DESIGN AND VERIFICATION

いつカートに入れたのか分かりませんが、アマゾンから送られてきました。
ぼちぼち読んでみたいが、持ち歩くには重い。
Verification Engineerの戯言さんのblogも見つけた。今後、要チェック。SCE-MIが2.0になっていたのは、ここで知りました。

Hardware Verification with C++: A Practitioner's Approachも持っているんだが、流し読みしてなんか違うと思って放置している。AVMの次くらいに読んでみるか。こっちも重いんだよなぁ。

| | Comments (0) | TrackBack (0)

今日の日記

SCVでこんなエラー
../mem_sc/mem_unidirection_stimulus.cpp:13: error: default argument
given for parameter 2 of `void mem_unidirection_stimulus::generate_
stimulus(mem_request_constraint_base&, int)'
../mem_sc/mem_unidirection_stimulus.h:18: error: after previous
specification in `void mem_unidirection_stimulus::generate_stimulus(mem_
request_constraint_base&, int)'
../mem_sc/mem_unidirection_stimulus.cpp:24: error: default argument
given for parameter 1 of `void mem_unidirection_stimulus::generate_
stimulus(int)'
../mem_sc/mem_unidirection_stimulus.h:19: error: after previous
specification in `void mem_unidirection_stimulus::generate_stimulus(int)
'
関数の実体にデフォルト引数を書いちゃ駄目だった。
void mem_unidirection_stimulus::generate_stimulus(int max_count)


AirHで一晩かけたQtのダウンロードがファイルが壊れていて失敗。
こんな日記を発見。
みな考えることは同じ。


受刑者にプログラミング言語
http://d.hatena.ne.jp/JavaBlack/20070501
ネタだと思ったら違ったみたい。もとのはてなの質問を見ていても、質問者がよく分かっていない様子。普通に情報処理検定の勉強すればよくね?

| | Comments (0) | TrackBack (0)

2007.05.07

いろいろと整理

やりたいことをちょっと整理してみた。

・Lispプログラミング
 the Little schemer からSICPの流れは今のところ成功。SICPの後、High-Order Perlか、Practical Common Lispへ。一日1時間程度、焦らず、休まず。

・GUI
 Qtを一晩かけてダウンロードしよう。SystemCの勉強から得たことは、良いクラスライブラリを見ることはC++の勉強になる。SystemC事態は??だが、AVMはとても勉強になる。Qtを使ってC++のライブラリの勉強をしてみよう。
 → これは、一つアプリができたら一段落。

・SystemC
 予想以上に手強いAVMを進めよう。終わったら手を動かすのは止めて、残っている本を読もう。これも、1週間に数時間程度。

・UNIXシステムコールの勉強
 AVMが終わったあたりで、いくつか買ってあるUNIXプログラミングの本を勉強しよう。

・MIPS
 週末などまとまった時間で進めよう。まずは、環境の立ち上げとredboot。


・ゲームのunistall
レッツノートのHDDの容量が減ってきたので、Ice wind dale1,2と、シヴィライゼーションのコレクションをアンインストール。やる時間がないからしょうがないな。ゲームはもっぱらdungeon crawlのみ。


ちょっとメモ
Verilogのパーサーは、第一ステップでプリプロセッサを処理しているみたい。Verilog プリプロセッサの実装ならWebで簡単に見つかった。前回、限界を感じたのはVerilogの中に根付いている行指向の部分。プリプロセッサを通すことで、そういう部分がずいぶん減ると思う。「合成が通るソースの解析」に絞れば、難易度は激減すると思う。SICPとか、High-Order Perlを読むことで、yaccとかlexに頼らない構文解析ができると思う。

| | Comments (0) | TrackBack (0)

2007.05.06

GWの成果

派手な成果は特になし。orz

Retsノート上のVirtual PC/qemuでFreeBSD環境を構築しようとしたが、ネットワークの設定がうまくいかなかったり、使いにくかったりで断念。代わりにgaucheが、Cygwinでinstallできたのが収穫。

SICP始めました。最初の難関っぽい練習問題1.11を1時間かけて解いた。The little schemerで勉強していなかったら、このあたりで挫折していたと思う。infoでSICPを読めるようにした。sicp infoでググれ。

さがしていたVerilogのParserをCPANで見つけた。ちょっと参考になるかと思ったけど、CとPerlとflexの合わせ技なので手を出せそうにない。cygwinだと普通にインストールできるのに、FreeBSDだと途中でエラーも出さずに止まるのはなぜだろう。

GUIは実際にやろうとすると上手く行かなかった。C#、VBはさすがにAirHではダウンロードできず断念。WideStudioは、ちょっと起動したけどどこからどうして良いのかがわからない。本を買ってこないと駄目だ。さらにFreeBSDだと上手くインストールができなかった。qtは、持っている本がVer3で、今は4になっている。4のダウンロードがこれまた、完了せず保留中。Gtkに至ってはWindows環境では、まだまだ問題がありそう。

さて困った。複数のプラットフォームでそれっぽく動かすには、tck/tkの多言語bindが良い気がしてきた。Javaは、FreeBSDは結構おいてけぼりだからなぁ。

MIPSの方もアマゾンで本買っただけ。

自分でも何をしたいのかよくわからない。

| | Comments (0) | TrackBack (0)

2007.05.03

FreeBSDで、SystemcのSCVをコンパイルする

Portsでは上手く動かなかった(同じ所でエラー)ので、自力でコンパイルしてみました。
INSTALLドキュメントは読んでいる前提で、手順を整理

(1)configureファイルの編集

../configure 3652行目に追加
target_os="linux-gnu"

ついでにここも修正しておく。
//#define _USE_HASH_MAP

objdirから
../configure --with-systemc=/usr/home/natu/systemc/systemc-2.1.v1 --disable-compiler-check
を実行。systemcのPATHは自分の環境に合わせる。


(2)../configureが通ったら
tgzを展開したフォルダーにあるscriptsの中のcopyFiles.shと、CopyExamples.shの一行目 #!/bin/sh -h を#!/bin/sh に変更(-h オプションを取る)

objdirのscriptsじゃないので注意する。

最後にscv_init_seed.cppの先頭を修正

#ifdef __linux__
#include < sys/time.h>
#else
#include < time.h>
#endif

#include < sys/time.h> ←追加

あとは、
gmake
gmake install
でOK。

| | Comments (0) | TrackBack (0)

2007.05.02

SDカードと風船

娘の写真を撮りすぎで、レッツノートのHDD容量が足りなくなってきた。あとは、持ち運べるscheme環境が欲しくて、近所の電気屋さんにSDカードを買いに行った。ここは、娘と行くと風船をくれる非常に良心的な電気屋さんで、電池とかどうでも良い物はできるだけここで買うようにしている。自転車に娘を乗せ、3万円握りしめて、電気屋でレッツらごー!

すげー!SDカード2Gで6000円ですよ!512Mでも2万以上したのに、こんなに安いのか!

その場でSDカードを買って、風船もゲットして、2人ともニコニコで帰宅。
モバ友達に自慢したら、「6000円は高いよ」と冷静な突っ込み。
アマゾンで調べてみたら、半額!。

自慢しなければ良かった。orz。

| | Comments (2) | TrackBack (0)

今日のAVM

SCV(SystemC Verification. Standard)がFreeBSDでコンパイルできない。

ドキュメント通りに../configureを行うと、FreeBSDなんてサポートしてないぜ hahahaってメッセージがでる。しょうがないので、今までと同様にlinuxとだまして先に進めるも、gcc3.4なんてサポートしないよ、常識で考えてとか、strstreamが無いぜとか、shに-h なんてオプション無いよとか、いっぱい問題がある。

Configureだけじゃなくて、Makefileもちょこちょこ書き換えることでgccによるコンパイルが走ったが、それでもエラーが出る。Cソースにパッチを当てないといけないレベルなので、かなり躊躇する。

../../../src/scv/scv_init_seed.cpp: In function `long long unsigned int _scv_default_global_init_seed(long unsigned int)':

../../../src/scv/scv_init_seed.cpp:77: error: aggregate `timeval tp' has incomplete type and cannot be defined

../../../src/scv/scv_init_seed.cpp:78: error: aggregate `timezone dummy1' has incomplete type and cannot be defined

../../../src/scv/scv_init_seed.cpp:79: error: `gettimeofday' undeclared (first use this function)

../../../src/scv/scv_init_seed.cpp:79: error: (Each undeclared identifier is reorted only once for each function it appears in.)

gmake[3]: *** [scv_init_seed.o] ・ィ・鬘シ 1

gmake[2]: *** [all-recursive] ・ィ・鬘シ 1

エラーはこんな感じで、型宣言が合ってないんだと思う。

googleで探してみたら、普通にportsになっていた。使わさせていただきます。


| | Comments (0) | TrackBack (0)

Cyclone III 開発キット


Alteraからこんなキットが発売されている。
http://www.altera.co.jp/products/devkits/altera/kit-cyc3-starter.html

USBブラスターが欲しいので買おうかと思ったが、こちらにさらなる情報が。
http://www.altera.co.jp/products/devices/cyclone3/getting-started/cy3-getting-started.html
下の方に「Nios II 開発キット Cyclone III エディション」の文字が!

今までのNios開発KITの流れから行くと、Cyclone3が一回り大きくなって、LCD、CFコネクタ、シリアルポート、LANポートくらいが普通に乗りそうだ。これの発表まで待とう。

| | Comments (0) | TrackBack (0)

2007.05.01

The Seasoned Schemer

The Seasoned Schemer読みました。

最後に動いているのかいないのかよくわからないScheme処理系を作って終了。Lispを使ってLisp処理系を作るのは今後何回も出てきそうだから放置。

The Reasoned Schemerを読んでみたが、さっぱり意味がわからない。Schemeで少し動くところまでいくまでが、大変そうなので放置。

そして、SICPへ入ろう。

| | Comments (0) | TrackBack (0)

FPGAでMIPS

電子系自営業者の開発日誌さんFPGAの部屋さんから。

そうか、ARM基板でがんばって動かさなくても、当面はソフトコアを使うという選択肢があるのか。ICEとかロジアナが無い趣味の組み込みマイコンなら、シミュレーション可能なソフトコアというのもおもしろい。NiosとMicroBlazeがベンダー依存が強いので敬遠していたが、OpenCoreにもいくつかプロセッサがある。OpenSparcはでかすぎるし、LeonとかPlasmaはVHDLなので、Verilogで使いやすいのを探してみる。

灯台もと暗し!
YACCがあるではないか。

MIPSですよ。MIPS。仕事でMISPと絡んだことは無いのですが、モバイルギアがNECのMIPS系列のプロセッサだったはず。何よりも、社会人2年目で必死に勉強したパタヘネが、MIPSアーキテクチャ。Veritakのwebを見る限りシミュレータも、クロスコンパイル環境もありそうだし。ARMで1からやるよりは、全然早いはず。(必死で、フリーのARM7 emulatorを探していたのは秘密)

| | Comments (2) | TrackBack (0)

Hackerのたのしみ

これも早く読んでしまおう。

ビットの並び替えはハードだと簡単だし、数値計算は仕事で必要になってから勉強しようと、あっさり流し読みする。

P255のグレイコードを使った位置センサーを見てびっくり。これを考えた人は天才だ。現実問題を、うまく数学モデルを使って解いている。僕にはこんな発想は一生できないと思う。

浮動小数点も遠い世界だから流し読み。ハードウェアでの実装については、ヘネパタに詳しかったと思う。ハードウェアによる割り算の実装もその本を読めば詳しく書いてある。

あと、ヒルベルト曲線か。GUI環境ををセットアップしてから、挑戦してみよう。Lispで書いてみるのもおもしろい。

RTLベースの設計で、再帰というのは非常に相性が悪い。割り算とならんで、RTLベースの天敵だと思う。以前、仕事でフラクタルの描画エンジンをVHDLで実装したときは、結局スタックメモリを用意して、一回処理するごとにパラメータをスタックに積む、抜き出すを繰り返した。それをC言語でのスタックトレースと比較しながらデバッグをした。再帰というのは、プロセッサでするものだと感じました。そして、CソースとVHDLの動きを比べていくうちに、C言語設計の限界をかいま見ました。C言語によるハード設計も、再帰なら自動的に専用スタックを生成、文字列/リスト処理なら自動的に内部SRAMに領域を確保、くらいしてくれるとパラダイムシフトが起きると思う。

| | Comments (0) | TrackBack (0)

« April 2007 | Main | June 2007 »