質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Verilog

Verilogは、デジタル回路設計用の論理シミュレータ。また、ハードウェアの電子回路設計の際に用いるハードウェア記述言語を指すこともあります。両者を見分けるために、言語を「Verilog-HDL」と呼ぶ場合もあります。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

2回答

3037閲覧

FPGAの高位合成に関しての質問です。

carnage0216

総合スコア194

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Verilog

Verilogは、デジタル回路設計用の論理シミュレータ。また、ハードウェアの電子回路設計の際に用いるハードウェア記述言語を指すこともあります。両者を見分けるために、言語を「Verilog-HDL」と呼ぶ場合もあります。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2018/01/21 07:23

編集2018/01/21 08:08

最近、CQ出版WebShopのFPGAマガジンNo.15を購入しました。
内容はⅭ言語プログラムを高位合成でハードウェア言語に変換して使うのですが、
高位合成を行う上でⅭ言語プログラムとⅭ言語で書かれたテストベンチが必要なはずなのですが、本に書いてあるプログラムがすべて載っているサポートページを探したのですが、Ⅽ言語プログラムはあったのですがⅭ言語のテストベンチがありませんでした。
高位合成にはテストベンチが不要な場合があるのでしょうか?
本の質問サイトにもメールしてみたのですが、返信がないままです。
高位合成の経験がある方がおられましたら回答していただけるとありがたいです。
どうかよろしくお願いします。

以下のURLはサポートページです。
https://github.com/aquaxis/FPGAMAG/tree/master/No15

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

テストベンチ無しでも合成できます。
合成されたRTLをデバッグするのは面倒なので、ユーザができるだけCのレベルでデバッグすることを誘導するために、テストベンチは必須と説明しています。テストベンチがないと以下のような問題・疑問が起きます。
1)
合成されたRTLには、clockなどもとのCの記述には存在しないものがいくつかあります。そのためデバッグが大変です。
またCの記述に含まれていた、変数、関数などは名前が変わったり、なくなったりするものがあります。
x0=a0+a1;
x1=a2+a2;
x = x0+x1;
とあればx0,x1がなくなるのは自然な感じです。
2)
もうひとつの問題は、等価性の問題です。CとRTLの内容は等価なのか?という疑問を持つ人は多いです。短い答えは「等価ではない。」で、Cで実現しようとした機能がRTLにも含まれている という答えになります。たとえば、Cでは、address NULLにアクセスすると例外が発生しますが、RTLではそもそも例外は発生しません。配列の要素が16個の場合、0から数えて、17個目にアクセスすると、RTLではたぶん2個目にアクセスしたのと同じになります。「実現しようとした」を明確にするためにテストベンチを作ります。
x)
じつのところテストベンチでテストした対象ではないものを合成することもできます。合成できない記述をテストして、同等な内容を持つ(と信じている)記述を合成してしまったことがあります。

投稿2018/02/27 08:50

gm300

総合スコア580

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

carnage0216

2018/02/27 09:32

詳しい解説、大変勉強になります。今ではopencvなどもザイリンクスと共同してfpgaで画像処理などを行なっているそうですね。もちろん、opencvからは無理でテストベンチなども配布されているようです。 本題に戻りますと回答者様からの「合成できない記述をテストして、同等な内容を持つ(と信じている)記述を合成してしまったことがあります。」に関して、私の理解力の低さゆえに理解ができませんでした。もう少し砕いて説明していただけないでしょうか? 理解したい部分であるのでどうかよろしくお願いします。
gm300

2018/02/28 00:16

デバッグのために、記述を変えることがある。という話です。たいした話じゃないです。 いい例ではないのですが、適当に自慢したいので書きます。 void func(volatile int a[1024],.. ) { if (a[0] == 0 ) { } else if (a[0] == 1 } { } else if (a[0] == 2 ) { と書いたのと、 void func(volatile int a[1024],.. ) {  int a_tmp = a[0] ; if (a_tmp == 0 ) { } else if (a_tmp == 1 } { } else if (a_tmp == 2 ) { と記述した場合、速度は違い、厳密な意味で結果も違います。速度の差を分析するために一時的に上の記述を下のように変えて、何かの方法で切り替えながら作業することはありそうです。うっかり切り替えるのを忘れて下の例のつもりで、上を試してしまうことはありそうです。ってか、ありました。 multi threadな環境では普通のX86上でも差は出るので、ハードを意識しないといけない というのは間違いですね。 # volatile int *a ;.. # if a[0] == a[0] が不成立になるとか、if a == a でさえ不成立になるとか..
guest

0

テストベンチって作成したモジュールをシミュレーションするのに必要になるもので、論理合成自体には必要でしたっけ?
通常、テストベンチは論理合成の対象外だったような。

投稿2018/01/21 07:31

TaroToyotomi

総合スコア1430

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TaroToyotomi

2018/01/21 14:30

Vivadoのユーザーガイドによると合成には必須ではないが、C言語として正常に記述されているかチェックするために使うことを推奨されているみたいですね。main()関数内でテスト対象の関数を呼ぶだけなので自分で書いた方が早いと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問