jABEL — ABEL の式を入れれば、信頼できる GAL が出てくる
小さな GAL には今でも魅力がたくさんあります。GAL16V8、GAL20V8、GAL22V10 は安価で、ブレッドボードにそのまま挿せるスルーホールの DIP パッケージ、5 V 動作、電源投入と同時に動き出し、74 シリーズのゲートやデコーダ、カウンタを何個もまとめて 1 チップに置き換えられます。部品自体は今も製造・流通しています。静かに姿を消したのはソフトウェアの方です。昔の ABEL コンパイラはDOS のツールで、その後はこれらのデバイスをとうにサポート対象から外したベンダーのツール群の一部になってしまいました。
そこで作ったのが jABEL です。ABEL-HDL
(論理式、セット、WHEN/THEN/ELSE、ステートダイアグラム、真理値表、テストベクタ)を読み込み、TL866/XGecu などの一般的なプログラマでチップに書き込める JEDEC ヒューズファイルを出力する、小さな単体の Java プログラムです。対象は、今でも買える 3 種類のデバイスだけ。その 3 種類をきちんと扱います。
| デバイス | パッケージ | 入力 | 出力 | 主な用途 |
|---|---|---|---|---|
| GAL16V8 | 20 ピン DIP | 最大 16 | 最大 8 | グルーロジック、ゲート、小規模カウンタ |
| GAL20V8 | 24 ピン DIP | 最大 20 | 最大 8 | 同上、入力がより多い用途(アドレスデコーダ) |
| GAL22V10 | 24 ピン DIP | 最大 22 | 最大 10 | 大きな論理式、ステートマシン、リセット/プリセット |
はじめての ABEL プログラム
入門には、考えうる最小の設計がいちばんです。GAL16V8 の中に AND ゲートを 1 つ作ってみましょう。jABEL を起動し(abel-jedec.bat をダブルクリック、または java -jar app/abel-jedec.jar を実行)、
Editor Open を押して次のように入力します。
module demo;
title 'Simple demo for the editor';
demo device 'p16v8'; " 使用するチップ
a,b pin 2,3; " 入力 2 本
y pin 15; " 出力 1 本
equations
y = a & b;
test_vectors
([a,b] -> [y])
[0,0] -> [0];
[0,1] -> [0];
[1,0] -> [0];
[1,1] -> [1];
end demo;
ABEL ファイルはどれも同じ形をしています。宣言部でチップを指定し、各信号にピンを割り当てます。
equations で出力の動作を記述します。& は AND、# は OR、
! は NOT、$ は XOR です。そして test_vectors に期待する結果を書きます。矢印の左が入力の組み合わせ、右がそのときの出力です。ダブルクォート以降はコメントになります。
次に Create Output を押します。jABEL はソースを解析し、論理を最小化し、GAL の動作モードを選び、すべての積項を配置して、得られた JEDEC ヒューズマップを右側に表示します。
重要なのは下の 3 行です。Fuse checksum 0BF4 はファイルに格納されたチェックサム(C0BF4* の行)で、プログラマにも同じ値が表示されます。Fuse map checked against the equations: OK は、jABEL が
今書き出したヒューズだけから GAL16V8 のモデルを組み立て、あらゆる入力の組み合わせで動かして、式と照合したという意味です。
Test vectors: 4 run, 0 failed は、4 つの期待値がそのシミュレーション上のチップでも成り立ったことを示します。
ERSTES.ABL("erstes" はドイツ語で「最初の」)と同じ設計です。jABEL が出力する JEDEC ファイルは、EZ-ABEL が 1998 年に書き出したものとヒューズ 1 本単位まで一致します。ヒューズマップもチェックサム C0BF4 も同じです。
「ロジックアナライザ」で見る
Timing Diagram を押すと、テストベクタが波形として再生されます。卓上ロジックアナライザのような黒地に白の表示です。入力は指定したとおりの値、出力はシミュレーション上のチップが実際に出した値です。出力がベクタと食い違うと赤で表示されます。
わざと間違えてみてください。最後のベクタの期待値を [0] に変えて Create Output をもう一度押すと、レポートと波形の両方がそれを指摘します。間違いを教えてくれるツールは、いつも「完了」としか言わないツールより価値があります。
3 つのフォルダと 3 つのボタン
jABEL は作業内容をプログラムの隣にある 3 つのフォルダに分けて保存するので、完成品と試作品が混ざることはありません。
ABELfiles— 作例集(ABEL Open)。基本的に読み取り専用で、保存すると作業フォルダにコピーされます。ABELeditor— 作業フォルダ(Editor Open、Save、Create Output)。試作の JEDEC ファイルはソースの隣に作られます。JEDECfiles— プログラマに渡す最終ファイル(Generate Jedec)。設計にエラーがあればjABEL はここにファイルを書き込まず、テストベクタが失敗した場合は事前に確認を求めます。
2 つ目の設計:クロックのある回路
入門ガイドは続いて、イネーブル、同期クリア、トライステート出力付きの 2 ビットカウンタに進みます。ここでレジスタ、セット、WHEN が登場します。
Q = [q1, q0]; " セット:2 本のピンを 1 つの数値として扱う
equations
Q.clk = clk; " ピン 1 のクロックで動くレジスタ
Q.oe = !oe; " ピン 11 が Low の間だけ出力オン
when clr then Q := 0;
else when en then Q := Q.fb + 1;
else Q := Q.fb;
carry = q1 & q0 & en;
:= は「次のクロックエッジで」、テストベクタ中の .c. は「クロックを 1 パルス入れる」という意味です。タイミング表示ではクロックがエッジの矢印付きで描かれ、セットは 16 進のバスとして表示されます。カーソルをドラッグすれば各時点の値を読み取れます。
チップはどれくらい埋まっている?
GAL は小さいので、最後には必ず「まだ収まるか?」が気になります。Usage タブがその答えです。出力セル、積項、入力ピンの使用数と空き、出力ピンごとに積項をどれだけ使ったかを示すバー、そして同じ設計が他の 2 デバイスにも収まるかどうかが表示されます。
ヒューズを信頼できる理由
JEDEC ファイルは数千個の 1 と 0 の並びです。目で確認する人はいませんし、プログラマが確認するのはチップがファイルどおりの内容を保持しているかどうかだけです。そこで jABEL は毎回自分自身を検証し、リリース前には独立したツールとも照合しました。
- 自己シミュレーション:コンパイルのたびに、自分のヒューズマップからチップを組み立て直して式と比較します(1 つの式あたり入力 14 本までは全数検査)。さらにテストベクタをクロックごとに実行します。
- EZ-ABEL との照合:上の参照設計で、ヒューズ 1 本単位まで同一の出力。
- Galette との照合:3 チップの全モードを網羅する手書きの設計 7 つと、ランダム生成した設計 900 個で、ヒューズ配置がすべて一致。
- 正しいチェックサム:16 ビットのヒューズチェックサムと STX/ETX の伝送チェックサムを、プログラマが期待するとおりに計算します。
--check file.jedで手持ちの JEDEC ファイルも検証できます。
ヘルプを内蔵
Info メニューには 2 つのガイドがあります。数十種類の旧式 PAL を扱った昔のマニュアルの写しではなく、この 3 デバイスのために書き下ろしたものです。Writing Your First ABEL Programme(F1)は空のエディタから書き込み済みのチップまでを案内し、ABEL Language Guide は jABEL が受け付ける言語全体を解説します。セットと算術演算、ドット拡張子、レジスタ、ステートマシン、真理値表、各デバイスのピン配置と動作モード、そして古い PAL 設計の移植方法(JK、T、SR フリップフロップを D 式に書き換える方法を含む)まで扱っています。
ガイドに載っている完全な作例(デコーダ、リセット/プリセット付き 22V10 シフトレジスタ、信号機のステートマシン、プライオリティエンコーダ、T フリップフロップのカウンタなど)はすべて ABELfiles に収録されており、それぞれのテストベクタに合格しています。
パッケージの内容
app/abel-jedec.jarと、Windows(.bat)および Linux/macOS(.sh)用の起動スクリプト。必要なのは Java 11 以降だけで、インストーラ不要、レジストリへの書き込みもありません。- 3 つの作業フォルダと、18 本の作例およびその検証済み JEDEC ファイル。
- 2 つのガイド(一般の Web ブラウザでも閲覧可)、PDF マニュアル、変更履歴。
- バッチ処理や makefile 用のコマンドライン:
java -jar app/abel-jedec.jar -i design.abl -o design.jed -v - 全ソースコード、回帰テスト一式、Galette との照合スクリプト。
Q と q は同じ信号として扱われ、衝突する場合は黙って統合せずにエラーで知らせます。
まとめ
jABEL は、今でも役に立つこの小さなチップたちに、モダンで無料の、ウィンドウ 1 つで完結するワークフローを提供します。ABEL を書き、Create Output を押し、正直なレポートを読み、波形を確認し、検証済みの JEDEC ファイルをプログラマに送る。引き出しに GAL が眠っている方、昔の PAL 設計をよみがえらせたい方、あるいは手に取れるチップでプログラマブルロジックを独学したい方にとって、その作業をもう一度楽しいものにしてくれるはずです。
jABEL はご依頼に応じてお送りしています。下のフォームから、作りたいものについて少し教えてください。