(57)【要約】【課題】チップサイズの増加を有効に抑えながら、事後的にファームウェアの修正が可能な信号処理装置を提供すること。【解決手段】ファームウェアをなす第１のプログラムが命令ＲＯＭ１３０に格納され、補完用の第２のプログラムが命令ＲＡＭ１４０に格納される。専用レジスタ群１２０には分岐情報が格納される。プログラムカウンタ１１０は、専用レジスタ群１１０に格納された分岐情報を参照しながら、実行すべき命令コードの所在を示すカウント値ＰＣを発生する。カウント値ＰＣは命令ＲＯＭ１３０および命令ＲＡＭ１４０に供給され、命令コードが読み出される。このとき、分岐情報に従って第１のプログラムから補完用の第２のプログラムへ分岐が行われ、第１のプログラムが第２のプログラムで補完される。読み出された命令コードは、命令デコーダ１５０で解読され、内部ユニット１６０で実行される。【選択図】　　　図１
2004133602.tif 000002
【特許請求の範囲】
【請求項１】
所定の処理を実行するためのファームウェアを有する信号処理装置において、
前記ファームウェアをなす第１のプログラムが格納された第１のプログラム記憶部と、
前記第１のプログラム記憶部とは異なるアドレス空間が割り付けられ、前記第１のプログラムを補完するための第２のプログラムが格納された第２のプログラム記憶部と、
命令の分岐に関する情報を格納する分岐情報格納部と、
前記分岐情報格納部に格納された情報を参照しながら、実行すべき命令コードの所在を示すアドレスを発生して前記第１および第２のプログラム記憶部に供給するアドレス発生部と、
前記第１または第２のプログラム記憶部から読み出された命令コードを解読する命令解読部と、
を備えたことを特徴とする信号処理装置。
【請求項２】
前記命令解読部が、前記第２のプログラムの実行が終了したことを示す所定の命令コードを解読した場合、前記アドレス発生部に前記第１のプログラムへ復帰するためのアドレスを発生させることを特徴とする請求項１に記載された信号処理装置。
【請求項３】
前記分岐情報格納部が、前記命令の分岐に関する情報として、前記第１のプログラムにおける分岐元を示す第１のアドレスと、前記第１のプログラムから前記第２のプログラムへの分岐先を示す第２のアドレスと、前記第２のプログラムから前記第１のプログラムへの復帰先を示す第３のアドレスと、を格納することを特徴とする請求項２に記載された信号処理装置。
【請求項４】
前記分岐情報格納部が、前記命令の分岐に関する情報として、分岐の可否を制御するためのフラグをさらに格納することを特徴とする請求項３に記載された信号処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ＤＳＰ（Ｄｉｇｉｔａｌ　Ｓｉｇｎａｌ　Ｐｒｏｃｅｓｓｏｒ）等の信号処理装置に関し、特に信号処理装置が有するファームウェアを補完し、ファームウェアの機能を修正するための回路技術に関する。
【０００２】
【従来の技術】
ＤＳＰには、その仕様に応じた各種の機能がファームウェア化されて組み込まれており、このファームウェアはＤＳＰ内またはＤＳＰ外のＲＯＭ（Ｒｅａｄ　Ｏｎｌｙ　Ｍｅｍｏｒｙ）またはＲＡＭ（Ｒａｎｄｏｍ　Ａｃｃｅｓｓ　Ｍｅｍｏｒｙ）に搭載されている。ファームウェアを何れのメモリに搭載するかは、そのファームウェアの完成度による。すなわち、ファームウェアの完成度が高く、その内容に変更の可能性がない場合には、読み出し専用のメモリであるＲＯＭに搭載され、ファームウェアの完成度が望めない場合や、ファームウェアの機能を事後的に変更する可能性がある場合には、書き換え可能なリード・ライト型のメモリであるＲＡＭに搭載される。一般には出荷前にファームウェアのバグを完全に除去することは困難である。このため、事後的にファームウェアのバグを修正するための技術が提案されている（特許文献１参照）。
【０００３】
【特許文献１】
特開２００１−２５６０４４号公報
【０００４】
【発明が解決しようとする課題】
ところで、ファームウェアを搭載する場合、同一の記憶容量であれば、ＲＯＭの方がＲＡＭに比較してチップサイズを縮小することが可能となり、コストを抑えることができる。しかしながらＲＯＭの場合、記憶データを書き換えることができないため、ファームウェアにバグ等の不具合が発見された場合や、ファームウェアを事後的に追加や変更などの修正の必要が生じた場合に対応できず、ＤＳＰ自体を作り直さなければならないという問題がある。これに対してＲＡＭの場合、記憶データを自由に書き換えることができるため、ファームウェアのデバッグや修正を容易に行うことができる反面、チップサイズが大きくなり、コストが上昇するという問題がある。
【０００５】
この発明は、上記事情に鑑みてなされたもので、チップサイズの増加を有効に抑えながら、事後的にファームウェアの修正が可能な信号処理装置を提供することを目的とする。
【０００６】
【課題を解決するための手段】
上記課題を解決するため、この発明は以下の構成を有する。
即ち、請求項１に記載された発明は、所定の処理を実行するためのファームウェアを有する信号処理装置において、前記ファームウェアをなす第１のプログラムが格納された第１のプログラム記憶部（例えば後述する「命令ＲＯＭ１３０」に相当する構成要素）と、前記第１のプログラム記憶部とは異なるアドレス空間が割り付けられ、前記第１のプログラムを補完するための第２のプログラムが格納された第２のプログラム記憶部（例えば後述する「命令ＲＡＭ１４０」に相当する構成要素）と、命令の分岐に関する情報を格納する分岐情報格納部（例えば後述する「専用レジスタ１２０」に相当する構成要素）と、前記分岐情報格納部に格納された情報を参照しながら、実行すべき命令コードの所在を示すアドレスを発生して前記第１および第２のプログラム記憶部に供給するアドレス発生部（例えば後述する「プログラムカウンタ１１０」に相当する構成要素）と、前記第１または第２のプログラム記憶部から読み出された命令コードを解読する命令解読部（例えば後述する「命令デコーダ１５０」に相当する構成要素）と、を備えたことを特徴とする。
【０００７】
この構成によれば、アドレス発生部が発生するアドレスに基づき第１のプログラム記憶部から命令コードが順次読み出される。そして、この命令コードが命令解読部により解読され、この解読結果に従って所定の処理が実行される。また、アドレス発生部は、分岐情報格納部に予め格納された情報に従って、発生すべきアドレスを第１のプログラム記憶部から第２のプログラム記憶部に切り替える。このように、第１のプログラムの実行中に第２のプログラムに分岐が行われ、この第２のプログラムが実行される。従って、第１のプログラムを第２のプログラムで補完され、第２のプログラム記憶部の内容に応じて、第１のプログラムの内容を修正（変更、追加、拡張など）することが可能になる。
【０００８】
また、請求項２に記載された発明は、請求項１に記載された信号処理装置において、前記命令解読部が、前記第２のプログラムの実行が終了したことを示す所定の命令コード（例えば後述する「終了コード」に相当する要素）を解読した場合、前記アドレス発生部に前記第１のプログラムへ復帰するためのアドレスを発生させることを特徴とする。この構成によれば、第２のプログラム記憶部から所定の命令コードが読み出されて解読されると、これを受けて、アドレス発生部が分岐情報格納部に格納された情報を参照し、第１のプログラムに復帰するためのアドレスを発生する。これにより、処理が第２のプログラムから元の第１のプログラムに復帰する。従って、第１のプログラムに処理が復帰するので、その復帰先を適宜設定することにより、第１のプログラムの一部を第２のプログラムで置換したり、第１のプログラムの途中に第２のプログラムを挿入することが可能となる。
【０００９】
また、請求項３に記載された発明は、請求項２に記載された信号処理装置において、前記分岐情報格納部が、前記命令の分岐に関する情報として、前記第１のプログラムにおける分岐元を示す第１のアドレスと、前記第１のプログラムから前記第２のプログラムへの分岐先を示す第２のアドレスと、前記第２のプログラムから前記第１のプログラムへの復帰先を示す第３のアドレスと、を格納することを特徴とする。さらに、請求項４に記載された発明は、請求項３に記載された信号処理装置において、前記分岐情報格納部が、前記命令の分岐に関する情報として、分岐の可否を制御するためのフラグ（例えば後述する分岐制御フラグに相当する要素）をさらに格納することを特徴とする。
【００１０】
【発明の実施の形態】
以下、図面を参照して、この発明の実施の形態を説明する。
図１に、この実施の形態に係る信号処理装置であるＤＳＰ（Ｄｉｇｉｔａｌ　Ｓｉｇｎａｌ　Ｐｒｏｃｅｓｓｏｒ）１００の構成を示す。このＤＳＰ１００は、各種の機能を実現する所定の処理を実行するためのファームウェアを搭載するものであって、プログラムカウンタ１１０、専用レジスタ群１２０、命令ＲＯＭ（Ｒｅａｄ　Ｏｎｌｙ　Ｍｅｍｏｒｙ）１３０、命令ＲＡＭ（Ｒａｎｄｏｍ　Ａｃｃｅｓｓ　Ｍｅｍｏｒｙ）１４０、命令デコーダ１５０、内部ユニット１６０を含んで構成される。なお、図１は、この発明に関連する要素を主体に記載したものであって、特に図示しないが、ＤＳＰとして機能するために必要とされるインタフェース等の他の回路系を含んでいる。
【００１１】
ここで、プログラムカウンタ１１０は、実行すべき命令の所在を示すアドレスであるカウント値ＰＣを発生するものであり、基本的には１つの命令が実行される度にカウント値ＰＣがインクリメントされる。また、このプログラムカウンタ１１０は、後述する専用レジスタ群１２０に格納された分岐情報を参照して分岐先のアドレスを示すカウント値ＰＣを発生する機能を有する。このカウント値ＰＣは命令ＲＯＭ１３０および命令ＲＡＭ１４０の各アドレス端子ａｄｒに共通に供給される。
【００１２】
命令ＲＯＭ１３０は、読み出し専用のメモリであり、ファームウェアをなす第１のプログラムをＲＯＭデータとして格納する。この第１のプログラムは、ファームウェアとして完成度の高いものであって、演算命令や分岐命令の命令コードからなり、この命令コードは上述のプログラムカウンタ１１０のカウント値ＰＣをアドレスとして命令ＲＯＭ１３０に記憶されている。初期状態では、カウント値ＰＣは命令ＲＯＭ１３０の先頭アドレスに設定されており、起動後は、この先頭アドレスから順に命令コードが命令デコーダ１５０に読み出される。
【００１３】
命令ＲＡＭ１４０は、リード・ライト型のメモリであり、上述の第１のプログラムを補完するために使用される第２のプログラムを格納する。ここで、「補完」とは、欠けているところや不十分なところを補って完全にするという意味の他、ファームウェアの機能の変更、追加、拡張、減縮等、一切の修正を伴う操作を含むものとする。また、命令ＲＯＭ１３０と命令ＲＡＭ１４０の各アドレス空間は重複しないように割り付けられる。これはプログラムカウンタ１１０から共通に与えられるカウント値ＰＣに基づき、命令ＲＯＭ１３０または命令ＲＡＭ１４０から択一的に命令コードの読み出しを行うためである。
【００１４】
命令デコーダ１５０は、その入力部が命令ＲＯＭ１３０および命令ＲＡＭ１４０の各データ端子ｄａｔａに共通に接続され、基本的には、命令ＲＯＭ１３０または命令ＲＡＭ１４０から読み出された命令コードを解読するためのものである。また命令デコーダ１５０は、上述の解読機能に加え、第２のプログラムの実行終了を表す所定の命令コード（以下、「終了コード」と称す）を解読した場合にその旨をプログラムカウンタ１１０に通知する機能をも備える。内部ユニット１６０は、命令デコーダ１５０により解読された命令（ファームウェア）に従って演算等を実行するものである。
【００１５】
専用レジスタ群１２０は、命令の分岐に関する情報（以下、分岐情報と称す）を格納するものである。この分岐情報は、分岐の可否を制御するために使用される分岐制御フラグと、上述の第１のプログラムにおける分岐元を示す分岐元アドレス（第１のアドレス）と、この第１のプログラムから上述の第２のプログラムへの分岐先を示す分岐先アドレス（第２のアドレス）と、この第２のプログラムからの復帰先である第１のプログラムへの分岐先を示す復帰先アドレス（第３のアドレス）とを含んで構成される。専用レジスタ群１２０は、これら分岐制御フラグ、分岐元アドレス、分岐先アドレス、復帰先アドレスの４種類の情報を格納するための４個のレジスタを１組として、複数組のレジスタから構成される。
【００１６】
ホストシステム２００は、ファームウェアのデバッグをサポートするためにＤＳＰ１００を制御する外部システムであり、ホストシステム２００側からは、アドレス信号ＡＤＲおよびデータ信号ＤＡＴにより命令ＲＡＭ１４０に対する第２のプログラムのリード／ライト（読み込み・書き込み）が可能となっている。また、上述の専用レジスタ群１２０に対してはホストシステム信号ＨＳにより上述の分岐情報の設定が可能となっており、制御信号ＣＳにより上述のプログラムカウンタ１１０の初期化および起動が可能となっている。
【００１７】
次に、図２に示すフローに沿ってこの実施の形態の動作を説明する。
この説明では、図３に示すように、命令ＲＯＭ１３０に格納された第１のプログラムのａ番地からｂ番地の間にバグが存在し、このバグによるファームウェアの不具合を対策する場合を例として説明する。
【００１８】
まず、ホストシステム２００は、制御信号ＣＳによりプログラムカウンタ１１０を初期化してＤＳＰ１００を停止状態に制御し、内部の初期設定を行う（ステップＳ０１）。具体的には、アドレス信号ＡＤＲおよびデータ信号ＤＡＴにより、上述のバグが存在する命令ＲＯＭ１３０のａ番地からｂ番地に格納された第１のプログラムの命令コードに対して差し替えられた命令コードを第２のプログラムとして命令ＲＡＭ１４０のｃ番地からｄ番地に書き込む。このとき、命令ＲＡＭ１４０に格納される第２のプログラムの最終行を示すｄ番地には、上述の終了コードが記述される。
【００１９】
また、ホストシステム信号ＨＳにより、専用レジスタ群１２０内の１組のレジスタに上述の分岐情報を設定する。具体的には、「真」の分岐制御フラグを設定すると共に、分岐元アドレスとしてａ−１番地を設定し、分岐先アドレスとしてｃ番地を設定し、復帰先アドレスとしてｂ＋１番地を設定する。この例では命令ＲＯＭ１３０内のａ番地からｂ番地までの１区間を、命令ＲＡＭ１４０内のｃ番地からｄ番地までの区間で置き換えるものであるため、１組のレジスタに分岐情報を設定すれば足りる。なお、上記の１組のレジスタ以外のレジスタの分岐制御フラグは「偽」にしておく。また、複数の区間を置き換える場合には、各区間に対応させて複数組のレジスタに値を設定し、そのレジスタの分岐制御フラグを「真」にすればよい。
【００２０】
続いて、初期設定がなされると、ホストシステム２００は、制御信号ＣＳによりプログラムカウンタ１１０を起動してカウント値ＰＣを発生させ、ＤＳＰ１００を始動させる（ステップＳ０２）。これにより、内部ユニット１６０が演算等の処理を実行し、その実行結果をホストシステム２００に順次出力する（ステップＳ０３〜Ｓ１０）。
【００２１】
以下ではファームウェアの実行動作を説明する。
ＤＳＰ１００の内部では、ホストシステム２００からの制御信号ＣＳを受けると、プログラムカウンタ１１０が発生するカウント値ＰＣに従って命令ＲＯＭ１３０から命令コードが命令デコーダ１５０に読み出され、この命令コードが解読されて内部ユニット１６０で実行される（ステップＳ０３）。このとき、プログラムカウンタ１１０は専用レジスタ群１２０に格納された分岐情報を参照し、カウント値ＰＣが分岐元アドレスとしてレジスタに設定されたａ−１番地に到達したか否かを判断する（ステップＳ０４）。
【００２２】
ここで、カウント値ＰＣが、ａ−１番地に到達しておらず（ステップＳ０４；ＮＯ）、且つプログラムが終了していない場合（ステップＳ０５；ＮＯ）、処理が上述のステップＳ０３に戻される。そして、インクリメントされた新たなカウント値ＰＣで特定される命令が実行された後、同様に分岐先アドレスの判断が行われる。このように、カウント値ＰＣに従って、命令ＲＯＭ１３０に格納されたファームウェアの各命令コードが先頭から順次実行されていく。そして、カウント値ＰＣがａ−１番地に到達すると（ステップＳ０４；ＹＥＳ）、専用レジスタ群１２０に設定された分岐制御フラグが「真」か否かが判断される（ステップＳ０６）。
【００２３】
ここで、分岐制御フラグが「真」の場合（ステップＳ０６；ＹＥＳ）、分岐処理が実行される。即ち、分岐制御フラグが「真」であり、かつ分岐元アドレスがａ−１番地であれば、次のマシンサイクルでプログラムカウンタ１１０のカウント値ＰＣとして、専用レジスタ群１２０に分岐先アドレスとして設定されたｃ番地が発生され、分岐先アドレスに分岐する（ステップＳ０７）。これにより、読み出し対象が命令ＲＯＭ１３０から命令ＲＡＭ１４０に切り替わり、分岐後のカウント値ＰＣで示されるｃ番地の命令コードが命令ＲＡＭ１４０から命令デコーダ１５０に読み出され、内部ユニット１６０で実行される（ステップＳ０８）。
【００２４】
続いて、上述の終了コードが有るか否かが判断される（ステップＳ０９）。終了コードがない場合には（ステップＳ０９；ＮＯ）、処理が上述のステップＳ０８に戻され、インクリメントされた新たなカウント値ＰＣに応じた命令コードが命令ＲＡＭ１４０から読み出されて実行される。このように、カウント値ＰＣに従って、命令ＲＡＭ１４０に格納されたファームウェアの各命令がｃ番地から順次実行されていく。そして、カウント値ＰＣが、命令ＲＡＭ１４０に格納されたファームウェアの最終行であるｄ番地に到達すると、終了コードが命令ＲＡＭ１４０から読み出されて解読され、終了コードが有ると判断される（ステップＳ０９；ＹＥＳ）。
【００２５】
この場合、分岐情報に従って命令ＲＯＭ１３０の復帰先アドレスに命令の分岐が行われる（ステップＳ１０）。即ち、命令デコーダ１５０は、終了コードが解読されると、その旨をプログラムカウンタ１１０に通知し、処理が第１のプログラムへ復帰するためのアドレスを示すカウント値ＰＣを発生するようにプログラムカウンタ１１０に指示する。この指示を受けて、プログラムカウンタ１１０は、専用レジスタ群１２０に分岐情報として設定された復帰先アドレスを参照し、次のマシンサイクルで命令ＲＡＭ１４０のｄ番地から命令ＲＯＭ１３０のｂ＋１番地に分岐するためのカウント値ＰＣを発生する。
【００２６】
以上により、命令ＲＯＭ１３０に格納された第１のプログラムを命令ＲＡＭ１４０に格納された第２のプログラムで補完するための分岐処理が行われる。この後、処理が上述のステップＳ０３に戻され、命令ＲＯＭ１３０のｂ＋１番地以後に格納された各命令が順次実行される。
【００２７】
なお、上述のステップＳ０６において分岐制御フラグが「真」でない場合（即ち「偽」の場合）には、（ステップＳ０６；ＮＯ）、処理がステップＳ０５を経てステップＳ０３に戻され、この分岐制御フラグを含む１組のレジスタの各値は無効とされる。従ってこの場合、分岐処理は実行されず、命令ＲＡＭ１４０の内容が読み出されることはない。そして、引き続きカウント値ＰＣに従って順次命令コードを実行し、分岐制御フラグが「真」のアドレスに到達しなければ（ステップＳ０４；ＮＯもしくはステップＳ０５；ＮＯ）、引き続き一連のファームウェアの処理を実行する。
【００２８】
以上により、ＤＳＰ１００は、バグが存在する命令ＲＯＭ１３０のａ番地からｂ番地に格納された第１のプログラムの命令コードに代えて、命令ＲＡＭ１４０のｃ番地からｄ番地に書き込まれた第２のプログラムを実行する。従って、ファームウェアのバグが顕在化することがなく、ファームウェアが正常に実行される。
この実施の形態によれば、命令ＲＯＭ１３０および命令ＲＡＭ１４０のアドレスを単位として分岐を指定することができるので、サブルーチン単位ではなく、ファームウェアの任意の部分を補完することが可能になる。従って分岐先アドレスは、例えばサブルーチンのコール先のアドレスに限られない。
【００２９】
以上、この発明の一実施形態を説明したが、この発明は、この実施の形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計変更等があっても本発明に含まれる。例えば、上述の実施形態では、ｄ番地からｂ＋１番地に復帰するものとしたが、例えば復帰先アドレスをａ番地とすれば、ａ−１番地とａ番地との間に、ｃ番地からｄ番地にダウンロードされた第２のプログラムが挿入されることとなる。従ってこの場合、命令ＲＯＭ１３０に格納された第１のプログラムの全部に加え、命令ＲＡＭ１４０に格納された第２のプログラムが実行されることとなり、ファームウェアに所望の機能を事後的に追加したり拡張することが可能になる。
【００３０】
また、上述の実施の形態では、１組のレジスタに分岐情報を設定するものとしたが、複数組のレジスタに分岐情報を設定すれば、複数種類の分岐処理を実行させることも可能である。従ってこの場合、その数だけの不具合の修正または機能の追加等を行うことができる。この場合、命令ＲＡＭ１４０の記憶容量の限度内において、各分岐情報に対応して書き込むプログラムのサイズを自由に組み合わせることもできる。
さらに、上述の実施形態では、第２のプログラムの実行が終了した場合に第１のプログラムに処理が復帰するようにしたが、第１のプログラムに復帰させずに、第２のプログラムの実行が終了した時点でファームウェアの実行を終了させるものとしてもよい。この場合、終了コードの設定と復帰先アドレスの設定を省略してもよい。又、上述の命令ＲＯＭ１３０や命令ＲＡＭ１４０を外付けとしてもよい。
【００３１】
【発明の効果】
以上説明したように、この発明によれば、第１のプログラムを第１のプログラム記憶部に格納し、第２のプログラムを第２のプログラム記憶部に格納し、分岐情報を参照しながら第１および第２のプログラム記憶部から命令コードを読み出すようにしたので、第１のプログラム記憶部に格納された第１のプログラムを実行する過程で分岐情報に従って第２のプログラムに分岐することが可能になる。従って、第２のプログラムとして補完に必要なプログラムを準備しさえすれば、第１のプログラムを第２のプログラムで補完することが可能となり、チップサイズの増加を有効に抑えながら、事後的にファームウェアの修正が可能になる。
【図面の簡単な説明】
【図１】本発明の実施形態に係るＤＳＰの構成を示すブロック図である。
【図２】本発明の実施形態に係るＤＳＰの動作の流れを示すフローチャートである。
【図３】本発明の実施形態に係るＤＳＰによる分岐処理を説明するための図である。
【符号の説明】
１００；ＤＳＰ（信号処理装置）、１１０；プログラムカウンタ（アドレス発生部）、１２０；専用レジスタ群（分岐情報格納部）、１３０；命令ＲＯＭ（第１のプログラム記憶部）、１４０；命令ＲＡＭ（第２のプログラム記憶部）、１５０；命令デコーダ（命令解読部）、１６０；内部ユニット、２００；ホストシステム、Ｓ０１〜Ｓ１０；ステップ。
【図１】
2004133602.tif 000003
【図２】
2004133602.tif 000004
【図３】
2004133602.tif 000005