
足し算と引き算はなんとか理解できるかもしれないが、掛け算と割り算は難しすぎる。ましてそれが小数の計算だったらお手上げだ。
とはいっても算数のことではない。電卓がどうやってこれらの計算を行っているか、すべて理解したいのだ。僕の「電卓を作りたいという妄想」はますます膨らんでいる。こういう妄想に取り憑かれると解決するまでずっと頭から離れないので厄介だ。
大学の工学部の授業で学べるのはせいぜい2進数で4ビットの加算回路、減算回路くらいまでだ。乗算回路や除算回路は複雑すぎて教科書には書かれていない。また桁数を増やしたり、負数や浮動小数点を計算できるようにすると桁違いに難しくなる。乗算回路や除算回路はどうやら大学院レベルのようだ。
ウィキペディアの記事:乗算器、除算器
さらに電卓として機能させるには押されるキーの順番に従い、それを解析して計算手順を進めるための回路も必要だ。キーシーケンスの処理である。「1」、「2」、「3」、「.」、「5」という入力に対して「123.5」という10進数の小数を一時記憶しなければならない。どういう回路でこれを実現すればよいのだろうか?
1970年代に刊行された「電卓技術教科書」には電卓の詳しい解説やシャープのCompet CS-12D全回路図が掲載されているのだが、この本は絶版で入手が極めて困難。あきらめるしかない。(余談:この電卓とほとんど同じモデルのCompet CS-12Aは先日入手できたので近いうちに紹介する予定だ。)
入手可能な本で乗算回路や除算回路を解説したものを探したところ、1冊だけ見つかった。この本だ。
「ディジタル数値演算回路の実用設計―四則演算、初等超越関数、浮動小数点演算の作りかた:鈴木昌治」

なんとこの本では乗算、除算、浮動小数点回路だけでなく初等超越関数の計算を行う回路まで解説されている。つまり三角関数や指数・対数関数を計算できる関数電卓の計算手順まで学ぶことができるのだ。これはすごいぞ。。。
目次をはじめ、この本の詳細は次のページで確認できる。
ディジタル数値演算回路の実用設計―四則演算、初等超越関数、浮動小数点演算の作りかた:鈴木昌治
http://www.cqpub.co.jp/hanbai/books/36/36171.htm
さっそく入手してページをめくってみると。。。さっぱりわからない。何やらプログラミング言語のようなものが書かれている。
クリックで拡大

このプログラミング言語のようなものは「Verilog HDL」という言語で、電子回路(デジタル回路)の素子や配線を定義しすることでLSI上に記述した電子回路を構成する。つまりカスタムLSIを作るための言語なのだ。HDLは「Hardware Description Language=ハードウェア記述言語」のことである。
前記事の「ファインマン計算機科学」の最終章に書かれているように、世界で初めて商用化されたのは1985年。今では個人が趣味で試せるまで価格が下がってきているのだ。つまり言語で記述した回路を実装するのが「FPGA(Field-Programmable Gate Array)」である。
FPGAを使った数値演算回路実現の勘所(3) ―― 浮動小数点演算器の構成を考える Part 1
http://www.kumikomi.net/archives/2010/08/ep24suc3.php?page=1
FPGAやVerilog HDLがわかっていないと、本が読めない。。。。ということで、次に買ったのがこの本だ。これを先に読めばいい。
「入門Verilog HDL記述―ハードウェア記述言語の速習&実践:小林優」

この本はタイトルどおりVerilog HDLの入門書。アマゾンでの評価もよい。具体例として4ビットの加算回路、減算回路、乗算回路が解説されている。Verilog HDLというのは次のようなものだ。
Verilog-HDL 入門(その1)
http://cas.eedept.kobe-u.ac.jp/~arai/Verilog/
Verilog-HDL入門(その2)
http://www.ddna.is.tsukuba.ac.jp/lecture/lsi_design/text/verilog/verilog_frame.html
本の詳細は次のページで確認できる。
入門Verilog HDL記述―ハードウェア記述言語の速習&実践:小林優
http://www.cqpub.co.jp/hanbai/books/33/33981.htm
Verilog HDLはこの本やIcarus Verilogなどのフリーのシミュレータを使って学んでもよいわけだけど、こういうものは実践するのがいちばん身につく。手ごろなキットはないものかと探したところ、よさそうなのがこれだった。
「キットで学ぶ!No.04 FPGAチャレンジャー入門編ALTERA CycloneIV版(セット) 」

