CoDeveloper Q&A 06/08/30
Q1.C→HDL時、デバイスのライブラリは見るのか?
A1.HDL生成の時点ではデバイスのライブラリ情報を
見ていない。GenericなHDLを生成する。
例外的に、Xilinxの浮動少数点マクロに対しては、
デバイス・ライブラリのインスタンスを含む。
Q2.ハードとソフトのインタフェース部で割り込みを使っているか?
A2.現状使っていない。
スレッドをサポートするOSを組み込む事ができた場合は可能にする。
Q3.将来的に割り込みをコントロールできるようになるか?
A3.スレッドをサポートするOSを組み込む事ができた場合、
割り込みコントローラを管理して実現
Q4.ループ内のPIPELINE化はループの入れ子には対応しているか?
A4.一番内側のループにのみ対応している。
一番内側内側のループをUNROLLすると、一番内側でなくても使える
Q5.(Xilinx)配列にBRAMが使えるか?
A5.配列宣言はBRAMが通常割り付けられる。
Q6.BRAMと外付けRAMとをどのように使い分けているのか?
A6.通常の配列はBRAMに割り付けられます。
外付けRAMは共有メモリ宣言をして使用し、BRAMとの間でブロック転送します。
Q6.サポートしている演算の種類は?
A6.整数演算と固定少数点演算をサポート。
マクロで固定少数点演算をサポート。
Xilinxの浮動少数マクロにに対応。
Q7.C→HDL時のログで、パイプラインのレイテンシやレートが表示されるが、
これらをコントロールできるか?
A7.co_par_break()関数とプラグマでStageDelay値の設定でコントロール可能。
Q8.ImpulseのHDLのライブラリは公開されているか?
A8.当然、公開されている。
FIFO等のモデリングを含めたシミュレーションができ、出力HDLと合わせて
論理合成が可能になる。
Q9.リソースを共有化してデバイスサイズを小さくできるか?
A9.リソース・シェアリングを考慮した合成は現状できない。
次期バージョン(ver3)で可能になる予定。
リソースの有効利用としてpipeline化がある。
pipeline化指定をすると、ループ内の全ステージが
同時に動作されるようにコントロールされリソースの遊びがなくなると
同時に飛躍的に高速になります。
FPGAの場合は、共有のためのリソースも高くつき、ふんだんにある乗算器
使えば良い場合もあり、配線ディレーが増える事などを考えると、
必ずしもリソース・シェアリングが有利とは言えない。
Q10.(Xilinx)生成されたHDLをISEで使用するには?
A10.xxx_top.vhd、xxx_comp.vhd、impulseライブラリを一緒にISEに持ち込めば
簡単に完全なプロジェクトとなる。
Q11.SystemCのような、ビット幅の定義方法は?
A11.任意ビット幅をサポート。
Q12.Cでint使用時、ハード上では32ビット必要無い場合、CoDeveloperは最適化しているか?
A12.使われている値の上限を見て、ビット幅を適切化する最適化はしていない。
intの変りにint8などを意識して使う
Q13.プラグマUNROLL指定時の、その効果のわかるデザイン例はあるか?
A13.CoDeveloper\Examples\Fir51\fir_hw.c
Q14.配列がレジスタになることが確認できるデザイン例はあるか?
A14.ある。CoDeveloper\Examples\Fir51\fir_hw.cで、UNROLLにより配列(BRAM)が
レジスタに変る
Q15.StageDelayのデフォルト値は?
A15.ない。無限と考えてよい。
Q16.e = a * b * c * d
上式の式でa、b、c、dが互いに依存関係がない場合、なにも指定しなければ
1クロックでの処理を試みるのか?
A16.その通り。必要に応じて分割させる必要がある。
リソース共有をサポート時に改善される予定。
StageDelayで分割して演算数でグループ化して、複数クロック化できる。
遅延計算の元になる各演算の遅延値は以下の表の通り
演算 |
遅延値(unit delay値) |
&
| ^ >> << ~ |
1 |
&&
|| + - * == != < > <=
>= ! / % |
ビット幅 |
尚、 / % は原理的に1クロックでは終了しない。 |
終了にビット幅分の |
(例)#pragma CO SET StageDelay 64
上記の表を元に遅延値が集計され64を超えないようにステージ化される
*1演算がStageDelay値より大きい場合は、細分化できないので、
その演算が1ステージとなる
Q17.ステップ実行(デバック時)の方法は?
A17.ユーザCコード:CoDeveloperそのものでは、ステップ実行の機能はない。
各ANSI-Cコンパイラの持つデバッグ機構のステップ実行を使う。
例えば、Visual C++でブレークポイントを入れて実行する。CoMonitorもそれに同期する。
最適化Cコード:1クロックに対応した動作をCycle Acurate Simularerで観察できる。
Q18.コンパレータの生成は常に32bit 8bitの比較でも32bitのコンパレータを生成 バグ?
A18.CoDeveloperの現在の仕様
改善の完了
Q19.ソフトウェアプロセスの数は?
A19.1)デスクトップ・シミュレーション〜 幾らでも=>各プロセスは
Windowsのスレッドに対応
2)実装時〜スレッドをサポートするOSを組み込む事ができた場合:複数可能
スレッドをサポートするOSなしの場合:1つ
* 複数プロセスと形式上はすることはできるが、プロセスの順次実行と
なり、シングル・プロセスと実質は同じ
Q20.co_executeが終了する条件は?
A20.1)デスクトップ・シミュレーション〜 全てのプロセス(Windowsスレッド)の終了時
2)実装時〜スレッドをサポートするOSを組み込む事ができた場合:
全てのスレッドの終了時
スレッドをサポートするOSなしの場合:1つのプロセス終了時
Q21.構造体のサポートは?
A21.構造はをサポートされている。制限があるがバージョンが上がるに従い解消される。