ほげめも(August 9 1998)

Access counter:

Sunday, August 9 1998

Sun Aug 9 00:01:14 JST 1998

うへ。日付がかわった。
ついでに新しい週に突入してしまいましたな。

Sun Aug 9 00:50:15 JST 1998

うへ
チップつくるーぞー

というわけであることないことかたっぱしから ここにめもしていくかと思ったのだが、 じつは守秘義務契約というのがあってかけないことに気づいた。 あう。

Sun Aug 9 00:59:41 JST 1998

それにしても Avant! が 24bpp の X で動かないというのはへぼすぎ。 おかげで仕事しながらテレビが見れないじゃないか(ぉ。 ていうか、8bpp の Accelerated X でも謎のエラーをだして動かんので、 しかたないから XFree86 を :1 にしてそっちで仕事している。 ほんとひどい。

Sun Aug 9 02:35:08 JST 1998

Avant! の GUI は腐りすぎ。 fvwm で仮想スクリーンを移動すると勝手に妙なところに動くし、 しかもそれがログにどんどん記録されていくし、 はっきりいってやってられん。

8bpp でしか動かなくてしかも private color map をつかいやがるので、 いっしょの画面にもじらとか置きたくない。 kterm に書いてある文字すら、まっくろになってみえなくなってしまうぞ。

しかしよくこんなので苦情がこないんだな。 Sun の CDE とかでは、まともに使えるんだろうか。 とてもそうは思えないんだけど。 ともあれこれじゃとてもやってられんので、 window manager をかえるかねえ。

Sun Aug 9 05:34:27 JST 1998

Accelerated-X や XFree86 や twm や fvwm でトラブルおこしまくりの Avant! に業を煮やしたあたしは、 そこにころがってる Ultra2 の CDE をいじって衝撃をうけた。

くそ、Sun のくせに 24bpp で 1280x1024 とはなまいきにもほどがある。 Display Postscirpt とやらで日本語フォントもやたらきれいだ。 Netscape とかも見栄えがぜんぜんちがう。日本語入力もなんも問題ないし。 ほんのちょっと前までは 8bpp だ 1152x900 だとばかにしてたのになー。くそー。 はよあたしにも Sun くれー(ぉ。

IRIX とか Solaris とかを見てると、 日本語に関して Linux や FreeBSD の X が不便に思えてしょうがなくなってくる。 これじゃ Windows ユーザにばかにされてもしょうがない気がするし。 なんとかならんもんなのかなあ。Freetype に期待か?

さて、問題の Avant! なプログラムは、 ディスプレイが 24bpp のくせに何事もなくさくさくと動作した。納得いかん…。 X の画面から console の文字が浮いてるところをみると、 こいつは 24bpp に加えて 8bpp のオーバレイができるということらしい。 結局 Linux の X なんかで動かしてる人はだれもいないってことなのね…。

ちなみに CDE のログイン画面をだすには、root で
# /etc/init.d/dtlogin start
でやはりいいらしい。 設定がぶっこわれてるのか、 これやってもなにもおこらん Solaris 2.6 マシンがそこにあって、 おかげでえらくてこずってしまった。 起動時の CDE ログイン画面をだすかどうかの設定は /usr/dt/bin/dtconfig というコマンドがあるので、 そちらを使うのが正しいようだ。

Sun Aug 9 06:14:06 JST 1998

共通デスクトップ環境に恋焦がれるあまりついに出現した、かなりまぬけな画面。

これは XFree86 の 8bpp, 1152x864 である。 へなちょこまるもじフォントがいい味をだしている…ていうか空しい。 でもなかなか使いやすいことがわかった。 dtlogin が動いてる Ultra2 と同じはぶに 100BASE-TX でつながってたからかな。 これで Avant! もぜんぜんこわくないぜ(ほんとか。

Freetype X サーバを使うともっといかす画面になるかも? hamm にバージョンアップをしたら試してみよう。

Sun Aug 9 08:15:31 JST 1998

CDE いじりまくり。 なかなかいいかんじなのだが、 どうしても ATOK8 や Wnn6 を使っての日本語入力をさせることができない。

いろいろ調べてみると、 どうやらフォントの問題でらしいことがわかってきた。 これらの XIM の初期設定は ~/.dtprofile から呼びだされる /usr/openwin/lib/locale/$LANG/imsscript/ の下にあるスクリプトによって行われているのだが、 それがうまくいってないようだ。 ただ実行したら代替 font がうんぬんというエラーをはきっぱなしになってしまった。

そこで X のフォントパスに Solaris 2.6 マシンのフォントサーバを加えたのちに実行すると、 いちおう起動するようにはなるのだが、 他のダイアログボックスなどの日本語がまったく表示されなくなってしまうという 現象がおきてしまう。 Display Postscript が関係あるような気がする。 Freetype X server で好きな大きさのフォントがとりだせるようになれば解決するかな?

それにしても、 妙な環境でいろいろわかめなことをやっているおかげで、 あちこちに core を吐きまくりである。 ちゃんとそうじしろよ。

Sun Aug 9 10:09:05 JST 1998

となりにおいてある あたしの dual Pentium Pro 150MHz マシンが本格的に壊れたくさい。 電源をいれてしばらくすると、 Segmentation fault やらなんやらが必ずおきて panic してしまう。 リセットすると beep が断続的になって画面にはなにもでてこない。 いったいどこが壊れてしまったんだ? メモリかな?

Sun Aug 9 12:17:56 JST 1998

そのとなりにおいてあるマシンはすでに hamm 環境なんで、 Freetype X server でいろいろ試してみました。 わりといいところまでいきました。

これがないと ATOK8 や Wnn6 が動かんという問題のフォントは、 -dt-intarface user-... とかいうような -dt-で始まる名前のフォントで、 こいつをなんとかして用意してやればいいらしいということがわかった。

で、文字コードが iso8859 の場合は、 これらの実体は.pcfとかの形式のふつうの X のフォントなので、 Solaris 2.6 マシンのフォントサーバに接続すれば簡単に用意することができる。 しかし、ただ単純にフォントサーバを利用するだけでは、 前述のように日本語がでなくなってしまう。 これはフォントサーバからは jisx0208 とかのフォントが得られないためである。 Solaris 2.6 マシンで xlsfonts してみると、 次のようなに 14dot から 26dot のフォントが用意されていることがわかった。

これらを利用可能な日本語フォントでおきかえればよさそうである。 具体的には、以上のフォント名で Freetype のフォントで置きかえるような fonts.alias ファイルを書いて、 font path の通っている適当なところに追加した。

結果としてこういう具合にちゃんと日本語がでるようになり、 非常に見た目がかっこよくなった。 また、もじらの日本語も綺麗に表示され、 さらには Wnn6 とかで自由に入力できるようになった。 まさに、いままで高嶺の花であった 標準デスクトップ環境(の気分)を満喫、大満足といったところだろう。 うひひ。

ちなみに Debian の Freetype つき XFree86 3.3.2 を 使用しており、8bpp 1024x768 である。 フォントのデザインはちょっとへぼめだがまあいいか。 試行錯誤の過程で出現したこういう画面もある。
まるもじ ATOK8 がなんともいえずいい味をだしてますな(ほんとか)。

Sun Aug 9 13:10:11 JST 1998

気がつくともうこんな時間… ていうかふかいりしすぎー。

さっきのこわれたかという dual Pentium Pro 150MHz ましんは、 裏ふたをあけてよくよくみると、 スペーサが SIMM の足がたまに(謎)接触しているらしいということがわかりました(ぉ。 なんでそんなことになってるのかって? それは説明が長くなるので略。

はじめから動かないんでなくて、 電源投入後しばらくしてから動かなくなったりとか、 これが原因とははっきりと特定できないんだけど、 いまはなんか妙に安定してるんで、たぶんこいつでせう。 快適 CDE 計画も実現したしな。

これのおかげで fsck がいったい何度走ったことか。 その他にも、いろいろ奇妙な現象がおこりまくりました。 テキストファイルを編集して HDD に書きこむたびに、 おもしろおかしく改竄されていたりとか。 こういう経験は一度だけで十分だな。まったく。 しかし前にもこんなことではまってた人が近くにいた気がするぞー。

Sun Aug 9 16:07:13 JST 1998

mame の 0.33 rc1.1 とやらを make してみたが、 まえとほとんどかわってなくて遊べないのも多い。 くそう。

Sun Aug 9 16:55:30 JST 1998

Solaris で emacs 20.2 を make している。 dynamic load とかいう機能と、 Wnn6 を使えるようにするパッチをあてるが、 あとからあてたほうがいくつか reject されるので、 その部分は手であてる必要がある。 しかし完全に重なってるわけではないのであてるのはやさしい。 実際でたのは src/Makefile.in.rej だけであった。 configure は 19.34 を make したときにひきついだもので なにやらいいかげんだが次のとおりである。

#!/bin/sh
CFLAGS=-O
#LDFLAGS=-R/opt/JSK/lib
export CFLAGS LDFLAGS
./configure sparc-sun-solaris2.5.1 \
	--prefix=/opt/JSK/emacs-20.2 \
	--libexecdir=/opt/JSK/lib \
	--datadir=/opt/JSK/lib \
	--sharedstatedir=/opt/JSK/lib \
	--with-gcc=no \
	--x-includes=/opt/JSK/X11R6/include \
	--x-libraries=/opt/JSK/X11R6/lib \
	--with-x \
	--with-x-toolkit=yes \
	--with-pop \
	--enable-terminal-face \
	--enable-mcpath \
	--with-wnn6 \
	--with-wnn-includes=/opt/src/Solaris/emacs-20.2/Wnn6/include/wnn \
	--with-wnn-libraries=/opt/src/Solaris/emacs-20.2/Wnn6/lib \
	--with-sj3 \
	--with-canna \
	--with-canna-includes=/opt/JSK/canna/include \
	--with-canna-libraries=/opt/JSK/lib \
Wnn6 ライブラリとかは、OMRON の ftp サイトから拾ってくる必要がある。 とりあえず ./Wnn6 というディレクトリに展開した。

ためになるページ:

Sun Aug 9 17:12:39 JST 1998

むむ? Canna のところでエラーがでた。 --with-canna とかはいらないのかな。 それともインストールしてある Canna のバージョンが古いとかだろうか。 canna 抜きでもっぺんやってみる。

Sun Aug 9 17:41:12 JST 1998

コンパイル成功。インストールも成功。 Canna はなし。Wnn6 での日本語入力もうまくいった。 でもライセンスがたらんとかおこられまくった。 SKK がない。標準でついてくるんでなかったっけ?

Sun Aug 9 18:06:51 JST 1998

こんどは SKK 9.6 を make してインストール。 これってすげーめんどくさい。2 度目だけどめんどくさい。 configure の内容は、

./configure --prefix=/opt/JSK --bindir=/opt/JSK/bin --sbindir=/opt/JSK/bin --libexecdir=/opt/JSK/bin --datadir=/opt/JSK/lib --infodir=/opt/JSK/info --mandir=/opt/JSK/man --with-emacs=emacs
とかやった。ここまでしつこく指定した上に、 各サブディレクトリのMakefilemuleとかかれているところを emacs とかきかえた。

Sun Aug 9 18:10:06 JST 1998

うまくいったように見えるのだが、こんどはなぜか日本語がでてこない。 妙なげろげろ欧文が表示されるだけだ。 ありゃ? なんかつくりかたまちがえたか?

Sun Aug 9 18:40:12 JST 1998

ここ をよんでいると、emacs 20.2 に対しては、 どうやら emacs といっしょに配布されている leim というものを同時にインストールするのがまっとうな やりかたらしい。 97 種類の input method が選べるようになるんだってさ。

というわけではくぶつかんから leim-20.2.tar.gz をげっと。

Sun Aug 9 18:45:47 JST 1998

leim-20.2.tar.gz は、emacs-20.2 のディレクトリの下に leim/ というディレクトリをつくってしまった。 単に emacs 20.2 で configure して make install すれば おっけーということだったらしい。 はじめからやっておけばよかった。

というわけで、すでに make install まで やってしまったディレクトリに展開して さっきの configure をやりなおして、また make とした。 ちゃんとうまくいっているみたいだ。

Sun Aug 9 18:59:06 JST 1998

あれ、うまくインストールできたみたいだけど 状況はさっきからぜんぜんかわらん。 ぜんぜん別の問題だったということか。

いったいなにがわるいんだー

Sun Aug 9 19:05:22 JST 1998

SKK の開発サイトに、 skk10.43.tar.gz なんてものがあった。 うまく動いている Debian の package でも、10.39 を使っていた。 よーするに 9.6 じゃ古いということか。

Sun Aug 9 19:09:16 JST 1998

ダウンロードして中をあけてみたら、たくさんの.elと ひとつの Makefileしかなかった。 いやけのさすようなconfigureもない。 というわけで Makefileの中をちょちょいとかきかえて make installであっというまにインストールできてしまった。 簡単。

んで試してみるとちゃんと動いた。 ステータス行の「かな」の表示が左端から真中付近に移っていた。 ていうか、minor mode を表すあのかっこのなかに、SKK とかかなとかでている。 これは Debian の emacs も同じだったな。

うーむ、めでたい。 それにしてもえらく苦労したなあ。

Sun Aug 9 20:35:05 JST 1998

ねるねるねるぞ。
ぐぐう


Monday, August 10 1998

Mon Aug 10 08:51:37 JST 1998

おきたた
ねすぎや

Mon Aug 10 08:57:36 JST 1998

じつはまたこわい夢をみた。 このまえの全能者の夢みたく ぶっとびまくった内容ではなかったけど。 交通事故には気をつけよう。

FreeBSD(98) 2.2.7R-Rev01 がでたというアナウンスが流れてるな。 また CD-ROM をつくるかね。

Mon Aug 10 10:11:14 JST 1998

グローバル電子に返事のメールを書く。 いいかげん家にかえってふろはいろう。

ほげめもって、 もじら 3 で Reload すると必ず文字コード判定に失敗するな。 なんか対策を講じるか。どうすればいいんだっけ?

Mon Aug 10 16:00:24 JST 1998

うちかえってふろはいってきた。 ついでにふぁみまいってごはんをかってきた。 うーん、水よーかんたべたいよー。

稼働中の X の font path を調べる方法を教えてもらった。 xset q で見ることができるということを聞いて驚愕した。 というのは、その昔 font path を調べる方法を求めて xset のマニュアルをちゃんと読んだことがあったのだが、 結局見つけることができなかったからであった。

なにー、とか思って改めてマニュアルを読むと、

q     The  q option gives you information on the current
      settings.
と書いてあった…。 そんなんわかるかー。

Mon Aug 10 16:10:08 JST 1998

CDE on XFree86 はまたかなりよくなったぞ。 じつは Solaris 2.6 で動いている fontserver の catalogue には日本語フォントのパスがはいってなくて、 -dt-*-jisx0208-* とかのフォントが使えないというだけだったのだ。 /usr/openwin/lib/X11/fontserver.cfgの catalogue の最後のほうに /usr/openwin/lib/locale/ja/X11/fonts/75dpi,/usr/openwin/lib/locale/ja/X11/fonts/TTbitmapsを加えればよい。

CDE on openwin で xset q してみると、 このほかにも/usr/openwin/lib/local/ja/X11/fonts/TT という Truetype font がはいってるパスが font path に加っているんだけど、 これを catalogue につけたらエラーがでて起動しなかった。 Truetype 関係は font server ではだめみたい。

というわけで、 ふつーの X でも外見はまったく Sun の CDE と同じにできることがわかり、 きのう Freetype だなんだとおおさわぎしていたのは結局徒労だったことになった。 Display Postscript もぜんぜん関係なし。うひー。

Mon Aug 10 19:42:41 JST 1998

ほげー
ちとねた。
みんなごはんたべにいっちゃった。あたしもかってきたまずいぱんでもたべるか…

イメージ・ビューアってので Postscript ファイルを読もうとおもったら、 こういうエラーがでてきた。これが Display Postscirpt というやつなのか?

Mon Aug 10 23:20:10 JST 1998

Solaris ましんにはもじら 3 しかインストールされてなかったので、 せっかくだからもじら 4 もインストールしよう。 てきとーにそこらの FTP サイトを漁っていると、 最新の日本語版 Communicator は communicator-v404-ja-export.sparc-sun-solaris2.5.1.tar.gz であるということがわかったが、 これを使うのに必要な英語版 Communicator 4.04 である communicator-v404-export.sparc-sun-solaris2.5.1.tar.gz がどこにもみあたらない。 英語版は 4.05 以外ぜんぶ消されてしまっていたのであった。

そういやこのまえ自宅の Linux にもじらインストールしようとしたときも、 似たようなことがあったなー。 あんときは Debian に 4.05 の日本語インストーラパッケージがなかったから、 4.04 を探しまわっていたんだったかな。 そうか、そもそも 4.05 の日本語版はまだでてないから Debian にもなかったというだけの話だったのか。 しかしなんで Netscape は 4.05 日本語版をだす前に 4.04 を消しちまうのかね。

ともかく世界中の FTP サイト探せばどっかにはあるだろうと思って、 FAST FTP Serach v4.0 でてきとーに 検索かけてみたところ、 ftp://ftp.nsu.ru/.d1/ftp-de.netscape.com/pub/communicator/4.04/shipping/english/unix/sunos551/base_install/communicator-v404-export.sparc-sun-solaris2.5.1.tar.gz というところにあることがわかった。 うひょ。 ロシアの人はものもちがいいねえ。 20 分くらいかけてダウンロードしたぜ(ぉ

おとなしく英語版 4.05 にしろって? いややはり日本人は日本語でしょう。 そうでもなけりゃこんなに苦労して CDE 使ってないぜー。 いひひ。


Tuesday, August 11 1998

Tue Aug 11 00:32:32 JST 1998

「端末エミュレータ」は EUC しか表示できないみたい。 なので、LESSCHARSET=japanese-ujis としておく。 eucだと EUC のファイルしか読めんってさ。

Tue Aug 11 01:36:01 JST 1998

Solaris の日本語もじら 4 は、 16dot で fixed なフォントばっかり使ってすげー見苦しいので、 Debian の netscape-ja パッケージのリソースを参考にして ごりごり書きかえていた。 とりあえずこんな具合

% xrdb -merge .Netscape-defaults
とする。

Tue Aug 11 04:46:45 JST 1998

なんか VDEC のライセンスサーバに ping が通らない。 これじゃなんもできんぞー。 しょうがないから寝るかのう。

Tue Aug 11 15:12:01 JST 1998

うむはー
おきたん

Tue Aug 11 15:32:27 JST 1998

はう
なんか夢を見た気がしたのだが忘れた。

これからあきばにおでかけらしい。 なんかおもちゃでも買ってくるかな。

Tue Aug 11 20:57:47 JST 1998

うは。もどった。

Internet Watchによると、 Sun が開発者向け Solaris をただで配りはじめたとのことだ。 これってもちろん Solaris for x86 だよねえ。 SPARCstation もってて Solaris もってない人っているのかな。

ただし、メディア代と送料を払うのにカードが必要。 あうう。

Tue Aug 11 23:05:00 JST 1998

いまはなぜか OpenWindows デスクトップ(olwm)を使っている。 CDE ってなんかしらんが dtwm とか X がすげーよく落ちるの…。 やっぱしょせん CDE は CDE なのか? olwm はなかなか安定しているけど、 仮想コンソールがないので private color map なアプリケーションを いっしょに使うとつらい…。 olvwm? あれは日本語でないからだめ(ぉ。

あと、いままでぜんぜんしらんかったのだが、 Sun は http://docs.sun.com/ というところでマニュアルとか全部見れるようにしてあるのだな。 日本語マニュアルもみんなオンライン化してあるようだ。えらい。


Wednesday, August 12 1998

Wed Aug 12 00:15:18 JST 1998

yaegashi% xauth extract - $DISPLAY | rsh localhost -l takeshi xauth merge -
~/.xsession に書いておくのがいいかな?

Wed Aug 12 00:35:46 JST 1998

VDEC の計算機にログインするためのユーザ名とパスワードが覚えられん。 ここにめもしとくわけにもいかんしなー(ぉ。 CPU が 20 個にメモリ 5GB が 2 台だって。ごーぢゃす。

Wed Aug 12 01:19:30 JST 1998

VDEC ましんの login shell が変えられない〜。 ps -efするとみんな csh と tcsh をいっこづつ走らせている。 なんだかなぃ。

そういうわけでさっきから chsh がないぞと さわいでいたんだが(ちなみに Solaris 2.6)、 Solaris で login shell を変えるには

% passwd -r nisplus -e
とかすることでできるということをついさっき教えてもらった。 にちょだかの xset q の件といい、最近めからうろこ状態が連続ですな。 マニュアルはちゃんと読みましょう。

しかしながらそれでも tcsh に変えられない。 これまた人におしえてもらったことなのが、 getusershell(3) によると

DESCRIPTION
     getusershell() returns a pointer to a legal  user  shell  as
     defined  by  the system manager in the file /etc/shells.  If
     /etc/shells does not exist, a list of the ten  locations  of
     the  standard  system  shells:   /usr/bin/sh,  /usr/bin/csh,
     /usr/bin/ksh,  /usr/bin/jsh,  /bin/sh,  /bin/csh,  /bin/ksh,
     /bin/jsh, /sbin/sh, /sbin/jsh, are used instead of the file.
とのことなのだが、 その肝心の/etc/shellsがない…。 というわけで/usr/local/bin/tcshにかえらんないー。 ちゃんとましん管理してくれー。

Wed Aug 12 05:13:26 JST 1998

PSION 5 ほしくなってしまった。はあはあ。T-ZONE で売ってたもんなあ。

ざうるすではやはりがまんできなくなりつつある(笑)。 日本語環境がもうちょっとなんとかなってくれればなあ。 まともなキーボードがあって、PIAFS でまともにいんたーねっとできて、 まともに日本語の通る telnet が動く PDA ってないかしらん。 Windows CE2+Tera Term? うーん…。

Wed Aug 12 05:39:48 JST 1998

ねむい。目がしょぼしょぼする。

Wed Aug 12 09:26:24 JST 1998

うへーやばい。 ほんとやばさがいや増しているな。 キャンセル料なんてのはあるんだろうか? (ぉ

Wed Aug 12 11:24:43 JST 1998

チップ試作のメーリングリストを最初から最後まで読んで、 いくつか指摘されている問題点を確認して、 フラッシュ型 8bit かけざんきとかいうあほな回路を VHDL で書いて合成して、 フロアプランつくって配線するところまでやってみた。

えらくしごとをしたような気分だが、 設計全体としてはまったく進んでいないのであった。 はう。 このところ CDE がえらく調子がいいのだけがせめてもの救いか。 このまま最後まで安定していてくれよ。

Wed Aug 12 13:44:02 JST 1998

現在、開平法をやるハードウェアを作っている。 むかしむかしあたしが作ったゲームに、 そういうことをやる x86 のアセンブリ言語のルーチンがあったんだけど、 すっかり原理とかそういうの忘れてしまっておもいだせない。

しょうがない、家に帰ってフロッピーディスクの山から そのコードを掘りだしてくるかと思っていたら、 いろんな人が C のソースコードやら自作 MPU のアセンブリコードやらをひっぱりだしてきて、 アルゴリズムを教えてくれた。感謝。 こういうの得意な人多いのねー。ていうか、あたしができんだけか。うひ。

んで肝心の回路の仕様はというと、 16bit の値の平方根を 8bit として出力する回路で、 ふつうにやると 8 回のループをまわす必要があるんだが、 これを展開して 8 段のパイプラインにしたものだ。 この仕様にあわせた C のおもちゃなソースコードを書いてもらった。

typedef unsigned char u8;
typedef unsigned short u16;

u8 sqroot(u16 x)
{
  u16 t = 0;

  /* X0, T0 */
  if (x >= 0x4000) x -= 0x4000, t |= 0x8000;
  t >>= 1;
  /* X1, T1 */
  if (x >= (t|0x1000)) x -= t|0x1000, t |= 0x2000;
  t >>= 1;
  /* X2, T2 */
  if (x >= (t|0x400)) x -= t|0x400, t |= 0x800;
  t >>= 1;
  /* X3, T3 */
  if (x >= (t|0x100)) x -= t|0x100, t |= 0x200;
  t >>= 1;
  /* X4, T4 */
  if (x >= (t|0x40)) x -= t|0x40, t |= 0x80;
  t >>= 1;
  /* X5, T5 */
  if (x >= (t|0x10)) x -= t|0x10, t |= 0x20;
  t >>= 1;
  /* X6, T6 */
  if (x >= (t|0x4)) x -= t|0x4, t |= 0x8;
  t >>= 1;
  /* X7, T7 */
  if (x >= (t|0x1)) t |= 0x2;
  t >>= 1;

  return t;
}
えらくシンプル。 これから直接 VHDL のソースコードが書きくだせそうですな。

Wed Aug 12 13:53:59 JST 1998

というわけで、最初に作ったバージョンがこれ。

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;

entity sqrt16 is
  port(CLK: in std_logic;
       I: in std_logic_vector(15 downto 0);
       O: out std_logic_vector(7 downto 0));
end sqrt16;

architecture rtl of sqrt16 is

signal T0, T1, T2, T3, T4, T5, T6, T7: std_logic_vector(15 downto 0);
signal X0, X1, X2, X3, X4, X5, X6, X7: std_logic_vector(15 downto 0);
  
begin

  process(CLK)
  variable UI, U0, U1, U2, U3, U4, U5, U6: std_logic_vector(15 downto 0);
  begin
    if CLK'event and CLK='1' then

      -- X0, T0
      UI:=To_stdlogicvector(X"4000");
      if I>=UI then
        X0<=I-UI;
        T0<=To_stdlogicvector(X"4000");
      else
        X0<=I;
        T0<=(others=>'0');
      end if;

      -- X1, T1
      U0:=T0 or To_stdlogicvector(X"1000");
      if X0>=U0 then
        X1<=X0-U0;
        T1<='0'&T0(15 downto 1) or To_stdlogicvector(X"1000");
      else
        X1<=X0;
        T1<='0'&T0(15 downto 1);
      end if;

      -- X2, T2
      U1:=T1 or To_stdlogicvector(X"0400");
      if X1>=U1 then
        X2<=X1-U1;
        T2<='0'&T1(15 downto 1) or To_stdlogicvector(X"0400");
      else
        X2<=X1;
        T2<='0'&T1(15 downto 1);
      end if;

      -- X3, T3
      U2:=T2 or To_stdlogicvector(X"0100");
      if X2>=U2 then
        X3<=X2-U2;
        T3<='0'&T2(15 downto 1) or To_stdlogicvector(X"0100");
      else
        X3<=X2;
        T3<='0'&T2(15 downto 1);
      end if;

      -- X4, T4
      U3:=T3 or To_stdlogicvector(X"0040");
      if X3>=U3 then
        X4<=X3-U3;
        T4<='0'&T3(15 downto 1) or To_stdlogicvector(X"0040");
      else
        X4<=X3;
        T4<='0'&T3(15 downto 1);
      end if;

      -- X5, T5
      U4:=T4 or To_stdlogicvector(X"0010");
      if X4>=U4 then
        X5<=X4-U4;
        T5<='0'&T4(15 downto 1) or To_stdlogicvector(X"0010");
      else
        X5<=X4;
        T5<='0'&T4(15 downto 1);
      end if;

      -- X6, T6
      U5:=T5 or To_stdlogicvector(X"0004");
      if X5>=U5 then
        X6<=X5-U5;
        T6<='0'&T5(15 downto 1) or To_stdlogicvector(X"0004");
      else
        X6<=X5;
        T6<='0'&T5(15 downto 1);
      end if;

      --X7, T7
      U6:=T6 or To_stdlogicvector(X"0001");
      if X6>=U6 then
        X7<=X6-U6;
        T7<='0'&T6(15 downto 1) or To_stdlogicvector(X"0001");
      else
        X7<=X6;
        T7<='0'&T6(15 downto 1);
      end if;

    end if;
  end process;

  O<=T7(7 downto 0);
  
end rtl;

-- version 0, 1998年08月12日 (水) 13時05分20秒 JST
もとの C ソースコードとほとんど 1 対 1 対応していますな。 それにしても VHDL って書きにくい。 なんで 16 進数で bit pattern を書きたいだけなのに、 To_stdlogicvector(X"4000") だ なんだとこんなに書かなくちゃいけないんだ。 ぐちぐち。 む、こういうのは for generate とか使ってまとめてきれいにかけって? ごもっとも。でも最初だからいいのです。

んでさっそくこれを VDEC からもらった Synopsys にかけて論理合成してみたら、 なんと FF が 232 個の回路が生成されてしまった。 これはつまり 16*2*8-16-8=232 ということであり、 最後の X7, T7(15 downto 8)の FF 以外は 全部、論理圧縮されずに残ってしまったということになる。 ありゃりゃ。Synopsys の実力ってこんなもん? 変数 T では ほとんど定数しか代入していない FF がほとんどなのに…。

Wed Aug 12 14:23:35 JST 1998

その後できたバージョンも公開。

この時点で、FF の数は 117 個まで減らすことができました。 たいへんめでたい。

Wed Aug 12 14:33:28 JST 1998

論理合成後の回路図。

たくさんある四角い箱が FF。 ところどころにある赤い台形(?)はコンパレータと引き算器のマクロ。

Wed Aug 12 14:45:10 JST 1998

この回路はまだまだたくさん改良の余地があるはずだな。 引き算とかコンパレータのマクロは 16bit 幅のやつをそのまま使っちゃってるし。 このへんがクリティカルパスになるのは容易に想像できる。 でもまあ今回は時間もないし、 チップの面積が無駄になってもいいから、 このくらいで妥協するかなと思っている。 いやーしかしハードウェア設計っておもしろいですなー。

しかしこれは論理合成もなんも条件を与えずにやったものなので、 とうていこのままでは使えない。 実際に使えるような回路にするためには、 パッドとかクロックとかの条件をいろいろ設定したうえで論理合成し、 検証しなくてはならない。 まだまだ先は長いですな。

Wed Aug 12 14:57:47 JST 1998

なんか、あきらかにかんたんにかんたんにできそうだということを 指摘されたので、もうちょっとがんばってみることにする。 現在までの成績。

Number of ports:               25
Number of nets:               437
Number of cells:              329
Number of references:          17

Combinational area:       117006.132812
Noncombinational area:    111449.523438
Net Interconnect area:      undefined  (No wire load specified)

Total cell area:          228455.656250
Total area:                 undefined
cell area の単位は um^2 だ、たぶん。

Wed Aug 12 15:28:12 JST 1998

できた。 どこを変えたかは、まあだいたい見りゃわかるでしょう。 おかげでコンパレータをなくして引き算器 8 個だけにすることができたぞ。

回路図もえらくさっぱりした、ように見えるな。 んで肝心の成績のほうはというと、
Number of ports:               25
Number of nets:               447
Number of cells:              323
Number of references:          12

Combinational area:       102717.718750
Noncombinational area:    115259.757812
Net Interconnect area:      undefined  (No wire load specified)

Total cell area:          217977.468750
Total area:                 undefined
といった具合で、そんな期待したほど減ったわけじゃなかった。 うーむ、まあこんなもんか。

Wed Aug 12 16:25:53 JST 1998

さて仕事も一段落ついたことにしたし メールもだしたし ずらかるか。 ではねねん。


Thursday, August 13 1998

Thu Aug 13 05:20:07 JST 1998

うちかえってひとねむりしてきました。 うーみみ。

Thu Aug 13 07:22:40 JST 1998

http://docs.sun.com/ が今はわりとまともだ。

Solaris 2.5 の xdm って、日本語のログイン画面はないんだろうか。 locale をみてみてもそれらしきものはなかったし…。 2.5 の OpenWindows の正規のログイン画面ってどうやってだすんだろう?

Thu Aug 13 12:09:59 JST 1998

うへ。 本懐をとげてきた。 うへへへ。 記録によると前回本懐を遂げたのは 7/7 のことらしいぞ。

しかし、あのおねーさんは肩もむの強すぎ。 はっきりいって平静を保っているのが難しかった。 それと、はなげは事前に自分で切っていっても 切られてしまうものらしいぞ。うーむ。

Thu Aug 13 12:16:37 JST 1998

今朝のことだが、linux-users を見ていたら ソケットのサーバのプログラムで、 クライアントがconnectしまくってると accept がこけますなぜでしょう、 というような質問をしているのが目にとまった。

253 回目のconnectでこけるみたいだと書いてあったので 脊髄反射的に親プロセスで fd を close しわすれてませんか とか書いてやったら、しばらくたってそのとおりでしたという返事がきた。 やっぱみんな同じことしてるのね…。

Thu Aug 13 20:27:53 JST 1998

めしをくってきた。もんべる。950えん。

チップ設計のお題をもらった。 きのうがんばってつかった平方根のへの字もでてこないようなやつだ。 でも簡単なわりには面積が莫大になるので、 チップの見栄えはよくなることまちがいなし(ほんとか)。


Friday, August 14 1998

Fri Aug 14 08:28:20 JST 1998

うぐはー、おきたた。 はて、いつねたんだっけなー。 なんにしても 12 時間ちかくねたことはまちがいない(ぉ

Fri Aug 14 10:23:18 JST 1998

うーむ。 理屈こねこね。 (わかめ

Fri Aug 14 13:16:13 JST 1998

ほげー
理屈は単純だが、やたらでかい回路をつくってしまっているようだ。 やはり 1 クロックでやるのは無理っぽいのう。

Fri Aug 14 14:25:58 JST 1998

だいたいめどはついた。いけそうな気がする(ほんとか?)。

Fri Aug 14 17:38:28 JST 1998

CD-R どらいぶかりてきた。うへへへ。 手元にあるめでぃあがなぜか Sofmap のやつなんだけど、 表面がのっぺらぼーで何をかいていいかわからん。

こんどは on-the-fly な書きこみをためしてみるとするかねー。

Fri Aug 14 18:24:54 JST 1998

結局、何事もなくうまくいってしまった。

# mkisofs -r -K ~/hoge | ./cdrecord speed=4 dev=5 -
とかするだけだったし。 700Kbytes/sec で ftp をしながら、 HDD 上の別のファイルを on-the-fly で書きこむのもうまくいったぞ。 やはり Ultrawide SCSI は伊達じゃないってことかな。

Fri Aug 14 20:19:55 JST 1998

うへ。めしくってきた。もんべる。

こんどは CD-ROM から on-the-fly 書きこみに挑戦だ。

# dd if=/dev/scd1 bs=1000000 | cdrecord speed=4 dev=5 -
なんてやっちゃったぞ。 ちなみに /dev/scd1 というのは実は ATAPI 8倍速(推定)で、 SCSI emulation すると突然なんと 8 台に分身の術といういかしたやつだ(ぉ。 はたしてうまくいくのか。

Fri Aug 14 20:35:51 JST 1998

うへ。失敗。なんと I/O error とやらで /dev/scd1 からの 読みこみがこけた。うおーなんてこったー。

Fri Aug 14 20:58:48 JST 1998

Solaris の X サーバは、XF86Configみたいな ファイルがないので、フォントパスを指定しておきたいときは -fp オプションを使うしかないらしいぞ。

% X -fp tcp/carina:7100 -query carina
みたいな。

Fri Aug 14 21:12:37 JST 1998

さて、いいかげんチップを完成させなくては。 寝るまでになんとか動作の検証くらいはすませたいものだ。 大量のデータを扱う必要があるので、 今回は TEXTIO というものを使ってみよう。


Saturday, August 15 1998

Sat Aug 15 00:33:34 JST 1998

ほげー。もう 8/15 ですね。 姉の誕生日だ。

TEXTIO を駆使して設計はだいたいあってることが確認できたので、 48 個のたしざんのパイプライン化にとりくむことにしよう。 あと係数やしきい値をセットするあたりとかの回路も考えるとしよう。 8/20 にまにあうかな?

Sat Aug 15 02:32:30 JST 1998

うへー、Synopsys 論理合成にかけてみるといつまでたってもおわらん。 帰ってこない。 うーん、ほんとにできるんだろうか。

まあ 100ns で 20bit のたしざん 48 個をやるのは いくらなんでも無謀な気がするので、 とっとと論理合成とかしてみる前にとっとと切りわけるとするか。

Sat Aug 15 04:09:32 JST 1998

うまい最適化をおもいついてらっちの数をさらに減らし、 たしざんを 7 つをひとまとまりくらいに切りわけて、 計算をわけるようにしたら、回路さいずが激減した。 その上、論理合成にかかる時間もすごい短くなった。 ま、あたりまえか。 さっさとやればよかった。

Sat Aug 15 04:30:12 JST 1998

ふは。今また論理合成が終わった。 一回の合成にはだいたい 16 分くらいかかるようだ。 回路の面積はいまのところちょうど 4*10^6 um^2 くらいと報告されている。 4.5mm 角のチップには 7*10^6 um^2 くらいまでならおさまるらしいということなので、 まあこんなもんなんでないかな。

****************************************
Report : area
Design : filter2
Version: 1998.02
Date   : Sat Aug 15 04:39:23 1998
****************************************

Library(s) Used:

    ROHMIO (File: /home/jsk/yaegashi/logic/vdec/rohm06/EXD/RohmIO_lin.db)
    ROHM06 (File: /home/jsk/yaegashi/logic/vdec/rohm06/EXD/rohm06_lin.db)

Number of ports:               84
Number of nets:              3260
Number of cells:             2061
Number of references:          66

Combinational area:       3086295.000000
Noncombinational area:    1004950.812500
Net Interconnect area:      undefined  (No wire load specified)

Total cell area:          4091245.750000
Total area:                 undefined
ということで。

Sat Aug 15 05:12:48 JST 1998

FreeBSD(98) 2.2.7R-Rev01 を FTP してきたので、 これから on-the-fly で焼くぜ。 こんどもうまくいくかな。 しかし 2.2.7 はpackages が 1GB くらいあったので、 てきとーにぼこぼこけづってしまった。 おかげで XEmacs とか TeX とかがない。

Sat Aug 15 07:00:26 JST 1998

あうあう
だめだもうねよ
ばたんきゅう

Sat Aug 15 13:39:51 JST 1998

ううへ
おきたた

眠いが、回路のアルゴリズム面での詰めを行う。 確実に動かしたかったら、テスト容易化設計というのも ちゃんとしといたほうがいい。バウンダリスキャンパスの設定とか。 まあこれはテストベクタの生成も含めて CAD が自動でやってくれるらしいけど。 にしても時間がないよー。

Sat Aug 15 15:48:33 JST 1998

仕様詰め詰め。

結果に対して割り算回路が必要かと思ったが、 単に算術右シフトができればよいということなので、ひと安心。 次は 3x3 のメディアンフィルタなんてものをつくれないかと画策中。 9 個の値をソートして、その中央値をとるやつだ。 シストリックアレイのバブルソータとかいう回路を むかし見たおぼえがあるので、 それが使えそう。

Sat Aug 15 17:04:39 JST 1998

はう
かえるか…

Sat Aug 15 17:14:06 JST 1998

すでに雨がふっていた… かえるのやめた。

Sat Aug 15 20:51:55 JST 1998

おうち帰れなかった勢いで(どういう勢いだ)、 8 話連続で見るというあほなことをやった。 かなりだめまっているな。 あしたのちっこいよといにしゃる D を見るためにも がんばって仕事をしよう。

というわけでばんめしはかろりめいとだ。 うひー。


Last modified: Sat Aug 15 20:54:24 1998