このキットの詳細は、販売元の株式会社アドウィン内のページをお読みいただきたい。
キットの詳細:FPGAチャレンジャー入門編ALTERA CycloneIV版
http://www.adwin.com/product/AKE-1104.html
このキットを使ったのではないと思うが、東大の五月祭ではこのようなものも展示されていたようだ。
FPGAでファミコンを再現
FPGAでPC-8001を作る計画
http://www.geocities.jp/kwhr0/hard/pc8001.html
アナログ回路で電子工作するのも楽しそうだが、これではいつまでたっても電子おもちゃ作りから抜け出せなくなるような気がする。電卓のからくりをFPGAのほうから学びつつ、気の向くままにアナログ回路も学んでいくことにした。
応援クリックをお願いします!このブログのランキングはこれらのサイトで確認できます。


関連記事:
電卓を作りたいという妄想
http://blog.goo.ne.jp/ktonegaw/e/01cf6bc6669bf0956a792bce292f97f1
神様の計算機 (CASIO fx-2、1972年)
http://blog.goo.ne.jp/ktonegaw/e/51d92a0f17a3abd1112691590d86c83a
改訂版 電子回路の「しくみ」と「基本」 :小峯龍男
http://blog.goo.ne.jp/ktonegaw/e/63d78b0fbb911e94b4b1385edbcbdfb9
改訂版 デジタル回路の「しくみ」と「基本」:小峯龍男
http://blog.goo.ne.jp/ktonegaw/e/1a7d2ab7d8823e87c42fb09177e9702c
とはいっても算数のことではない。電卓がどうやってこれらの計算を行っているか、すべて理解したいのだ。僕の「電卓を作りたいという妄想」はますます膨らんでいる。こういう妄想に取り憑かれると解決するまでずっと頭から離れないので厄介だ。
大学の工学部の授業で学べるのはせいぜい2進数で4ビットの加算回路、減算回路くらいまでだ。乗算回路や除算回路は複雑すぎて教科書には書かれていない。また桁数を増やしたり、負数や浮動小数点を計算できるようにすると桁違いに難しくなる。乗算回路や除算回路はどうやら大学院レベルのようだ。
ウィキペディアの記事:乗算器、除算器
さらに電卓として機能させるには押されるキーの順番に従い、それを解析して計算手順を進めるための回路も必要だ。キーシーケンスの処理である。「1」、「2」、「3」、「.」、「5」という入力に対して「123.5」という10進数の小数を一時記憶しなければならない。どういう回路でこれを実現すればよいのだろうか?
1970年代に刊行された「電卓技術教科書」には電卓の詳しい解説やシャープのCompet CS-12D全回路図が掲載されているのだが、この本は絶版で入手が極めて困難。あきらめるしかない。(余談:この電卓とほとんど同じモデルのCompet CS-12Aは先日入手できたので近いうちに紹介する予定だ。)
入手可能な本で乗算回路や除算回路を解説したものを探したところ、1冊だけ見つかった。この本だ。
「ディジタル数値演算回路の実用設計―四則演算、初等超越関数、浮動小数点演算の作りかた:鈴木昌治」

なんとこの本では乗算、除算、浮動小数点回路だけでなく初等超越関数の計算を行う回路まで解説されている。つまり三角関数や指数・対数関数を計算できる関数電卓の計算手順まで学ぶことができるのだ。これはすごいぞ。。。
目次をはじめ、この本の詳細は次のページで確認できる。
ディジタル数値演算回路の実用設計―四則演算、初等超越関数、浮動小数点演算の作りかた:鈴木昌治
http://www.cqpub.co.jp/hanbai/books/36/36171.htm
さっそく入手してページをめくってみると。。。さっぱりわからない。何やらプログラミング言語のようなものが書かれている。
クリックで拡大

このプログラミング言語のようなものは「Verilog HDL」という言語で、電子回路(デジタル回路)の素子や配線を定義しすることでLSI上に記述した電子回路を構成する。つまりカスタムLSIを作るための言語なのだ。HDLは「Hardware Description Language=ハードウェア記述言語」のことである。
前記事の「ファインマン計算機科学」の最終章に書かれているように、世界で初めて商用化されたのは1985年。今では個人が趣味で試せるまで価格が下がってきているのだ。つまり言語で記述した回路を実装するのが「FPGA(Field-Programmable Gate Array)」である。
FPGAを使った数値演算回路実現の勘所(3) ―― 浮動小数点演算器の構成を考える Part 1
http://www.kumikomi.net/archives/2010/08/ep24suc3.php?page=1
FPGAやVerilog HDLがわかっていないと、本が読めない。。。。ということで、次に買ったのがこの本だ。これを先に読めばいい。
「入門Verilog HDL記述―ハードウェア記述言語の速習&実践:小林優」

この本はタイトルどおりVerilog HDLの入門書。アマゾンでの評価もよい。具体例として4ビットの加算回路、減算回路、乗算回路が解説されている。Verilog HDLというのは次のようなものだ。
Verilog-HDL 入門(その1)
http://cas.eedept.kobe-u.ac.jp/~arai/Verilog/
Verilog-HDL入門(その2)
http://www.ddna.is.tsukuba.ac.jp/lecture/lsi_design/text/verilog/verilog_frame.html
本の詳細は次のページで確認できる。
入門Verilog HDL記述―ハードウェア記述言語の速習&実践:小林優
http://www.cqpub.co.jp/hanbai/books/33/33981.htm
Verilog HDLはこの本やIcarus Verilogなどのフリーのシミュレータを使って学んでもよいわけだけど、こういうものは実践するのがいちばん身につく。手ごろなキットはないものかと探したところ、よさそうなのがこれだった。
「キットで学ぶ!No.04 FPGAチャレンジャー入門編ALTERA CycloneIV版(セット) 」

このキットの詳細は、販売元の株式会社アドウィン内のページをお読みいただきたい。
キットの詳細:FPGAチャレンジャー入門編ALTERA CycloneIV版
http://www.adwin.com/product/AKE-1104.html
このキットを使ったのではないと思うが、東大の五月祭ではこのようなものも展示されていたようだ。
FPGAでファミコンを再現
FPGAでPC-8001を作る計画
http://www.geocities.jp/kwhr0/hard/pc8001.html
アナログ回路で電子工作するのも楽しそうだが、これではいつまでたっても電子おもちゃ作りから抜け出せなくなるような気がする。電卓のからくりをFPGAのほうから学びつつ、気の向くままにアナログ回路も学んでいくことにした。
応援クリックをお願いします!このブログのランキングはこれらのサイトで確認できます。




