[16 bit Free CPU のトップページ]

規定課題の説明(パルテノン研究会資料)

pdf ファイル(ただし, html のほうが新しいです. )

目次

はじめに

課題の概要

課題の詳細

設計結果の評価方法

ドキュメントについて

提出物


はじめに

[next | top | previous]

パルテノン研究会主催の ASIC デザインコンテストでは, 当初より KUE-CHIP2 を規定課題のひとつとして選定し, 多くの応募を得てきましたが, 命令セットやデータパスを指定していましたので次第にアイデアが出尽くし た感があります. また一方で KUE-CHIP 以降, 多くの大学で独自の教育用プロセッサの設計 (PICO, Kite, Aser, SMPLなど) が 行われ, 学生の工夫を引き出すための様々な試みが行われるようになってきてい ます. この成果を活用できて, すなわち手持ちの材料やアイデアをそのまま使えて, かつ多くの所で競い合うことの出来る新しい規定課題 はないものだろうかということで, この「16ビット CPU 設計」規定課題が作られました. この考え方と規定課題の問題そのものは慶応大学の天野先生のアイデアです. NTT 未来ねっと研究所の中根が審査をきちんと行うための方法を決め文書化しま した.

課題の概要

[next | top | previous]

課題は 以下の 3 つの問題を解くのに最適な命令セットを持った CPU を SFL で設計することです.

  1. [ソート]16 bit の正整数データ 256 個をソートする.
  2. [素数] 1 から 1023 までの素数を算出する.
  3. [G.C.D.] 2 つの 16 bit の正整数の最大公約数を計算する.

上の問題を解く CPU を設計する場合, 具体的には次の 3 つのものを設計しなければなりません.

  1. ハードウェアのアーキテクチャ
  2. CPU の命令セット
  3. 各問題を解くプログラム

これらは上の問題が解ける最低限のものが備わっていれば良いとします. ただし設計に際してメモリに以下の制約を設けます.

  1. CPU とメモリの間のバンド幅は合計で最高 32 bit/clock までとします. 32 bit/clock までであればその構成は問いません. 具体的な例について は ハードウェアの設計 の項目を参照してください.
  2. メモリのアドレス空間は最低 16 bit で表されるものとします.
  3. メモリには 1 クロックでアクセス可能であるとします. (つまり, キャッシュの工夫は意味がありません. )

この制約を満たすメモリを前提として上の 3 つの問題を解く CPU, 命令セット 及びプログラムを設計してください. なお, 制約を満たすメモリモジュールの記述 ( SFL の declare, circuit 記述, 及び pcd 記述 ) はコンテストの事務局で用意します.

以上をまとめますと, この課題での設計は大きく分けて図 1 のように分類されます. そして, これらのうちプログラム, 命令セット, メモリモジュールへの インターフェースを含めたハードウェアが設計対象となります.

設計要素の内訳図

図 1 : 設計要素の内訳

課題の詳細

[next | top | previous]

設計対象

最初の項目で述べたように, この課題での設計は大きく分けて 図 1のように分類されます. 以下, それぞれについて解説します.

ハードウェアの設計

メモリの構成

ハードウェアの設計ではメモリに制約を設けています. 合計のバンド幅が最高 32 bit/clock であるという条件を実現するため, この課題専用のメモリの declare 記述, circuit 記述, pcd 記述を コンテスト事務局が用意します. 従って, 設計, 動作シミュレーション, 論理合成にはこれを 使用することとします.

このメモリは図 2 のように, アドレスのビット数が 16 bit, 1 アドレスの記憶サイズが 1 bit の メモリユニットを 32 個並べたものとなっています. メモリの具体的な SFL 記述は mem.sflに示します. このメモリの使用については, その束ね方は自由ですし, また動作中に 束ね方を変更することも自由に行って構いません. 例えば 16 bit のメモリが 2 つあるようなハーバードアーキテクチャ を最初に構成し, 命令によって 8 bit のメモリが 4 つあるように再構成して使用しても 構わないということです.

(変更)メモリの記述自体は変更されています. ただし, 外部とのインターフェースは変更はされていません. 変更後のメモリの具体的な SFL 記述はmemmod.sflです. memmod.sfl はサブモジュールとして memunit.cirを含みます.

メモリの基本構成

図 2 : メモリの基本構成

標準アドレス空間による制約

