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

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

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

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

Q&A

3回答

3889閲覧

FPGAの動作周波数について

syana2000

総合スコア34

C

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

0グッド

1クリップ

投稿2017/06/22 03:34

generate文で1つの回路を複数並列実行するマルチコプロセッサを実装した(それぞれの回路は独立に動き、データの干渉が起こることはありません)のですが、シングルコプロセッサのときよりも動作周波数がかなり落ちました。
回路に待ちができるのが原因だと聞いたのですが、待ちができるとはどういうことなのでしょうか

fpga系のタグがなかったので適当なタグをつけました、申し訳ありません

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

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

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

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

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

ozwk

2017/06/22 03:47 編集

論理合成ツールで表示される、FPGA自体に入力するクロックの最大動作周波数が落ちたってことですか?
CodeLab

2017/06/22 05:36

ご使用の開発環境やチップの名称なども書いたほうが回答が得やすいかと思います。
guest

回答3

0

一般論として、ICでは回路規模が大きくなることで、配線長が長くなるために信号遅延が大きくなります。また、配線長の差も大きくなるので、遅延時間の差も大きくなります。
FPGAでは、ほとんどの信号線路がいくつかのスイッチ(コンフィグレーションに従って配線路の接続を変更する)を途中にはさんだものになるので、普通のIC(長い金属の配線が使える)に比べると信号遅延が大きくなりがちです。
また、機能ブロックの間にある配線の本数は限られているので、FPGAの中の機能ブロックの利用率が上昇するにつれて、最短経路での配線ができなくなって遅延時間や遅延時間差が指数的に大きくなるという事も起こりがちです。、

プロセッサのように複数の信号が同期している必要がある回路の場合、データの取得は全て(16bitのプロセッサコアだと、16本全部のデータ信号)の信号が揃ってからしないといけませんが、それには最大の遅延時間を待つ必要があります。
例えば、16本のうち、一番遅い(一番遅延時間が長い)1本のデータが35ns後に届く(安定する)とすると、他の15本のデータが10ns後に届いていたとしても35ns以上待ってから取得する必要があります。そうしないと、正しい16ビットのデータにならないからです。

「待ちができる」というのは、遅延時間+最大の遅延時間差によってデータの同期が失われないように待つ必要があるという事です。

投稿2017/06/22 07:26

coco_bauer

総合スコア6915

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

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

0

コプロセッサであればホストと繋がっているはずで、たとえばPCIEで繋がっているのであれば、PCIEで実現できるよりも大量のデータを流そうとしているのではないでしょうか。
あるいは、複数のコプロセッサがDDRを物理的に共有しているのであれば、その部分が問題では?話を簡単にするために、FPGAボードにはDDRが1つだけ載っていて、10個のスレッドが存在するとします。 それぞれは別のアドレスにアクセスするとしても、物理的なメモリのデータバスもアドレスバスも1つしかないので、10個のスレッドが同時にアクセスすることはできません。結局memoryもfileみたいなもので、各スレッドは別のページアクセスすることにしても、fileのopen / close 操作は同期するしかありません。同期のするときに、資源をロックできなかったスレッドは待ち状態になり、待ちの部分だけ処理性能が落ちます。
それを防ぐには、複数のDDRチャネルを持つか、cacheを使うことになります。

投稿2017/12/14 06:49

gm300

総合スコア580

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

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

0

FPGA内の論理ブロック同士を接続する配線部分、スイッチマトリックスなどで物理的に信号が遅延します。

信号の遅延は物理的なものなので論理ブロックをどこの位置に置くかで遅延量が決まり配置配線の工程でツールがなるべく良くしようと努力はしますが限界はあります。

要はFPGAのリソースが大量に余っているときはグローバルバッファなどを使って信号品質を保つことができるので遅延量も少なくできますが、マルチコアにしてFPGAのリソースを食い出すと色々と妥協する必要があるということです。

またタイミングを改善するためにラッチ(レジスタ)を入れて動作周波数は向上させることはできますが、レイテンシーが増えるので一概に良いとは言えません。同様の考え方でCPUのパイプライン段数を増やすことで動作周波数を改善できますが、レイテンシーが増えるので分岐予測を外したときのペナルティが大きくなります。

他にはメインプロセッサからコプロセッサに専用インターフェースで繋いでいる場合、メインプロセッサとコプロセッサの動作周波数が逓倍になっていないといけないなどの制約でコプロセッサ側に供給するクロックに引きづられている可能性も考えられます。

投稿2017/06/22 07:43

nullbot

総合スコア910

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問