関連記事:
電卓を作りたいという妄想
http://blog.goo.ne.jp/ktonegaw/e/01cf6bc6669bf0956a792bce292f97f1
神様の計算機 (CASIO fx-2、1972年)
http://blog.goo.ne.jp/ktonegaw/e/51d92a0f17a3abd1112691590d86c83a
改訂版 電子回路の「しくみ」と「基本」 :小峯龍男
http://blog.goo.ne.jp/ktonegaw/e/63d78b0fbb911e94b4b1385edbcbdfb9
改訂版 デジタル回路の「しくみ」と「基本」:小峯龍男
http://blog.goo.ne.jp/ktonegaw/e/1a7d2ab7d8823e87c42fb09177e9702c
> 「123」という10進数を一時記憶
keyword は、
BCD (binary coded decimal)
shift register
辺りでしょうか。
> 「Verilog HDL」という言語で、
> 電子回路の素子や配線を定義しすることで
書き方にも依りますが、
どんな素子が使われて、どんな配線になるのかは、
HDL のコードからは一般的にはわかりません。
むしろ、半導体工場の都合とは切り離して設計が
できる辺りが HDL の真骨頂とも言えます。
昨今では、乗算や除算も、演算子を記述しただけで、
32 bit くらいの幅なら、普通に論理合成できます。
-- さすがに浮動小数点となるとそーはいかない。
> FPGAやVerilog HDLがわかっていないと
FPGA は、ツールの使い方に習熟したり、
いざというときは、高価なツールやライブラリの
ライセンスを購入する必要はありますが、
私なぞ、ほとんど放置プレーです ^_^;
HDL も、勘所さえ押さえれば難しくはないのですが、
動けば ok まがいの風潮をツールが後押ししてる上、
規格の変化が早過ぎて、何が本質なのか見抜くのは
多分容易なことではありません。
> 「入門Verilog HDL記述―ハードウェア記述言語の速習&実践:小林優」
小林さんは、個人的にも存じ上げてますし、
私もこの本をリファレンスとして利用してたりします ^_^;
しかし、もうかなり古い...
でも、使えないわけではありません。
-- 新しい規格に基いた、初等的な良い教科書は...無いかなあ...
> 「キットで学ぶ!No.04 FPGAチャレンジャー入門編ALTERA CycloneIV版(セット) 」
こーゆー物が気軽に ? 買える財力がうらやましい...
最近は、FPGA でも、CPU コアを焼いて、
linux 動かすよーな感じになっちまってて、
もう勉強する範囲が広過ぎて財力以前で足踏みっす T_T
電卓の中身も、今ではソフトウエアです。
マイクロプロセッサは電卓のために作られました。
演算をハードウエアで作って、飛び切り速くても、
電卓ではあんまり御利益も無いわけで...
http://anoda.cocolog-nifty.com/mad/2008/04/fpga_b93e.html
> 半導体工場の都合とは切り離して設計が
> できる辺りが HDL の真骨頂とも言えます。
そういうものなのですね。確かに工場の都合と設計者の都合が対立してしまうと、開発効率は落ちそうなのが僕にも理解できます。
> -- 新しい規格に基いた、初等的な良い教科書は...無いかなあ...
今年の夏に出たこの本はどうでしょうか?初版なので誤植が気になってまだ手に入れていませんが。。
FPGA入門―回路図とHDLによるディジタル回路設計
http://astore.amazon.co.jp/tonejiten-22/detail/4798034312
> こーゆー物が気軽に ? 買える財力がうらやましい...
いえいえ、実を言うとアマゾンの中古で1万円というのを見つけたので飛びついてクリックしたら「テキスト」だけ届きました。むかつきましたけど、これでは何もできないということで、無理してアドウィン(株)のほうに「キット」のほうを注文したのですよ。結局、総額だと高い買い物になってしまいましたが、仕方ありません。半分は自分のせいですから。。。年末近いのに大きい出費になってしまいました。
> 電卓の中身も、今ではソフトウエアです。
> マイクロプロセッサは電卓のために作られました。
えっ!そうなのですか!
> オープンソースとして公開されている Z80 互換の CPU コア t80 を入て、シリアルポートに「Hello World」を出力するプログラムを走らせたら、ちゃんと動いた。
かなりマニアックな人だと思いますが、そんなすごいこともできるのですね。(ひとつ上にコメントいただいたnoboshemonさんも「最近は、FPGA でも、CPU コアを焼いて、linux 動かすよーな感じになっちまってて」とお書きになっていますし。)ゲート数が増えていくと、個人で扱えるFPGAもどんどん安いものが出回ってきますね。
Z80のマニアックついでですが、こういう商品もいいなーと思っています。
Z80マイコンボード(中日電工)
http://www.alles.or.jp/~thisida/
> 今年の夏に出たこの本はどうでしょうか?
> 初版なので誤植が気になってまだ手に入れていませんが。。
>
> FPGA入門―回路図とHDLによるディジタル回路設計
> http://astore.amazon.co.jp/tonejiten-22/detail/4798034312
著者は、達人だと思います。
読んだらきっとセンスが身に付くかと。
高くて買えません T_T
先刻御承知だたー思いますが、小林さんの新刊もありますよ。
http://www.amazon.co.jp/dp/4774148393/
> えっ!そうなのですか!
この辺を読むと経緯がわかります。
http://www.amazon.co.jp/dp/400006021X/
> 高くて買えません T_T
値段もそうですが、これだけの分量を読み込めるかどうかで対投資効果が決まりますね。この本は書店で立ち読みできたので、よさそうだなーと思っていました。
> 先刻御承知だたー思いますが、小林さんの新刊もありますよ。
この本も気になっていました。地元の本屋には置いていないので、近い内に大型店で立ち読みしにいこうと思っていたところです。
> この辺を読むと経緯がわかります。
おお!これは。。。著者はこの業界ではパイオニアの方ですね。絶版になっているようなので惜しいです。復刊リクエストすることにしました。教えていただき、ありがとうございます。
たとえば、16桁の2進数のかけ算を考えた場合、20bitのアドレスラインと32bitの出力ラインがあるROMに16桁×16桁の演算結果を全部焼き付けておく。ROMの大きさはせいぜい16Gbyteだ。ちょっとお高いかもしれませんが、たいしたことはない。割り算も、みんな同じ原理で出来る。初頭関数に至っては入力が1変数であればもっと簡単にできる。
桁が増えると、極端にROMの容量が必要になるので、どんな大きさの演算でもという分けにはいかない。繰り上がり等を実装する必要はあるが。
また、結構演算回路のめんどくさいところは、浮動小数点の桁シフトなどの処理が大変で、そういうことを考えると以外とかけ算よりも足し算の方が難しい。
ちなみにHDLにはVerilog HDLのほかにも私は昔VHDL, Parthenon などを使っていました。C言語プログラムをハードウエアにコンパイルする技術なんていうのもありますよ。
「簡単な方法」を詳しく教えていただき、ありがとうございます。なるほど計算をあらかじめしておいて、計算結果をすべてROMに焼き付けておけばいいわけですね。全部の結果をまとめたときどれくらいのROMサイズが必要なのかということに考えが及んでいませんでした。初等関数についても昔「三角関数表」や「対数関数表」を使っていたことを思えば納得です。
私のほうは時代に逆行していますが「昔のやり方」にこだわっています。
>HDLにはVerilog HDLのほかにも私は昔VHDL, Parthenon などを使っていました。C言語プログラムをハードウエアにコンパイルする技術なんていうのもありますよ。
VHDLは知っていましたが、Parthenonというのは初めて耳にしました。C言語を使った方法というのも知りませんでした。教えていただきありがとうございました。