上のように自由度を高くすると審査のための処理結果の観測が 困難になりますので, メモリの使用に際して以下の制約を設けます. その制約とは, 処理対象のデータの初期値のセットと処理結果の観測を標準アド レス空間によって行えるようにする というものです. ここで標準アドレス空間とは, アドレスのビット数が 17 bit のアドレス空間とし, 1 アドレスの記憶サイズは 16 bit であるとします (標準アドレス空間と SFL メモリの対応図 (図 4 ) を参照してください). 標準アドレス空間によってデータセットと結果観測を行えるように するために, 標準アドレス空間のワードに対して 図 2のメモリユニットの番号とアドレスの組の対応を 定義してください. ですから, 具体的な制約としては, この対応を 応募者が規定しなければならない, ということになります. また, この対応はデータセット時と結果観測時で同じ規則に 基づくものでなけれならず, 処理内容に関わらず同じ規則で なければならないとします. ただし, この制約はデータセット時と結果観測時においてのみの制約なので, プログラムによる処理中に一時的に対応が定義不可能になったり, 意味を持たなくなるのは構いません.

メモリの使用例

代表的な使用例として, ハーバードアーキテクチャの構成法を説明します. メモリアクセスのバンド幅が 32 bit/clock なので, 命令メモリへのアクセスに 16 bit を使用し, データメモリへのアクセスに 16 bit を使用することになります. この場合, 図 3 のように 16 個の 1 bit メモ リユニットに命令メモリ用のアドレス線等を接続し, 残った 16 個の 1 bit メモリユニットにデータメモリ用のアドレス線等を接続 すれば実現できます. この利用形態での SFL 記述を memuse.sfl に示します. CPU からデータメモリを読み出す場合, アクセスするアドレスを adr にセッ トし, read_data 端子をアサートすると, memmod m を構成する メモリユニットのうち, 16 個の制御入力端子がアサートされます. これによって 16 個の各メモリユニットから 1 bit のデータが読み出されます. これらのデータ出力を束ねたものが data_in 端子の内容となります.

一方 CPU からデータメモリに書き込む場合, 書き込むアドレスを adr に, 書き込む内容を data_out にセットした上で read_data 端子を アサートします. すると adr は全てのメモリユニットに送信され, data_out 端子の内容は各メモリユニットに分配されて書き込まれます. 命令メモリについても同様で, read_instruction , write_instruction で メモリの読み出し, 書き込みを行えます. このような中間の制御端子を設けることで, CPU 側からはメモリを 16 bit 幅のメモリ 2 つとして扱えるようになります.

図 3 命令メモリとデータメモリへの分割の構成例

図 3 : 命令メモリとデータメモリへの分割の構成例

この例での標準アドレス空間との対応は例えば図 4 のようなものが考えられます. 標準アドレス空間でのアドレス x におけるワードを STD[x] と表記し, メモリユニット番号 n とそのアドレス y の組を REAL[n, y] と 表記するとすると, この対応関係は

  1. x < 0x10000 のとき,
    1. STD[x] => REAL[15, x], REAL[14, x], ... REAL[0, x]
  2. x <= 0x10000 のとき,
    1. STD[x] => REAL[31, x-0x10000], REAL[30, x-0x10000], ... REAL[16, x-0x10000]

(ただし, REAL のほうは MSB から順に並べてあります. )

となります.

ハーバードアーキテクチャでの標準アドレス空間と SFL のメモリの対応例

図 4 : ハーバードアーキテクチャでの標準アドレス空間と SFL のメモリの対応例

論理合成の条件

最後に, 設計したハードウェアの論理合成に際しての条件を述べます. 論理合成には PARTHENON システムを利用しますが, ライブラリは PARTHENON システムに標準で付属の DEMO 社 demo ライブラリに, コンテスト事務局で用意したメモリの pcd 記述を 加えたものを使用するとします. このメモリについては, ゲート数, 消費電力, 面積 が 0 として合成されるような pcd 記述となっています. この条件下で, メモリも含めて論理合成を行うとします.

命令セットの設計

命令セット, データの表現方法等については制約はありません. 第三者が理解可能なように, 別途ドキュメントで定義してください.

プログラムの設計

