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クロックでは終了しない。
上記の遅延は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.構造はをサポートされている。制限があるがバージョンが上がるに従い解消される。