#VRChat「CS集会」第24回 参加レポート ~4ビットCPU自作!シフト演算回路の実装~

詳細情報

集会名 CS集会
日時 2024年04月23日 21:00 - 21:30
テーマ
発表者
発表資料

発表のハイライト

  • 4ビットCPU自作プロジェクトの一環として、算術論理演算ユニット(ALU) の主要構成要素である シフト演算回路 の実装について解説。
  • シフト演算の種類や仕組み、有限桁における処理の差異、回路設計の詳細などを図解を交えて詳しく解説。
  • ALUの実装はほぼ完了しており、残るフラグレジスタと比較器についても今後の集会で取り上げる予定。

はじめに

2024年4月23日にVRChatで開催された「CS集会」第24回に参加しました。この集会では、発表者さんが自作している4ビットCPUの開発進捗をシフト演算回路の実装に焦点を当てて解説しました。本記事では、発表内容を踏まえながら、シフト演算の基礎から回路設計の詳細までをわかりやすくまとめます。

シフト演算とは?

シフト演算とは、ビット列に対してビットを左右に移動させる演算です。コンピュータ上で掛け算や割り算を高速に行う際に利用され、ビット列の桁数を増減させる効果があります。

発表では、シフト演算を

  • 右シフト演算: ビット列を右にシフトする
  • 左シフト演算: ビット列を左にシフトする

の2種類に大別し、それぞれの特徴を解説しました。

シフト演算の種類

コンピュータ上で行われるシフト演算は、シフトの方法によってさらに細かく分類されます。発表では、以下の3種類について解説がありました。

  • 論理シフト
    • 符号ビットを考慮せず、単純にビットをシフトする
    • 左シフトでは、最下位ビットに0を挿入
    • 右シフトでは、最上位ビットから0を挿入し、最下位ビットは消失
  • 算術シフト
    • 符号ビットを保持したままシフトする
    • 左シフトでは、論理シフトと同様
    • 右シフトでは、最上位ビット(符号ビット)を保持したまま、上位ビットから符号ビットを挿入し、最下位ビットは消失
  • 循環シフト
    • ビット列を環状につなぎ、シフトによって押し出されたビットを反対側の端に入力する
    • 左シフトでは、最上位ビットが最下位ビットに移動
    • 右シフトでは、最下位ビットが最上位ビットに移動

これらのシフト演算は、符号の扱い、桁あふれ(オーバーフロー/アンダーフロー)への対応方法がそれぞれ異なり、プログラムの用途に応じて使い分ける必要があります。

有限桁におけるシフト演算

コンピュータは有限桁のデータしか扱えないため、シフト演算を行う際には桁あふれへの対策が必須です。発表では、実際に設計中の4ビットCPUを例に、有限桁におけるシフト演算の実装方法について解説しました。

シフト演算回路の実装

発表では、4ビットCPUの算術論理演算ユニット(ALU) 内にシフト演算回路を実装する手順を詳しく説明しました。

回路設計

シフト演算回路は、入力データと制御信号に基づいて出力データを生成します。

  • 入力データ:4ビット
  • 制御信号:1ビット(0: 特定ビットを出力、1: 上位ビットを出力)
  • 出力データ:4ビット

各出力ビットは、入力データと制御信号を入力とするセレクタによって決定されます。制御信号が0の場合は、入力データの特定ビットがそのまま出力され、制御信号が1の場合は、入力データの上位ビットが出力されます。

回路図

発表では、シフト演算回路の回路図を具体的に示し、各ビットの接続関係を解説しました。4つのセレクタを組み合わせることで、4ビットのデータに対してシフト演算を実現しています。

まとめ

今回の「CS集会」では、4ビットCPUのシフト演算回路の実装について、具体的な回路設計や動作原理を学ぶことができました。ALUはほぼ完成に近づいており、残るフラグレジスタと比較器の実装にも期待が高まります。

最後に

本記事では、「CS集会」第24回の発表内容を元に、シフト演算回路の実装について解説しました。自作CPUの開発は、コンピュータの動作原理を深く理解する上で非常に貴重な経験となります。今後の発表でも、引き続き開発の進捗を共有していくとのことなので、興味のある方はぜひ参加してみてください。