レジスタって何?

レジスタって何?

 ハードウェアの設計をしていると、レジスタという言葉が頻繁に出てきます。しかも、レジスタという意味が曖昧なために何でもレジスタという言葉で表現する人も出てきて、クライアントとの会話が噛み合わなくなる場面も出ています。

 レジスタという言葉は、ハードウェアでもソフトウェアでも存在し、しかもかなり似たような意味です。それゆえ、きちんと言葉の意味を把握して、両者が会話した時に認識の違いが出ないようにする必要があります。

CPUコア内部の記憶領域

 ソフトウェアでのレジスタというのは、CPUコア内部の一時記憶領域を示します。

 CPUコア内部の機能になるので、一般的には見えないし、ソフトウェアを記述する場合においても、レジスタを直接アクセスすることはほとんどありません。アセンブラ言語を使ってレジスタを操作する時代には頻繁に操作していましたが、高級言語でプログラミングする時代には目にすることはほとんどありません。例としてARMプロセッサのレジスタを示します。

 図で示すと、わかりにくいかも知れませんが1つの箱が小さなメモリになっています。このレジスタを介してデータを処理するのがCPUの役割です。CPUの構造はこのレジスタによって決まるといってよいほど重要な機能です。

 ソフトウェアと前置きしておきながら、実際にはCPU内部のメモリなので、ハードウェアを示していますが、ハードの設計者がCPU内部のレジスタを意識する機会は無く、やはりソフトウェア担当者の方が馴染み深いと思います。

フリップフロップ

 次にハードウェアにおけるレジスタですが、これはフリップフロップを意味しています。ただし、これも程度問題で、巨大な領域を占めるフリップフロップはメモリと呼びます。

 Verilogで記述する場合には明確にregで宣言する部分になります。VHDLの場合にはsignalで宣言してprocess文の中で扱う信号という事になります。

 正確に示すならば、上記の2点がレジスタという事になります。しかし、現場では広範囲にレジスタという言葉を使っており、それを誤りというには普及しすぎている感じがあります。

IOマップ・メモリマップ

 レジスタマップという言葉で仕様書に記載される事が多くなりました。だいたいは、レジスタマップ=IOマップの事を示しています。稀にメモリマップを含めてレジスタマップと呼んでいる場合もあります。これはソフトウェアでもハードウェアでも共通して同じ意味で使っているようです。

 IOレジスタというのはIOマップやIOそのものを示す言葉のようですが、これについては曖昧さが残ります。

IOピン

 IOそのものをレジスタという事があるようです。FPGAのピンがIOピンに割り当てられた場合、レジスタと呼んでいるようです。フリップフロップの出力をIOとして割り当てているのだから、間違いとも言えないのですが、やはりIOピンとした方が言葉の意味は通じると思います。

シリアル

 シリアルレジスタというのもあるようです。シフトレジスタをシリアルレジスタと誤っているのか、シリアル化されたIOの事なのかはその場面でなくてはわかりません。

 このように、レジスタという言葉は広範囲に使われるようになってきています。言葉というのは成長するので、今間違いでも数年経てば当たり前。という事もありますので、あまり気にすることは無いのですが、仕様書となると意味の取違があれば製品に反映されてしまいますので、曖昧さを感じた時には確認するようにした方が良いでしょう。