一般的なこと

Jeans & Development 電子ブロック工房 三日坊主 フロントページ

ハンダゴテを買い換え [一般的なこと]

2017年5月20日

ハンダゴテが壊れたので、買い換えることになった。壊れたハンダゴテは、3年半前に買った物。新たに買ったのはHAKKOのFX600というタイプ。amazon.comで見つけた、日本製のハンダゴテ。
2017-05-20-1.jpg

トランジスターCPU、NAND6TRの全回路図 [一般的なこと]

2015年6月21日

半導体としてトランジスターのみを使ったCPUを作成中。NAND6TRと名付けている。写真は、クロック作成部まで完成したところ。
2015-06-21-IMG_0866_s.jpg

明けましておめでとうございます [一般的なこと]

2014年1月6日

こんな田舎のブログにようこそおいで下さいました。

今年もよろしくお願いいたします。

2014-01-06-IMG_0416s.jpg

初めてのTQFP [一般的なこと]

2013年9月15日

MicrochipのPIC32MX150F128Bは、DIPパッケージで、32 KBのRAMを搭載し32 bitのCPUが50 MHzで走る。DIPパッケージでこれだけの性能を持っているチップは例外中の例外で、私の知っている限りよそでは見あたらない。32 KB以上のRAMを持っている物は、QFNとかTQFPとか、表面実装のチップばかりである。

開発を続けているKM-Z80 miniは、現在の所28 KBのRAMを搭載したMZ-80Kをエミュレートしている。MZ-80Kは最大48 KBのRAMを搭載することが出来るので、KM-Z80 miniでも、ゆくゆくはこの容量のRAMを搭載したい。それには、52 KB以上のRAMを搭載したマイコンが必要であるが、残念ながらDIPパッケージでこれだけのRAMを持っている物は無いようだ。

大容量のRAMを実現する方法は、2つ。一つは、大容量RAMを持つチップを利用すること。もう一つは、RAMを外付けで利用すること。一つ目の方法を実現するには、DIPパッケージでは無理で、表面実装の物になる。二つ目の方法では、速度の速いパラレル接続を行うには、やはり表面実装のチップになる。これは、MIPSやARMなどの高速のCPUを持ち、かつI/Oピンの数の多いものは、やはり表面実装になるためである。他方で、ピン数の少ないSPI接続のRAMがPIC32MX150F128Bで使えるが(共に、DIPパッケージ)、この場合はデーターの読み込み速度が問題になる。2 MHzのZ80をエミュレートしているKM-Z80 miniでは何とかなりそうな気もしたが、いずれMZ-700のエミュレートも行うとすると、速度が追いつかない可能性が高い。

そういったことを考え、やはり表面実装のチップもちゃんと扱える用になっておいた方が良いだろうと考え、トライしてみた。

2013-09-15-AUT17958.jpg

CPLDを使ってみる [一般的なこと]

2012年3月24日

汎用ロジックを使って色々組み立てるのも楽しいが、少し規模の大きい回路になると、週末に工作をするという程度で完成させるには大変だ。そこで、CPLDを使えるように、システムのセットアップを試みている。

色々在って、AlteraのMAX3000Aシリーズを使うことにした。他に候補に挙げて色々と試したのはXilinxのXC9500XLシリーズである。私が個人的に行った比較では、次の通り。

1)石の入手のしやすさはあまり変わらない。どちらも、$1-$2で手に入る。
2)3.3V駆動、5Vトレラントや消費電力など、性能はほぼ同じ。
3)私のPC環境ではツールがAlteraの方が安定していた。
4)Altera用のUSB接続のダウンローダー(作成した回路を、石に転送するための道具)の制作方法が公表されている。Xilinxの場合、自作のダウンローダーは、パラレルポートに接続するものしか見あたらない(当然、市販のダウンローダーはUSB接続のものがある)。

以上の比較により、AlteraのMAX3000Aシリーズを使うことにした。

ダウンローダーには、USB-Blasterもどきを使わせていただいた。こういったツールを公表されている方には、本当に感謝である。

ユニバーサル基板に、このUSB-Blasterもどきと、EPM3064ALC44-10Nに合うPLCC44のソケットを載せ、この石が要求する3.3V用の3端子レギュレーターを入れ、別の基板のCPLD/FPGAと通信するためのソケットを追加して、下のようなものが出来上がった。

2012-03-24-cpld.jpg

源内CADでオープンコレクタ [一般的なこと]

2009年9月18日

源内CADには、標準ではオープンコレクタ(オープンドレイン)の回路をシミュレートする機能が無い。自作コンピューターでは、回路簡略化のため、オープンコレクタ(+プルアップ)を多用する可能性が高い。これを源内CADでシミュレートするための仕組みを考えた。

円周率、小数点以下70桁 [一般的なこと]

2009年7月3日

C++で。
#include "stdafx.h"

#include <stdlib.h>

#define FIG 37

