[全体の構成]
図1は、この発明に従う半導体演算処理装置が適用される処理システムの全体構成を概略的に示す図である。図1において、信号処理システム1は、各種処理を実行する演算機能を実現するシステムLSI2と、システムLSI2と外部システムバス3を介して接続される外部メモリとを含む。この外部メモリは、大容量メモリ4と、高速メモリ5と、システム立上げ時の命令などの固定情報を格納する読出専用メモリ(リード・オンリー・メモリ:ROM)6を含む。大容量メモリ4は、たとえばクロック同期型ダイナミック・ランダム・アクセス・メモリ(SDRAM)で構成され、高速メモリ5は、たとえばスタティック・ランダム・アクセス・メモリ(SRAM)で構成される。
システムLSI2は、内部システムバス7に並列に結合される基本演算ブロックFB1−FBhと、これらの基本演算ブロックFB1−FBhの処理動作を制御するホストCPU8と、信号処理システム1の外部からの入力信号INを内部処理用データに変換する入力ポート9と、内部システムバス7から与えられた内部出力データを受けて、システム外部への出力データOUTを生成する出力ポート10を含む。これらの入力ポート9および出力ポート10は、たとえばライブラリ化されたIP(インテレクチャル・プロパティ)ブロックで構成され、データ/信号の入出力に必要な機能を実現する。
システムLSI2は、さらに、基本演算ブロックFB1−FBhからの割込要求を受付け、ホストCPU8に対して割込を通知する割込コントローラ11と、ホストCPU8の各処理に必要な制御動作を行なうCPU周辺12と、基本演算ブロックFB1−FBhからの転送要求に従って外部メモリに対するデータ転送を行なうDMA(ダイレクト・メモリ・アクセス)コントローラ13と、ホストCPU8またはDMAコントローラ13からの指示に従って、外部システムバス3に接続されるメモリ4−6に対するアクセス制御を行なう外部バスコントローラ14と、ホストCPU8のデータ処理を補助する専用ロジック15とを含む。
CPU周辺12は、タイマおよびシリアルIO(入出力)などのホストCPU8におけるプログラムおよびデバッグの用途に必要な機能を備える。専用ロジック15は、たとえばIPブロックで構成され、既存の機能ブロックを用いて必要な処理機能を実現する。これらの機能ブロック9−15は、内部システムバス7に接続される。また、DMAコントローラ13には、基本演算ブロックFB1−FBhからのDMA要求信号が与えられる。
基本演算ブロックFB1−FBhは、同一構成を有するため、図1においては、基本演算ブロックFB1の構成を代表的に示す。
基本演算ブロックFB1は、実際のデータの演算処理を行なう主演算回路20と、この主演算回路20における演算処理を指定するマイクロ命令を格納するマイクロ命令メモリ21と、マイクロ命令メモリ21からのマイクロ命令に従って主演算回路20の演算処理を制御するコントローラ22と、コントローラ22の中間処理データまたは作業データを格納するワークデータメモリ23と、基本演算ブロックFB1の内部と内部システムバス7との間でデータ/信号の転送を行なうシステムバスインターフェイス(I/F)24とを含む。
主演算回路20は、複数のメモリセルが行列状に配列されかつ複数のエントリに分割されるメモリセルマット30と、メモリセルマット30のエントリに対応して配置され、指定された演算処理を行なう演算器(ALU)31と、演算器31間のデータ転送経路を設定するALU間相互接続用スイッチ回路32を含む。
基本的に、1エントリに多ビットデータの各ビットが格納される。演算器(ALU)31は、対応のエントリからのデータビットをシリアルに受けて演算処理を行ない、その処理結果をメモリセルマット30の指定されたエントリ(たとえば対応のエントリ)にシリアルに格納する。
ALU間相互接続用スイッチ回路32により、演算器31の接続経路が切換えられ、異なったエントリのデータの演算が可能となる。各エントリに異なるデータを格納し、演算器31により並列演算処理を行なうことにより、高速にデータ処理を行なうことができる。
コントローラ22は、マイクロ命令メモリ21に格納されるマイクロ命令に従って、マイクロプログラム方式に従った動作を行なう。このマイクロプログラム動作に必要なワークデータが、ワークデータメモリ23に格納される。
システムバスI/F24により、ホストCPU8またはDMAコントローラ13が、メモリセルマット30、コントローラ22内の制御レジスタ、マイクロ命令メモリ21およびワークデータメモリ23へアクセスすることが可能となる。
基本演算ブロックFB1−FBhには、異なるアドレス領域(CPUアドレス領域)が割付けられる。同様、基本演算ブロックFB1−FBh内のメモリセルマット30、コントローラ22内の制御レジスタ、マイクロ命令メモリ21、およびワークデータメモリ23についても、それぞれ異なるアドレス(CPUアドレス)が割付けられる。したがって、これらの基本演算ブロックFB1−FBhそれぞれにおいて、異なる内容のマイクロ命令を格納することにより、異なる演算処理を並行して実行することができる。また、基本演算ブロックFB1−FBhにおいて、異なるアドレス領域のデータについて同一の演算処理が行なわれるように、マイクロ命令メモリ21に同一の演算内容のマイクロ命令が格納されてもよい。また、マイクロ命令メモリ21においては、マイクロ命令が格納される
ものの、マクロ命令が格納されていても良い。
各割付けられたアドレスに従って、ホストCPU8およびDMAコントローラ13が、アクセス対象の基本演算ブロックFBi(FB1−FBhのいずれか)を識別し、該アクセス対象の基本演算ブロックに対するアクセスを実行する。
図2は、図1に示す基本演算ブロックFB1−FBhそれぞれに含まれる主演算回路20の要部の構成を概略的に示す図である。図2において、メモリセルマット30において、メモリセルMCが行列状に配列される。このメモリセルマットは、m個のエントリERYに分割される。エントリERYがnビットのビット幅を有する。このメモリセルマット30においては、m個のエントリERYに共通にワード線が配設され、各エントリ個々に、ビット線が配設される。基本的に、1つのエントリERYは、この1列(ビット線延在方向)に整列するメモリセルMCで構成される。したがって、エントリERYの数は、メモリセルマットのビット線の数で決定される。
エントリERYそれぞれに対応して、演算器(ALU)31が、演算処理ユニット35において配置される。この演算器31は、加算、論理積、一致検出(EXOR)、および反転(NOT)などの演算を実行することができる。
エントリERYと対応の演算器31との間でのデータのロード(メモリセルマット30から演算処理ユニット35へのデータの転送)およびストア(演算処理ユニット35からメモリセルマット30へのデータの転送および格納)を行なって演算処理を実行する。エントリERYには、多ビットデータの各ビットが格納される。
演算器ユニット35に対してALU相互接続用スイッチ回路32が配置される。このALU相互接続用スイッチ回路32により演算器31間のデータ転送を実現する。
演算器31は、ビットシリアルな態様(多ビットデータワードをビット単位で逐次処理する態様)で演算処理を実行する。演算処理ユニット35においては、データワードについてビットシリアル態様でかつ複数のエントリERYのデータが並行して処理されるエントリパラレルな態様でデータの演算処理が実行される。
このエントリERYのビット幅を変更することにより、データワードの語構成が異なる場合においても、演算サイクル数(アドレスポインタの範囲)を変更するだけで、データ処理を実行することができる。また、エントリ数mを多くすることにより、大量のデータを一括して演算処理することができる。
メモリセルMCは、たとえばCMOS(相補金属‐絶縁膜‐半導体)構成のSRAMセルで構成され、高速でデータの書込/読出を行なう。また、メモリセルMCとして、SRAMセルを利用することにより、メモリセルマット30において記憶データのリフレッシュを行なう必要がなく、動作制御が容易となり、演算処理を高速で実行することができる。
主演算回路20において演算を行なう場合には、基本的に、先ず、エントリERY各々に演算対象のデータを格納する。次いで、格納されたデータのある桁のビットをすべてのエントリERYについて並列に読出して、対応の演算器31へ転送(ロード)する。二項演算の場合には、各エントリERYにおいて、別のデータワードのビットに対しても同様の転送を行なった後、各演算器31において2入力演算を行なう。この演算処理結果は、演算器31から対応のエントリERY内の所定の領域に再書込(ストア)される。
図3は、図2に示す主演算回路20における演算操作の一例を模式的に示す図である。図3において、2ビット幅のデータワードaおよびbの加算を行なって、データワードcを生成する。エントリERYには、演算対象の組をなすデータワードaおよびbがともに格納される。
図3において、第1行目のエントリERYに対する演算器31においては、10B+01Bの加算が行なわれ、2行目のエントリERYに対する演算器31においては、00B+11Bの演算が行なわれる。ここで、末尾の“B”は、2進数を示す。3行目のエントリERYに対する演算器31においては、11B+10Bの演算が行なわれる。同様に、エントリERY各々に格納されたデータワードaおよびbの加算が実行される。
演算は、下位側ビットから順にビットシリアル態様で行なわれる。また、エントリERYにおいてデータワードaの下位ビットa[0]を対応の演算器31へ転送する。次いで、データワードbの下位ビットb[0]を対応の演算器31へ転送する。演算器31においては、これらの与えられた2ビットデータを用いて加算演算を行なう。この加算演算結果a[0]+b[0]は、データワードcの下位ビットc[0]の位置に書込まれる(ストアされる)。すなわち、1行目のエントリERYにおいて、“1”が、ビットc[0]の位置に書込まれる。
この加算処理は、次いで、上位ビットa[1]およびb[1]に対しても行ない、その演算結果a[1]+b[1]がビットc[1]の位置に書込まれる。
加算演算においては、桁上がりが生じる可能性がある。この桁上がり(キャリー)の値が、ビットc[2]の位置に書込まれる。これにより、データワードaおよびbの加算が、すべてのエントリERYにおいて完了し、その結果が、データcとして各エントリERYにおいて格納される。エントリとして、たとえば1024エントリを準備した場合、1024組のデータの加算を並列に実行することができる。
図4は、この加算演算処理時における内部タイミングを模式的に示す図である。以下、図4を参照して、加算演算の内部タイミングについて説明する。この加算演算処理においては、演算器31に含まれる2ビット加算器(ADD)が利用される。
図4において、“Read”は、メモリセルマット30から演算対象のデータビットを読出して対応の演算器に転送する動作(ロード)または動作命令を示し、“Write”は、演算器31の演算結果データを対応のエントリERYの対応のビット位置に書込む動作(ストア)または動作命令を示す。
マシンサイクルkにおいて、データビットa[i]がメモリセルマット30から読出され、次のマシンサイクル(k+1)で、次の演算対象のデータビットb[i]が読出され(Read)、演算器31の加算器(ADD)にそれぞれ与えられる。
マシンサイクル(k+2)において、演算器31の加算器(ADD)において、読出されたデータビットa[i]およびb[i]の加算処理が行なわれる。マシンサイクル(k+3)において、この加算結果c[i]が、対応のエントリの対応のビット位置に書込まれる。
次のマシンサイクル(k+4)および(k+5)において、次の演算対象のデータビットa[i+1]およびb[i+1]が読出され、演算器31の加算器(ADD)へ転送される。マシンサイクル(k+6)において、演算器31により加算処理が行なわれ、マシンサイクル(k+7)において、加算結果がビット位置c[i+1]へ格納される。
メモリセルマット30と演算器31の間のデータビットの転送に、それぞれ1マシンサイクルが必要とされ、演算器31において1マシンサイクルの演算サイクルが必要とされる。したがって、1ビットデータの加算および加算結果の格納を行なうために、4マシンサイクルが必要となる。メモリセルマット30を、複数のエントリERYに分割し、各エントリに演算対象データの組をそれぞれ格納し、対応の演算器31においてビットシリアル態様で演算処理を行なう方式の特徴は、1つ1つのデータ演算には、比較的多くのマシンサイクルが必要とされるものの、処理すべきデータ量が非常に多い場合には、演算の並列度を高くすることにより高速データ処理を実現することができるということである。
たとえば、演算対象のデータワードのビット幅がNの場合、各エントリの演算には、4・Nマシンサイクルが必要となる。演算対象のデータワードのビット幅は、8ビットから64ビット程度である。エントリ数mを、たとえば1024と大きくすることにより、並列演算処理時に、たとえば8ビットデータの場合、32マシンサイクルで1024個の演算結果を得ることができ、1024組のデータをシーケンシャルに処理する場合に比べて大幅に処理時間を短縮することができる。
また、ビットシリアル態様で演算処理を行なっており、処理されるデータのビット幅は固定されないため、種々のデータ構成を有する種々のアプリケーションに容易に適用することができる。
図5は、図1に示すコントローラ22の制御態様を概略的に示す図である。このコントローラ22に対応して、レジスタ群40が設けられる。このレジスタ群40においては、ポインタレジスタr0−r3が設けられる。演算対象のデータのメモリセルマット30内のアドレスが、これらのポインタレジスタr0−r3に格納される。コントローラ22は、このポインタレジスタr0−r3に格納されるポインタに従って、主演算回路におけるエントリまたはエントリ内位置を指定するアドレスを生成して、メモリセルマット(30)と演算処理ユニット(35)の間のデータ転送(ロード/ストア)を制御する。また、このコントローラ22は、ポインタレジスタr0−r3のポインタに従って、マイクロ命令メモリ21から転送命令が与えられたとき、この演算処理ユニット(35)における演算器(ALU)31間の接続指定情報を設定する。
[演算器の構成1]
図6は、図1に示す演算器(31)の構成および1つの演算器に関連する部分の構成を概略的に示す図である。図6において、演算器(ALU)31は、指定された演算処理を行なう算術演算論理回路50と、対応のエントリから読出されたデータまたは算術演算論理回路50の演算処理結果データまたは対応のエントリへ転送するデータを一時的に格納するXレジスタ54と、加演算処理時のキャリーまたはボローを格納するCレジスタ56と、この算術演算論理回路50の演算処理の禁止を指定するマスクデータを格納するMレジスタ58を含む。
エントリと演算器の間には、センスアンプ62およびライトドライバ60が設けられる。これらのセンスアンプ62およびライトドライバ60は、対応のエントリのビット線対BLPに結合される。センスアンプ62は、対応のエントリのメモリセルから読出されるデータを増幅し、その増幅データを内部データ転送線200を介してXレジスタ54へ転送する。ライトドライバ60は、Xレジスタ54に格納されたデータをバッファ処理して、対応のエントリのメモリセルへ対応のビット線対BLPを介して書込む。
この算術演算論理回路50は、加算(ADD)、論理積(AND)、論理和(OR)、排他的論理和(EXOR)、反転(NOT)等の演算を実行することができ、その演算内
容が、先の図5に示すコントローラ22からの制御信号(ALU制御)により設定される。Mレジスタ58に格納されるマスクデータにより、この演算器31における演算処理動作を選択的にイネーブル/ディスエーブルする。この演算マスク機能を利用することにより、仮に全エントリが利用されない場合においても、有効エントリに対してのみ演算を実行して、正確な処理を行なうことができる。また、不必要な演算を停止させることにより、消費電流を低減することができる。
Xレジスタ50は、また、ALU間相互接続スイッチ回路32に含まれるALU間接続回路65を介して他の演算器(ALU)に接続される。このALU間接続回路65の構成については、後に詳細に説明する。このALU間接続回路65の転送機能により、メモリマット内のさまざまな物理位置に格納されているデータに対する演算を実現することができ、演算の自由度を高くすることができる。
図7は、ALU命令のうち、エントリ間のデータ移動(Move)を行なう命令を一覧にして示す図である。
命令“ecm.mv.n♯n”は、データ移動命令(Move)における移動量を数値♯nで規定する。したがってこの命令で、Xレジスタ間のデータ転送において、エントリj+nのXレジスタの格納値が、エントリjのXレジスタに格納される。一例として、エントリ移動量nは、0から128の範囲の整数値を取り、最大128ビット離れた位置のエントリ間でデータ移動を行なうことができる。
命令“ecm.mv.r rx”は、ポインタレジスタrxに格納された値だけエントリ間をデータ移動させる命令である。この命令が実行されると、エントリj+rxのXレジスタの格納値が、エントリjのXレジスタに転送される。
このALU命令に従って、ALU間接続回路65における接続経路が設定され、各エントリ対応に設けられる演算器において、Xレジスタを用いて並列に、データ転送が実行される。
[演算の構成2]
図8は、この発明において利用される演算器31の別の構成を概略的に示す図である。この図8に示す演算器31の構成に対しては、メモリセルマットにおいて1つのエントリERYが、偶数アドレスのデータビットA[2i]を格納する偶数エントリERYeと、奇数アドレスのデータTビットA[2i+1]を格納する奇数エントリERYoとで構成される。偶数エントリERYeおよび奇数エントリERYoの同じアドレスのデータビットに対し、並列に演算処理を実行することにより、処理の高速化を図る。
演算器(ALU)31においては、演算処理を行なうための縦続される全加算器210および211が、演算処理部として設けられる。全加算器210および211は、それぞれ入力AおよびBに与えられたデータビットを加算し、サム出力Sおよびキャリー出力Coに演算結果を出力する。また、全加算器210は、Cレジスタ56に格納されるデータをキャリー入力CInに受ける。1ビット動作時には、このCレジスタ56のキャリーが、または全加算器211のキャリー入力Cinに与えられる。2ビット並列に処理する2ビット動作時においては、全加算器210のキャリー出力Coが、全加算器211のキャリー入力Cinに伝達される。この全加算器210および211の接続を切り替えることにより、2ビット並列演算および1ビット逐次処理を実行することが出来る。
この演算器31は、対応のエントリのメモリセルからのロードデータの一時保存を行ないかつ演算途中の結果の一時保存を行なうXレジスタ54が設けられる。二項演算処理時
においては、Xレジスタ54に第1の演算データビットが格納されたとき、次の(別の)演算データビットが、この演算器31に直接対応のメモリセルマットのエントリから与えられて演算処理が実行される。このXレジスタ50は、ALU間接続用スイッチ回路を介して他の演算器(ALU)と接続され、異なる演算器間でデータ転送を行なうことができる。
演算器(ALU)31は、さらに、2ビットデータを並列に格納するためのXHレジスタ220およびXLレジスタ221と、Dレジスタ222の格納値に従って、レジスタ54、220および221のデータの組の一方の2ビットを選択するセレクタ(SEL)227と、Fレジスタ205の格納ビットに従ってセレクタ227の選択した2ビットに対する反転/非反転操作を行なう選択反転回路217と、Nレジスタ207とVレジスタ208の格納データに従って、全加算器210および211の出力Sからのデータビットを選択的に出力するゲート223および224を含む。
選択反転回路217の2ビット出力は、全加算器210および211の入力Aへそれぞれ与えられる。XHレジスタ220およびXLレジスタ221は、それぞれ内部データ線226および228を介して奇数エントリERYoの奇数アドレスビットおよび偶数エントリERYeの偶数アドレスビットの転送を行なう。Xレジスタ54は、2ビット/1ビット動作に従って、スイッチ回路SWaおよびSWbにより、内部データ線226および228の一方に選択的に接続される。
Nレジスタ207は、定数値を格納する。Vレジスタ208は、ゲート223および224の転送経路の遮断/接続を制御するマスクビットを格納する。
全加算器210の入力Bは、内部データ線226に結合され、全加算器210のサム出力Sを受けるゲート223の出力が、また内部データ線226に接続される。全加算器211の入力Bは、スイッチ回路SWcおよびSWdにより、内部データ線226および228の一方に選択的に接続される。全加算器211のサム出力Sからのデータビットゲート224に与えられる。ゲート224の出力は、スイッチ回路SWeおよびSWfに従って、内部データ線226および228の一方に選択的に接続される。これらのスイッチ回路SWa−SWfにより、2ビット並列除算処理を行なう場合の1ビット単位のビットシリアル処理を実行する。
ゲート223および224は、Vレジスタ208およびNレジスタ207の格納値がともに“1”のときに、指定された演算処理を実行し(データ転送動作を行ない)、それ以外においては、ハイインピーダンスを出力する(出力ハイインピーダンス状態となる)。
全加算器211のキャリー入力Cinおよび全加算器210のキャリー出力Coに対して設けられるスイッチ225は、1ビット単位での演算処理を行なう場合に、全加算器210のキャリー出力Coを切離し、全加算器211のキャリー入力CinをCレジスタ56に接続する。
この演算器31においては、Xレジスタ54、XHレジスタ220およびXLレジスタ221が、他のエントリの対応のレジスタとデータ転送を行なう機能を有する。
この変更例2の構成を利用する場合、1つの演算器が2つのエントリに対応して配置される。したがって、1ビット逐次処理に加えて、2ビット並列演算を行なって高速処理を実行することができ、また演算処理ユニットにおいて、余裕を持って演算器31を配置することができる。
図9は、この図8に示す演算器(31)の2ビット演算時におけるALU31の内部の接続を概略的に示す図である。この2ビット演算時、特に2次のブースアルゴリズムに従って乗算を行なう場合、Xレジスタ54は、スイッチ回路SWaを介して内部データ線226に結合される。スイッチ回路SWbは、XLレジスタ54と内部データ線228を切離す状態に設定される。
スイッチ回路SWbが、全加算器211の入力Bと内部データ線226とを切離す。スイッチ225は、全加算器210のキャリー出力Coと全加算器210のキャリー入力Cinとを分離する。Cレジスタ56が、スイッチ225を介して全加算器210のキャリー入力Cinに結合される。ゲート回路224の出力はスイッチ回路SWfにより内部データ線228に結合される。
2ビット演算時においては、全加算器210および211が並列に動作し、選択反転回路217から与えられるデータビットをそれぞれ内部転送線226および228から転送されるデータビットと加算し、それぞれの加算結果をゲート223および224を介して内部データ線226および228へ出力する。したがって、加算結果は、ビットAj[px]およびAj[px+1]について並列に算出する。ここで、pxおよびpx+1は、ポインタレジスタのポインタ値であり、2ビット並列動作時には、メモリセルマット内において同一のワード線アドレスビットである。
メモリセルマットにおいては、偶数エントリERYeおよび奇数エントリERYoにそれぞれ、偶数アドレスA[2i]および奇数アドレスA[2i+1]のデータビットが格納される。ポインタレジスタrxのポインタにより、これらの偶数エントリERYeおよび奇数エントリERYoの同一ビット位置のメモリセルが指定される。したがって、プログラム実行時においてポインタレジスタrxのカウント値が2増分されることにより、奇数エントリERYoおよび偶数エントリERYeにおいて1ビットそのビット位置が上位方向にシフトされる。このポインタレジスタrxのポインタに基づいてメモリセルマットのワード線を選択するアドレスが生成される場合、ワード線の切換により、ポインタレジスタrxのポインタを2増分する構成が実現される。
演算器31において2つの全加算器210および211を設けて2ビット加算を行なうことにより、たとえばブースアルゴリズムに従う乗算操作時、2ビット単位での部分積生成および前の部分積との加算を行なうことができる。また、加算および減算も、2ビット単位で実行することができ、また1ビット単位で演算を実行することもできる。除算は、被除数のビット位置を1ずつ右シフトして減算を行なう必要があり、1ビット単位で演算を実行する。この1ビット演算を実現するために、スイッチ225が設けられる。
図10は、1ビット演算操作時における演算器31の内部接続の一例を概略的に示す図である。1ビット演算の接続時においては、Xレジスタ54が、内部データ線226および228にスイッチ回路SWaおよびSWbを介してそれぞれ接続される。Xレジスタ54の出力が、セレクタ227によりDレジスタ220の格納データに従って選択される。スイッチ回路SWaおよびSWbの接続は、ポインタpx(ポインタレジスタrxのポインタ)により決定される。
Fレジスタ205の格納ビット値に従って、選択反転回路217により、加算/減算が実現される。この選択反転器217の出力は、全加算器211の入力Aに与えられる。全加算器210の入力Bは、内部データ線226に接続される。全加算器210のキャリー出力Coが、スイッチ回路225により全加算器210のキャリー入力Cinと分離される。全加算器210のサム出力Sが、ゲート223を介して内部データ線226に結合される。全加算器210は、加算演算には用いられない。全加算器211のキャリー入力C
inが、Cレジスタ56にスイッチ回路225を介して結合される。全加算器の入力Bは、ポインタpxによりスイッチ回路SWcおよびSWdを介して内部データ線226または228に選択的に結合される。また、全加算器211のサム出力Sが、ゲート224およびスイッチ回路SWeおよびSWfを介して選択的に内部データ線226および228に接続される。
減算演算を、2の補数の加算演算により行なう場合には、Cレジスタ56に、初期値として“1”が格納され、Xレジスタ54からのビット値が選択反転回路217により反転される。加算演算を行なう場合には、Cレジスタ56は、初期状態として“0”にクリアされる。
メモリセルマット内のエントリにおいて、内部データ線226および227に接続される領域には、連続アドレスのデータビットA[2i]およびA[2i+1]が格納され、内部データ線226および228を介してXレジスタ54に2ビットデータを並列に転送する。ポインタpx[0]の値を逐次切換えることにより、アドレスA[2i]のエントリおよびアドレスA[2i+1]のエントリのデータビットについて、ビットシリアル態様で、加算を行なうことができる。
図11は、1ビット動作時のエントリ間データ移動(move)を行なう命令を一覧にして示す図である。このエントリ間(ALU間)データ移動時には、ポインタレジスタrnが用いられる。エントリ間データ移動用ポインタレジスタrnの候補レジスタとして、前述のポインタレジスタr0−r3が設けられる。
命令“ecm.mv.n♯n”は、定数n離れたエントリa+nのXレジスタの格納値を、エントリjのXレジスタに転送することを示す命令である。
命令“ecm.mv.r rn”は、レジスタrnの格納値分離れたエントリj+rnのXレジスタの値が、エントリjのXレジスタに転送される操作を示す命令である。
命令“ecm.swp”は、隣接エントリj+1およびjのXレジスタの格納値を交換する操作を指令する命令である。
図12は、2ビット動作時の、演算器におけるエントリ間データ移動(move)の操作を指令する命令を一覧にして示す図である。この2ビット操作時においては、命令記述子“ecm2”が、命令記述子“ecm”に代えて用いられる。この命令記述子“ecm2”が指定されると、2ビット単位での演算処理が指定され、XHレジスタおよびXLレジスタ間での並列のデータ転送が行なわれる。各レジスタ間の転送内容の指定には、先の1ビット動作時と同じ命令記述子“mv.n♯n”、“mv.r rn”、および“swp”が用いられる。
[実施の形態1]
図13は、この発明の実施の形態1に従うALU間相互接続スイッチ回路の配線レイアウトを概略的に示す図である。図13において、データの移動量として、±1、±2、および±4の移動量の組を備えるエントリ間通信配線の配線レイアウトを示す。
図13において、エントリn+13からエントリn−13を示す。このデータ転送配線300は、それぞれが対応のエントリからのデータを受けて出力する出力部305と、転送先のエントリへのデータの送出部XP1、XP2およびXP4、XN1、XN2およびXN4を含む。送出部XP1、XP2およびXP4は、それぞれ、+1、+2および+4離れたエントリに対するデータを転送する送出部であり、送出部XN1、XN2およびXN4は、それぞれ−1、−2および−4離れたエントリへデータを転送する送出部である
。従って、1つのデータ転送配線300は、9エントリにわたって延在して配置される。
このデータ転送配線300は、エントリと交差する方向(第2の方向)において1列に整列して配置され、かつエントリの延在方向(第1の方向)においては、データ出力部305が1エントリずれるようにアレイ状に配置される。このデータ転送配線300は、最遠のデータ送出部が、±4エントリ離れたエントリに対応する位置であり、自身を含んで9エントリごとに、データ転送配線300が、第2の方向に整列して配置される。
この各エントリからのデータを受けて出力するデータ出力部および転送先のエントリにデータを与えるデータ送出部を別々に設けることにより、1つのデータ転送配線300において複数のデータ送出部を設けることにより、1つの配線で複数種類のエントリ間で他通信を実現することが出来る。また、各エントリからのデータの出力部を各転送配線300により、1エントリ、第1の方向においてずらせて配置することにより、効率的に、データ転送路を配線することができる。すなわち、図13に示すように、9エントリにわたって傾斜を有する対辺を有する菱形状の平行四辺形320を第2の方向に順次繰返し配置することにより、配線レイアウトを低減して効率的に、エントリ間通信配線を配置配線することができる。
上述のように、データの転送量に応じて配線を個々に配置するのではなく、1つのデータ転送配線300において、複数のデータ移動量の組を実現し、各エントリ対応の演算器において、選択的に送出部からの信号を取込むことにより、エントリそれぞれにおいて、並列にデータの転送を行なうことができ、また、配線レイアウト面積を低減することができる。また、このエントリ間データ移動量の組を複数個設けることにより、任意のエントリ間移動を、比較的少ないサイクル数で実現することができる。
たとえば、データにおいて、±4エントリ間の移動を、1サイクルで実現する場合には、この送出部XP4およびXN4を選択的に利用する。この場合、図14に示すようなサイクリックなデータ移動が実現される。ただし、図14においては、2048エントリがメモリセルマットにおいて設けられるとしている。
例えばエントリ0のデータを+4エントリ移動させると、エントリ2044に大使て設けられるXレジスタに転送される。ここで、+移動は、エントリ番号の小さいエントリにデータを転送する方向に設定している。また、エントリ2047のデータを‐4エントリ移動させると、エントリ3のXレジスタに転送される。
したがって、1隣接エントリ間のデータ転送と同様に、データ転送配線300を用いて、4エントリ離れたエントリへのデータ転送を1マシンサイクルで実現することができる。したがって、たとえば3エントリ離れた位置へのデータ転送時には、2エントリ移動および1エントリ移動を、シフトレジスタを利用して順次データを転送する場合と同様にして、行なうことにより、2サイクルで、データ転送を実現することができる。また、8エントリ離れたエントリへのデータ転送時には、4エントリ移動を2回繰返すことにより、8エントリ間移動が実現される。このシフトレジスタ態様のデータ転送を繰返すことにより、任意の距離(エントリ数)離れたエントリ間でのデータ通信が実現される。
配線レイアウト面積の余裕に応じて、1本のデータ転送配線300の実現するデータ移動量の組をより多く設けることにより、任意のエントリ間データ移動を比較的少ないサイクル数で実現することができる。
図15は、このメモリセルマット端部のエントリ0−5および2044−2047に対するデータ転送配線300の配線レイアウトを概略的に示す図である。このエントリ0−
3においては、そのデータ出力端部305から、+1、+2および+4のデータシフト転送を行なう場合、エントリ2045‐2047方向へ、データをシフトする必要がある。したがって、この場合、プラスシフト用配線330pを用いて、各データ転送配線300の転送経路を、エントリ端部から他方端へ配線する。これにより、エントリ0ないし3のデータ出力部305に対し、それぞれ、プラス方向のシフト用送出部XP1、XP2およびXP4をそれぞれ配置することができる。
一方、メモリセルマットの他方端のエントリ2045−2047に対して設けられるデータ転送配線300においては、マイナス方向のデータ転送時、最初のエントリ0に戻って、データを転送する必要がある。このため、マイナスシフト用の配線330nをメモリセルマットの他方端から一方端に配設し、各データ転送配線300のマイナス方向のデータシフトを実現する。これにより、エントリ2045−2047に対して設けられるデータ出力部305に対し、各マイナス方向のシフト用送出XN1、XN2およびXN4を、それぞれ配置することができ、各データ転送配線300において、±1、±2、および±4のデータ転送シフトを実現することができる。
なお、このデータシフト用の配線330pおよび330nは、転送経路300を構成する配線と別の配線層の配線で形成されてもよい。また、このシフト用配線330nおよび330pにより接続される送出部XP1、XP2、およびXP4およびXN1、XN2およびXN4は、それぞれ、データ転送配線300の平行四辺形領域の底部の空き領域(三角形状の領域)に配設されてもよい。
いずれの場合においても、このエントリ0ないし2047において、リング状にデータを移動させることができ、任意の方向に向かって、任意のデータエントリ間データ移動を実現することができる。
図16は、図6に示すALU間接続回路65の構成を概略的に示す図である。ALU間接続回路65において、演算器31のXレジスタ54、XHレジスタ220およびXLレジスタ221が、それぞれ、nビット幅の転送配線束340a、340hおよび340lにそれぞれ結合される。このnビット幅の転送配線束340a、340hおよび340lは、それぞれ、他のエントリのからのデータ転送配線300の束である。これらの転送配線束340a、340hおよび340lは、それぞれ、接続部350a、350hおよび350lを介してXレジスタ54、XHレジスタ220およびXLレジスタ221に結合される。
一方、Xレジスタ54、XHレジスタ220およびXLレジスタ221が、それぞれ、出力ノード305a、305hおよび305lを介してデータ転送配線300a、300hおよび300lに結合される。これらの転送配線300a、300hおよび300lは、それぞれ、最大データ移動量のエントリ部まで延在し、その経路の途中で、他のエントリにもデータを転送する。他のエントリにおいて、この接続部350a、350hおよび350lにより、データ移動量の配線が選択される。
演算器31の構成は、先の図8に示す演算器の構成と同じであり、対応する部分には同一参照番号を付し、その詳細説明は省略する。
これらの接続部350a、350hおよび350lにおいて、データ移動量に応じて対応のエントリを選択する必要がある。この対応の他のエントリを選択するために、接続部350a、350hおよび350lそれぞれにおいて、スイッチ回路が設けられる。
図17は、このALU間接続回路65におけるスイッチ回路および関連の部分の構成の
一例を示す図である。1ビットデータ転送時においては、Xレジスタ54を利用する。2ビットデータ転送時にXHレジスタおよびXLレジスタが利用される。他のエントリの演算器のXレジスタ、XHレジスタおよびXLレジスタそれぞれに対して、この図17に示す構成が設けられる。しかしながら、図17においては、図面を簡略化するために、Xレジスタ54に対応する部分の構成のみを代表的に示す。
図17において、ALU間接続回路65は、他のエントリの選択信号ECM_EM_k(k=1、…256)に従って、対応のデータ出力配線ECM_IN_k上の信号に応じた信号を生成するスイッチ回路360と、転送イネーブル信号ECM_ENに従って、このスイッチ回路360の出力信号と対応のエントリから転送されたデータの一方を選択するセレクタ362と、転送イネーブル信号ECM_ENに従って、Xレジスタ54の保持データに従って出力データECM_OUTを生成するトライステートバッファ364を含む。このトライステートバッファ364により、データ転送配線の出力段305(305a,305h,305l)が駆動される。
スイッチ回路360は、他のエントリそれぞれに対応して設けられる選択スイッチゲートPSQ256…PSQ1、NSQ1、…NSQ256を含む。これらの選択スイッチゲートPSQ256−PSQ1,NSQ1−NSQ256が、それぞれ、エントリ選択信号ECM_EN_kに従って対応のデータ転送配線上の出力信号ECM_IN_kを選択して、この対応のデータ転送配線上の入力信号に従って内部ノードNDを駆動する。
これらの選択スイッチングゲートPSQ256−PSQ1、NSQ1−NSQ256は、それぞれ、内部ノードNDと接地ノードの間に直列に接続されるNチャネルMOSトランジスタ(絶縁ゲート型電界効果トランジスタ)NQ1およびNQ2を含む。MOSトランジスタNQ1のゲートが、対応の他のエントリからの転送入力信号ECM_IN_kを受け、MOSトランジスタNQ2のゲートに、エントリ選択信号ECM_EN_kを受ける。
したがって、図17に示すスイッチ回路360の構成では、データ転送配線は、最大±256エントリ離れた位置のエントリ間のデータ転送を行なう。このデータ転送配線の途中に設けられる中間の転送量(データ移動量)は、2のべき乗の値で順次設定されてもよい。
スイッチ回路360は、さらに、プリチャージ指示信号/ECM_PRCに従って内部ノードNDを電源電圧レベルにプリチャージするPチャネルMOSトランジスタPQ1と、内部ノードND上の信号を反転するインバータIV1と、インバータIV1の出力信号に従って選択的に導通して、内部ノードNDを電源電圧レベルに駆動するPチャネルMOSトランジスタPQ2と、インバータIV1の出力信号を反転して、このスイッチ回路360の出力信号を生成するインバータIV2を含む。
MOSトランジスタPQ2およびインバータIV1により、いわゆる「ハーフラッチ」が形成される。内部ノードNDは、プリチャージ時、電源電圧レベルにプリチャージされる。選択スイッチゲートPSQkまたはNSQk(k=1−256)は、選択されたときに、内部ノードNDを接地電圧レベルに駆動する。選択スイッチゲートPSQ256−PSQ1、NSQ1−NSQ256を用いて内部ノードNDをいわゆるオープンドレイン方式で駆動する。内部ノードNDがプリチャージ電圧レベルから接地電圧レベル方向へ駆動されるだけであり、データ転送時、高速でデータ転送を行なうことができる。また、各選択スイッチゲートは、2個のトランジスタで構成され、回路のレイアウト面積を低減することができる。
Xレジスタ54は、クロック信号CLKX(内部の演算処理サイクルを決定するクロック)の立上がりに応答してラッチ状態となる。ここで、図18においては、+1シフト動作時の波形を示す。すなわち、エントリ番号iのエントリに対し、エントリ番号(i+1)のエントリのデータが転送され、隣接エントリ間でのデータ転送が行われる。
図18は、図17に示すALU間接続回路の動作を示すタイミング図である。以下、図18を参照して、図17に示すALU間接続回路65の動作について説明する。
クロックサイクル♯1においては、転送動作は行なわれず、転送イネーブル信号ECM_ENはLレベルである。この状態においては、セレクタ362は、対応のエントリからのデータを選択する状態に設定され、また、トライステートバッファ364は、出力ハイインピーダンス状態にある。Xレジスタ54には、データD[i]が格納されている。
クロックサイクル♯2において、転送イネーブル信号ECM_ENが活性状態のHレベルに設定される。応じて、セレクタ362が、スイッチ回路360の出力信号を選択する状態に設定され、また、トライステートバッファ364が、活性化される。これにより、Xレジスタ54に保持されているデータD[i]に従って、転送出力信号ECM_OUTがデータD[i]に対応する状態に設定される。
この転送出力信号ECM_OUTが確定すると、対応のデータ転送配線において出力部からデータが転送され、応じて、各エントリにおいて、個々の転送データ送出部のデータECM_IN_iのデータが確定状態となる。
この転送出力信号の送信時においては、プリチャージ指示信号/ECM_PRCは、Lレベルであり、スイッチ回路360はプリチャージ状態にある(エントリ選択信号ECM_EN_+1は、非活性状態にある)。
クロックサイクル♯2において、クロック信号CLKXの立下がりに従って、プリチャージ指示信号/ECM_PRCがHレベルの非活性状態となり、また、これと並行して、エントリ選択信号ECM_EN_+1が活性化される。このエントリ選択信号ECM_EN_+1の活性化時には、既に、隣接エントリ(i+1)からトライステートバッファ364を介してデータ転送配線に転送された出力データECM_IN_+1が確定状態にある。従って、スイッチ回路360からの出力データが、転送データECM_IN_+1に対応する状態となる。
すなわち、隣接エントリ(i+1)からの転送データECM_IN_+1がHレベルのとき、選択スイッチゲートPSQ1において、MOSトランジスタNQ1およびNQ2がともに導通状態となり、ノードNDが接地電圧レベルに駆動される。この状態においては、インバータIV1の出力信号は、Hレベルであり、MOSトランジスタPQ2はオフ状態にあり、ノードNDはLレベルに維持される。一方、隣接エントリ(i+1)からの転送データECM_IN_+1がLレベルのときには、選択スイッチゲートPSQ1は非導通状態であり、ノードNDは、プリチャージ状態の電圧レベルを維持する。ノードNDがHレベルのときには、インバータIV1の出力信号がLレベルとなり、応じて、MOSトランジスタPQ2がオン状態となり、ノードNDは、電源電圧レベルに維持される。
したがって、クロックサイクル♯2のクロック信号CLKXが立下がる後半サイクルにおいて、スイッチ回路360において、隣接エントリ(i+1)からデータ転送配線ECM_IN_+1を介して転送されるデータD[i+1]に応じたデータを生成して、セレクタ362を介してXレジスタ54へ伝達する。
Xレジスタ54は、次のクロックサイクル♯3において、クロック信号CLKXが立上がるとラッチ状態となり、その保持データが、転送データD[i+1]に応じた状態に設定される。このクロックサイクル♯3において、プリチャージ指示信号/ECM_PRCが再びLレベルの活性状態とされ、スイッチ回路360のインバータIV2からの出力信号が再びHレベルとなる。また、転送イネーブル信号ECM_ENが非活性状態のLレベルとなり、トライステートバッファ364が出力ハイインピーダンス状態となり、また、セレクタ362が対応のエントリからのデータをXレジスタ54へ転送する状態に設定される。
Xレジスタ54は、通常のラッチ回路またはフリップフロップで構成され、クロック信号CLKXが立ち上がると、内部のデータをラッチする状態に設定されれば良い。クロック信号CLKXの立ち上がり時において、スイッチ回路360が、プリチャージ状態とされ、その出力信号が初期化されても、Xレジスタ54には、このスイッチ回路360からの初期化信号の影響を受けることなく、確実に、転送データがラッチされる。
この図18に示すように、転送サイクル♯2において、エントリiからのデータD[i]を対応のデータ出力部から送信データECM_Outとしてデータ転送配線を介して転送し、次のクロックサイクル♯3において、隣接エントリから転送されたデータD[i+1]をXレジスタ54に保持することができる。
なお、このエントリ間のデータ移動量は、隣接エントリ間のデータ移動に限定されず、1回の転送動作により、最大256のエントリ間のデータ移動を行なうことができる。
エントリ間のデータ転送移動量が、データ転送配線において設定されたデータ移動量(たとえば±1、±2および±4…±256)と異なる値の場合、この転送サイクルを繰返す(シフトレジスタ態様でデータ転送を行う)ことにより、任意の距離離れたエントリ間のデータ転送(たとえばエントリ+257等の奇数エントリ分離れたエントリとの間での通信)を、実現することができる。これにより、少ないサイクル数で、任意のエントリ間のデータ転送を実現することができる。
また、このエントリ間のデータ転送において、各エントリが並列にデータ転送を行なってデータの取込みを行なっており、効率的なデータ転送を実現することができる。
また、スイッチ回路360においては、オープンドレイン方式でプリチャージされた内部ノードをドライブしており、スイッチ回路360のトランジスタ数を低減することができ、また、高速でデータ転送を行うことが出来る。また、1本のデータ転送配線は、複数のエントリ間データ移動に対応しており、配線領域を低減することができる。
[実施の形態2]
図19は、この発明の実施の形態2に従うALU間相互接続スイッチ回路の構成を示す図である。図19においても、1つのエントリに対応して配置されるALU間接続回路の構成を示す。この図19に示すALU間接続回路65は、図17に示すALU間接続回路65と以下の点でその構成が異なる。すなわち、Xレジスタ54とトライステートバッファ364との間に、対応のエントリから読出されたデータとXレジスタ54の保持データとを受けるセレクタ370が設けられる。このセレクタ370は、転送ロードイネーブル信号ECM_LD_ENが活性化されると、対応のエントリから読出したデータを選択してトライステートバッファ364へ与える。この転送ロードイネーブル信号ECM_LD_ENの非活性化時、セレクタ370は、Xレジスタ54の出力するデータを選択してトライステートバッファ364へ与える。
図19に示すALU間接続回路65の他の構成は、図17に示すALU間接続回路65の構成と同じであり、対応する部分には同一参照番号を付し、その詳細説明は省略する。
図20は、図19に示すALU間相互接続回路のデータ転送動作を示すタイミング図である。この図20においても、隣接エントリ(i+1)からエントリiへのデータ転送時のタイミング図を示す。以下、図20を参照して、図19に示すALU間相互接続回路のデータ転送動作について説明する。
クロックサイクル♯1においては、プリチャージ指示信号/ECM_PRCがLレベルの活性状態であり、一方、転送イネーブル信号ECM_ENおよび転送ロードイネーブル信号ECM_LD_ENは、Lレベルの非活性状態である。セレクタ360は、対応のエントリからのデータを選択する状態に設定され、また、セレクタ370は、Xレジスタ54の保持出力データを選択する状態に設定される。スイッチ回路360は、プリチャージ状態にあり、ノードNDは電源電圧レベルである。
クロックサイクル♯2において、対応のエントリからのデータの読出が実施される。この読出時においては、先の図4において説明したビットシリアル演算時と同様にして実行される。すなわち、メモリセルマットにおいてアドレスポインタに従ってワード線が選択され、ついで、センスアンプが活性化され、選択メモリセルのデータが、演算器に向かって転送される(ロード命令が実行される)。
このクロックサイクル♯2において、また、データ読出と並行して、クロック信号CLKXの立上がりと同期して、転送イネーブル信号ECM_ENおよび転送ロードイネーブル信号ECM_LD_ENが活性状態に設定される。プリチャージ指示信号/EMC_PRCは、活性状態にある。応じて、対応のエントリから読出されたデータが、セレクタ370において選択され、トライステートバッファ364により増幅されて、転送出力データECM_OUTとして、対応のエントリから読出データD[i]に対応するデータが出力される。
次いで、このクロックサイクル♯2において、クロック信号CLKXの立下がりに同期して、プリチャージ指示信号/ECM_PRCを非活性状態に設定し、またエントリ選択信号ECM_EN_+1を活性状態に設定する。応じて、スイッチ回路360がイネーブルされ、この隣接エントリ(i+1)からデータ転送配線を介して入力部ECM_IN_+1上に伝達されたデータD[i+1]が選択される。このとき、セレクタ362は、転送イネーブル信号ECM_ENに従って、スイッチ回路360の出力信号を選択する状態に設定されており、セレクタ362を介してスイッチ回路360からのデータD[i+1]に応じたデータが、Xレジスタ54へ転送される。
このクロックサイクル♯2においてクロック信号CLKXがLレベルに立下がると、Xレジスタ54は、スルー状態となり、与えられたデータを取り込む。クロックサイクル♯3において、クロック信号CLKXがHレベルに立上がると、Xレジスタ54が、取り込んだデータをラッチし、その保持データが、データD[i+1]に確定する。
したがって、この場合、クロックサイクル♯2において、メモリセルマットからのデータ読出と、エントリ間通信を行なったことになる。これにより、Xレジスタ54に、一旦転送データを保持させる動作が不要となり、エントリ間通信に要するクロックサイクル数を低減することができる。
以上のように、Xレジスタ54をバイパスして、対応のエントリからのデータに従って、転送データを生成して、データ転送配線経路のデータ出力部へ転送することにより、X
レジスタに転送データを格納するサイクルが不要となり、高速のエントリ間通信を実現することができる。
なお、このエントリ指定信号ECM_EN_kおよびエントリ転送指示信号ECM_ENおよびプリチャージ指示信号/ECM_PRCは、先の図1に示すコントローラ22からプログラム命令(マイクロ命令メモリ)21に格納された命令に従って生成される。
また、演算器の構成としては、Xレジスタ、XHレジスタおよびXLレジスタを含む図8に示す構成の場合、およびXレジスタのみがデータ転送用に設けられる図6に示す構成のいずれが用いられても良い。演算器内のデータ転送用のレジスタに対して図17または図19に示す構成を設ける。
この実施の形態2に従うALU間接続回路の構成においても、1本のデータ転送配線の通信可能エントリ以外のエントリとの間でデータ転送を行う場合、データ転送動作を繰返し実行する。すなわち、転送エントリ選択信号ECM_EN_±jを順次jを設定してデータ転送サイクル(サイクル♯2の動作)を行うことにより、転送データを順次シフトして転送して目標エントリに転送することができ、任意のエントリ間でのデータ通信を実現することができる。
以上のように、このエントリ間の通信機能を利用することにより、メモリセルマットに格納されたデータを、たとえばバルブシフタを用いた場合と同様に、エントリ間をシフトさせることができ、シフトレジスタを用いたデータ転送と同様のデータ転送動作を実現することができる。このデータ転送機能を利用することにより、データのコピー操作、画像データ処理において画素マトリクスを利用するフィルタ処理等での隣接画素データを利用する演算等を高速で実行することが可能となる。
1 演算処理システム、2 システムLSI、FB1−FBh 基本演算ブロック、20 主演算回路、30 メモリセルマット、31 演算器(ALU)、32 ALU間相互接続用スイッチ回路、22 コントローラ、54 Xレジスタ、65 ALU間接続回路、300 データ転送配線、XP1,XP2,XP4,XN1,XN2,XN4 転送データ送出部、320 単位配線領域、330p,330n メモリセルエントリ端部間シフト動作用配線、305a,305h,305l 転送データ出力部、340a,340h,340l 転送配線束、350a,350h,350l 転送データ入力部、360 スイッチ回路、362 セレクタ、364 トライステートバッファ、PSQ256,PSQ1,NSQ1,NSQ256 選択スイッチゲート、370 セレクタ。