今回は高位合成をやってみることにした。
vivado_hlsを起動する
初期画面
Open Example Projectを見てみた。
Design ExamplesとCoding Style Examplesのカテゴリがあるが、どちらも多くのExamplesが含まれているようだ。
次にDocumentationのTutorialを開いてみた。
Video教材を幾つか見てみたが、結構判りやすかった。
さて、高位合成で何を書くか…と考えて、bin2bcd回路(バイナリをBCDコードに変換する回路)をやってみることにした。
Cソース
bin_inが入力で0〜9999の範囲のバイナリ値が入力され、これを4桁のBCDコードに変換して出力する。
projectを作成する。
Directiveは特に定義せずに合成してみた。
あっという間に合成が完了した。
生成されたverilogコードは以下のようだった。
結構ゴチャゴチャしている。
Utilization Estimationを見ると回路リソースの使用率は以下のようだった。
入出力 I/F 部の回路も含んでいるとは言え、規模としては大きい感じがした。除算や剰余演算があるのでやむを得ないのだろう。でも、まぁ、Cでチャッチャッとソースを書いて合成するとあっという間にverilogのコードが生成されるというのは、楽かも知れない。
ちなみに、bin2bcdに関しては以前このブログに書いたことがあるが、その時にネットで見つけたverilogソースをvivadoでIP化して合成してみた。
規模は以下のようであった。(LUT 77個のみ)
こちらは、剰余演算等を使わない神業的な回路方式なのでこの規模になっている。
Cでも旨く工夫して書けばもっと小さい優れた回路を生成できるようになるかも知れない。
Cベース記述(高位合成)と言っても、また、HDLベース記述と言っても方法論の違いでしかなく、記述する中身(アルゴリズムやアーキテクチャ)が最も重要なんだろうなと思った。
0 件のコメント:
コメントを投稿