\input texi @c -*-texinfo-*-
@c %**start of header
@setfilename reconfigurable_unit.info
@settitle Reconfigurable Unit
@documentencoding EUC-JP
@c %**end of header

@copying
Copyright @copyright{} 2007 Takefumi MIYOSHI, All Rights Reserved.
@end copying

@titlepage
@title Reconfigurable Unit
@page
@vskip 0pt plus 1filll
@insertcopying
@end titlepage

@c Output the table of contents at the begging.
@contents

@ifnottex
@node Top
@top ReconfigurableUnit

@insertcopying
@end ifnottex

@menu
* ReconfigurableUnitとは::      
* ロジックユニット::            
* コンテクスト::                
* 索引::                        
@end menu

@node ReconfigurableUnitとは, ロジックユニット, Top, Top
@chapter ReconfigurableUnitとは

リコンフィギュラブルユニットは，内部のロジックユニットの構成と，それらの接続関係を動的に変更することができるプロセッサユニットである．
MICSでは，次のインターフェースを実装している．

@itemize
@item ExecutableElement
@item ChannelConnectable
@item DataBuffer
@end itemize

@node ロジックユニット, コンテクスト, ReconfigurableUnitとは, Top
@chapter ロジックユニット

@section ロジックユニットの構成
各ロジックユニットは，データの入出力のために，それぞれ3つの16bit幅のレジスタを持っている．また，ロジックユニットの動作は，内部に持つ，前シフタ，主演算，後シフタの構成によって決定する．

@subsection 主演算の命令種
@table @code

@item NOP
何もしない．入力データをそのまま次のロジックユニットに転送する．

@item ADD
入力0と入力1の値を可算し，上位16bitを出力0に下位16bitを出力1に出力する．

@item SUB
入力0と入力1の値の差を求め，上位16bitを出力0に下位16bitを出力1に出力する．

@item AND
入力0と入力1の値の各ビット積を求め，上位16bitを出力0に下位16bitを出力1に出力する．

@item OR
入力0と入力1の値の各ビット和を求め，上位16bitを出力0に下位16bitを出力1に出力する．

@item MULT
MUL0と，この命令15個で積算が構成される．@code{MULT}は，入力1のLSBが1である場合に，入力0と入力2の値の和を求めその下位16bitを出力0に，入力1を出力1に出力する．入力1のLSBが0である場合には，入力をそのまま出力する．

@item MUL0
積算命令の最初に実行される命令．入力1のLSBが1である場合に，入力0と入力2の値の和を求めその下位16bitを出力0に，入力1を出力1に出力する．入力1のLSBが0である場合には，出力0に即値0，出力1に入力1を出力する．

@end table

@table @code
@item NONE
入力データに対してシフトをしない

@item LEFT
入力データを左に1シフトする

@item RIGHT
入力データを右に1シフトする

@end table


@node コンテクスト, 索引, ロジックユニット, Top
@chapter コンテクスト
コンテクストは各ロジックユニットの動作およびその接続関係によって構成される．このデータは内部のメモリにバイナリで書き込まれるが，そのデータを生成するための基本的なツールでテキストデータからコンテクストデータを生成することができる．

@section コンテクストデータの書式
コンテクストデータは，一行で，次のように記述する．

@code{
ロジックユニット番号,命令,前シフタ,後シフタ,入力0，入力1
}

ここでロジックユニットの番号は，次のように構成される．

@code{
行:列
}

データのソースは@code{行:列}から成るロジックユニット番号に続けて，その入力レジスタの番号を記し，次のように記述する．

@code{
行:列:レジスタ番号
}

ここで，入力2ロジックユニットの入力2はソース0の出力2に自動的に割り当てられる．

また，ソースのロジックユニット番号に，自身のロジックユニット番号を指定した場合，外部のデータを取り込むことを意味する．

次に示すのは，積を構成するためのコンテクストデータである．

@example
@code{
0:0,MUL0,NONE,RIGHT,0:0:0,0:0:1
0:1,MULT,NONE,RIGHT,0:0:0,0:0:1
1:1,MULT,NONE,RIGHT,0:1:0,0:1:1
1:0,MULT,NONE,RIGHT,1:1:0,1:1:1
2:0,MULT,NONE,RIGHT,1:0:0,1:0:1
2:1,MULT,NONE,RIGHT,2:0:0,2:0:1
3:1,MULT,NONE,RIGHT,2:1:0,2:1:1
3:0,MULT,NONE,RIGHT,3:1:0,3:1:1
4:0,MULT,NONE,RIGHT,3:0:0,3:0:1
4:1,MULT,NONE,RIGHT,4:0:0,4:0:1
5:1,MULT,NONE,RIGHT,4:1:0,4:1:1
5:0,MULT,NONE,RIGHT,5:1:0,5:1:1
6:0,MULT,NONE,RIGHT,5:0:0,5:0:1
6:1,MULT,NONE,RIGHT,6:0:0,6:0:1
7:1,MULT,NONE,RIGHT,6:1:0,6:1:1
7:0,MULT,NONE,RIGHT,7:1:0,7:1:1
}
@end example

@node 索引,  , コンテクスト, Top
@unnumbered 索引

@printindex cp

@bye
