横浜で開催された「Cool Chips XVII」では、Synopsysの井出野雅明氏が同社のApplication Specific Processor(ASIP)の設計法についてのチュートリアルを行った。

用途に応じた性能の高いハードウェアが要求されるが、開発工数は足りないということは多く、少ない工数での効率的な設計が求められる。そのような場合に、このチュートリアルで説明された方法を考えてみるのは価値があると思われる。

「Cool Chips XVII」のチュートリアルで講義するSynopsysの井出野氏

SynopsysはE-CADの大手であり、色々は設計ツールを提供しているが、今回のチュートリアルでは、LISAという言語でプロセサの仕様を記述し、その記述からでバグを行うためのシミュレータ、ソフトウェアを開発するためのコンパイラやアセンブラを生成し、FPGAでハードウェアをつくるためのRTLを自動生成する「Synopsys Processor Designer」について説明を行った。

汎用のプロセサをわざわざ設計する必要はないが、特定の処理を高速に実行できるプロセサが欲しい場合がある。特に、将来の仕様拡張などが予想され、純粋なハードで作るのではなく、ある程度、プログラマブルにしておきたい場合には、Application Specific Processor(ASIP)が適している。

ASIPの設計は、LISAという専用言語で書かれたプロセサの定義がベースになる。LISAの定義からProcessor DesignerというツールでプロセサのRTLが生成される。また、定義されたプロセサ用のコンパイラやアセンブラ、シミュレータも生成され、デバグやコードの開発が容易に行えるようになっている。

Synopsys Processor Designerの概要

LISAはプロセサの設計用の言語で、レジスタ、ピン、信号、メモリ、パイプラインなどの資源と命令の形式や動作、タイミングなどを記述する。

LISA言語で、プロセサの命令の形式、動作とタイミングを記述する

次の図はLISA記述の一例であるが、最初のバスやレジスタ、パイプラインなどの資源の定義があり、続いて、read_dataという命令について、動作するパイプラインステージ、バイナリ形式やアセンブラ記述、命令の動作などの記述が書かれている。このようにLISAでは命令を定義するが、それがどのようなハードウェアで実現されるかは記述する必要がなく、ハードに詳しくないエンジニアでも定義ができるようになっている。

LISA言語での記述の例。バスやレジスタなどの資源、パイプラインなどを定義し、それぞれの命令の形式や動作を記述していく

そして、このLISA記述から、Processor Designerはコンパイラ、アセンブラ、リンカを生成する。

LISA記述を入力として、Processor DesignerがCコンパイラ、アセンブラ、リンカを生成する

また、LISA記述からシミュレータが作られ、ソフトウェアのデバグを行うことができ、 LISA記述によるプロセサが完成したら、FPGAなどでASIPプロセサを作るRTLが生成できる。

次の図は、歩行者認識に使われるHistogram of Oriented Gradients処理向けのASIPの例であるが、ベースとなるRISCコアに5種の専用演算ユニットがAXIバス経由で付けられている。また、これらの5種の演算は左から順に実行されるので、各演算器には右の演算ユニットにデータを送る専用の32bit幅のパスが付けられており、レジスタなどを経由せず、直接、データを送ることができる設計になっている。

歩行者認識に使われるHistogram of Oriented Gradients処理向けのASIPの例。ベースとなるRISCコアに5種の専用演算ユニットがAXIバス経由で付けられている

使ってみなければ、使い勝手や人手による設計と比べて品質はどうかなどはわからないが、汎用プロセサによるソフト処理では性能が不足したり、消費電力が大きすぎたりする場合には検討してみる価値があるのではないかと思われる。