実施初年度の1996年(平成8年)度は, 履修登録した3年生53人のうちの50人が, 割算ができるという意味で完全なコンピュータを完成させました.約半数の学生はクイックソートを走らせ,3人は2〜4段のパイプラインRISCを稼働させました.広島市立大学は1994年(平成6年)4月に開学しました.この1996年(平成8年)の4月に最初の3年生が誕生しました.
筆者(高橋隆一)が丁寧にパイプライン化を指導した女子学生(右端の写真)は完全なインターロック機構を搭載していました.開発コード名は「maruCa58」,愛称は「Bonjour」でした.以下は,この女子学生が1996年(平成8年)9月に提出したレポートのプリフェッチユニットの当該部分です.リセット信号(RESET)によってプリフェッチユニットはアイドル状態(IDLE_F)に遷移して待機します.当時使っていたシンセサイザはレジスタに対する "assign"や"deassign"を扱えていました.
図1. Bonjour(maruCa58)のプリフェッチユニット
スタート信号(RUN)を受け取るとフェッチを続ける状態(FETCH)に遷移します.ハザードを検出したことを表すSTALLの信号を受け取ると,待ち状態(WAITING)に遷移してハザードを回避しています.STALLの信号を彼女は"DELAY"と呼んでいました.
彼女のBonjour(maruCa58)は2段パイプラインのRISCマシンで,メモリはバンク構成されていました.当該女子学生が書き残したブロック図を以下に示します.
図2. Bonjour(maruCa58)のブロック図
パイプラインRISCを稼動させた他の2人は男子学生で,愛称は「T square 」と「SCEPTER」でした.
3人のパイプライン設計の比較 |
愛称 | パイプライン段数 | 同じ割り算のステップ数 | 動作周波数 |
Bonjour | 2段 | 1.86倍 | 69.6MHz |
T square | 3段 | 1.57倍 | 34.4MHz |
SCEPTER | 4段 | 1(比較基準) | 27.0MHz |
ステップ数は多くても,動作可能クロック周波数が高いため,Bonjourは他の男子学生2人のパイプライン・コンピュータより高速でした(笑).というより,他の男子学生たちは「命令をデコードもせずにパイプラインに流す」という設計をしていてクロック周波数が低下したというのが真相でした(笑).
実施初年度の1996年(平成8年)春,他の殆んどの学生には,翌年からCISC-1と呼ぶことになるRTL記述を書き下して提供しました.ここにRTL記述はデータパスと制御部を分けて記述し,制御部には制御信号を発生する順序回路を記述する構造記述を意味します.
半導体理工学研究センター(STARC)が推奨してきたRTLでのVerilog HDLによる記述スタイルも,Verilog HDLによる構造記述であり,RTL記述でした.各モジュールはどんな場合にどんなデータがセットされるかを箇条書きしたレジスタで終端するよう指導されていました.
STARCが推奨してきたVerilog HDLによるRTLでの記述スタイルはNECが1980年代既に実用化していたFDLという独自のハードウエア記述言語のVerilog HDL版と見ることがことができたりもします.FDLはレジスタ毎にどんな場合にどんなデータがセットされるかをIF THEN ELSEで箇条書きするHDLでした.
CISC-1は世に言うRTL記述というだけでなく,順序回路の状態割り当てに特徴がありました.一部の学生にはパイプライン化を指導しましたが,CISC-1を書き下すことで「水平型のマイクロ命令を順序回路で発生させる」というアイデアの指導を優先したのです.
CISC-1で提示したマイクロ命令での状態割当ては後に結線論理マイクロコードマシンと呼ぶことになる高速な制御を可能ならしめる設計でした.CISC-1は命令ごとに所要クロックサイクル数の異なるコンピュータでした.CISC-1はこのようなCISCに対する水平型の制御,1制御点1ビットという水平型のマイクロプログラムであるかのような制御方式が結線論理制御でも容易に実現できることを示していました.Verilog HDLの7個のモジュールからなる573行という記述量でした.
フェッチ,デコード,算術論理演算という「実行フェーズ」に対応する1ビットずつの信号を生成するという制御方法が指導されることがあります.このような信号を発生する順序回路は「フェーズ・ジェネレータ」と呼ばれます.状態レジスタはフェーズの数だけの幅をもち,"one-hot"という符号化でどのフェーズにあるかの信号を発生させるわけです.状態遷移はシフト・レジスタによる実現が可能です.
フェーズ・ジェネレータは初心者には分かりやすい設計ですが,マイクロ命令として状態割当てを行うCISC-1でご理解いただけるように,あくまで可能なひとつの制御方法にすぎません.
フェーズ・ジェネレータはパイプライン設計には意味がありません.「フェッチ」,「デコード」,「実行」というパイプライン・ステージは独立した状態機械として動作します.各ステージの間にはステージング・ラッチと呼ばれるバッファが置かれ,データの受け渡しが行われます.前段のステージを実現する状態機械はステージング・ラッチに処理結果を置き,置いたことを示すレディー信号を発生させます.後段のステージを実現する状態機械は,前段のステージからレディー信号を受け取ることで起動されます.各ステージを構成する状態機械に実行フェーズを示す信号を送ることに意味はないのです.
「ハザードの回避にNOP命令は必須だ」という指導も誤りです.完全なインターロック機構を搭載していればNOP命令は必要ありません.
本マイクロコンピュータ設計教育環境City-1では実施2年目の,翌1997年(平成9年)度に完全なインターロック機構を搭載するパイプライン設計教育を本格化させました.
結線論理マイクロコードマシンやパイプライン化について詳しくは拙著をご覧下さい:
|