IC・トランジスタで出来たコンピューターを設計・製作するためのブログ
Jeans & Development | 電子ブロック工房 | 三日坊主 | フロントページ |
割り算無しで円周率の計算 [一般的なこと]
2009年7月2日
割り算は少し面倒なので、これを行わずに円周率を計算させる方法を考えてみた。
for ($max=2;$max<=2000000000;$max=$max*sqrt(10)) { $t=time(); echo intval($max).': '.calc_pi(intval($max))." (".(time()-$t).")\n"; } function calc_pi($max) { $total=0; $max2=$max*$max; $prev_y=$max-1; for ($x=0;$x<$max;$x++) { $max2_x2=$max2-$x*$x; for ($y=$prev_y;0<=$y;$y--) { if ($y*$y < $max2_x2) break; } $total+=$y+1; $prev_y=$y; } return $total; }
PICkit 2を購入 [PIC]
2009年6月21日
先日、サンフランシスコの紀伊国屋に行ったとき、何気なく手にしたトランジスタ技術・2009年4月号。そこでの特集が、『これなら分かる!!PICマイコン』。以前から、PICでもAVRでもなんでもいいから、マイクロコントローラを使えるようにならにゃイカンなと思っていて、その機会がなかったのだが、これを機に勉強することにした。
トラ技をよむと、Cでプログラムが組めるではないか!しかも、HITEC-C liteというのを用いれば、すべてフリーソフトでできる。これはいい。アセンブラも楽しいが、Cで組めるとなると、やりたいことがすぐにコードになるという利点がある。
Microchip社が、これもフリーで出しているMPLAB IDEと、HITEC-Cを用いてトラ技を見ながら始めて書いたコードは以下のとおり。
main()関数の中に色々と書けば、色々とできる。簡単・簡単。
トラ技をよむと、Cでプログラムが組めるではないか!しかも、HITEC-C liteというのを用いれば、すべてフリーソフトでできる。これはいい。アセンブラも楽しいが、Cで組めるとなると、やりたいことがすぐにコードになるという利点がある。
Microchip社が、これもフリーで出しているMPLAB IDEと、HITEC-Cを用いてトラ技を見ながら始めて書いたコードは以下のとおり。
#include <pic.h> __CONFIG(INTIO & WDTDIS & PWRTDIS & MCLRDIS & UNPROTECT & BORDIS & IESODIS & FCMDIS); void main(){ }
main()関数の中に色々と書けば、色々とできる。簡単・簡単。
Verilogライクなシミュレータ [シミュレーション]
2009年2月24日
C++で次のように書ける、ロジック回路のシミュレータを作ってみた。
これは、NANDを二つつなげただけの、もっともシンプルなフリップフロップ。前にPHPで書いたものと違って、今回のは回路の内の遅延などもシミュレーションできるようにしてある。なので、ラッチやフリップフロップを組み合わせた複雑な回路のシミュレーションにも使えるはず。
使ったことないし良く分からないが、Verilogというものに構文が良く似ているようだ。既存のソフトの使い方を覚えるより、使いにくくても自作して細かな調整を自身で行うほうが、私には向いている。今回のシミュレータは、遅延時間を素子ごとにランダムに設定することもできるので、多分、回路を設計するさいの動作確認にも使える。
bool input1,input2; logic* na1=nandGate(); logic* na2=nandGate(); na1->connect(&input1,&na2->output); na2->connect(&na1->output,&input2);
これは、NANDを二つつなげただけの、もっともシンプルなフリップフロップ。前にPHPで書いたものと違って、今回のは回路の内の遅延などもシミュレーションできるようにしてある。なので、ラッチやフリップフロップを組み合わせた複雑な回路のシミュレーションにも使えるはず。
使ったことないし良く分からないが、Verilogというものに構文が良く似ているようだ。既存のソフトの使い方を覚えるより、使いにくくても自作して細かな調整を自身で行うほうが、私には向いている。今回のシミュレータは、遅延時間を素子ごとにランダムに設定することもできるので、多分、回路を設計するさいの動作確認にも使える。
多分必要なもの [一般的なこと]
2009年2月21日
更新は、一年ぶり(正確には、1年3ヶ月)。
制作にあたって、たぶん次のようなツールが必要になる。USBインターフェースのI/Oポートをピックアッピしてみた。
NI USB 6501
USBee AX
NIの方は、24ポートあるのが魅力。少し値ははるが96ポートの製品もあるらしい。
USBeeの方は、8ポートだが、多分(よく調べていない)、スピードはこちらの方が速い。
どちらも、$100ちょっとの価格。とりあえず購入するのは、NIの方かな。実績もあるし。
制作にあたって、たぶん次のようなツールが必要になる。USBインターフェースのI/Oポートをピックアッピしてみた。
NI USB 6501
USBee AX
NIの方は、24ポートあるのが魅力。少し値ははるが96ポートの製品もあるらしい。
USBeeの方は、8ポートだが、多分(よく調べていない)、スピードはこちらの方が速い。
どちらも、$100ちょっとの価格。とりあえず購入するのは、NIの方かな。実績もあるし。
参考になりそうなページ [一般的なこと]
2007年8月14日
ネットサーフィンをしていて見つけた、少し、いや、大いに参考になりそうなページ。
N.Kojima 総目次
実は、この表ページにたどり着く前に『はずかしい回路設計』というページに行き当たった。
ソフトウェアしか開発したことのないエンジニアがいきなり、簡単な回路だからあなたがハードも含めて設計しなさいと言われてしまった場合に陥りやすい誤りについて実例を見ていきましょう。(サイトから引用)
うーん、私はソフトウェアのエンジニアではないが、ギクッとする文面である。幸い、趣味で電子工作しているレベルでは、『とってもはずかしい』には該当しなかったので、ほっと一安心。それにしても、とっても参考になる。
あとは、『言語によるディジタル回路の設計 ~ VDHL』も、参考になりそう。どこかのページで見つけた『Verilog』という言語が気になっていたのであるが、そのあたりについて分かりやすく解説している。今は、ソフトウエアを使ってディジタル回路を設計する時代らしい。こういった手法が使えるようになると、FPGA も使いこなせるようになるのだろうか?
いいね、新しいものも。
N.Kojima 総目次
実は、この表ページにたどり着く前に『はずかしい回路設計』というページに行き当たった。
ソフトウェアしか開発したことのないエンジニアがいきなり、簡単な回路だからあなたがハードも含めて設計しなさいと言われてしまった場合に陥りやすい誤りについて実例を見ていきましょう。(サイトから引用)
うーん、私はソフトウェアのエンジニアではないが、ギクッとする文面である。幸い、趣味で電子工作しているレベルでは、『とってもはずかしい』には該当しなかったので、ほっと一安心。それにしても、とっても参考になる。
あとは、『言語によるディジタル回路の設計 ~ VDHL』も、参考になりそう。どこかのページで見つけた『Verilog』という言語が気になっていたのであるが、そのあたりについて分かりやすく解説している。今は、ソフトウエアを使ってディジタル回路を設計する時代らしい。こういった手法が使えるようになると、FPGA も使いこなせるようになるのだろうか?
いいね、新しいものも。
半日でマイコン作成を体験 [一般的なこと]
2007年8月6日
ネットサーフィンをしていて、面白いページを発見。
半日でマイコン作成を体験:ITpro
回路図を色鉛筆でなぞることで、コンピューターの仕組みを理解しようという試み。あの、Z80マイコン(今は使われないマイコンという言葉を用いているのも一興)の全回路図が掲載されている。これは、いわゆるパチパチ式のコンピューターだ。パチパチ式という検索語でググっても何も出てこないが、パチパチ式マイコンとはこんな感じ。
部品がそろうのなら、作りたくなってきた。
半日でマイコン作成を体験:ITpro
回路図を色鉛筆でなぞることで、コンピューターの仕組みを理解しようという試み。あの、Z80マイコン(今は使われないマイコンという言葉を用いているのも一興)の全回路図が掲載されている。これは、いわゆるパチパチ式のコンピューターだ。パチパチ式という検索語でググっても何も出てこないが、パチパチ式マイコンとはこんな感じ。
部品がそろうのなら、作りたくなってきた。
6 bit CPU [CPU]
2007年7月27日
ばかげた 1 bit CPU を考えていて気が付いたのは、6ビットCPUが結構シンプルに設計できそうなこと。先日のクロック周りの回路の設計から来る考察をくわえて、さらにシンプルなCPUが出来そうな気配。
今考えているのは、6ビットのレジスタとして、
a: アキュムレータ
b: メモリ指定用レジスタ
ds: データセグメント
ip: インデックスポインタ(プログラムカウンタ)
cs: コードセグメント
sp: スタックポインタ
の6つを用意。アドレス空間は、12ビットのアドレスラインで4096ワード(3072ビット)。簡単なプログラムなら、これくらいの要領があればおそらく十分。このあたり、4ビットではなくて6ビットにしたのが味噌で、2ワードのアドレスラインで必要最小限と思われるメモリ領域にアクセスできる。4ビットなら、3ワード必要だろう。74174という6ビットのフリップフロップがあるのも、良い。1つのセグメントが64ワードだから、そこそこの大きさのプログラムがここに収まる。4ビットの考え方だと16ワードで、小さなプログラムしかかけない。ジャンプ命令の仕様で難が出る。
スタックセグメントは、6502に習って省略した。従って、スタック領域は64ワードのみ。フラグは、例によってキャリーとゼロの2つだけである。
今考えているのは、6ビットのレジスタとして、
a: アキュムレータ
b: メモリ指定用レジスタ
ds: データセグメント
ip: インデックスポインタ(プログラムカウンタ)
cs: コードセグメント
sp: スタックポインタ
の6つを用意。アドレス空間は、12ビットのアドレスラインで4096ワード(3072ビット)。簡単なプログラムなら、これくらいの要領があればおそらく十分。このあたり、4ビットではなくて6ビットにしたのが味噌で、2ワードのアドレスラインで必要最小限と思われるメモリ領域にアクセスできる。4ビットなら、3ワード必要だろう。74174という6ビットのフリップフロップがあるのも、良い。1つのセグメントが64ワードだから、そこそこの大きさのプログラムがここに収まる。4ビットの考え方だと16ワードで、小さなプログラムしかかけない。ジャンプ命令の仕様で難が出る。
スタックセグメントは、6502に習って省略した。従って、スタック領域は64ワードのみ。フラグは、例によってキャリーとゼロの2つだけである。