Bach-Cファイルを合成
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*[[Bach-Cファイルを合成]] [#u9e0be4f]
●ハードウェア設計のためのBach C記述の制限
+以下の構文は、合成対象の記述では使用できない
++ライブラリ関数
++ファイルI/O
+テストベンチ、検証のみでは使用できる
+合成対象に上記の記述が含まれている場合は、除かなければな...
●Bachコンパイラの起動
+bachc -clk クロック周期 -mn 合成対象の関数名 ファイル名
+(例)sample.cの関数circ()以下を30MHzで合成する場合
% bachc -clk 33 -mn circ sample.c
●bachcにより生成されるVHDLファイル
% bachc -mn circ sample.c
sample.vhd トップ階層(RTL)
samplepe1_rtl.vhd 合成用記述(RTL)
…
samplepen_rtl.vhd 合成用記述(RTL)
sample_package.vhd ローカル配列用記述
sample_res.vhd 共有リソース記述(RTL)
●テストベンチ生成のための記述方法
+合成対象のトップ関数とテストベンチのトップ関数はparで実...
+パラメータは型、パラメータ名が完全に一致しており、そのパ...
+合成対象とテストベンチの間で共有変数があってはならない
+テストベンチ内でストリーム変数をスレッド間で共有してはな...
●テストベンチ生成
sample.c:
void main()
{
chan #12 a, b;
par {
circ(a, b) //合成対象関数
bench(a, b) //テストベンチ関数
}
}
テストベンチの作成コマンド
% bachc -mn circ -gh bench sample.c
sample_harness.vhd テストベンチ用記述
●VHDLによるシミュレーション
+bachcが生成したRTレベルVHDLはシミュレーション可能
+bachanコマンドを利用して必要なVHDLファイルをアナライズする
+bachan [-i] ファイルの名前
++ -i: インタプリタモードでvhdlanを実行
●ModelSimを使用する場合
+bachanコマンドのオプションに-msimを指定す
ることによりModelSim を利用可能
+bachan [-msim] ファイルの名前
++ -msim : ModelSim用のアナライズを実行
●メモリマッピング用プラグマ
+配列を宣言(グローバル、静的変数)
+メモリ自体を宣言
#pragma device ...
+メモリの動作の設定
#pragma configure_ram
+配列をメモリへ割り付ける
#pragma associate ...
●メモリの記述方法の例
+RAM
static int #8 a[256]; //8bit幅int型の配列a[256]を宣言
#pragma device RAM int #8 mram[256]; //配列と同じ型の8bi...
#pragma configure_ram mram (speed=20, extern); //myramの...
#pragma associate a with mram; //配列a[256]をmyramにマッ...
+ROM
static int #16 b[1024];
#pragma device ROM int #16 mrom[1024];
#pragma configure_rom mrom (speed=20);
#pragma associate b with mrom;
●メモリの使い方
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, doubl...
+-float_bitsオプションで固定小数点化してシ`ミュレーション。
●並列構文の有効利用
+par文による並列記述により、面積、時間的なオーバヘッドが...
++スレッド毎に制御部が生成される(面積的なオーバヘッド)
++par文による同期が発生
+局所的な並列性の記述は行わない
終了行:
*[[Bach-Cファイルを合成]] [#u9e0be4f]
●ハードウェア設計のためのBach C記述の制限
+以下の構文は、合成対象の記述では使用できない
++ライブラリ関数
++ファイルI/O
+テストベンチ、検証のみでは使用できる
+合成対象に上記の記述が含まれている場合は、除かなければな...
●Bachコンパイラの起動
+bachc -clk クロック周期 -mn 合成対象の関数名 ファイル名
+(例)sample.cの関数circ()以下を30MHzで合成する場合
% bachc -clk 33 -mn circ sample.c
●bachcにより生成されるVHDLファイル
% bachc -mn circ sample.c
sample.vhd トップ階層(RTL)
samplepe1_rtl.vhd 合成用記述(RTL)
…
samplepen_rtl.vhd 合成用記述(RTL)
sample_package.vhd ローカル配列用記述
sample_res.vhd 共有リソース記述(RTL)
●テストベンチ生成のための記述方法
+合成対象のトップ関数とテストベンチのトップ関数はparで実...
+パラメータは型、パラメータ名が完全に一致しており、そのパ...
+合成対象とテストベンチの間で共有変数があってはならない
+テストベンチ内でストリーム変数をスレッド間で共有してはな...
●テストベンチ生成
sample.c:
void main()
{
chan #12 a, b;
par {
circ(a, b) //合成対象関数
bench(a, b) //テストベンチ関数
}
}
テストベンチの作成コマンド
% bachc -mn circ -gh bench sample.c
sample_harness.vhd テストベンチ用記述
●VHDLによるシミュレーション
+bachcが生成したRTレベルVHDLはシミュレーション可能
+bachanコマンドを利用して必要なVHDLファイルをアナライズする
+bachan [-i] ファイルの名前
++ -i: インタプリタモードでvhdlanを実行
●ModelSimを使用する場合
+bachanコマンドのオプションに-msimを指定す
ることによりModelSim を利用可能
+bachan [-msim] ファイルの名前
++ -msim : ModelSim用のアナライズを実行
●メモリマッピング用プラグマ
+配列を宣言(グローバル、静的変数)
+メモリ自体を宣言
#pragma device ...
+メモリの動作の設定
#pragma configure_ram
+配列をメモリへ割り付ける
#pragma associate ...
●メモリの記述方法の例
+RAM
static int #8 a[256]; //8bit幅int型の配列a[256]を宣言
#pragma device RAM int #8 mram[256]; //配列と同じ型の8bi...
#pragma configure_ram mram (speed=20, extern); //myramの...
#pragma associate a with mram; //配列a[256]をmyramにマッ...
+ROM
static int #16 b[1024];
#pragma device ROM int #16 mrom[1024];
#pragma configure_rom mrom (speed=20);
#pragma associate b with mrom;
●メモリの使い方
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, doubl...
+-float_bitsオプションで固定小数点化してシ`ミュレーション。
●並列構文の有効利用
+par文による並列記述により、面積、時間的なオーバヘッドが...
++スレッド毎に制御部が生成される(面積的なオーバヘッド)
++par文による同期が発生
+局所的な並列性の記述は行わない
ページ名: