アダルト・ヴァイオリン May the force be with you..

2009年12月31日

名刺やメモの整理

あまり活用しているとは言いがたいが、せっかく買ったドキュメントスキャナFUJITSU ScanSnap S1500 FI-S1500をもっと使えるようにしたいと思っている。
名刺をスキャンすると、OCRで取り込んで、大体、名前なども適度に抽出してくれるのだけれど、古い名刺を含め、手持ちのものをスキャンしていくと、同じ人の所属違いの名刺がかなりの数出てきたりする。すでに、どれが新しいのか不明となっていたりして。。
また、メモ類も、日付の入っていないものもあり、使い始めで、過去のものをまとめて処理している最中には、スキャンした日にちが分かっても、ほとんど役に立たないので、長期的には、もう少し整理する方法を考えないといけない。
一つのアイデアが、日付スタンプの利用だ。

コクヨS&T 回転印(欧文日付)  IS-D5N

コクヨS&T 回転印(欧文日付) IS-D5N

  • 出版社/メーカー: コクヨ
  • メディア: オフィス用品




とにかく、名刺でもメモでも、入手したときに必ずスタンプで日付をつけてしまう習慣さえ付けば、整理の手がかりになるだろう。問題は、習慣が付くかということだけれど。。。(笑)

2009年12月30日

NSL:整数乗算回路(単一クロック版)

Filed under: Weblog — い~ぐる @ 2:07 AM

整数変数とvariableによる構造展開の例題として、もう一つ、乗算回路を示します。
これは、大きなビット数の乗算において、実用に使うには向かないですが、ビット数が少ない時には、十分使えますし、記述はシンプルな筆算形なので、分かりやすいと思います。

#define N 8
#define M 4
// Copyright (c) IP ARCH, Inc. Naohiko Shimizu
// All rights reserved.
declare multiply_%N%_%M% {
input A[N], B[M];
output F[N+M];
func_in mult_do(A,B);
}
module multiply_%N%_%M% {
integer i;
variable pp[N+M], pa[N+M];
function mult_do {
pa={M{0b0},A};
pp=0;
for(i=0;i<M;i++) pp = if(B[i]) pp+(pa << i) else pp;
F = pp;
}
}

2009年12月27日

NSL:バレルシフタ

Filed under: Weblog — い~ぐる @ 9:04 PM

NSLの構造展開のfor文を用いたバレルシフタの例。
整数変数やvariableは、出現順順次評価を行なうことに注意。

// Copyright (c) IP ARCH, Inc. Naohiko Shimizu
// All rights reserved.
#define N 8
#define M 4
declare shift_%N%_%M% {
input A[N], B[M];
output F[N];
func_in shift_do(A,B);
}
module shift_%N%_%M% {
integer i,sv;
variable ps[N];
function shift_do {
ps=A;
sv=1;
for(i=0;i<M;i++) {
ps = if(B[i]) (ps << sv) else ps;
sv = sv << 1;
}
F = ps;
}
}

NSL:引き戻し法による除算回路

Filed under: Weblog — い~ぐる @ 12:17 AM

除算をするのに、乗算器を使うというのもあんまりなんで、減算器を用いた、引き戻し法による除算回路を作ってみました。
マクロによるパラメタライズはあまりデバッグしていないので、異なるビット数だとバグがあるかもしれませんが、そのときはご容赦。

動作には、sfl2vlのベータ版(20091226版)で加えた修正が必要(かもしれない)。

