|
SPICEシミュレータは、半導体・回路設計用として企業等での実用上の利用が進んでいますが、回路の学習用としての利用価値も高いツールです。現在入手可能なSPICE系のシミュレータは、ほとんどのものがアナログ/ディジタル混在のシミュレーションが可能です。しかし、アナデジ混在の回路シミュレーションの例は、あまり紹介されていないように感じられます。
以下では、本サイトから入手可能なTopSpiceというSPICEシミュレータの評価版を使用し、「CPUの創りかた」という書籍を参考にさせて頂き、ディジタル回路の一つの最終形とも言えるコンピュータの原理を学べるサンプルを紹介しています。製品版の場合は、入出力に回路を無制限に追加しての実験が可能です。
注)ファイルをダウンロードして試す場合は、回路図ファイル、部品ファイル、プログラム用ファイルを圧縮してあるので、解凍して同じフォルダに入れてから、TopSpiceシミュレータで回路図ファイル(**.sch)を開いて実行して下さい。
提供している回路図ファイルは、バイナリ形式なのでTopSpice以外では開くことができません。また、使用している論理素子も専用のものなので他のSPICEには転用できません。 |
|
|
|
|
|
1. 参考にしている書籍「CPUの創りかた」について |
|
|
表紙には、「IC10個のお手軽CPU設計超入門 『CPUの創りかた』 初歩のデジタル回路、動作の基本原理と製作」 と書いてあります。
10年以上前の2003年9月に初版が出版されました。4ビットの最低限の機能をもつCPUの設計の過程を詳しく説明しながら、IC10個程度で自作も可能という内容です.。
最近のものは少ないようですが、未だにWEB上にはこの書籍を読んで製作した記事が、多く見られます.。
入門書とはなっていますが、お勧めする対象は、ある程度の論理回路の知識があり、コンピュータの原理ってどうなっているのかを知りたいという方です。ディジタル回路への興味と根気があれば、すんなりと読み進めることが可能だと思います。
読みながら製作もしてみるのが良いのかも知れませんが、書籍内で使用している汎用ロジックICの74HCシリーズなどは、後継のシリーズのICを使おうとしても、現在では入手性に問題があるかも知れません。
以下では、SPICEという意外とも言えるツールを使って、書籍で設計しているCPUをパソコン上でシミュレーションしています。
|
|
|
2. 作成するCPU ”TD4” の仕様 |
|
|
Aレジスタ(4ビット)
Bレジスタ(4ビット)
キャリーフラグ(1ビット)
入力ポート(4ビット)
出力ポート(4ビット)
プログラムカウンタ(4ビット)
メモリー(16バイト) |
|
|
|
|
3. TopSpiceでTD4を作成 |
|
|
原書では、使用部品として74HCシリーズのICを使用しています。TopSpice製品版にはこれらのライブラリが内蔵されていますが、評価版でも動かしたいためと、汎用性、将来の拡張性を考慮し、TopSpiceの特長でもある種類豊富なディジタル・プリミティブ(基本素子)から、対応する素子を使用しました。基本素子は、評価版でもすべて使用可能です(この点はPSpiceと違っています)。
TopSpiceに内蔵のディジタル・プリミティブで、74HC161の代わりに使用するカウンタの素子のみ、LOAD信号がクロックに同期するように回路を追加した以外は、基本素子をそのまま使用しています。
ここで取上げるような機能モジュールをSPICEで動かそうとする場合、一般的に、サブサーキットとして、モジュール部を一つの部品としてシンボルを当てはめます。今回も「TD4」の内部回路をサブサーキット化しました。
通常は、回路図に配置するためのシンボル・ファイルを検査回路図に配置し、ネット情報と素子特性情報を組み込んだモデル・ファイルをシンボルに関連付けて動かします。今回は、CPUへの命令を書き込んだプログラム・ファイルファイルも必要となり、やや煩雑です。そこで、TopSpiceのユーザー・パーツ機能を使い、モデルとシンボルを一つにまとめてユーザー・パーツ・ファイルにしました。
なお、TopSpice製品版であれば、入出力に色々な素子を接続して実験が可能ですが、デモ版の場合はノード数の制限で、ディジタル入出力のみが精一杯でした。
|
|
|
4. シミュレーションの動かし方(遊び方) |
|
|
(1) TopSpiceシミュレータのインストール
試してみたい方で、まだTopSpice Demo版をインストールしてない場合は、こちらを参考にインストールを行って下さい。
(2) 必要なファイル
・TopSpice回路図ファイル: TD4_Test_bench.sch
・TopSpiceユーザーパーツファイル: TD4.TSP
・プログラムファイル: TD4_ML.txt
上記ファイルを圧縮してあるので、解凍し、中の3つのファイルを同一フォルダ内に入れて使ってください。 ---> |
|
(3) 回路図ファイルを開き、信号機アイコンをクリックします。初期設定を変えていなければ、解析を実行し、設定済みのポイントの結果波形を表示します。
(4) プログラム・ファイルの編集方法
回路図エディタのメニューバーより、Tools-->Model Utilities-->Open Model File...とクリックして、開いたダイアログで、(2)項のファイルが入っているフォルダを指定し、拡張子.txtを設定すると、TD4_ML.txtというファイル名のテキスト・ファイルを読み取ることができます。テキスト・ファイルですので、全角文字にならなければ、一般的なテキスト・エディタを使用しても構いません。
中には、プログラムが書籍から2つと弊社オリジナルのものが2つ書き込まれてあります。使いたいプログラムどれか一つのすべての行先頭のアスタリスク「*」を削除します。初期の設定では、4番目のプログラムが動くようになっています。他のプログラムを試す場合は、4番目のプログラム行を*印でコメントアウトし、試したいプログラム行の前の*印をすべて削除します。IS=から以下の16行が対象です。
なお、プログラムは2進数で書き込み、各ビット間には半角スペースを入れなければなりません。
(5) 入力ポートへ加えるデータの変更
弊社オリジナル・プログラム「1-15 Timer」では、入力データを変えて実験が可能です。ハイレベルはラベル"$D_HI"と接続、ローレベルはラベル"$D_LO"と接続します。入力は2進数4ビットのデータと認識されます。このプログラムでは、1111を入力すると、1×60×15clock時間後に、出力ポートに1111が出力されます。初期設定では、1clock=100msなので90s後(シミュレーション上)に出力されます。
(6) クロック周波数の変更
TopSpice固有のディジタルのクロック信号源を使っています。周期の変更は、TPER=の値を変え、デューティは(time, state)(time,
state)・・のフォーマットで入力します。製品版の場合は、書籍にあるように論理ゲートを使ってクロック発振回路を作り入力することも可能です。
(7) シミュレーション回路図の下にある.OPTIONコマンドは、TopSpice専用のものです。最初のDIGPWR=5Vは、論理回路のデフォルトの電圧1Vから5Vに変更しています。入出力のレベルに合わせて指定できます。2番目のDIGFREQ=100kは、論理シミュレーションの解析時間を増やしていった場合に、使用ゲート最小遅延により決まってくる論理ステップ数の上限を超えないように最大周波数を制限しておくためのコマンドです。
(8) 解析時間の設定
指定方法は、純粋なアナログ回路の過渡解析の場合と同じです。Step timeは、他のSPICEでは求められないものもありますが、TopSpiceの場合は、シミュレータへ一つの目安として与えます。ここではディジタル回路なので、クロックの周期より小さい値としました。
(9) 観測ポイントの指定
論理出力は、D(ノード名)というフォーマットで指定します。波形表示プログラムは、指定順にLow、Highのレベルのみを表示します。
TD4内部のノード名は下記のように設定しています。内部をプロービングする場合に参考にして下さい。
・プログラムカウンタ出力 X1.A0 - X1.A3
・ROMデータバス X1.D0 - X1.D3
・ALU出力 X1.Q0 - X1.Q3
・Aレジスタ出力 X1.ARG0 -X1.ARG3
・Bレジスタ出力 X1.BRG0 - X1.BRG3
・命令デコーダ出力 X1.AREG_SEL, X1.BREG_SEL, X1.I-O_SEL, X1.PC_SEL, X1./CFLAG
なお、”X1.”は、X1というサブサーキットの内部のノードであることを示しています。
|
|
|
5. マシン語によるプログラミング |
|
|
TD4では、ALU(Arithmetic and Logic Unit:算術論理演算ユニット)が入手困難のため、単機能の加算器を採用しています。これによって、プログラムの制限が厳しく、なかなか凝ったプログラミングは難しいように思えますが、頑張って独自のものを作ってみましょう。
もし公開しても構わないという場合に、弊社にご連絡頂ければ、プログラムファイル内に組み込み、本ページで公開させて頂きたいと思います。
TD4 で使用できる命令一覧表 |
アセンブリ言語 |
マシン語 |
内 容 |
MOV A,Im |
0011 Im |
Aレジスタにイミディエイトデータ(Im)を転送 |
MOV B,Im |
0111 Im |
Bレジスタにイミディエイトデータを転送 |
MOV A,B |
0001 0000 |
AレジスタにBレジスタの内容を転送 |
MOV B,A |
0100 0000 |
BレジスタにAレジスタの内容を転送 |
ADD A,Im |
0000 Im |
Aレジスタにイミディエイトデータを加算 |
ADD B,Im |
0101 Im |
Bレジスタにイミディエイトデータを加算 |
IN A |
0010 0000 |
入力ポートからAレジスタへ転送 |
IN B |
0110 0000 |
入力ポートからBレジスタへ転送 |
OUT Im |
1011 Im |
出力ポートにイミディエイトデータを転送; |
OUT B |
1001 0000 |
出力ポートにBレジスタの内容を転送 |
JMP Im |
1111 Im |
イミディエイトデータ番地にジャンプ |
JNC Im |
1110 Im |
Cフラグが1でないときにイミディエイトデータ番地にジャンプ |
|
|
|
|
|
|
Home | What's Simulation | How to use | Links | Books | Services | About us | Contact us | Blog |
|
Copyright(C) 2014 SimCircuit Technologies Co., Ltd. |