プログラムについてはその処理そのものと処理の終了について以下のように 規定します. 解くべき問題の具体的な処理は, ハードウェアの設計の項目 で定義した 標準アドレス空間を用いて以下のように規定します.

  1. [ソート]標準アドレス空間 0x8000 から 0x80ff までにランダムに 16 bit の正の整数データ 256 個がならんでいるとする. この 256 個のデータを昇順にソートし, その結果を標準アドレス空間の 0x8100 以降に昇順に配置する処理.
  2. [素数] 1 から 1023 までの素数を算出し, その結果を標準アドレ ス空間の 0x8000 から順に昇順に配置する処理.
  3. [G.C.D]{標準アドレス空間 0x8000 に 1 つめの正の 16 bit 整数をおき, 0x8001 に 2 つめの正の 16 bit 整数をおく. この 2 数の最大公約数を計算し, 結果を 0x8002 に出力する処理.

問題を解くためのアルゴリズムは規定していませんので, 設計するハードウェアおよび命令セットの特長を生かせるプログラムを 採用してください.

次に処理の終了ですが, 上記のそれぞれの処理が完了したときには, コンテスト事務局で用意したメモリモジュールに含まれる complete という制御端子(mem.sfl ファイルを参照して ください) を起動するようにしてください. complete 制御端子を起動すると, メモリモジュール内部でエラーが発生し, これにより SECONDS のシミュレーションが強制的に終了します.

(変更)メモリの記述自体は変更されています. ただし, 外部とのインターフェースは変更はされていません. 変更後のメモリの具体的な SFL 記述はmemmod.sflです. memmod.sfl はサブモジュールとして memunit.cirを含みます.

シミュレーション環境

課題の詳細の項目 で述べた, 種々の制約のもとでの動作確認のための シミュレーション環境について説明します.

シミュレーション環境の全体像を図 5に示します. 図 5 の中で, 斜線の部分を応募者が設計, 記述します.

  1. まず, データの初期状態を記述したファイルと, 処理後のデータの配置場所を記述したファイルを用いて, 標準アドレス空間でのデータの配置を記述します.
  2. これらのファイルを入力として, C プログラムによりデータの配置を初期化する SECONDS のスクリプトと処理後のメモリ上のデータを出力するための SECONDS のスクリプトを出力します. この C プログラムには, 標準アドレス空間から SFL 記述のメモリユニット番号とアドレスの組への変換関数である map_data 関数 (ハードウェア設計の項目を参照してください. )が含まれています. この関数は設計するアーキテクチャに依存しますので, 応募者が記述してくださ い. つまりこの map_data 関数以外はコンテスト事務局で作成し提供しま す.
  3. C プログラムで出力されたスクリプトは SECONDS のシミュレーションの準備の うち, 処理対象データの配置の初期化処理などに利用されます. 一方で, 命令などの配置の初期化は SECONDS のスクリプトとして 別途応募者が記述してください. このような内訳で構成された SECONDS のスクリプトと, 設計したハードウェアの SFL 記述を入力としてシミュレー ションを行い, 結果の正しさを確認します.

なお, より詳しい説明については, シミュレーション環境 のページを参照してください.

シミュレーション環境の概要

図 5 : シミュレーション環境の概要

設計結果の評価方法

[next | top | previous]

設計結果の評価は以下の観点から行います.

  1. 論理合成結果に対する, それぞれの問題の処理の速さ
  2. 論理合成結果に対する, 消費電力, 面積の小ささ
  3. 設計したアーキテクチャの独創性
  4. 設計内容について記述したドキュメント

処理の速さは次のように定義します. 論理合成結果からクリティカルパスを求め, そのパスの遅延時間 t を 1 クロックサイクルとします. 次にそれぞれの問題の処理に要するクロック数 cl を計測します. このクロック数とは, SECONDS におけるクロック 0 をスタートとして, 最終的な処理結果がメモリに格納され, complete 信号がアサート されるまでのクロック数とします. なお, 初期状態では処理対象となるデータ, および処理を記述した 命令列はあらかじめメモリ上の適切な位置に格納しておいて良いとします.

これらの t, cl を用いて, 処理時間 T を次のように定義します.

T = t x cl

T が小さいものを処理が速いものとします.

消費電力と面積は PARTHENON システムの合成結果 で判断するものとします. また, アーキテクチャの独創性, ドキュメントについてはその内容について 個々に評価します.

ドキュメントについて

[next | top | previous]

ドキュメントには以下の内容が最低限含まれていることとします.

  1. アーキテクチャ, 及びアーキテクチャの命令セット
  2. 問題の処理を行うアセンブリコードあるいはコードシーケンス
  3. 動作の検証方法
  4. 動作周波数, 消費電力, 面積
  5. 3 つの問題それぞれの処理に要するクロック数

提出物

[next | top | previous]

この課題の応募に必要な提出物は以下のとおりです.

  1. 課題要件を満たす SFL 記述
  2. アドレス空間変換関数 map_data の C 言語のソースコード
  3. 命令をメモリにセットするための SECONDS の初期化スクリプト
  4. 設計内容について記述したドキュメント

[16 bit Free CPU のトップページ]


Yoshiki NAKANE
Last modified: Mon Dec 20 10:50:52 1999