*[[Bach-C→ISE]] [#fed3d180]
●遅延モデルの指定
+遅延モデルは.mdlファイルに記述する
+デフォルトの遅延モデルを用いて合成する場合は、
 % bachc -mn process -model default.mdl test.c
 で合成することができる

●メモリマッピング用プラグマ
+配列を宣言(グローバル、静的変数)
+メモリ自体を宣言
 #pragma device ...
+メモリの動作の設定
 #pragma configure_ram
+配列をメモリへ割り付ける
 #pragma associate ...
●FPGA内のブロックRAMを使用する
+メモリモデルファイルを生成し、メモリのピン名を指定(ファイル名は拡張子.rmdlのファイル)
 メモリモデルファイルの内容の例
 NAME = "myram"
 CLK_NAME = "CLK"
 CLK_POL = RISE
 ADR_NAME = "ADDR"
 DI_NAME = "DIN"
 DO_NAME = "DOUT"
 WE_NAME = "WE"
 ※これはシングルポートのブロックRAMにあわせた記述例である。他のメモリの場合にはそれにあわせた記述をしなければならない

●メモリの記述方法の例
+RAM
 static int #8 a[256]; //8bit幅int型の配列a[256]を宣言
 #pragma device RAM int #8 mram[256]; //配列と同じ型の8bit幅int型のRAM myram[256]を宣言
 #pragma configure_ram mram (speed=20, extern); //myramの動作を設定
 #pragma associate a with mram; //配列a[256]をmyramにマッピング
●メモリモデルファイルの指定
+明示的にメモリモデルファイルを指定
 #pragma configure_ram mem1 (model=memmodel);
 こうすると、RAMのmem1のメモリモデルをmemmodel.rmdlに指定することができる
+bachcコマンドでメモリモデルファイルを指定
 % bachc -mn process -ram_model memmodel.rmdl test.c
 こうすると、#pragma で指定してないメモリのメモリモデルは全部memmodel.rmdlに指定することができる

+ROM
 static int #16 b[1024];
 #pragma device ROM int #16 mrom[1024];
 #pragma configure_rom mrom (speed=20);
 #pragma associate b with mrom;
●ISEで合成するときの手順
+ISEの起動
+新規プロジェクト
 Project name → 任意のプロジェクト
 Project location → 任意の場所
 Top-level source type → HDL
+Device Propaties
 ターゲットデバイスを考えて選択
+Create a new Source
 新しくファイルを作る必要がなければ次へ
+Add Exsisting Sources
 bachcコマンドでできたvhdファイルを全部選択(テストベンチ以外)
 上記とは別にbachstd.vhdを/home/vdec/sharp/bach-3.5/lib/bachstd.vhdから持ってくる
+Finish
+BLOCK RAMを用いる場合
++inst_memmodel_1 - memmodel等の"?"になっている部分を選択し、右クリックからnew source
++ファイル名はメモリモデル名と同じにするとよい
++IP(Core Generator & Architecture Wizard)を選択し、次へ
++Memories & Storage Elements → RAMS & ROMS → Single Port Block Memory
++Finish
++Memory Size のWrite Widthは、RAMの型に合わせる。
 char型なら8、int型なら16を指定
++Memory Size のWrite Depthは、RAMの大きさに合わせる。
 #pragma device RAM int t_mem0[1024];と指定したならば、1024を入れる。
+トップモジュールを指定し、Synthesize、Implement Designを行う。

●メモリの使い方
 static int #8 a[256], b[256], c[512];
 #pragma device RAM int #8 bigram[1024];
 #pragma configure_ram bigram (speed=20); 
 #pragma associate a, b, c with bigram;
 複数の配列を同じメモリにマッピングすることができる
 メモリのサイズを越えて配列を割り付けることはできない

●メモリの使い方(注意点)
+ROMに割り付けた配列には、初期化以外に書き込んではいけない
+ #pragma associate 変数with メモリ; は変数の有効範囲内に記述する

●配列アクセス調停回路用プラグマ(スレッド間)
+複数スレッドからアクセスされる配列には、アクセス競合のための仲裁回路が生成される。
+必ず排他的にしかアクセスされない配列について、仲裁回路の生成をしないように制御可能
 例)
 int a[10];
 #pragma no_resolution a;
+メモリに割り当てた配列の場合、メモリ名を指定。

●配列アクセス調停回路用プラグマ(回路-テストベンチ間)
+回路とテストベンチの両方からアクセスされる配列には、アクセス競合のための仲裁回路が生成される。
+必ず排他的にしかアクセスされない配列について、仲裁回路の生成をしないように制御可能
 例)
 int a[10];
 #pragma no_ext_resolution a;
+メモリに割り当てた配列の場合、メモリ名を指定

●配列実現用プラグマ
+1つのスレッドからのみアクセスされるROM/RAMに割り当てられていない配列
は、スレッド内のローカルなレジスタ、組合せ回路で実現
+スレッドの外部のリソースとしてもハードウェア生成可能
 例)
 int a[10];
 #pragma non_local a;

●float/doubleの合成
+bachcは、浮動小数点(float, double)をそのまま合成しない
+小数点の位置を固定(整数部、小数部を表現する各ビット幅を固定)して表現する固定小数点化して合成する。
+合成(bachc)では、整数部16ビット、小数部16ビットの固定小数点に自動で変換。
 -float_bits x.y で変更可能
 x: 全体のビット幅
 y: 整数部のビット幅
+シミュレーション(bach2c)では、指定がなければfloat, doubleのまま計算。
+-float_bitsオプションで固定小数点化してシ`ミュレーション。

●並列構文の有効利用
+par文による並列記述により、面積、時間的なオーバヘッドが生じる
++スレッド毎に制御部が生成される(面積的なオーバヘッド)
++par文による同期が発生
+局所的な並列性の記述は行わない


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS