東京大学理学部情報科学科3年冬学期、恐怖の大王が降臨しちゃったりする。
来年からは100万ゲート(!)になるらしいので、これは役に立たないだろう。
とりあえず自分の覚書に使う。
あと、間違ってることが多いと思うが何も責任は取らんぞー。
班決め。
これによって楽になるか苦になるか決まるのだが、俺のようなそういう場面で積極性の無い人たちが集まって班となる。
班長:ゆんさん、CAD:田中嬢、基板:俺、コンパイラ:田中(俊)さん、ソフトウェア:栗本さんだった気がする。
マニュアルを山ほど貰ったが、とりあえず基板係が読まなければいけないのはレジュメとXILINXのマニュアルらしい。
LED点灯実験に入る。
LEDを一つチカチカさせるだけ。「地下でチカチカ」とかいう駄洒落が生まれた。
LED点灯のためのCADでの回路はとても簡単で、クロックとOBUFと出力を設定すればOKらしい。
クロックはFPGAに入っているものが使われるらしい。
俺はCADにノータッチだったのでよくわからない。
この時点で困るのは基板の方。
まず、どの部品が何かがわからない。
とりあえずLED点灯実験に使うのは
基板で注意すること。
大体の位置決め。
FPGAのソケットは中心につけることにする。
これの位置が変わることは最後まで無かろう。
電源は基板のVCCとGNDの位置を見れば大体決まる。
そのすぐそばに電源用のでかいパスコン。
xcheckerのコネクタは足(通常は差し込むのに使う方)の方につけることにする。
それぞれの部品を基板に固定。
FPGAのソケットをつけた。
はんだごてを扱うのは久しぶり。少々練習してから基板を扱うことにする。
基板の金色の部分が隠れるくらいにはつけなければいけないが、隣の穴との隙間が結構狭いので、ブリッジになってしまわないように気をつける。
ちなみに俺の握り方はペン握り。
その次に青いパスコンを、FPGAのVCC,GNDのすぐ近くにつける。
静電用にVCC,GNDのペアにはパスコンをつけなければならない。
FPGAでは2つか3つのペアにつきパスコンひとつでいいらしいんだが、結局8個全部つけてしまった。
パスコンを表から刺すか裏から刺すかは自由。
俺は表から(ソケットと同じ側)刺した。
できるだけFPGAに近づける。というより、VCC,GNDのペアに近づける。
電源コネクタ、でかいパスコン、xchekerのコネクタをそれぞれ基板に固定。
一応短絡無し。
今日はここまで。
今日はLEDを終わらせたいところ。
配線に入る。
電源コネクタをVCC,GNDにつける線は、錫鍍金(?)の太い針金のような線を使うこと。
銅板をVCC,GNDの幹線として中心にまで貼る。つまり、外枠にしかVCC,GNDが無く、それでは届かないから幹線を作るということ。ただし、太い線もしくは銅板を使わなければならない。
ソケットのVCC,GNDをすべてつける。これが結構大変。
ここはあとではずさなくてもすむようにするのがいいが、まぁ、外すだろう、きっと(藁
パスコンの線をつなぐ。それぞれのVCC,GNDにつなぐ。
xcheckerの配線。xcheckerの本体の方を見て、それとマニュアルの信号名をあわせる。
VCC,GNDはそのままVCC,GNDへ。CCLK,DINはそのままソケットのその名前のところにつなぐ。
D/PはDONEに、INIT,PROGは同じ名前のところにつなぐが、ここで抵抗(10kΩ)を挟んでpull upをしなければならない。(VCCにつなぐ。マニュアルのSlave Serial Modeとか見れば載ってる)
RSTはリセットだが、今回はつながない。
ソケットのM0,M1,M2をそれぞれVCCにつなぐ。
この時はそのままつないだが、本当は抵抗(1kΩor10kΩ)を挟むべき。
抵抗(220Ω)を取り付ける。
これは並行版の抵抗で、片方がすべて一つのpinにつながっていて、その他のpinそれぞれがもう一方の端点になっている。
数多くLEDをつなぎたいときなど、LEDの+側をそれぞれこの抵抗の足につなぎ、-側を出力につなぐ。
今回はLEDへの出力は77番を指定されたので、そこにつなぐ。
ひたすらチェック。テスターのライセンスが2つしかないので足りない。
でもさすがにマイテスターは持っていない、というか家に一台しか無い筈なので、送ってとも言えず。
つなぐときになって電源ケーブルはどうするのか、ということになった。
電源のコネクタに合いそうなプラスチックの部品を発見。
さらに共有部品の中に太い赤と黒のケーブル、銀色の小さな部品がある。
ケーブルの端の被覆を少しはがし、はんだでカバーリングして、銀色の部品をそこにはめ、それをプラスチックの部品にはめる。
それを電源コネクタに刺すようだ。
しかし、ケーブルが太すぎて入らない。
西田君に「野村さん(実験助手)にメールだせや(゚Д゚ )ゴルァ!!」と言って、「ケーブルが太すぎます」というメールを出してもらう。
野村さんが細いケーブルをもって現れる。
それから電源ケーブルを作った。
てつ班が一足先に実験。んで成功。
電源ケーブルの先に少し不安があるのでてつ班のケーブルを使わせてもらって実験。
見事点灯。
というわけで、今日はここで終わり。
今日は何もしていない。
他の科目の課題をやっていた。あと寝てた。
今日は全員そろったので仕様とか決めた。
命令長16bit,2オペランド,レジスタは…なんだっけ(ぉ
シリアル転送の勉強をはじめた。
どこをどこにつなぐかはマニュアルに書いてあった。
ただ、まだxilinxのピンのAとかDとかが何を示しているかわかってないので、マニュアルを熟読する必要あり。
あとクロックの分周を外部でやれということなので、水晶発振器にラッチをつなげる必要がある。
また配置に悩みそうだ。
お休み。一日中寝てた。
お休み。学校に行って駄目話に興じる。
お休み。またも学校で駄目話。
シリアル転送についての勉強。
えっと、水道橋と各種マニュアルを見比べる。
MAX232Cについての接続がいまいち怪しい。
だがとにかく気をつけるべきことはタンタルコンデンサの極性を間違えないこと。
危険を伴うのでbottom viewを作るつもり。…だが眠い。
電源が入っているかどうかを判断するためのLEDをつけてくれと言われた。
無性に緑または青のLEDがつけたい気分。
次の月曜のCPU実験の業後、秋葉原へ行幸することになりそうだ。
基板とケーブルのコネクタ部分の部品が間違っているらしく、どう考えてもつなげられないので野村さんにメールを出した。
ケーブルとのコネクタ部分の部品を取り替えてもらった。
休止。
分周について。
にしだくんありがとう。
レジュメに載っているプログラムで使っているのが19.2kHz。
配られた水晶発振子が4.9152MHz。
よって1/256倍にすればいいんだが、μPD71051Cで64倍というのができるらしく、1/4に分周してそれを入れてやればいいとかいう話。
…これでいいのかな?
結局、シリアル転送において、ソフトウェアでやる部分とハードウェア(CAD)でやる部分の境がよくわからない。
進展なし
どこと何処をつなげばいいか、大まかに把握。
泊りがけで連続系アルゴリズム演習の課題に取り組む。
連続系アルゴリズムの課題の締め切り前日。
皆地獄。
適当にくっつけ始める。
手始めに、8のコネクタをつける。
16ピンのソケットの、足の長いものを数個発見。
早々に自分の班の箱に1個入れる。(悪
Xilinxの手前でクロックを分岐させるよ。
水晶発振子の4本の足、どのピンが何なのか、貰った資料には見当たらず。
ネットで調べようとするが、製品名がわからない。
いったいどうすれば…
14,16ピンのソケット、足の短いものしかないので、足の長いものを秋葉原に買いに行った。
ゆんさんに「ケーブル作って」と頼む。
停電のため、今日は休み。
昼過ぎにガッコに行くも、ほとんど人がおらず。
早々に作業を切り上げる。
水晶発振子の4本の足のどれが何かを調べた。
オシレータとか、Xtalとか、名前が多すぎだ。
そうそう、短絡・逆差防止用緑LEDをつけた。
綺麗。
Xilinxにつなぐところ以外、ほとんどつないだ。
Resetボタンをつけろというお達しがあるが、どこに置けばいいんだ。
もうスペースが心配になってきた。
基板小さすぎ。
今日は基板の作業をせず、CADの仕事を見ていた(手伝えよ
μPD71051cの仕様がトンデモなせいで、ほぼ最初からやり直さなければならないと判明してしまった。
12ステートマシン(+0〜7カウンタ)とかいう嫌なものになるようだ。
モード・ワードは一度しか書かなくていいんだよな?
コマンド・ワードを書き込む度に8クロック(16?)待たなければいけないらしい。
禿シク鬱。
進展なし。
Xilinxのマニュアル日本語版を発見。
そういや地下にも一冊転がっていたが、こちらは目次もついたもの。
pdf形式だけど。
英語読みたくないって人、言ってくれれば場所教えるよ。
って、皆は英語読めるか…。
CADの使い方を勉強し始める。
COMPMとかあるんですがー。何だか出力にGTとかLTとか書いてあるんですがー。
どうなんでしょう?使わぬべき物でしょうか?
こけしANDゲートの描き方を知る。(ぉ
回路図上のANDゲートがすべてこけしに!!
回路ができたのでテストしていると、上の方達から駄目だしを受けた。
RDとWRが排他的だというのは嘘。
TxRDYはステータスワードのものと端子のものが違うので気をつけなければならない。
というよりTxRDY,RxRDYはXilinxに入れるべき、など。
また書き直し。だが俺は何もしない(悪
基板側の揃ったバグが発覚。
クロスケーブルをクロスケーブルにしていなかった。
端末側の25pinのCTSを基板のμPDのRTSに、
同RTSをμPDのCTSにつなげる。
同様にTxDATAとRxDATAもクロスしてつなげる、というのが正しい。
それを直して実験。
RS232cではハードウェアリセットをかけるとスタンバイモードになり、モードワード・コマンドワードを書き込むとスタンバイモードを抜けてTxRDYが立つ。
このTxRDYが立つかどうかが第一関門である。
一応TxRDYは立ったものの、一向にXilinxが送り返してこない。
ボーレートが早すぎるのでは、という話になり、19200Hzに変えて実験をすると、一応答えが返ってきた。
むちゃくちゃな答えが。
デバッグに勤しむも、何故かわからない。
忘れていた。
Xilinxのクロックはボーレートの4.5倍以上でなければならなかったのだ。
Xilinxのクロックに8MHzを使ってさくっと実験終了。
Tossy-2先生ありがとう。
メモリをとりあえず二つつける。
アドレス、OE、CE、R/Wは共通。
Xilinxのピンがほぼ埋まる。
ここで「μPDを何故こんなところにつけてしまったのか」、と悩む。
部品の位置は後になって後悔すること多数。
ソケットを買うなら秋月がいいと思う。
足の長いソケットは中々売っていない。
ラジオデパートというところも中々いい。ほぼ何でもそろうと思われる。
何の問題もなく(通信ソフトの方に少しあったみたいだが)メモリの実験終了。
アドレスの上位3bitでどのメモリを使用するか選択するのだが、その3bitを6つのメモリの制御線に変換する必要がある。
と、言うわけで Decoder を使うことになるのだが…。
俺の班は Decoder × 2 を使うことになった。
Decoder には 74138 の 3 to 8 Demultiplier (だったっけ?) を使う。
一番速いのは AS なのだが、川崎にしか売っていないらしい。
次に速いのが F になるが、消費電力が大きいので、3番手の ACT を使うことにした。
というわけで2個購入。
クリスマスなど、関係ないよ…などと言いつつ。
外部クロック以外の部分を全て終わらせた。(メモリを全部つけた)
さて、Decoder×2での変換の方法だが。
メモリの CE は GND につないでしまう。
そして OE と R/W で制御する。
74138 は Low Active に Decode してくれる。
| Inputs | Outputs | |||||||||||
| G1 | G2 | C | B | A | Y0 | Y1 | Y2 | Y3 | Y4 | Y5 | Y6 | Y7 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| - | H | - | - | - | H | H | H | H | H | H | H | H |
| L | - | - | - | - | H | H | H | H | H | H | H | H |
| H | L | L | L | L | L | H | H | H | H | H | H | H |
| H | L | L | L | H | H | L | H | H | H | H | H | H |
| H | L | L | H | L | H | H | L | H | H | H | H | H |
| H | L | L | H | H | H | H | H | L | H | H | H | H |
| H | L | H | L | L | H | H | H | H | L | H | H | H |
| H | L | H | L | H | H | H | H | H | H | L | H | H |
| H | L | H | H | L | H | H | H | H | H | H | L | H |
| H | L | H | H | H | H | H | H | H | H | H | H | L |
つまり、G1 は Active High 、 G2 は Active Low の Enable となっている。
CAD さんに どっち(Active High か Active Low)で出してもらうかは決めておいてもらう。
俺の班は最初、OE と R/W はそのまま(チャート通りに)出して、CE で制御するつもりだったので、Active Low となった。
ただし、 Enable として G2 を選んだ場合、実は G2 = G2A + G2B で、2本に別れているため、少し(本当にほんの少し)つけるのが面倒くさい。
この OE と R/W を2つの 74138 の G2 に入れればよい(G2AとG2Bの両方に入れる必要がある)
あとはメモリ選択用アドレスの3bitを C,B,A に入れれば、各メモリ用のOEとR/WがY0〜Y7から出力されるというわけだ。
何もしないときは全てHighになってくれる。
だからクリスマスなんて関係ないってば。
ROM実験。
班長が乗算表をROMに書き込み、それを読み出す実験を行った。
まぁ少しトラブルはあったものの、すぐに終わる。
μPDが終わってここまで、結構順調だ。
(俺の浮動小数点ライブラリは順調ではないが)