(58)【調査した分野】(Int.Cl.,DB名)
磁気共鳴測定を実行するための実行用情報の中で先行処理の対象となる部分を特定し、その部分から生成された命令列をプロシージャー実体として第1記憶部へ転送すると共に、当該部分に代えて前記プロシージャー実体を特定するための参照情報が埋め込まれた転送用の命令列を生成する先行処理を実行する先行処理手段と、
前記先行処理後の転送用の命令列について先頭から転送単位で順次、第2記憶部への転送を繰り返す単位転送手段と、
前記第2記憶部上に順次転送される転送用の命令列を先頭から参照して実行用の命令列を再構成する手段であって、前記参照情報に基づいて前記第1記憶部上のプロシージャー実体を参照することにより前記実行用の命令列を再構成する再構成手段と、
前記再構成された前記実行用の命令列を実行するシーケンサー部と、
を含むことを特徴とする磁気共鳴測定装置。
【発明を実施するための形態】
【0019】
以下、本発明の好適な実施形態を図面に基づいて説明する。
【0020】
(NMR測定装置)
図1には、本発明に係るNMR測定装置の実施形態が示されている。このNMR測定装置は、有機化合物、高分子材料、生体物質、その他の物質の分析において用いられるものである。測定対象となるサンプルは液体サンプル、固体サンプル等である。なお、本発明は、他の磁気共鳴測定装置に対しても適用可能である。
【0021】
図1において、ホストコンピューター10は、パルスプログラムを生成するものである。パルスプログラムは、所望の測定を実現するためのパルスシーケンスを記述したものであり、それはユーザーによりあるいは自動的に生成される。パルスプログラムは、例えば、周波数、位相、強度、出力タイミング、出力時間等の異なる複数の高周波(RF)パルス、及び、その受信タイミングや受信時間等が組み合わされたものである。パルスプログラムはホストコンピューター10から分光計制御コンピューター12へ送られる。ホストコンピューター10は一般的なパーソナルコンピューターで構成され得る。
【0022】
分光計制御コンピューター12は、以下に詳述する送受信ユニット22の動作を制御し、また送受信ユニット22から得られる受信データを解析するものである。分光計制御コンピューター12及び送受信ユニット22により分光計が構成される。本実施形態において、分光計制御コンピューター12は、パルスプログラム(実行用情報の一例に相当)を命令列に変換するコンパイラーを搭載している。そのコンパイラーが
図1において命令列生成部14として表されている。本実施形態において、コンパイラーは、転送用の命令列を生成しており、その転送用の命令列が送受信ユニット22に送られている。命令列の転送は、転送制御部16によって行われる。送受信ユニット22において、転送された命令列から最終的な命令列(実行用の命令列)が生成される。
【0023】
命令列生成部14は、パルスプログラムから転送用の命令列を生成する際に、パルスプログラムの中で先行転送の対象となる部分を特定し、その部分の命令列をプロシージャー命令列として生成する。または、命令列生成部14は、パルスプログラムを命令列に変換してから、先行転送の対象となるプロシージャー命令列を特定してもよい。また、命令列生成部14は、パルスプログラムについて、先頭から転送単位で順次、命令列(以下、「ストリーミング命令列」と称する)を生成する。このとき、命令列生成部14は、先行転送の対象となる部分に代えてプロシージャー命令列を特定するための参照情報が埋め込まれたストリーミング命令列を生成する。プロシージャー命令列及びストリーミング命令列が、転送用の命令列に該当する。転送単位は予め決定された単位であってもよいし、任意の単位に変更されてもよい。例えば、転送レートに合わせて転送単位が変更されてもよい。転送制御部16は、ストリーミング命令列に先行してプロシージャー命令列を送受信ユニット22に転送する。プロシージャー命令列の先行転送が完了した後、転送制御部16は、先頭から順次、ストリーミング命令列を送受信ユニット22に転送する。ストリーミング命令列については、生成と転送とが並列的に実行される。以下において、プロシージャー命令列の転送を「先行転送」と称し、ストリーミング命令列の転送を「ST転送(ストリーミング転送)」と称することとする。プロシージャー命令列、ストリーミング命令列、及び、転送処理については、後で詳述する。
【0024】
分光計制御コンピューター12は、通信バス20を経由して、送受信ユニット22に接続されている。図示の例では、分光計制御コンピューター12は、ホストコンピューター10に対してネットワークを介して接続されている。分光計制御コンピューター12は、例えば、専用又は汎用のコンピューターによって構成される。本実施形態において、分光計制御コンピューター12は、受信信号スペクトルを解析するFFT演算機能を搭載している。それが
図1において受信信号解析部18として表されている。分光計制御コンピューター12は、スペクトル解析機能の他、NMR測定において必要となる制御機能、解析機能及び管理機能を搭載している。なお、ホストコンピューター10と分光計制御コンピューター12が一体化されてもよい。
【0025】
送受信ユニット22について説明する。送受信ユニット22は、NMR測定で必要となる送信信号を生成し、またNMR測定結果である受信信号を処理するものである。送受信ユニット22又はそれと分光計制御コンピューター12とを合わせた部分をNMR測定装置と称することも可能である。
【0026】
メモリー26には、分光計制御コンピューター12から送られてきた命令列が格納される。命令列の格納制御は、メモリー制御部24によって行われる。なお、メモリー制御部24は、分光計制御コンピューター12に含まれていてもよい。再構成部32によって、メモリー26に格納された命令列から最終的な命令列(実行用の命令列の一例に相当)が生成される。もちろん、他の回路によって最終的な命令列が生成されてもよい。本実施形態では、測定を実行しながら、それと並行して、命令列を生成し得る。メモリー26上には、命令列をシーケンサー単位で格納する複数のFIFO領域等が設けられる。
【0027】
複数のメモリー34には、個々のシーケンサーによって実行される命令列(実行用の命令列の一例に相当)が格納される。本実施形態においては、6個のシーケンサー(マスターシーケンサー36、4つの送信シーケンサー38及び受信シーケンサー40)が設けられており、それに合わせて6個のメモリー34が設けられている。具体的には、第1のメモリー34には、マスターシーケンサー36によって実行される命令列が格納される。第2のメモリー34には、第1の送信シーケンサー38によって実行される命令列が格納され、第3のメモリー34には、第2の送信シーケンサー38によって実行される命令列が格納され、第4のメモリー34には、第3の送信シーケンサー38によって実行される命令列が格納され、第5のメモリー34には、第4の送信シーケンサー38によって実行される命令列が格納される。第6のメモリー34には、受信シーケンサー40によって実行される命令列が格納される。各メモリー34上には、命令列を格納するFIFO領域等が設けられる。このように、命令列をシーケンサー単位で格納する複数のメモリー34が設けられている。各シーケンサーの内部にそのようなFIFO領域が設けられていてもよい。命令列は多様な命令からなり、それには個々の回路へ与える設定値が含まれる。
【0028】
マスターシーケンサー36は、複数の送信シーケンサー38及び受信シーケンサー40の動作タイミング等を制御するものである。具体的には、マスターシーケンサー36は、マスターシーケンサー36用のメモリー34に格納された命令列を先頭から順次実行する。マスターシーケンサー36の同期制御により、複数の送信シーケンサー38及び受信シーケンサー40が同期動作を行う。
【0029】
複数の送信シーケンサー38は、送信信号生成部42が有する複数の送信信号生成器等の動作を制御するものである。具体的には、個々の送信シーケンサー38は、個々の送信シーケンサー38用のメモリー34に格納された命令列を先頭から順次実行する。本実施形態においては、一例として、4つの送信信号生成器(4つの信号発生器)が設けられており、それに合わせて4つの送信シーケンサー38が設けられている。なお、4つの信号発生器にて生成された複数の送信信号は、合成されて送信信号生成部42から出力される。本実施形態では、第1の送信シーケンサー38は第1信号発生器を制御しており、第2の送信シーケンサー38は第2信号発生器を制御しており、第3の送信シーケンサー38は第3信号発生器を制御しており、第4の送信シーケンサー38は第4信号発生器を制御している。但し、1対1の対応関係は必須ではなく、1つの送信シーケンサー38が複数の信号発生器を制御してもよく、あるいは、複数の送信シーケンサー38が1つの信号発生器を制御してもよい。複数の送信信号の合成を行う回路及びそれ以降に設けられる回路の動作の制御については、4つの送信シーケンサー38のうちの一部又は全部が担っている。なお、本願明細書において明示する数値はいずれも例示に過ぎないものである。
【0030】
受信シーケンサー40は、基本的に個々の送信シーケンサー38と同一の構成を備えている。受信シーケンサー40は、受信シーケンサー40用のメモリー34に格納された命令列を先頭から順次実行する。これによって、受信信号処理部48が有する各回路の動作が制御される。
【0031】
送信信号生成部42は、複数の送信信号生成器としての複数の信号発生器、合成器としての加算器、DA変換器(DAC)、信号処理回路、周波数変換回路等を備えている。送信信号生成部42によって、NMR測定用のRF送信信号43が生成される。RF送信信号43はアナログ信号であり、それは線形増幅を行うパワーアンプ44に送られる。パワーアンプ44において増幅されたRF送信信号がT/Rスイッチ(送受信切替器)52を介してプローブ56に送られる。
【0032】
プローブ56は、送受信コイル(図示されていない)を備えた挿入部56Aと、その根元部分に相当する筐体部56Bと、により構成される。図示の例では、プローブが1つのポートを備えており、つまり1つのRF送信信号がプローブに入力されている。2つあるいはそれ以上の個数のポートを備えたプローブを利用することも可能である。挿入部56Aは、円筒形を有し、それは静磁場発生器58のボア(円筒腔)内に挿入される。送受信コイルにRF送信信号が供給されると、そこで生じた電磁波が試料に照射され、観測核において共鳴吸収現象が生じる。その後、送受信コイルに誘起されるNMR信号(RF受信信号)がプローブ56からT/Rスイッチ52を経由して受信信号処理部48へ送られている。
【0033】
本実施形態において、T/Rスイッチ52は、送信時にRF送信信号をプローブへ送り、受信時にプローブからのRF受信信号を受信信号処理部48へ送るルーティング機能を有している。T/Rスイッチ52からの受信信号54はプリアンプ45で増幅され、増幅された受信信号46が受信信号処理部48に送られている。プリアンプ45がT/Rスイッチ52に内蔵されてもよい。
【0034】
送受信ユニット22内の受信信号処理部48は、入力されたRF受信信号に対して周波数変換、AD変換、直交検波、等の処理を実行する回路である。処理後の受信信号(複素信号)が受信データとして受信メモリー50上にいったん格納される。受信メモリー50から読み出された受信データが分光計制御コンピューター12へ送られ、そこで受信データの解析が実行される。但し、送受信ユニット22内において受信データの解析を行うようにしてもよい。
【0035】
図2を参照してメモリー26の構成について説明する。メモリー26上には、FIFO領域28とプロシージャー格納領域30とが設けられている。FIFO領域28には、命令列をシーケンサー単位で格納する複数のFIFO領域(FIFO領域280〜285)が設けられている。具体的には、FIFO領域280には、マスターシーケンサー36用の命令列が格納される。FIFO領域281には、第1の送信シーケンサー38用の命令列が格納され、FIFO領域282には、第2の送信シーケンサー38用の命令列が格納され、FIFO領域283には、第3の送信シーケンサー38用の命令列が格納され、FIFO領域284には、第4の送信シーケンサー38用の命令列が格納される。FIFO領域285には、受信シーケンサー40用の命令列が格納される。プロシージャー格納領域30は共有メモリーとして機能し、マスターシーケンサー36、複数の送信シーケンサー38及び受信シーケンサー40によって共有される。後述するように、プロシージャー格納領域30には、特定のパルスシーケンスを実行するための命令列(プロシージャー命令列)が格納される。FIFO領域280〜285には、命令列の中でプロシージャー命令列以外の命令列(ストリーミング命令列)が格納される。なお、FIFO領域280〜285は、例えばリングバッファで構成されている。
【0036】
図3を参照してパルスプログラムについて説明する。パルスプログラム70にはパルスシーケンスが記述されている。パルスプログラム70には、例えば、複数の高周波パルスの設定値(周波数、位相、強度)、高周波パルスの出力タイミング、受信信号の検出タイミング、各回路の設定値、等の各種実行用情報が記述されている。パルスプログラム70の中には、所定のパルスシーケンスを繰り返して実行するための一連の部分72(
図3中、「Loop」と記述された部分)、特定の高周波パルスの照射を実行するための一連の部分74,76(
図3中、「Shaped pulse」と記述された部分)等が含まれる。部分72,74,76は、複数のパルスシーケンス記述の集合体である。命令列生成部14によってパルスプログラム70がコンパイルされることにより、命令列(プロシージャー命令列、ストリーミング命令列)が生成される。
【0037】
図4にパルスシーケンスの一例を示す。
図4(A)〜(C)には、パルスシーケンスの一部が示されている。
図4(A)には、受信チャンネル用のパルスシーケンス(RCV)が示されている。三角80は受信信号の検出タイミングを示している。このパルスシーケンスは受信シーケンサー40によって実行される。
図4(B)、(C)には、送信チャンネル用のパルスシーケンスが示されている。これらのパルスシーケンスは送信シーケンサー38によって実行される。
図4(B)に示されているパルスシーケンス(OBS)はNMR信号を得るためのものであり、出力されるパルス82が示されている。このパルス82は、上記の「Shaped pulse」(シェープドパルス)に相当し、山型の形状を有する。
図4(C)に示されているパルスシーケンス(IRR)は、デカップリング用のパルスシーケンス、つまり、不要な相互作用の結合を切り離すためのパルスシーケンスである。
図4には示されていないが、パルスシーケンスには、90度パルスや180度パルス等を出力するための命令が含まれ得る。
【0038】
図5を参照して命令列の生成処理について説明する。命令列生成部14は、パルスプログラム70の中で先行転送の対象となる部分を特定し、その部分の命令列をプロシージャー命令列として生成する。一例として、ループ処理を実行するための部分72、シェープドパルスを照射するための部分74,76が、先行転送の対象となる。命令列生成部14は、部分72をコンパイルすることにより、部分72からプロシージャー命令列P
1を生成する。同様に、命令列生成部14は、部分74,76をそれぞれコンパイルすることにより、部分74,76のそれぞれからプロシージャー命令列P
2,P
3を生成する。命令列生成部14は、マスターシーケンサー36用のプロシージャー命令列、個々の送信シーケンサー38用のプロシージャー命令列、及び、受信シーケンサー40用のプロシージャー命令列を生成する。例えば、命令列生成部14は、各シーケンサーの機能に応じて各シーケンサー用のプロシージャー命令列を生成する。命令列生成部14は、例えば、複数の送信シーケンサー38及び受信シーケンサー40の動作タイミング等を制御するための部分から、マスターシーケンサー36用のプロシージャー命令列を生成する。命令列生成部14は、送信信号生成部42の動作を制御するための部分から、個々の送信シーケンサー38用のプロシージャー命令列を生成する。命令列生成部14は、受信信号処理部48の動作を制御するための部分から、受信シーケンサー40用のプロシージャー命令列を生成する。なお、プロシージャー命令列によって示される命令列を実行しないシーケンサーが存在する場合もある。この場合、そのシーケンサー用のプロシージャー命令列は生成されない。
【0039】
パルスプログラム70において同一のプロシージャー命令列に該当する部分が複数存在する場合、命令列生成部14は、それら複数のプロシージャー命令列の中から1つのプロシージャー命令列を生成する。生成されたプロシージャー命令列が、代表(共通)のプロシージャー命令列となる。例えば、部分74,76が同一の場合、つまり、プロシージャー命令列P
2,P
3が同一の場合、命令列生成部14は、プロシージャー命令列P
2,P
3の中から1つのプロシージャー命令列(例えば先に登場するプロシージャー命令列P
2)を生成する。なお、命令列生成部14は、複数の同一のプロシージャー命令列を生成してもよい。
【0040】
命令列生成部14は、送受信ユニット22のメモリー26のアドレスを管理しており、プロシージャー命令列の格納先の先頭アドレス(プロシージャー格納領域30におけるアドレス)を指定する。なお、参照情報は、先頭アドレスを示すアドレス情報に限らず、プロシージャー命令列の格納先のアドレスを特定可能な情報であればよい。同一のプロシージャー命令列が複数存在し、それらの中で代表のプロシージャー命令列がプロシージャー格納領域30に格納される場合、先行転送の対象となる各部分に同一のアドレス情報を埋め込む。
【0041】
命令列生成部14は、パルスプログラム70について、先頭から転送単位で順次、ストリーミング命令列Sを生成する。これにより、部分78A,78B,78C,・・・に対応するストリーミング命令列Sが生成される。このとき、命令列生成部14は、先行転送の対象となる部分に代えてプロシージャー命令列の格納先の先頭アドレスを示すアドレス情報(参照情報の一例に相当)が埋め込まれたストリーミング命令列を生成する。ストリーミング命令列中のアドレス情報を参照することにより、プロシージャー命令列の格納先を特定することが可能となる。命令列生成部14は、各シーケンサーの機能に応じて、マスターシーケンサー36用のストリーミング命令列、個々の送信シーケンサー38用のストリーミング命令列、及び、受信シーケンサー40用のストリーミング命令列を生成する。
【0042】
プロシージャー命令列及びストリーミング命令列は、送受信ユニット22に送られ、メモリー26に格納される。プロシージャー命令列は、
図2に示されているメモリー26上のプロシージャー格納領域30に格納される。ストリーミング命令列は、FIFO領域28に格納される。
【0043】
ここで、命令の量及び密度の観点から、命令列の転送条件について説明する。本実施形態では、命令列中の一連の高密度部分が、プロシージャー化されて先行転送の対象となる。例えば、多数のパラメーターを短時間で高速に変更するための命令列が、高密度部分に該当する。
図3に示す例では、ループ処理を実行するための命令列部分72、シェープドパルスを出力・照射するための部分74,76が、高密度部分に該当する。例えば部分74,76には、シェープドパルスを形成するために、多数のパラメーターを短時間で高速に変更するための複数の命令が含まれる。このような高密度部分に含まれる命令列は、他の部分の命令列と比べて、シーケンサーにおける消費速度が速い。従って、高密度部分における各命令列をストリーミング命令列として生成し、その生成と転送とを並列的に実行すると(ST転送を実行すると)、シーケンサーが参照する命令列が枯渇する可能性がある。つまり、シーケンサーでの命令列の消費速度がストリーミング命令列の生成及び転送の速度よりも速くなり、ストリーミング命令列の生成及び転送が命令の消費に追い付かず、シーケンサーで命令列が枯渇する場合が生じ得る。それに対処するために、本実施形態では、高密度部分の命令列についてはST転送の対象とせずにプロシージャー化し、他の命令列に先行して転送している。
【0044】
一方で、命令列の全部を転送してから測定開始するのでは、全命令列の生成及び転送に要する時間が増大し、測定開始が遅延する問題が生じる。また、転送先の送受信ユニット22に、全命令列を格納することが可能な大容量のメモリーを設置しておく必要がある。そこで、本実施形態では、低密度部分の命令列についてはプロシージャー化せずに、ST転送の対象としている。つまり、低密度部分からストリーミング命令列を順次生成し、生成されたストリーミング命令列を順次転送している。これにより、全命令列の生成及び転送を待たずに、測定を開始することが可能となる。また、大容量のメモリーを送受信ユニット22に設置せずに済む。このように本実施形態では、命令列の先行転送とST転送とを併用している。
【0045】
以上の点をまとめたものが、
図6に表で示されている。命令列中の高密度部分についてはプロシージャー化して先行転送し、低密度部分についてはストリーミング命令列を生成してST転送を実行する。低密度部分については、その部分の命令量が少ない場合及び多い場合のいずれの場合であっても、ST転送の対象としている。一方、高密度かつ命令量が多い部分を先行転送の対象とすると、プロシージャー命令列の生成及び転送に要する時間が増大し、その分、測定開始が遅延する。従って、本実施形態では、高密度かつ命令量が少ない部分を先行転送の対象としている。なお、NMR測定の性質上、高密度の命令部分が延々と継続することは想定し得ず、実際、高密度かつ命令量の多い部分が生じる可能性は少ない。
【0046】
図7に、各シーケンサー用の命令列の一例を示す。符号80は、マスターシーケンサー36用の命令列を示すものである。符号82〜88は、個々の送信シーケンサー38用の命令列を示すものである。例えば、符号82は、第1の送信シーケンサー38用の命令列を示すものであり、符号84は、第2の送信シーケンサー38用の命令列を示すものであり、符号86は、第3の送信シーケンサー38用の命令列を示すものであり、符号88は、第4の送信シーケンサー38用の命令列を示すものである。符号90は、受信シーケンサー40用の命令列を示すものである。また、符号Pはプロシージャー命令列を示すものであり、符号Sはストリーミング命令列を示すものである。縦軸は時間tであり、矢印の方向(下方)に向かって処理が進んでいく。各シーケンサーでは、命令列の順番に従って各命令列が実行されていく。
【0047】
具体例を挙げて説明すると、マスターシーケンサー36用の命令列(符号80の命令列)には、ストリーミング命令列S
M1〜S
M5,・・・、及び、プロシージャー命令列P
1,P
2,・・・が含まれる。マスターシーケンサー36では、ストリーミング命令列S
M1,P
1,S
M2,S
M3,S
M4,S
M5,P
2,・・・の順番で各命令が実行される。一例として、ストリーミング命令列S
M1には、プロシージャー命令列P
1の格納先の先頭アドレスを示すアドレス情報が含まれている(埋め込まれている)。そのアドレス情報を参照することにより、ストリーミング命令列S
M1の次に実行されるプロシージャー命令列P
1の格納先が特定できるようになっている。同様に、ストリーミング命令列S
M5には、プロシージャー命令列P
2の格納先の先頭アドレスを示すアドレス情報が含まれている。
【0048】
他のシーケンサーについても同様である。第1の送信シーケンサー38用の命令列(符号82の命令列)には、ストリーミング命令列S
A1〜S
A5,・・・、及び、プロシージャー命令列P
1,P
3,・・・が含まれる。第2の送信シーケンサー38用の命令列(符号84の命令列)には、ストリーミング命令列S
B1〜S
B5,・・・、及び、プロシージャー命令列P
2,P
4,・・・が含まれる。第3の送信シーケンサー38用の命令列(符号86の命令列)には、ストリーミング命令列S
C1〜S
C5,・・・、及び、プロシージャー命令列P
1,・・・が含まれる。第4の送信シーケンサー38用の命令列(符号88の命令列)には、命令列が含まれておらず、当該シーケンサーは使用されていない。受信シーケンサー40用の命令列(符号90の命令列)には、ストリーミング命令列S
R1〜S
R5,・・・が含まれる。なお、
図7に示されている例では、受信シーケンサー40用の命令列には、プロシージャー命令列が含まれていないが、受信シーケンサー40用の命令列に、プロシージャー命令列が含まれていてもよい。また、第4の送信シーケンサー38用の命令列には、ストリーミング命令列とプロシージャー命令列のいずれも含まれていないが、プロシージャー命令列とそれを参照するためのストリーミング命令列が含まれていてもよい。
【0049】
同一のプロシージャー命令列が、複数のシーケンサーのそれぞれによって実行される場合がある。例えば、プロシージャー命令列P
2は、マスターシーケンサー36(符号80)及び第2の送信シーケンサー38(符号84)に対する命令列に含まれている。従って、プロシージャー命令列P
2は、マスターシーケンサー36によって実行されるとともに、第2の送信シーケンサー38によっても実行される。この場合であっても、上記のように、1つのプロシージャー命令列P
2がメモリー26のプロシージャー格納領域30に格納され、マスターシーケンサー36と第2の送信シーケンサー38とによって、プロシージャー命令列P
2が共用される。他のプロシージャー命令列についても同様であり、同一のプロシージャー命令列が、複数のシーケンサーのそれぞれによって実行される場合、複数の同一のプロシージャー命令列のうちの1つが、メモリー26のプロシージャー格納領域30に格納される。
【0050】
なお、
図7に示されているプロシージャー命令列とストリーミング命令列との対応関係は、実行される命令の順番を説明するために便宜上、整理されて示されたものである。
図7は、メモリー26における命令列の格納の態様を示すものではない。例えば、同一のプロシージャー命令列が複数図示されているが、これは、各シーケンサーによって実行される命令列を説明するために図示されたものである。本実施形態では、それらのうちの1つのプロシージャー命令列がメモリー26に格納される。
【0051】
次に、
図8を参照して、命令列の転送処理及び再構成処理の概略について説明する。
図8には、転送処理及び再構成処理に関わる構成が示されており、それらの処理に関わらない構成は省略されている。
【0052】
まず、ホストコンピューター10によってパルスプログラムが生成される。そのパルスプログラムは、分光計制御コンピューター12へ送られる。命令列生成部14は、パルスプログラムの全体を参照して先行転送の対象となる部分を抽出し、抽出した部分からプロシージャー命令列を生成する。また、命令列生成部14は、パルスプログラムについて、先頭から転送単位で順次、ストリーミング命令列を生成する。このとき、命令列生成部14は、先行対象となる部分に代えてプロシージャー命令列の格納先のアドレス情報が埋め込まれたストリーミング命令列を生成する。または、命令列生成部14は、パルスプログラムをコンパイルすることにより、一旦、命令列を生成し、その命令列の中から先行転送の対象となるプロシージャー命令列を特定してもよい。この場合も、ストリーミング命令列の生成に際して、先行転送の対象となる部分に代えてプロシージャー命令列の格納先のアドレス情報が格納されたストリーミング命令列が生成される。
【0053】
そして、転送制御部16は、プロシージャー命令列(
図8中の「命令列(Proc)」)を、ストリーミング命令列(
図8中の「命令列(Stream)」)に先行して送受信ユニット22に転送する。プロシージャー命令列の転送が完了した後、転送制御部16は、順次生成されるストリーミング命令列を、順次、送受信ユニット22に転送する。複数のプロシージャー命令列が生成された場合、それら複数のプロシージャー命令列の全部が転送された後に、ストリーミング命令列の転送が開始される。
【0054】
メモリー制御部24は、プロシージャー命令列(命令列(Proc))を、メモリー26上のプロシージャー格納領域30(共有領域)に格納させる。また、メモリー制御部24は、ストリーミング命令列(命令列(Stream))を、メモリー26上のFIFO領域28に格納させる。
【0055】
再構成部32は、メモリー26に格納されている命令列から最終的な命令列を生成する。具体的には、再構成部32は、FIFO領域28に含まれる各FIFO領域(
図2中のFIFO領域280〜285)上のストリーミング命令列を先頭から読み出し、対応するメモリー34(FIFOメモリー)に書き込む。例えば、再構成部32は、FIFO領域280上のストリーミング命令列を先頭から読み出し、マスターシーケンサー36用のメモリー34に書き込む。読み出したストリーミング命令列にアドレス情報が含まれている場合(埋め込まれている場合)、再構成部32は、そのアドレス情報が示すアドレスに格納されているプロシージャー命令列をプロシージャー格納領域30から読み出す。再構成部32は、プロシージャー命令列を解釈展開した上で、マスターシーケンサー36用のメモリー34に書き込む。他のシーケンサーについても同様である。このようにして、各メモリー34には、各シーケンサーによって実行される最終的な命令列が書き込まれることになる。そして、測定開始の指示が与えられると、各シーケンサーは、自身のメモリー34に格納されている命令列を先頭から順次実行する。
【0056】
測定開始後においては、命令列生成部14によるストリーミング命令列の生成、転送制御部16による送受信ユニット22へのストリーミング命令列の転送、再構成部32におる命令列の再構成、及び、各シーケンサーによる命令列の実行が、並列的に行われる。つまり、ストリーミング命令列の生成、転送及び再構成処理が実行されながら、各シーケンサーによって命令列が実行されていく。
【0057】
次に、
図9を参照して、命令列の生成処理及び転送処理の詳細について説明する。
図9中、横軸は時間tを示している。時間t
1に、パルスプログラムが分光計制御コンピューター12に送られたものとする。時間t
2までの間に、命令列生成部14は、パルスプログラムの全体を参照し、先行転送の対象となる部分を特定する。そして、時間t
2〜t
3の間に、命令列生成部14は、パルスプログラムからプロシージャー命令列P
1〜P
Nを生成する。同一のプロシージャー命令列が複数存在する場合には、それらの中から1つのプロシージャー命令列が生成される。
【0058】
転送制御部16は、プロシージャー命令列P
1〜P
Nを送受信ユニット22に転送する(先行転送)。転送制御部16は、プロシージャー命令列が生成される度に、生成されたプロシージャー命令列を、順次、送受信ユニット22に転送してもよい。別の例として、転送制御部16は、プロシージャー命令列P
1〜P
Nの全部が生成された後に、プロシージャー命令列P
1〜P
Nを送受信ユニット22に転送してもよい。
図9に示されている例では、プロシージャー命令列は、生成される度に順次、送受信ユニット22に転送されている。転送されたプロシージャー命令列P
1〜P
Nは、メモリー26上のプロシージャー格納領域30に格納される。
【0059】
一方、プロシージャー命令列P
1〜P
Nの生成が完了すると、命令列生成部14は、パルスプログラムについて、先頭から転送単位で順次、ストリーミング命令列を生成する。このとき、命令列生成部14は、パルスプログラム中の先行対象となる部分に代えてプロシージャー命令列の格納先のアドレス情報が埋め込まれたストリーミング命令列を生成する。一例として、命令列生成部14は、各シーケンサー用のストリーミング命令列を転送単位数(例えば1つ)ずつ順番に生成する。具体的には、命令列生成部14は、マスターシーケンサー36用のストリーミング命令列S
M1、第1の送信シーケンサー38用のストリーミング命令列S
A1、第2の送信シーケンサー38用のストリーミング命令列S
B1、第3の送信シーケンサー38用のストリーミング命令列S
C1、第4の送信シーケンサー38用のストリーミング命令列S
D1、受信シーケンサー40用のストリーミング命令列S
R1、マスターシーケンサー36用のストリーミング命令列S
M2、第1の送信シーケンサー38用のストリーミング命令列S
A2,・・・を順次、生成する。その後も、命令列生成部14は、各シーケンサー用のストリーミング命令列を転送単位数ずつ順番に生成する。転送制御部16は、ストリーミング命令列が生成される度に、そのストリーミング命令列を送受信ユニット22に転送する。すなわち、ストリーミング命令列の生成と転送とが並列的に行われる。これにより、ストリーミング転送(ST転送)が実現される。例えば、ストリーミング命令列S
M1,S
A1,S
B1,S
C1,S
D1,S
R1,S
M2,S
A2,・・・がその順番で生成された場合、転送制御部16は、各ストリーミング命令列が生成される度に、その生成の順番で各ストリーミング命令列を送受信ユニット22に転送する。
【0060】
なお、ストリーミング命令列の生成の順番は上記の例に限られない。例えば、マスターシーケンサー36用及び各送信シーケンサー38用のストリーミング命令列が一定量生成されて転送された後に、受信シーケンサー40用のストリーミング命令列が生成されて転送されてもよい。これに限らず、ストリーミング命令列の生成及び転送の順番は、適宜変更されてもよい。また、上記の例では、各シーケンサー用のストリーミング命令列が、シーケンサー毎に順次生成されているが、各シーケンサー用のストリーミング命令列が、並行して又は同時に生成されてもよい。
【0061】
送受信ユニット22に転送されたストリーミング命令列は、メモリー26上のFIFO領域28に格納される。各ストリーミング命令列は、転送された順番でFIFO領域28に格納されていく。本実施形態では、各ストリーミング命令列は、シーケンサー毎に用意されたFIFO領域に格納される。具体的には、マスターシーケンサー36用のストリーミング命令列S
M1は、マスターシーケンサー36用のFIFO領域280に格納される。第1の送信シーケンサー38用のストリーミング命令列S
A1は、第1の送信シーケンサー38用のFIFO領域281に格納される。第2の送信シーケンサー38用のストリーミング命令列S
B1は、第2の送信シーケンサー38用のFIFO領域282に格納される。第3の送信シーケンサー38用のストリーミング命令列S
C1は、第3の送信シーケンサー38用のFIFO領域283に格納される。第4の送信シーケンサー38用のストリーミング命令列S
D1は、第4の送信シーケンサー38用のFIFO領域284に格納される。受信シーケンサー40用のストリーミング命令列S
R1は、受信シーケンサー40用のFIFO領域285に格納される。マスターシーケンサー36用のストリーミング命令列S
M2は、マスターシーケンサー36用のFIFO領域280に格納される。第1の送信シーケンサー38用のストリーミング命令列S
A2は、第1の送信シーケンサー38用のFIFO領域281に格納される。ストリーミング命令列S
M1,S
A1,S
B1,S
C1,S
D1,S
R1,S
M2,S
A2,・・・は、その順番で各FIFO領域に格納されていく。以降についても同様であり、転送されたストリーミング命令列は、順次、対応するFIFO領域に格納されていく。また、上記転送のうち、各シーケンサーの一部又はすべての転送が、並行して行われてもよい。
【0062】
ST転送について整理する。例えば、ストリーミング命令列S
M1,S
A1,S
B1,S
C1,S
D1,S
R1,S
M2,S
A2,・・・がその順番で生成される。そして、ストリーミング命令列が生成される度に、生成されたストリーミング命令列が送受信ユニット22に転送される。従って、ストリーミング命令列S
M1,S
A1,S
B1,S
C1,S
D1,S
R1,S
M2,S
A2,・・・がその順番で送受信ユニット22に転送される。そして、ストリーミング命令列S
M1,S
A1,S
B1,S
C1,S
D1,S
R1,S
M2,S
A2,・・・がその順番で、メモリー26上において自身に対して用意されたFIFO領域に格納されていく。
【0063】
図10には、命令列が格納された状態のメモリー26が示されている。プロシージャー格納領域30には、プロシージャー命令列P
1,P
2,・・・,P
Nが格納されている。一方、マスターシーケンサー36用のFIFO領域280には、マスターシーケンサー36用のストリーミング命令列S
M1,S
M2、S
M3が格納されている。第1の送信シーケンサー38用のFIFO領域281には、第1の送信シーケンサー38用のストリーミング命令列S
A1,S
A2,S
A3が格納されている。第2の送信シーケンサー38用のFIFO領域282には、第2の送信シーケンサー38用のストリーミング命令列S
B1,S
B2,S
B3が格納されている。第3の送信シーケンサー38用のFIFO領域283には、第3の送信シーケンサー38用のストリーミング命令列S
C1,S
C2が格納されている。第4の送信シーケンサー38用のFIFO領域284には、第4の送信シーケンサー38用のストリーミング命令列S
D1,S
D2が格納されている。受信シーケンサー40用のFIFO領域285には、受信シーケンサー40用のストリーミング命令列S
R1,S
R2が格納されている。各シーケンサー用のストリーミング命令列が生成されて転送される度に、各FIFO領域には、転送されたストリーミング命令列が、順次、格納されていく。
【0064】
次に、
図11を参照して命令列の再構成処理の詳細について説明する。メモリー26にストリーミング命令列が格納されると、再構成部32は、FIFO領域280〜285上のストリーミング命令列を先頭から読み出し、各シーケンサー用のメモリー34(FIFOメモリー)に書き込む。ここでは、マスターシーケンサー36用の命令列の再構成処理を例に挙げて説明する。再構成部32は、FIFO領域280上のストリーミング命令列を先頭から読み出す。
図11に示す例では、再構成部32は、FIFO領域280からストリーミング命令列S
M1を読み出し、ストリーミング命令列S
M1をマスターシーケンサー36用のメモリー34に書き込む。ストリーミング命令列S
M1に、プロシージャー命令列の格納先を示すアドレス情報が埋め込まれている場合、再構成部32は、メモリー26上のプロシージャー格納領域30を参照し、そのアドレス情報が示すアドレスからプロシージャー命令列を読み出す。ここでは、プロシージャー命令列P
1の格納先を示すアドレス情報が、ストリーミング命令列S
M1に埋め込まれているものとする。この場合、再構成部32は、プロシージャー格納領域30からプロシージャー命令列P
1を読み出し、プロシージャー命令列P
1を解釈展開した上で、メモリー34に書き込む。続けて、再構成部32は、次のストリーミング命令列S
M2をFIFO領域280から読み出し、ストリーミング命令列S
M2をメモリー34に書き込む。ストリーミング命令列S
M2にアドレス情報が埋め込まれている場合、再構成部32は、そのアドレス情報に基づいてプロシージャー命令列を読み出す。
図11に示す例では、ストリーミング命令列S
M2にアドレス情報は埋め込まれていないものとする。続けて、再構成部32は、次のストリーミング命令列S
M3をFIFO領域280から読み出し、ストリーミング命令列S
M3をメモリー34に書き込む。以降も同様であり、再構成部32は、最終のストリーミング命令列まで上記の処理を繰り返す。これにより、最終的な命令列がメモリー34に書き込まれていく。送信シーケンサー38及び受信シーケンサー40についても同様であり、各シーケンサー用のメモリー34に、各シーケンサー用の命令列が書き込まれていく。上述したように、同一のプロシージャー命令列に該当する部分がパルスプログラムに複数存在する場合、それら複数のうちの1つのプロシージャー命令列がプロシージャー格納領域30に格納される。この場合、そのプロシージャー命令列が複数回利用されることにより、プロシージャー化された各部分の命令列が生成されていく。
【0065】
なお、FIFO領域28からメモリー34に書き込まれる命令列の単位、つまり、再構成される命令列の単位は、ストリーミング命令列の単位と同一であってもよいし、異なっていてもよい。
図11に示す例では、再構成される命令列の単位は、ストリーミング命令列の単位と同一である。それに限らず、再構成部32は、FIFO領域280〜285のそれぞれの先頭から読み出し単位で命令列を順次、読み出し、読み出した命令列を対応するメモリー34に書き込んでもよい。読み出し単位は、予め決定された単位であってもよいし、任意の単位に変更されてもよい。
【0066】
そして、測定開始の指示が与えられると、各シーケンサーは、自身のメモリー34から命令を読み出し、読み出した命令を実行する。例えば、全シーケンサーのメモリー34に1つの命令列(例えば1つのストリーミング命令列)が書き込まれたタイミングで、測定が開始されてもよい。勿論、全シーケンサーのメモリー34に複数の命令列が書き込まれたタイミングで、測定が開始されてもよい。
図7を参照して説明したように、各シーケンサーは、自身のメモリー34から命令を順次読み出して、読み出した命令を実行していく。
【0067】
本実施形態では、再構成処理を行いながら、測定開始の指示を受けた時点から、各シーケンサーが命令列をメモリー34から読み出し、読み出した命令列を実行していく。また、ストリーミング命令列の生成及び転送が、命令列の実行と並行して実行される。従って、各シーケンサーによって命令列が実行されている間に、命令列生成部14によってストリーミング命令列が順次生成され、転送制御部16によってFIFO領域28にストリーミング命令列が順次転送されてくる。
【0068】
なお、メモリー34において命令列が枯渇しないことを前提として、ストリーミング命令列のデータ量、測定開始のタイミングが決定される。
【0069】
以上のように、本実施形態では、命令列中の高密度部分をプロシージャー化して先行転送し、その他の部分についてはST転送を実行する。ST転送を実行することにより、命令列の全部を生成してから送受信ユニット22に命令列を転送する場合と比べて、測定の開始を早めることが可能となる。また、全命令列を格納するための大容量のメモリーを送受信ユニット22に設置せずに済む。一方で、命令列の全部をST転送の対象とすると、高密度部分においてストリーミング命令列の生成及び転送がシーケンサーでの命令列の消費に間に合わず、シーケンサーが参照する命令が枯渇する可能性がある。これに対処するために、本実施形態では、高密度部分をプロシージャー化して先行転送している。これにより、命令列の枯渇を回避することが可能となる。まとめると、先行転送とST転送とを併用したことにより、NMR測定の開始を早めることが可能となるとともに、シーケンサーが参照する命令列の枯渇を回避することが可能となる。また、大容量のメモリーを送受信ユニット22に設置せずに済み、メモリーの容量を削減することが可能となる。
【0070】
また、同一のプロシージャー命令列に該当する部分がパルスプログラムに複数存在する場合、それら複数の中で1つのプロシージャー命令列が送受信ユニット22に転送される。そして、その1つのプロシージャー命令列が複数回利用されることにより、プロシージャー化された各部分の命令列が生成される。これにより、命令列の総転送量が削減され、先行転送の完了に要する時間を削減することが可能となる。また、命令列の総量が削減されるので、メモリーの容量を削減することが可能となる。
【0071】
なお、本実施形態では、複数のシーケンサーが設けられているが、シーケンサーの数は1つであってもよい。この場合も、1つのシーケンサーによって実行されるプロシージャー命令列が分光計制御コンピューター12から送受信ユニット22に先行転送され、その先行転送が完了した後、ストリーミング命令列が分光計制御コンピューター12から送受信ユニット22に順次転送される。これにより、上記と同様の効果が得られる。