// Copyright (c) IP ARCH, Inc. Naohiko Shimizu
// All rights reserved.
#define N 8
#define M 4
declare divu_%N%_%M% {
input A[N],B[M];
output Q[N],R[M];
func_in divu_do(A,B);
func_out divu_done(Q,R);
func_out divu_error;
}
module divu_%N%_%M% {
reg QB[M], QQ[N+M];
wire sub_i1[N+1], sub_i2[N], minus;
func_self sub(sub_i1,sub_i2);
function sub {
wire sub_o[N+1];
sub_o = {sub_i1} - {0b0,sub_i2};
minus=sub_o[N];
}
function divu_do
if(B==M'b0) divu_error();
else seq {
reg bitcount[M];
for( {bitcount:=0; QB:=B; QQ:={M'b0,A};} ;
bitcount <N ; bitcount++) {
{
if(sub(QQ[N+M-1:N-M-1], {QB,(N-M)'b0}).minus) {
QQ := (QQ << 1) ;
}
else {
QQ := {(sub_o << 1)[N:N-M],(QQ[N-2:0]<<1)} |
(N+M)'b1;
}
}
}
divu_done(QQ[N-1:0],QQ[(N+M-1):N]);
}
}

2009年12月26日

NSL: 20091226版(17時アップデート)

Filed under: Weblog — い~ぐる @ 5:36 PM

バージョン番号を日付にしているけれど、一日に何度かアップデートすると、日付だけでは足りないですね。

と、それはともかく、ベータ版を200912226版にアップデートしました。
今回のアップデートは、Y君に指摘いただいた、レジスタ初期化の問題のほか、制御端子を用いて、評価式の中で結果を参照するときの問題を対策しました。

評価式の中で制御端子を起動した場合、場合によっては、処理系都合で、複数回の評価が発生します。その都度、制御端子の引数に対して、複数回数の代入が発生してしまい、そのことが原因で、競合検出回路によって、ハザードとなる件を対策しました。

なお、1箇所の制御端子が、処理系都合によって複数回評価される場合の対策なので、複数箇所で制御端子を起動している論理バグの回避策ではありません。

2009年12月25日

クロネコさんからお手紙付いた

Filed under: 日記 — い~ぐる @ 8:52 AM

SUNP0013.JPG
クロネコメンバーズカードだそうですが、えっと。。。これって、なんでしょう?
我が家には、クロネコさんのメンバーになるほど、宅急便の利用は多くないと思うんですが。。。

2009年12月24日

NSL:整数除算回路

Filed under: Weblog — い~ぐる @ 7:32 AM

メリークリスマス!

ということで、クリスマスバージョンのsfl2vlとともに、NSLによる除算回路のサンプルをお届けします。
Nは割られる数のビット数、Mは割る数のビット数を定義し、出力は、N-Mビットになります。

見れば見るほど平方根回路にそっくり、というか、平方根回路を少し変更しただけで作成しました。。この回路は乗算のコストが安いFPGA向けです。ASICで使う場合には、通常の引き戻し法か引き離し法などを使ってください。

#define N 8
#define M 4
declare div_%N%_%M% {
input A[N],B[M];
output F[N-M];
func_in div_do(A,B);
func_out div_done(F);
}
module div_%N%_%M% {
reg try[N-M];
wire mul_i1[N-M], mul_i2[M], mul_o[N];
func_self mul(mul_i1,mul_i2);
function mul {
mul_o = mul_i1*mul_i2;
}
function div_do seq {
reg bitpos[N-M];
for( {bitpos:=1 << ((N-M)-1); try:=0; } ; bitpos != 0 ; bitpos := bitpos >> 1) {
if(mul(try | bitpos,B).mul_o <= A) try := try | bitpos;
} div_done(try); } }

2009年12月23日

NSLによる平方根演算回路

Filed under: Weblog — い~ぐる @ 7:46 AM

NSLで(整数の)平方根を求める回路を作成してみました。
なるべくシンプルにするための、サンプル回路なので、効率は悪いです。
ぎりぎりのタイミングに詰めたい場合には、for文ではなく、ifとgotoを使って、余分なステップが発生しないようにします。

やはり、性能が落ちるのは気持ち悪いので、20091223版で、対策しました。まだ、シミュレーションモードではハザードになるなど、若干不安定なので、引き続き、調整中。20091224版で、修正した(はず)。なお、このバージョンから、端子やレジスタへの代入の右辺に整数値を与えることができます。

コード整理のついでに、SFLでの、while構文は需要が少なそうなので、削除します。

この回路、結果が出るまでの時間が長いのと、Nの定義値によって時間が変わるので、結果をsqrt_doneのタイミングで出力します。

この回路の動作確認中、sfl2vlのバグがあったので、
対応するベータ版は、20091222版にアップしてあります。

これとほとんど同じ回路で割算も出来ます。

// Copyright (c) IP ARCH, Inc. Naohiko Shimizu
// All rights reserved.
#define N 8
declare sqrt_%N% {
input A[N];
output F[N/2];
func_in sqrt_do(A);
func_out sqrt_done(F);
}
module sqrt_%N% {
reg try[N/2];
wire mul_i[N/2], mul_o[N];
func_self mul(mul_i);
function mul {
mul_o = mul_i*mul_i;
}
function sqrt_do seq {
reg bitpos[N/2];
for( {bitpos:=1 << ((N/2)-1); try:=0; };
bitpos != 0 ; bitpos := bitpos >> 1) {
if(mul(try | bitpos).mul_o <= A) try := try | bitpos;
}
sqrt_done(try);
}
}

トランジスタ回路の入門本

Filed under: Weblog — い~ぐる @ 3:18 AM

昨日、記事を書いたつもりであったけれど、なぜか消えてしまったので再度書いている。

1977年に書かれた奥沢氏の、「はじめてトランジスタ回路を設計する本」が、息子さんによって、改訂されていた。


はじめてトランジスター回路を設計する本

昨今の入門本では省略されている、バイアス設計についても、触れていて、内容的には読んでおいて損はないかも?

ただ、どうせ改訂するなら、FETについても大々的に取り上げてほしかった(ページ数の関係で無理かもしれないが。。)

2009年12月22日

メールによる迷惑行為

Filed under: Weblog — い~ぐる @ 10:26 PM

最近、私のメールアドレスと名前を用いて、勝手にメーリングリストに登録したり、アダルトサイトに登録したりするイタズラが増えている。

アダルトサイトは、gmailがスパム扱いしてくれるので、実害がある訳ではないが、スパムフォルダに間違って登録されているメールがないかチェックする時に、自分のフルネームを使ったメールがアダルトサイトから来ているのを見ると、びっくりする。

不正アクセス禁止法の言う不正アクセスではないにせよ、多大な迷惑行為なので、いたずら者を、プロバイダから契約解除をさせるように、情報収集しておこうと思っている。

メールマガジンのサイトには迷惑行為を報告し、登録経緯の詳細を開示要求しておこう。

Older Posts »

Powered by WordPress