# MICSチュートリアル

## 起動

     java -jar mics.jar

として，起動すると次のようなメインウィンドウが開きます．

## アーキテクチャ設定ファイルの読み込み

メニューから「File」-「Open」と辿るか，ツールバーの「architecture」内の「Load」ボタンをクリックすると，設定ファイル読み込みダイアログが開きます．

まず，sample/architecture/simple.xmlを選択してみましょう．(このファイルは，sample.tar.gzに含まれています．) 設定ファイルが正しく読み込まれると，次のようなArchitectureViewerが開きます．ただし，この図では，すべてのノードを開いています．

このウィンドウで，simple.xmlにbus0，proc0およびmem0が定義されており，それぞれのクラスが，どのインターフェースに基づいて実装されているかを見てとることができます．

## プログラムのロードと実行

DataBufferを実装するクラスには，MICSを使ってデータをロードすることができます．この機能を利用して，プロセッサのプログラムをロードします．

## ロードするプログラムを用意する

simple.xmlで使用しているSimpleProcessorのプログラムはMICSのGUIを使ってアセンブルすることができます．メニューを「compile」-「Processor」-「SimpleProcessorAssembler」と辿ると，ファイルダイアログが開きますので，そこで，コンパイルしたいファイルを選びます．ここでは，sample/simpleprocessor/fib.sをコンパイルしましょう．コンパイルに成功すると，メインウィンドウにコンパイルが成功したメッセージが表示され，sample/simpleprocessor/fib.hexが生成されているはずです．

ちなみに，この画面でメインウィンドウのテキスト領域に表示されいてる

    SimpleProcessor
      CLASS: net.wasamon.mics.processor.SimpleProcessor
      ID: proc0
      Local Memory ID: null, offset = 0
      Channel ID: bus0, offset = 2048
      Channel ID: bus0, offset = 4096

は，ArchitectureViewerでproc1を選択したことで表示されたメッセージです．ArchitectureViewerで選択したデバイスの情報は，このように表示されます．

## プログラムのロード

プログラムのロードはArchitectureViewerから行います．ArchitectureViewerでロードの対象となるデバイスを選択し，ArchitectureViewerのツールバーの「Load」をクリックします．ここでは，proc0が，対象デバイスです．メモリローダウィンドウが開きますので，「File」ボタンをクリックして開くファイルダイアログでロードしたいファイルを選択します．ここでは，先程コンパイルした，fib.hexをロードします．

## プログラムの実行

プログラムは，メインウィンドウのツールバーの「Run」で実行することができます．実行すると，メインウィンドウに実行ステータスが表示されます．ここでは，実行サイクル数が375480で，その実行に559msかかったと記されています．画面では，さらに実行結果を確認するためにメモリダンプの結果を表示させています．メモリダンプは，ツールバーの「Memory」内で表示したいデバイスのIDを選択し，アドレスを入力した上で「Print」ボタンをクリックします．0x0400からの領域にフィボナッチ列が得られていることが分かります．

## リコンフィギュラブルプロセッサの使用

MICS0.4.0にはリコンフィギュラブルプロセッサのシミュレータが同梱されています．今度は，その使い方を見てみましょう．ただし，基本的な使用方法に変わりはありません．

### アーキテクチャ設定ファイルを読み込む

リコンフィギュラブルプロセッサを使用する設定ファイルの例は，sample/withrlu.xmlです．先程と同様にして，このファイルをMICSにロードします．ロードすると，ArchitectureViewerの画面は次のようになります．proc1がリコンフィギュラブルプロセッサを示しています．

リコンフィギュラブルプロセッサなどのインターフェースMicsViewerを実装しているクラスは，独自のビューを表示することができます．そのビューを見るためには，ArchitectureViewerでproc1を選択し，ツールバーの「View」ボタンをクリックします．次の図は，初期状態のリコンフィギュラブルプロセッサの状態を示しています．

### コンテクストデータをコンパイルする

リコンフィギュブルプロセッサの構成情報は内部のメモリに格納されています．まずは，テキストで記述したコンテクストデータをバイナリ列に変換しましょう．コンテクストデータのサンプルは，sample/mult4.contextにあります．これは積算を4並列で行うための構成例です．コンテクストの生成もまたMICSのGUIを利用して行うことができます．メインウィンドウのメニューの「compile」-「context」と選択して，開いたファイルダイアログで，変換したいファイルを選択するだけです．成功すると，sample/mult4.cnfが生成されます．

### コンテクストを書き込む

コンテクストを書きこむためには，ArchitectureViewerから，proc1を選択し，「Load」ボタンをクリックし，開いたダイアログで，先程のmult4.cnfを選択するだけです．Windowsで実行する場合には，拡張子が隠れている場合もありますので注意してください．ロードに成功したあとに「View」ボタンをクリックすると，次の図のようにリコンフィギュラブルプロセッサの構成が変化することを確認できます．

### リコンフィギュラブルプロセッサを使ってみる

このリコンフィギュラブルプロセッサは，与えられたデータに演算を施す演算回路として振舞いますので，協調して動作するプロセッサでデータを与える必要があります．このサンプルプログラムは，sample/userlu.sです．まずは，先程のfib.sからfib.hexを作成した時と同様にして，userlu.hexを作成します．その後，proc0に作成したuserlu.hexを書きこみ実行します．実行後のメインウィンドウは次のようになります．メモリダンプの結果は，リコンフィギュラブルプロセッサの入出力に割り当ててあるmem0の1984番地からのデータとproc0の1024番地からのデータを表示させたものです．たとえば，0x7c0と0x7c2で，0x000a(=10)と0x0014(=20)を与えた結果として，0x7e0からの32bitに0x000000c8(=200)が得られていることが分かります．また，この結果をproc0では，0x400番地からの32bitに読み込んでいることがわかります．

| トップへ戻る