void prt(unsigned char* v1){
    unsigned char i;
    for (i=0;i<FIG-1;i++) {
        if (v1[i]<10) printf("0%d",v1[i]);
        else printf("%d",v1[i]);
    }
    printf("\n");
}

void copy(unsigned char* res, unsigned char* v1){
    unsigned char i;
    unsigned short t,c=0;
    v1[FIG-1]=10*((v1[FIG-1]+5)/10);
    for (i=FIG-1;i<FIG;i--) {
        t=v1[i]+c;
        c=t/100;
        if (i) t-=c*100;
        res[i]=t;
    }
}

void clear(unsigned char* res){
    unsigned char i;
    for (i=0;i<FIG;i++) res[i]=0;    
}

void add(unsigned char* res, unsigned char* v1, unsigned char* v2){
    unsigned char cache[FIG];
    unsigned char i;
    unsigned short t,c=0;
    for (i=FIG-1;i<FIG;i--) {
        t=v1[i]+v2[i]+c;
        c=t/100;
        if (i) t-=c*100;
        cache[i]=t;
    }
    copy(res,(unsigned char*)&cache);
}

void mul(unsigned char* res, unsigned char* v1, unsigned char v2){
    unsigned char cache[FIG];
    unsigned char i;
    unsigned short t,c=0;
    for (i=FIG-1;i<FIG;i--) {
        t=v1[i]*v2+c;
        c=t/100;
        if (i) t-=c*100;
        cache[i]=t;
    }
    copy(res,(unsigned char*)&cache);
}

void mul(unsigned char* res, unsigned char* v1, unsigned char* v2){
    unsigned char cache[FIG*3];
    unsigned char* r=&cache[0];
    unsigned char* t=&cache[FIG*2];
    unsigned char i;
    clear(r);
    clear(r+FIG);
    for (i=FIG-1;i<FIG;i--) {
        mul(t,v1,v2[i]);
        add(r+i,r+i,t);
    }
    copy(res,r);
}
void div(unsigned char* res, unsigned char* v1, unsigned char v2){
    unsigned char cache[FIG];
    unsigned char* r=&cache[0];
    unsigned char i;
    unsigned short c=0;
    for (i=0;i<FIG;i++) {
        c=c*100+v1[i];
        r[i]=c/v2;
        c=c-r[i]*v2;
    }
    copy(res,r);
}

int _tmain(int argc, _TCHAR* argv[])
{
    unsigned char* pi=new unsigned char[FIG];
    unsigned char* y=new unsigned char[FIG];
    unsigned char* t=new unsigned char[FIG];
    clear(pi);
    prt(pi);
    for (int n=0;n<127;n++) {
        clear(y);
        y[0]=3;
        div(y,y,2*n+1);
        for (int x=1;x<=n;x++) {
            clear(t);
            t[0]=x+n;
            div(t,t,x);
            div(t,t,16);
            mul(y,y,t);
        }
        add(pi,pi,y);
        prt(pi);
    }
    return 0;
}

copy関数内で丸めの処理をし、下2桁は表示しないようにしてある。このアルゴリズムだとこの辺が限界らしく、桁数をさらに上げると誤差が出るようだ。PICのpi calculatorにも入れてみよう。

割り算無しで円周率の計算 [一般的なこと]

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;
}

多分必要なもの [一般的なこと]

2009年2月21日

更新は、一年ぶり(正確には、1年3ヶ月)。

制作にあたって、たぶん次のようなツールが必要になる。USBインターフェースのI/Oポートをピックアッピしてみた。

NI USB 6501
USBee AX

NIの方は、24ポートあるのが魅力。少し値ははるが96ポートの製品もあるらしい。
USBeeの方は、8ポートだが、多分(よく調べていない)、スピードはこちらの方が速い。

どちらも、$100ちょっとの価格。とりあえず購入するのは、NIの方かな。実績もあるし。

参考になりそうなページ [一般的なこと]

2007年8月14日

ネットサーフィンをしていて見つけた、少し、いや、大いに参考になりそうなページ。

N.Kojima 総目次

実は、この表ページにたどり着く前に『はずかしい回路設計』というページに行き当たった。

ソフトウェアしか開発したことのないエンジニアがいきなり、簡単な回路だからあなたがハードも含めて設計しなさいと言われてしまった場合に陥りやすい誤りについて実例を見ていきましょう。(サイトから引用)

うーん、私はソフトウェアのエンジニアではないが、ギクッとする文面である。幸い、趣味で電子工作しているレベルでは、『とってもはずかしい』には該当しなかったので、ほっと一安心。それにしても、とっても参考になる。

あとは、『言語によるディジタル回路の設計 ~ VDHL』も、参考になりそう。どこかのページで見つけた『Verilog』という言語が気になっていたのであるが、そのあたりについて分かりやすく解説している。今は、ソフトウエアを使ってディジタル回路を設計する時代らしい。こういった手法が使えるようになると、FPGA も使いこなせるようになるのだろうか?

いいね、新しいものも。
<<前の記事