記事作成日時:2024-10-04 11:39:38
最終更新日時:2024-10-05 00:29:02
最終更新日時:2024-10-05 00:29:02
NAND 16bit CPU「NLP-16A」の簡易デバッガの製作についてです。
回路図等は
ここ
を参照してください
デバッガとはデバッグ,つまり不具合を修正する際に使用するツールのことです。本体の回路を作る前にまずはこの殺虫剤です。虫が出たときに殺虫剤が無いと慌てることになってしまいますから。
NLP-16A の動作テストやデバッグはすべてこのデバッガから装置を操作し,実行します。パターンジェネレータやロジックアナライザと言った道具を使用することもありますが,ここでは簡易にデバッグ可能なツールを自作してみます。
このようなツールを自作するメリットとしては,検証対象側のコネクタと物理的仕様を統一することでただただ接続するのみで検証可能になる点です。
完成するとこのようになります。
部品表
番号 | 部品名 | 秋月URL(参考) | 備考 |
---|---|---|---|
U1 | CH32V003F4P6 | 32ビットRISC-Vマイコン CH32V003F4P6 | ●が1ピン |
D1 | 3mm赤色LED | 3mm赤色LED | 四角のパッドがマイナス側 |
R1 | 1608サイズ470Ω抵抗 | チップ抵抗 1/10W470Ω | |
R2 | 1608サイズ4.7Ω抵抗 | チップ抵抗 1/10W4.7kΩ | |
RN1,2 | 8素子集合抵抗4.7kΩ | 集合抵抗 8素子 4.7kΩ | 四角のパッドが1ピン |
C1 | 0.1μF 積層セラミックコンデンサ | チップ積層セラミックコンデンサー 0.1μF50V F 1608 | |
C11 | 10μF 電解コンデンサ | 電解コンデンサー 10μF16V105℃ ルビコンMH7 | 基板のシルクが白い方がマイナス側 |
J1 | 1x6 L型ピンヘッダ | ピンヘッダー (L型) 1×6 (6P) | |
J2 | 1x6 L型ピンソケット | L型ピンソケット 1×6(6P) | |
J3 | 2x5 ピンソケット | ピンソケット (メス) 2×5 (10P) | |
J4 | 2x20 ピンヘッダ | ピンヘッダー 2×20 (40P) | ピンヘッダー 2×40 (80P)を折って使うと安い |
J5-J8 | 2x10 ピンヘッダ | ピンヘッダー 2×10 (20P) | ピンヘッダー 2×40 (80P)を折って使うと安い |
J9 | 1x2 ピンヘッダ | ピンヘッダー 1x2 | |
基板上の実装無し | USB-シリアル変換 | CH340E USBシリアル変換モジュール Type-C | Arduino pro miniの書き込みに使えるのもなら基本なんでもおk(5V系) |
ファームウェアの書き込み
デバッガのファームウェアの導入です。上から順に書き込みを行ってください。なお,ファームウェアはMounRiverStudioのプロジェクトファイルで公開していますので,そちらの導入と使い方についてはインターネット等で調べていただければと思います。
リセット無効化
ファームウェア準備 NRST_GPIONLP-16A簡易デバッガでは電源ピンを除くすべてのピンをGPIOとして使用しています。つまりプログラム書き込みに使用するピンやリセットピンもすべてGPIOとして使用する設定に変更する必要があります。
リセットピンはマイコン中のフラッシュに設定を書き込むことでGPIO PD7に変更可能です。(詳しくはデータシートを参照してください)
ファームウェア準備ではこの変更を行います。
デバッガに書き込み機(WCH-LinkEエミュレーター)を接続し, 書き込み前に TeratermやMounRiverStudioのシリアル端末を使用して115200baudでオープンしてください。
この状態で書き込みを行います。
書き込み直後にプログラムが走りますから,シリアル端末にFLASH_COMPLETEが表示されれば設定完了です。(場合によっては数値とfinishだけかも)
スポンサードリンク
本ファームウェア書き込み
本ファームウェアリセットピンの処理が終わったところで本ファームウェアを書き込みます。
同じようにシリアル端末と接続し電源を投入した後にdebug board firmware v1.6 (c)cherry tech 2023と表示されればファームウェアの導入は完了です。完了したら動作確認に移ります。
動作確認
デバッガとは言え自作のものにはバグが付き物です。ですのでまずはデバッガのデバッグから始めましょう。「デバッガのデバッグってなんだよ」感はありますがちゃんとやらないとちゃんと苦しむ結構重要なコトだったりします。ここから自分で色々と基板を作ってそれを組み合わせて行くわけですが,信頼できないものと信頼できないものを組み合わせても動くわけがないのです。このデバッガのデバッグは今後の「信頼できる」の礎にあたる箇所の作業です。
言っても実際の作業は大したことではなく,デバッガを以下のように接続しテストコードを実行して確認できます。
バージョンが古いですが,リボンケーブル接続の仕様は同様ですので参考にしてください。ただし右側の青いジャンパワイヤの接続は不要です。
J9をショートします。複数台繋げた場合でも末端 (PC から一番遠い側) を同じようにショートさせることで末端であることを知らせます。
テストの実行はリポジトリの ここ にあるmain.pyを実行します。
$python3 main.py
windows環境などでは単に"python"の場合もあります。
これを実行すると
input 0 open COM6という感じで接続するシリアルポートを尋ねられます。使用するポートを確認して input に続く番号 (例えば COM6 であれば 0) を入力し Enter を押すとテストが走ります。
input 1 open COM4
Please enter the port number
最後に
test passd
と表示されればデバッガの動作は正常です。 4番ピン(PD7)で動作が落ちる場合はリセットピンをGPIOに変更することに失敗しています。リセット無効化の章を参照してファームウェアを再度導入してください。
テストの仕組み
ここで接続している「ALU バス」は本来演算装置などで使用するバスをテストする際に使用するものです。このバスは 16bit のバスが 8bit バス x2 本出ていまして,図のように 0~7bit までを出力するポートと 8~15bit までを出力するポートがあります。テスト 1 では 0~7bit まで (以降下位 8bit) からデータを出力し,8~15bit(以降上位 8bit) で受信したとき,テスト 2 では上位 8bit からデータを出力し,下位 8bit で受信したときに出力した値と受信した値が一致しているかどうかを確かめることでテストを実行します。このようにテストを行うことで断線やショートしている箇所を発見することが可能です。せっかくなので試しに私の環境でショートをさせてみました(本体だけでなくPCも危ないのでやらないようにお願いします。やるにしても自己責任で…)
ここでは 2 番ピンから H を出力していますから,本来なら A 番 (十進で 10 番) ピンだけが H になっている必要があります。しかしショートさせているため,となりの B 番ピンまで H になっています。
考えられることはもちろん A 番と B 番がショートしている時ですが,実は出力側の 2 番ピンと隣の 3番ピンがショートしている可能性もあります。
デバッグの難しい所はこのようにただただ出力で見えているところだけが原因になるのではなく繋がっている先すべてに原因の可能性がある点です。
コツというほどではないですが,まず,現在の入力値に対しての回路のすべての素子の出力が H なのか L なのかを書き出して見ましょう。その上で問題があるピンがその出力になるためにはどこがおかしければそうなるかということを,問題があるピン側から入力側へ追っていきます。これらのデータを集めた状態で各端子をオシロやテスター,紹介した LED 式テスターで出力レベルを確認してみれば自ずと不具合個所が分かります。
泥臭いですがこれがNAND CPUを完成させるうえで最短経路ですので頑張って下され…
分かりにくい箇所等あればコメント欄やTwitterなどでお気軽にどうぞ~
関連するページ
-
NLP-16Aの製作 *****
記事作成日時:2024-08-25 00:02:06
最終更新日時:2024-10-23 23:20:02
-
NLP-16A 簡易デバッガ NAND 16bit CPU「NLP...(以下略)
記事作成日時:2024-10-04 11:39:38
最終更新日時:2024-10-05 00:29:02
-
NAND 16bit ALUの製作 *****
記事作成日時:2024-08-24 22:39:14
最終更新日時:2024-10-12 22:19:20