次世代LSI設計ツール
DesignPrototyperのご紹介
2000年12月
製品系列
• DesignPrototyper
– 標準製品
– 598万円
• DesignPrototyper for FPGA
– Xilinx社、Altera社向けデバイス専用ルール
– 普及版
– 98万円(FPGA 1社対応)
– 148万円(FPGA 2社対応)
• HL Synthesis(
((
(予定)
予定)
予定)
予定)
– ASICユーザ向け
– 898万円(予定)
当社のハイレベル合成の特長
• C/C++言語のフルセット構文
• システムレベルからアーキテクチャレベルまでのモデリング
とシミュレーションのサポート
• 全モデリングからのハードウェア合成のサポート
• 高度なパイプラインスケジューリングのサポート
• IP再利用を容易にするインタフェース合成のサポート
• 特定デバイス向けの最適化機能のサポート
従来設計手法と当社ソリューション
従来手法 従来手法 Cによるシステム仕様の HDLによるモデリングのし直し RTレベルに書き換え 論理合成用に書き換え 論理合成 論理合成 ゲートレベル データ 配置配線 配置配線 シミュレーション シミュレーション シミュレーション シミュレーション 遅延無しシミュレーション 遅延有りシミュレーション バックアノテーション モデリング 当社ソリューション 当社ソリューション Cによるシステム仕様の C CC Cからのハイレベル合成からのハイレベル合成からのハイレベル合成からのハイレベル合成 C CC Cからのハイレベル合成からのハイレベル合成からのハイレベル合成からのハイレベル合成 プロトコル仕様 フロアプラン情報から シミュレーション パフォーマンスレベル 再ハイレベル合成 再ハイレベル合成 再ハイレベル合成 再ハイレベル合成 再ハイレベル合成 再ハイレベル合成 再ハイレベル合成 再ハイレベル合成 論理合成 論理合成 配置配線 配置配線 シミュレーション IPインターフェース 情報 制約条件 制約条件 仕様シミュレーション モデリング のチューニング のチューニング ブロック間遅延の抽出 IPインターフェース 情報デザインフロー
Verilog Verilogアナライザ CDFG変換部 C解析部 Cアルゴリズム I/OアキュレートC
データフロー最適化 プリアロケーション サイクル数見積り サイクル数見積り I/Oアキュレートスケジューリング FSM最適化 リソースアロケーション RTL-HDL出力 CDFG 中間言語 サイクル固定CDFG RTL-CDFG スケジューリング済みCDFG C言語出力 C言語出力 ANSI Cシミュレータ ANSI Cシミュレータ VCDファイル RTL-C I/OアキュレートC Verilog-RTL VHDL-RTL
DesignPrototyperが扱うアーキテクチャ
• 制御部とデータパス部で構成
• データパス部
– マルチプレクサベースアーキテク
チャを基本とする。
– 出力側にレジスタを配置。
• 制御部
– ミーリ制御モデルをデフォルトと
する。
• バスインタフェース部
– 予定(2001年2月)
制御部
データパス部
Control input Data input
データパス 制御信号
ステータス信号
DesignPrototyperの入出力関連図
ユーザー制約
Verilog
DesignPrototyper
DesignPrototyper
Verilog
レポート
面積
速度
レイテンシ
ライブラリ
トレードオフ
・クロックピリオド ・クロックオーバーヘッド ・ライブラリ ・スケジューリング/ リソースシェアリング制御 ・その他C/C++
VHDL
C
C
DesignPrototyperのデザインフロー
デ ザ イ ン の 読 み 込 み ・ 解 析 デ ザ イ ン の 読 み 込 み ・ 解 析 エ ラ ボ レ ー ト エ ラ ボ レ ー ト プ リ ア ロ ケ ー シ ョ ン プ リ ア ロ ケ ー シ ョ ン ス ケ ジ ュ ー リ ン グ ス ケ ジ ュ ー リ ン グ ル ー プ パ イ プ ラ イ ン ル ー プ パ イ プ ラ イ ン ( F S M 最 適 化 ) ( F S M 最 適 化 ) リ ソ ー ス ア ロ ケ ー シ ョ ン リ ソ ー ス ア ロ ケ ー シ ョ ン 合 成 結 果 解 析 合 成 結 果 解 析 H D L / C 出 力 H D L / C 出 力CDFG
CDFG
CDFG
CDFG
CDFG
CDFG
CDFG
レポート
C/C++
Verilog
VHDL
Verilog
ライブラリ
ユーザー
制約
C言語サポートの特長
• 仕様レベルからアーキテクチャーレベルまで
のモデリングのサポート
• 全モデリングレベルからのハードウェア合成
機能のサポート
• 全モデリングレベルのシミュレーション
機能のサポート
C言語の記述能力
• ANSI-Cフルセット
– 但し、再呼出しは不可(将来サポート)。
– C++は2001年サポート予定
• 同時に標準言語もサポート予定
• 入出力ポートの定義サポート
• ポート/信号のビット幅の定義サポート
• プロセスの並列及び同期処理サポート
C言語の記述能力
• ビットベクタのサポート
• 固定小数点のサポート
• 外部モジュールのインスタンスのサポート
• 4つのモデリングレベルのサポート
– アルゴリズムレベル
• 時間の概念がない、ソフトウェア記述と同等
– I/Oアキュレートレベル
• I/Oプロトコルの記述で、タイミングダイヤグラムと同等
– サイクルアキュレートレベル
– RTレベル
つづき
ハードウェア合成機能
• Verilog版の合成機能を全てサポート
• 各モデリングレベルに応じたスケジューリング機能の
サポート
• アルゴリズム
• I/Oアキュレート
• サイクルアキュレート
• C言語に応じた最適化
• 変数のビット幅の静的解析
• ポインタ/構造体/共用体の配列及び変数変換
• その他
• フレキシブルなコーディングスタイル
– IEEE標準Verilogをサポート
•
拡張ディレクティブをサポート
– 動作記述とRTL記述の混在をサポート
•
既存資産と既存設計手法との融合
– Synopsys社Behavior Compilerのコーディングスタイルを拡張
•
同期/非同期リセットの記述
•
メモリの推測記述
•
外部モジュールのインスタンス記述
•
fork-joinのサポート
– 正確なI/Oプロトコル記述が可能
•
ツールの都合によるクロック配置を強制しない
•
唯一、I/Oや演算の実行サイクルのみを記述
Verilog言語の機能
言語の機能
言語の機能
言語の機能
• 高度なHDL最適化機能
–
式の木の高さの最適化
–
定数伝播
–
共通式の削除
–
未使用コードの削除
–
コードの移動
–
forループとサブプログラムの展開
–
forループのループ回数の分割
–
forループのループ回数の最適化
–
ビット幅のチェック
–
その他
データフローの最適化
データフローの最適化
データフローの最適化
データフローの最適化
リソース実装概念図
y = a * b
mul
adder
mult
...
vfast
fast
med
slow
vslow
fmul
デフォルト リソースマップ ファイル ユーザー定義 リソースマップ ファイルオペレータタイプ
リソースタイプ
スピード
グレード
リソース
オペレータ
lib
指定方法:
・周波数指定
・スピードグレード指定
プリアロケーション
プリアロケーション
プリアロケーション
プリアロケーション
ユーザー制約に適応するリソースタイプの抽出
スケジューリング
• スピード(クロック)、面積(リソース)制約によるスケジュー
リング
• C言語アルゴリズムからスケジューリングのサポート
– アンタイムドビヘイビア
• 強力なI/Oアキュレートスケジューリングのサポート
–
I/Oプロトコルの正確なスケジューリング
–
勝手にクロックエッヂ(ステート)を挿入しない
• 入力ポート遅延の考慮
• チェイニング機能
•ループパイプラインのサポート
–異なるパスに対する可変のレイテンシの設定
–ストールループ、強制脱出のサポート
•パイプラインドマクロスケジューリング機能
•メモリのハンドリング
•FSMの生成
つづき
スケジューリング
リソースアロケーション
• ハイレベルコンポーネントの自動アロケーション
• モジュールのマニュアルマッピング
• 演算器の最大共有可能数をチェック
1プロセスモデルRTL
2プロセスモデルRTL
ローレベルRTL(予定)
I/Oアキュレートビヘイビア
サイクルアキュレートビヘイビア
Verilog-HDL / VHDL
I/OアキュレートC
サイクルアキュレートC
RTL-C
C言語
DesignPrototyper
DesignPrototyper
合成結果出力機能
デザインの解析
デザインツリー構造
リソース占有状況
データパスブロック図
使用リソース一覧
ステートグラフ
ソースコード
GUI
テキスト
DesignPrototyper
DesignPrototyper
コマンド実行
コマンド実行
コマンド実行
スケジューリングの依存関係表示
スケジューリングの依存関係表示
スケジューリングの依存関係表示
スケジューリングの依存関係表示
使い易い実行環境のサポート
• GUIメニューとコマンドシェルのサポート
• Tcl/Tkベースのカスタマイズ可能な実行環境
• グローバル制約条件は環境変数で・・
• ローカルな制約条件は実行コマンドで・・
• 豊富な問い合わせ機能のサポート
FPGAインタフェース機能
• 標準マクロライブライリマッピング
– XILINX ⇒CoreGen/LogiCORE
– Altera ⇒LPM
• LUTのファンイン数に応じた最適化
– 制御ロジック部分
– 2001年2月予定
• その他
コマンド一覧
•
dread
dread
dread
dread
デザインを読み込む。C/C++及びVerilog言語をサポート。
• elaborate
elaborate
elaborate
elaborate
デザインの最適化。
•
prealloc
prealloc
prealloc
prealloc
演算子やサブプログラムのリソースのマッピング処理。
•
schedule
schedule
schedule
schedule
スケジューリング処理。
•
allocate
allocate
allocate
allocate
データパスのアロケーション処理。
•
mkfsm
mkfsm
mkfsm
mkfsm
FSMの合成と最適化。
•
write
write
write
write
HDL出力処理
–
I/Oアキュレートビヘイビア。
–
サイクルアキュレートビヘイビア
–
1プロセスRTL
–
2プロセスRTL
–
ローレベルRTL
•
unroll
unroll
unroll
unroll
forループやサブプログラムの展開指定マーク。
•
roll
roll
roll
roll
forループやサブプログラムの展開抑制マーク。
•
split_forloop
split_forloop
split_forloop
split_forloop forループの指定回数で分割する
•
expand
expand
expand
expand
マークされた展開指定を実行。
addcycles
addcycles
addcycles
addcycles
指定式のクロックエッヂの挿入。
pipeline
pipeline
pipeline
pipeline
パイプラインステージ数の指定。
ignore_odrmemvar
ignore_odrmemvar
ignore_odrmemvar
ignore_odrmemvar
メモリのアクセスインデックスの依存関係
mapmacro
mapmacro
mapmacro
mapmacro
リソースのマッピング指定。
ignore_mapmacro
ignore_mapmacro
ignore_mapmacro
ignore_mapmacro
リソースのマッピング指定を無効にする。
inputport_delay
inputport_delay
inputport_delay
inputport_delay
入力ポート遅延の設定。
report
report
report
report
合成結果の解析レポート。
view_report
view_report
view_report
view_report
合成結果の解析GUIを起動。
gls
gls
gls
gls
現在のデザインパスの情報を表示。
gpwd
gpwd
gpwd
gpwd
現在のデザインパスの位置の表示。
gcd
gcd
gcd
gcd
デザインパスの移動。
gecho
gecho
gecho
gecho
script
script
script
script
TCL形式で書いたスクリプトファイルの実行。
new
new
new
new
現在の環境を全てクリアする。
quit
quit
quit
quit
gutsypeeの終了
help
help
help
help
コマンドのヘルプメッセージを表示
setenv
setenv
setenv
setenv
環境変数を設定する。
その他
その他
その他
その他
参考
コマンド一覧
環境変数(1)
CLOCK_PERIOD
CLOCK_OVERHEAD
ONETIMEUNIT
FOR_UNROLL_LIMIT
GATE_DELAY
USERLIB
GUTSYPEE_LOG
UNINITIAL_VALUE
CONV_XTO0
FSM_ENCODING_TYPE
環境変数名
使用目的
クロック周期の指定
クロックオーバーヘッドの指定
1周期時間の指定 n<ns|ps>
1ゲート遅延値
展開可能な最大ループ回数
テクノロジーライブラリ指定
実行ログファイルのセーブ
初期化されない変数の許可指定
初期化されない変数を0に初期化
FSMエンコーディング指定
TECHLIB
ユーザー定義ライブラリ指定
参考
環境変数(2)
NM_GATE_PREFIX
環境変数名
使用目的
NM_WIRE_PREFIX
NM_REG_PREFIX
NM_VAR_PREFIX
NM_PIPREG
MACROLIB_PATH
SCRIPT_PATH
HDLSOURCE_PATH
RESOURCE_MAPFILE_PATH
GUTSYPEE
GEN_DELAY_LOWRTL
ローレベルRTLのシーケンシャルプロセスの代入文に遅延値を設定
発生ゲートに対する名称の接頭文字指定
発生ワイヤに対する名称の接頭文字指定
発生レジスタに対する名称の接頭文字指定
発生内部変数に対する名称の接頭文字指定
発生パイプラインレジスタの接頭文字指定
テクノロジライブラリのディレクトリパス指定
スクリプトファイルが格納されているディレクトリパス指定
HDLソースが格納されているディレクトリパス指定
リソースマッピングファイルが格納されているディレクトリパス指定
DesignPrototyperのインストールディレクトリパス指定
参考
処理及び変換 サポート 機能 データ型 データ型データ型 データ型 関数の戻り値で使用:taskして使用 ○ void 8bitのbitvectorへ変換 ○ char 16bitのbitvectorへ変換 ○ short 32bitのbitvectorへ変換 ○ int 本定義がない場合、2の補数演算 ○ unsigned パラメータに展開 ○ 列挙型 △ 共用体 変数へ展開 △ 構造体 静的メモリ割当てのヒープ及び配列のポインタは配列名に変換。 ○ ポインタ 2次元までサポート。ただし、2次元は1次元に変換する。 ○ 配列 parameter文に変換 ○ const 型名とビット数を定義したconfigファイルを参照 ○ typedef × double × float ○ long
Cのサポート構文と変換
処理及び変換 サポート 機能 1ビットの特殊型 ○ bit nビットの特殊型 ○ bitvector モジュールの並列実行を記述するための関数型 × par 記憶域 記憶域記憶域 記憶域 ただし静的なローカル変数に置き換える。 ○ auto 静的なローカル及びグローバル変数に置き換える。 ○ static ○ a--○ a++ 演算子 演算子演算子 演算子 ー 初期化 ディレクティブよりi/oポートを定義 ○ 入力及び出力ポート 配列 ○ メモリ ディレクティブで各変数に設定可。設定なしの場合、デフォルト処 理 ○ ビット幅 変数の型宣言より変換 ー レジスタ グローバル変数に置き換える。 ○ extern
Cのサポート構文と変換
処理及び変換 サポート 機能 単項演算子 単項演算子単項演算子 単項演算子 a=a+;に変換 ○ ++a a=a-1に変換 ○ --a 配列インデックスのインクリメントに置き換える。 ○ *a++ 配列インデックスのデクリメントに置き換える。 ○ *a--○ + ○ & ○ || ○ && 2項演算子項演算子項演算子項演算子 型変換関数に置き換え。 ○ cast スタティックな値に変換 ○ sizeof ○ ! ○ ~ ○
-Cのサポート構文と変換
処理及び変換 サポート 機能 ○ ^ ○ | ○ << ○ >> ○ < ○ > ○ -○ + ○ % ○ / ○ * ○ != ○ == ○ >= ○ <=
Cのサポート構文と変換
処理及び変換 サポート 機能 ○ = 2項演算+代入式に変換 ○ *= 2項演算+代入式に変換 ○ /= 2項演算+代入式に変換 ○ %= 2項演算+代入式に変換 ○ += 2項演算+代入式に変換 ○ -= ○ If-else 制御構文 制御構文制御構文 制御構文 ○ ?: 3項演算子項演算子項演算子項演算子 2項演算+代入式に変換 ○ |= 2項演算+代入式に変換 ○ ^= 2項演算+代入式に変換 ○ &= 2項演算+代入式に変換 ○ >>= 2項演算+代入式に変換 ○ <<=
Cのサポート構文と変換
処理及び変換 サポート 機能 whileに変換 ○ do-while ○ while ○ for case文へ変換 ○ switch ラベル付きdisableへ変換 ○ continue ラベル付きdisableへ変換 ○ break #line #include #else #ifndef #ifdef #define 以下のマクロは 以下のマクロは以下のマクロは 以下のマクロはGNUプリプロセッサを使用し予め展開する。プリプロセッサを使用し予め展開する。プリプロセッサを使用し予め展開する。プリプロセッサを使用し予め展開する。 プリプロセッサ プリプロセッサプリプロセッサ プリプロセッサ ラベル付きdisableへ変換 ○ goto
Cのサポート構文と変換
処理及び変換 サポート 機能 関数処理 関数処理関数処理 関数処理 関数及びプロシジャ化の節を参照。 ○ 関数化 関数及びプロシジャ化の節を参照。 ○ 関数呼び出し ー プロトタイプ宣言 ループパイプライン合成コマンドをサポート。 △ パイプライン化 schedule関数を使用 ○ 並列性 関数化時に特殊関数として定義。関数及びプロシジャ化の節を 参照 △ 関数の階層化 wait関数、clock関数を使用 ○ 同期イベントの検出
Cのサポート構文と変換
なし 引数 本ディレクティブが指定されている関数は、1つのモジュールとして合成される。 尚、ディレクティブ、scheduler()関数でプロセスを登録しない場合に使用する。 機能 // // //
// fda_cfda_cfda_cfda_c modulemodulemodulemodule 書式 input:入力ポート output:出力ポート signal:グローバル変数に適用 var:ローカル変数に適用 piped:パイプラインのストレージクラス pclk / nclk:ハイアクティブ/ローアクティブエッジクロック aprst / anrst / sprst / snrst:同期 / 非同期のハイアクティブ / ローアクティブ エッジリセット n:ビット幅 引数 ポート、信号、変数のビット幅や入/出力ポートの定義行う。 機能 // // //
// fda_cfda_cfda_cfda_c <input | output | signal |<input | output | signal |<input | output | signal | var<input | output | signal |varvar | piped >[:signed|unsigned]:n[:down|up]var| piped >[:signed|unsigned]:n[:down|up]| piped >[:signed|unsigned]:n[:down|up]| piped >[:signed|unsigned]:n[:down|up] 書式
C
C
C
モジュール名:マッピングするモジュール名を指定する。 input:入力ポートの定義を行う。 output:出力ポートの定義を行う。 引数 関数は合成されるずに外部モジュールへマッピングされる。 機能 // // //
// fda_c map_to_modulefda_c map_to_modulefda_c map_to_modulefda_c map_to_module <<<<モジュール名モジュール名モジュール名モジュール名> > > > input={<< input={<<input={<< input={<<実ポート名実ポート名実ポート名>(実ポート名>(>(変数名>(変数名):<変数名変数名):<):<ビット幅):<ビット幅ビット幅>>*}, ビット幅>>*}, >>*}, >>*}, output={<< output={<<output={<< output={<<実ポート名実ポート名実ポート名実ポート名>(>(>(>(変数名変数名):<変数名変数名):<):<):<ビット幅ビット幅ビット幅ビット幅>>*} >>*} >>*} >>*} 書式 なし。 引数 指定された関数は下位階層のモジュールとして合成される。 機能 // // //
// fda_c preserve_function fda_c preserve_function fda_c preserve_function fda_c preserve_function 書式 なし。 引数 forループ/関数を展開する。 機能 // // //
// unroll_cunroll_cunroll_cunroll_c unroll unroll unroll unroll 書式 なし。 引数 forループ/関数を展開しない。 機能 // // //
// unroll_cunroll_cunroll_cunroll_c rollrollrollroll 書式
C
C
C
なし 引数 関数を別のプロセスとして扱う 機能 // // //
// fda_c fda_c fda_c processfda_c processprocessprocess 書式
C
C
C
C言語用ディレクティブ(サポート済み)
言語用ディレクティブ(サポート済み)
言語用ディレクティブ(サポート済み)
言語用ディレクティブ(サポート済み)
なし 引数 ブロック内のスレッドを並列に実行させる 機能 // // //// fda_c fda_c fda_c par <fda_c par <par <par <ラベル名ラベル名ラベル名>ラベル名>>> 書式
なし。 引数 ステート値をこの範囲で定義する。 機能 // // //
// fda_c state_vecotr_onfda_c state_vecotr_onfda_c state_vecotr_onfda_c state_vecotr_on //
// //
// fda_c state_vecotr_off fda_c state_vecotr_off fda_c state_vecotr_off fda_c state_vecotr_off 書式 ビット幅:ステートベクタのビット幅を指定する。 引数 ステートベクタの定義 機能 // // //
// fda_cfda_cfda_cfda_c state:<state:<state:<ビット幅state:<ビット幅ビット幅> ビット幅> > > 書式 略 引数 case文の処理を定義する。 機能 // // //
// fda_c case_stylefda_c case_stylefda_c case_style <fda_c case_style<<<paralle_caseparalle_caseparalle_caseparalle_case> <> <full_case> <> <full_casefull_casefull_case> > > > 書式
C
C
C
C言語用ディレクティブ(予定)
言語用ディレクティブ(予定)
言語用ディレクティブ(予定)
言語用ディレクティブ(予定)
なし 引数 ブロック内のスレッドをパイプライン動作させる スレッド間をバッファ付きでコミュニケーションする場合は、“//fda_c piped”で定義された変数 を使用する。 機能 // // //// fda_c fda_c fda_c fda_c pipe <pipe <pipe <ラベル名pipe <ラベル名ラベル名ラベル名>>>> 書式
C
C
C
C言語用関数(サポート済み)
言語用関数(サポート済み)
言語用関数(サポート済み)
言語用関数(サポート済み)
信号名:この信号の状態により同期をとる。 引数 外部との信号同期関数である。 機能 void voidvoidvoid isz_active_lowisz_active_lowisz_active_lowisz_active_low((((信号名信号名信号名信号名); ); ); ); void
voidvoid
void isz_active_highisz_active_highisz_active_highisz_active_high((((信号名信号名信号名信号名); ); ); ); void
void void
void isz_waitisz_waitisz_waitisz_wait((((信号名信号名信号名信号名[[[[‘‘‘‘&&&&&&&&’’’’ | | ‘‘‘‘||| | ||||’’’’ 信号名|| 信号名信号名信号名]); ]); ]); ]); 信号名 信号名 信号名 信号名(((( !!!!信号名信号名信号名 | 信号名| | | 信号名信号名信号名信号名 )))) 書式 なし。 引数 クロック同期関数で、この関数より1クロック経過する。 機能 void voidvoid
void isz_clockisz_clockisz_clockisz_clock(); (); (); (); 書式
なし。 引数
現在のシミュレーション時間を取得する。これは合成されない。 機能
int isz_getCurrentTime int isz_getCurrentTimeint isz_getCurrentTime int isz_getCurrentTime(); (); (); (); 書式 なし。 引数 現在のシミュレーション時間を取得する。これは合成されない。 機能 int isz_getCurrentTime int isz_getCurrentTimeint isz_getCurrentTime int isz_getCurrentTime(); (); (); (); 書式 bitvector *val1 : 代入先のビットベクタ型変数へのポインタ。 int val2 : 整数値。 引数 アルゴリズム記述のみ レベル なし。 戻り値 固定小数値(整数値)をビットベクタ型変数へ代入する。 機能 void voidvoid
void isz_fixedisz_fixedisz_fixedisz_fixed((((bitvectorbitvectorbitvector *val1,bitvector*val1,*val1,int*val1,int val2,intintval2,val2,intval2,intint acc); intacc); acc); acc); 書式
C
C
C
bitvector *val : 変換した固定小数値を格納するビットベクタ型変数(配列名)。 int acc : 小数精度
float fnum : 浮動小数(Cのfloatで扱える値) 引数 アルゴリズム記述のみ レベル なし。 戻り値 浮動小数を固定小数(整数値)に変換する。 機能 void isz_float2fixed( void isz_float2fixed(void isz_float2fixed(
void isz_float2fixed( bitvectorbitvectorbitvectorbitvector ****valvalval,,,,intvalint acc, floatintintacc, floatacc, float fnumacc, floatfnumfnumfnum); ); ); ); 書式 bitvector *val1 : コピー先のビットベクタ型変数(配列名)。 bitvector *val2 : コピー元のビットベクタ型変数(配列名)。 int : 小数精度 引数 アルゴリズム記述のみ レベル なし。 戻り値 ビットベクタ型の固定小数(整数値)をを他のビットベクタ型の変数へ精度を合わせ てコピー。 機能 void isz_fixed2fixed( void isz_fixed2fixed(void isz_fixed2fixed(
void isz_fixed2fixed(bitvectorbitvectorbitvectorbitvector *val1,*val1,*val1,*val1,bitvectorbitvector *val2,bitvectorbitvector*val2,*val2,int*val2,intintint acc) acc) acc) acc) 書式
C
C
C
bitvector *result : 計算結果を格納するビットベクタ型変数(配列名)。 int acc : 計算結果の小数精度 bitvector *val1 : 計算式左辺のビットベクタ型変数(配列名)。 bitvector *val2 : 計算式右辺辺のビットベクタ型変数(配列名)。 引数 アルゴリズム記述のみ レベル なし。 戻り値 固定小数点の加算(2項演算)。 機能 void voidvoid
void isz_fixed_addisz_fixed_addisz_fixed_add((((bitvectorisz_fixed_add bitvectorbitvectorbitvector *result,*result,*result,*result,intintint acc, intacc, bitvectoracc, acc, bitvectorbitvectorbitvector *val1,*val1,*val1,*val1, bitvectorbitvectorbitvectorbitvector *val2) *val2) *val2) *val2) 書式 bitvector *result : 計算結果を格納するビットベクタ型変数(配列名)。 int acc : 計算結果の小数精度 bitvector *val1 : 計算式左辺のビットベクタ型変数(配列名)。 bitvector *val2 : 計算式右辺辺のビットベクタ型変数(配列名)。 引数 アルゴリズム記述のみ レベル なし。 戻り値 固定小数点の減算(2項演算)。 機能 void voidvoid
void isz_fixed_subisz_fixed_sub((((bitvectorisz_fixed_subisz_fixed_subbitvectorbitvector *result,bitvector*result,*result,*result,intintintint acc, acc, bitvectoracc, acc, bitvectorbitvector *val1,bitvector*val1,*val1,*val1, bitvectorbitvectorbitvectorbitvector *val2) *val2) *val2) *val2) 書式
C
C
C
bitvector *result : 計算結果を格納するビットベクタ型変数(配列名)。 int acc : 計算結果の小数精度 bitvector *val1 : 計算式左辺のビットベクタ型変数(配列名)。 bitvector *val2 : 計算式右辺辺のビットベクタ型変数(配列名)。 引数 アルゴリズム記述のみ レベル なし。 戻り値 固定小数点の乗算(2項演算)。 機能 void void void
void isz_fixed_mulisz_fixed_mulisz_fixed_mul((((bitvectorisz_fixed_mul bitvectorbitvectorbitvector *result,*result,*result,int*result,intint acc, intacc, bitvectoracc, acc, bitvectorbitvectorbitvector *val1,*val1,*val1, bitvector*val1,bitvectorbitvectorbitvector *val2) *val2) *val2) *val2) 書式 bitvector *result : 計算結果を格納するビットベクタ型変数(配列名)。 int acc : 計算結果の小数精度 bitvector *val1 : 計算式左辺のビットベクタ型変数(配列名)。 bitvector *val2 : 計算式右辺辺のビットベクタ型変数(配列名)。 引数 アルゴリズム記述のみ レベル なし。 戻り値 固定小数点の除算(2項演算)。 機能 void void void
void isz_fixed_divisz_fixed_div((((bitvectorisz_fixed_divisz_fixed_divbitvectorbitvector *result,bitvector*result,*result,*result,intintintint acc, acc, bitvectoracc, acc, bitvectorbitvector *val1,bitvector*val1,*val1,*val1, bitvectorbitvectorbitvector *val2) bitvector*val2) *val2) *val2) 書式
C
C
C
int *val1 : 変換後整数値代入先のint型変数へのポインタ。 bitvector *val2 : 変換前のビットベクタ型変数(配列名)。 引数 アルゴリズム記述のみ レベル なし。 戻り値 ビットベクタ型の値を整数値に変換してint型の変数へ代入する。 機能 void isz_bitvect2int( void isz_bitvect2int(void isz_bitvect2int(
void isz_bitvect2int(intintint val1,intval1,val1,val1, bitvectorbitvectorbitvectorbitvector* val2) * val2) * val2) * val2) 書式
char *array : 代入先のchar型配列。
bitvector *val : ビットベクタ型変数(配列名)。 int range : ビット列の幅。 引数 アルゴリズム記述、ビヘイビア記述 レベル なし。 戻り値 ビットベクタ型のビット列をchar型の配列に変換して代入する。 機能
void isz_bitvect2char_array(char *array, void isz_bitvect2char_array(char *array,void isz_bitvect2char_array(char *array,
void isz_bitvect2char_array(char *array, bitvectorbitvectorbitvector ****valbitvector valval,,,,intvalintintint range) range) range) range) 書式
C
C
C
bitvector *val1 : コピー先のビットベクタ型変数(配列名)。 bitvector *val2 : コピー元のビットベクタ型変数(配列名)。 引数 アルゴリズム記述、ビヘイビア記述 レベル なし。 戻り値 ビットベクタ型の変数のデータをを他のビットベクタ型の変数へコピー。 機能 void isz_bitvect2bitvect( void isz_bitvect2bitvect(void isz_bitvect2bitvect(
void isz_bitvect2bitvect(bitvectorbitvectorbitvector *val1,bitvector*val1,*val1,bitvector*val1,bitvectorbitvector *val2) bitvector*val2) *val2) *val2) 書式 bitvector *result : 計算結果を格納するビットベクタ型変数(配列名)。 bitvector *val1 : 計算式左辺のビットベクタ型変数(配列名)。 bitvector *val2 : 計算式右辺のビットベクタ型変数(配列名)。 引数 アルゴリズム記述、ビヘイビア記述 レベル なし。 戻り値 ビットベクタ型の加算(2項演算)。 機能 void voidvoid
void isz_bitvect_addisz_bitvect_add((((bitvectorisz_bitvect_addisz_bitvect_add bitvectorbitvectorbitvector *result,*result,*result,*result,bitvectorbitvector *val1,bitvectorbitvector*val1,*val1,*val1, bitvectorbitvectorbitvectorbitvector *val2) *val2) *val2) *val2) 書式
C
C
C
bitvector *result : 計算結果を格納するビットベクタ型変数(配列名)。 bitvector *val1 : 計算式左辺のビットベクタ型変数(配列名)。 bitvector *val2 : 計算式右辺のビットベクタ型変数(配列名)。 引数 アルゴリズム記述、ビヘイビア記述 レベル なし。 戻り値 ビットベクタ型の減算(2項演算)。 機能 void void void
void isz_bitvect_subisz_bitvect_subisz_bitvect_sub((((bitvectorisz_bitvect_subbitvectorbitvector *result,bitvector*result,*result,*result,bitvectorbitvector *val1,bitvectorbitvector*val1,*val1, bitvector*val1,bitvectorbitvectorbitvector *val2) *val2) *val2) *val2) 書式 bitvector *result : 計算結果を格納するビットベクタ型変数(配列名)。 bitvector *val1 : 計算式左辺のビットベクタ型変数(配列名)。 bitvector *val2 : 計算式右辺のビットベクタ型変数(配列名)。 引数 アルゴリズム記述、ビヘイビア記述 レベル なし。 戻り値 ビットベクタ型の乗算(2項演算)。 機能 void void void
void isz_bitvect_mulisz_bitvect_mulisz_bitvect_mul((((bitvectorisz_bitvect_mul bitvectorbitvector *result,bitvector*result,*result,bitvector*result,bitvector *val1,bitvectorbitvector*val1,*val1,*val1, bitvectorbitvectorbitvectorbitvector *val2) *val2) *val2) *val2) 書式
C
C
C
bitvector *result : 計算結果を格納するビットベクタ型変数(配列名)。 bitvector *val1 : 計算式左辺のビットベクタ型変数(配列名)。 bitvector *val2 : 計算式右辺のビットベクタ型変数(配列名)。 引数 アルゴリズム記述、ビヘイビア記述 レベル なし。 戻り値 ビットベクタ型の除算(2項演算)。 機能 void void void
void isz_bitvect_divisz_bitvect_divisz_bitvect_div((((bitvectorisz_bitvect_div bitvectorbitvectorbitvector *result,*result,*result,*result,bitvectorbitvector *val1,bitvectorbitvector*val1,*val1, bitvector*val1,bitvectorbitvector *val2) bitvector*val2) *val2) *val2) 書式 bitvector *val1 : 左辺のビットベクタ型変数(配列名)。 bitvector *val2 : 右辺のビットベクタ型変数(配列名)。 引数 アルゴリズム記述、ビヘイビア記述 レベル
int result : 1:TRUE 0:FALSE 戻り値
関係演算 va1 == val2 機能
int isz_bitvectEQU int isz_bitvectEQUint isz_bitvectEQU
int isz_bitvectEQU((((bitvectorbitvectorbitvectorbitvector *val1,*val1,*val1, bitvector*val1,bitvectorbitvector *val2) bitvector*val2) *val2) *val2) 書式
C
C
C
bitvector *val1 : 左辺のビットベクタ型変数(配列名)。 bitvector *val2 : 右辺のビットベクタ型変数(配列名)。 引数
アルゴリズム記述、ビヘイビア記述 レベル
int result : 1:TRUE 0:FALSE 戻り値
関係演算 va1 != val2 機能
int isz_bitvectNEQ int isz_bitvectNEQint isz_bitvectNEQ
int isz_bitvectNEQ((((bitvectorbitvectorbitvectorbitvector *val1,*val1,*val1, bitvector*val1,bitvectorbitvector *val2) bitvector*val2) *val2) *val2) 書式 bitvector *val1 : 左辺のビットベクタ型変数(配列名)。 bitvector *val2 : 右辺のビットベクタ型変数(配列名)。 引数 アルゴリズム記述、ビヘイビア記述 レベル
int result : 1:TRUE 0:FALSE 戻り値
関係演算 va1< val2 機能
int isz_bitvectGT int isz_bitvectGTint isz_bitvectGT
int isz_bitvectGT((((bitvectorbitvectorbitvectorbitvector *val1,*val1,*val1,*val1, bitvectorbitvectorbitvectorbitvector *val2) *val2) *val2) *val2) 書式
C
C
C
bitvector *val1 : 左辺のビットベクタ型変数(配列名)。 bitvector *val2 : 右辺のビットベクタ型変数(配列名)。 引数
アルゴリズム記述、ビヘイビア記述 レベル
int result : 1:TRUE 0:FALSE 戻り値
関係演算 va1 > val2 機能
int isz_bitvectLT int isz_bitvectLTint isz_bitvectLT
int isz_bitvectLT((((bitvectorbitvectorbitvectorbitvector *val1,*val1,*val1,*val1, bitvectorbitvectorbitvectorbitvector *val2) *val2) *val2) *val2) 書式 bitvector *val1 : 左辺のビットベクタ型変数(配列名)。 bitvector *val2 : 右辺のビットベクタ型変数(配列名)。 引数 アルゴリズム記述、ビヘイビア記述 レベル
int result : 1:TRUE 0:FALSE 戻り値
関係演算 va1 <= val2 機能
int isz_bitvectGE int isz_bitvectGEint isz_bitvectGE
int isz_bitvectGE((((bitvectorbitvectorbitvectorbitvector *val1,*val1,*val1,*val1, bitvectorbitvectorbitvectorbitvector *val2) *val2) *val2) *val2) 書式
C
C
C
bitvector *val1 : 左辺のビットベクタ型変数(配列名)。 bitvector *val2 : 右辺のビットベクタ型変数(配列名)。 引数
アルゴリズム記述、ビヘイビア記述 レベル
int result : 1:TRUE 0:FALSE 戻り値
関係演算 va1 >= val2 機能
int isz_bitvectLE int isz_bitvectLEint isz_bitvectLE
int isz_bitvectLE((((bitvectorbitvectorbitvectorbitvector *val1,*val1,*val1,*val1, bitvectorbitvectorbitvectorbitvector *val2) *val2) *val2) *val2) 書式 bitvector *val1 : 左辺のビットベクタ型変数(配列名)。 bitvector *val2 : 右辺のビットベクタ型変数(配列名)。 引数 アルゴリズム記述、ビヘイビア記述 レベル
int result : 1:TRUE 0:FALSE 戻り値
論理演算 val1 && val2 機能
int isz_bitvectLAND int isz_bitvectLANDint isz_bitvectLAND
int isz_bitvectLAND((((bitvectorbitvectorbitvector *val1,bitvector*val1,*val1, bitvector*val1,bitvectorbitvector *val2) bitvector*val2) *val2) *val2) 書式
C
C
C
bitvector *val1 : 左辺のビットベクタ型変数(配列名)。 bitvector *val2 : 右辺のビットベクタ型変数(配列名)。 引数
アルゴリズム記述、ビヘイビア記述 レベル
int result : 1:TRUE 0:FALSE 戻り値
論理演算 val1 || val2 機能
int isz_bitvectLOR int isz_bitvectLORint isz_bitvectLOR
int isz_bitvectLOR((((bitvectorbitvectorbitvectorbitvector *val1,*val1,*val1,*val1, bitvectorbitvectorbitvector *val2) bitvector*val2) *val2) *val2) 書式 bitvector *result : 結果が格納されるビットベクタ型変数(配列名) bitvector *val : ビットベクタ型変数(配列名)。 引数 アルゴリズム記述、ビヘイビア記述 レベル なし。 戻り値 ビット演算 result = ! val1 機能 void voidvoid
void isz_bitvectNOTisz_bitvectNOTisz_bitvectNOT((((bitvectorisz_bitvectNOT bitvectorbitvectorbitvector *result,*result, bitvector*result,*result,bitvectorbitvectorbitvector ****valvalval) val) ) ) 書式
C
C
C
bitvector *result : 結果が格納されるビットベクタ型変数(配列名) bitvector *val1 : 左辺のビットベクタ型変数(配列名)。 bitvector *val2 : 右辺のビットベクタ型変数(配列名)。 引数 アルゴリズム記述、ビヘイビア記述 レベル なし。 戻り値
ビット演算 result = val1 & val2 機能
void voidvoid
void isz_bitvectANDisz_bitvectAND((((bitvectorisz_bitvectANDisz_bitvectAND bitvectorbitvector *result,bitvector*result,*result, bitvector*result,bitvector *val1,bitvectorbitvector*val1,*val1,*val1, bitvectorbitvectorbitvector *val2) bitvector *val2) *val2) *val2) 書式 bitvector *result : 結果が格納されるビットベクタ型変数(配列名) bitvector *val1 : 左辺のビットベクタ型変数(配列名)。 bitvector *val2 : 右辺のビットベクタ型変数(配列名)。 引数 アルゴリズム記述、ビヘイビア記述 レベル なし。 戻り値
ビット演算 result = val1 | val2 機能
void void void
void isz_bitvectORisz_bitvectOR((((bitvectorisz_bitvectORisz_bitvectOR bitvectorbitvectorbitvector *result,*result,*result, bitvector*result,bitvector *val1,bitvectorbitvector*val1,*val1, bitvector*val1,bitvectorbitvector *val2) bitvector*val2) *val2) *val2) 書式
C
C
C
bitvector *result : 結果が格納されるビットベクタ型変数(配列名) bitvector *val1 : 左辺のビットベクタ型変数(配列名)。 bitvector *val2 : 右辺のビットベクタ型変数(配列名)。 引数 アルゴリズム記述、ビヘイビア記述 レベル なし。 戻り値
ビット演算 result = val1 ^ val2 機能
void voidvoid
void isz_bitvectXORisz_bitvectXOR((((bitvectorisz_bitvectXORisz_bitvectXOR bitvectorbitvectorbitvector *result,*result,*result, bitvector*result,bitvector *val1,bitvectorbitvector*val1,*val1, bitvector*val1,bitvectorbitvector *val2) bitvector*val2) *val2) *val2) 書式 bitvector *result : 結果が格納されるビットベクタ型変数(配列名) bitvector *val : ビットベクタ型変数(配列名)。 int num : シフト数 引数 アルゴリズム記述、ビヘイビア記述 レベル なし。 戻り値
シフト演算 result = val1 << num 機能
void voidvoid
void isz_bitvectSFLisz_bitvectSFL((((bitvectorisz_bitvectSFLisz_bitvectSFLbitvectorbitvector *result,bitvector*result,*result,*result, bitvectorbitvector ****valbitvectorbitvector valvalval,,,, intintint num) intnum) num) num) 書式
C
C
C
bitvector *result : 結果が格納されるビットベクタ型変数(配列名) bitvector *val : ビットベクタ型変数(配列名)。 int num : シフト数 引数 アルゴリズム記述、ビヘイビア記述 レベル なし。 戻り値
シフト演算 result = val1 >> num 機能
void void void
void isz_bitvectSFRisz_bitvectSFR((((bitvectorisz_bitvectSFRisz_bitvectSFRbitvectorbitvector *result,bitvector*result,*result,*result, bitvectorbitvector ****valbitvectorbitvector valvalval,,,, intintint num) intnum) num) num) 書式 信号のモニタ 機能 void void void
void isz_monitorisz_monitorisz_monitor(char*isz_monitor(char*(char* sig(char*sigsigsig); ); ); ); 書式 信号値の表示 機能 void void void
void isz_displayisz_displayisz_display((((intisz_display intint time, char*inttime, char*time, char*time, char* sigsigsigsig); ); ); ); 書式 ダンプファイルの定義 機能 void void void
void isz_dumpfileisz_dumpfileisz_dumpfile(char*isz_dumpfile(char*(char* fileNm(char*fileNmfileNm); fileNm); ); ); 書式
C
C
C
変数のダンプ定義 機能
void void void
void isz_dumpvarsisz_dumpvarsisz_dumpvars(char*isz_dumpvars(char*(char*(char* sigsigsigsig); ); ); ); 書式 全ての変数のダンプ 機能 void void void
void isz_dumpallvarsisz_dumpallvarsisz_dumpallvars(char*isz_dumpallvars(char*(char* sig(char*sigsig); sig); ); ); 書式
ビットの操作 機能
< <<
<連接の値連接の値連接の値>=連接の値>=>=>=isz_concate2(char* <isz_concate2(char* <isz_concate2(char* <isz_concate2(char* <変数名変数名|変数名変数名|||定数定数定数定数>,>,>,>, int intint int <<<<ビット幅ビット幅ビット幅ビット幅>,>,>,>, char* < char* < char* < char* <変数名変数名変数名変数名||||定数定数定数定数>,>,>,>, int intint int <<<<ビット幅ビット幅ビット幅ビット幅>); // >); // >); // >); // 連接(2データ)連接(2データ)連接(2データ)連接(2データ) < << <データデータデータデータ> ::=<> ::=<> ::=<> ::=<変数名変数名変数名変数名||定数||定数定数定数>,<>,<>,<>,<ビット幅ビット幅ビット幅>ビット幅>>> isz_concate3(< isz_concate3(< isz_concate3(< isz_concate3(<データデータデータ>,<データ>,<>,<>,<データデータ>,<データデータ>,<>,<データ>,<データデータデータ>);>);>);>); isz_concate4(< isz_concate4(< isz_concate4(< isz_concate4(<データデータデータ>,<データ>,<>,<>,<データデータデータ>,<データ>,<データ>,<>,<データデータデータ>,<>,<>,<データ>,<データデータデータ>);>);>);>); isz_concate5(< isz_concate5(< isz_concate5(< isz_concate5(<データデータデータ>,<データ>,<>,<>,<データデータデータ>,<データ>,<>,<データ>,<データ>,<データデータ>,<>,<データ>,<データデータデータ>,<>,<データ>,<>,<データデータデータ>);>);>);>); isz_concate6(< isz_concate6(< isz_concate6(< isz_concate6(<データデータデータ>,<データ>,<>,<データ>,<データデータ>,<データ>,<>,<データ>,<データデータデータ>,<>,<データ>,<>,<データデータデータ>,<>,<>,<データ>,<データ>,<データデータ>,<>,<>,<データデータデータデータ>);>);>);>); 書式
C
C
C
C言語用関数(予定)
言語用関数(予定)
言語用関数(予定)
言語用関数(予定)
unsigned int var : 対象となる変数 int msb : 取出す範囲のmsb int lsb : 取出す範囲のlsb 引数 アルゴリズム記述、ビヘイビア記述 レベル 取出されたビット(右詰めに格納) 戻り値 ビットの指定範囲取出し var[msb:lsb]; 機能 unsigned unsigned unsigned
unsigned int isz_bitsliceint isz_bitsliceint isz_bitsliceint isz_bitslice(unsigned (unsigned (unsigned (unsigned intintintint varvarvar, , , , intvar int msbintint msbmsbmsb, , , , intintint lsbintlsblsblsb) ;) ;) ;) ; 書式 bitvector *var1 : 格納先のビットベクタ型変数 bitvector *var2 : ビットを取出すビットベクタ型変数 int var2_msb : 取出す範囲のmsb int var2_lsb : 取出す範囲のlsb 引数 アルゴリズム記述、ビヘイビア記述 レベル 戻り値 ビットベクタ型のビットの指定範囲取出し var1 = var2[var2_msb:var2_lsb]; 機能 void void void
void isz_bitvect_vitsliceisz_bitvect_vitslice((((bitvectorisz_bitvect_vitsliceisz_bitvect_vitslice bitvectorbitvector* var1, bitvector* var1, * var1, * var1, bitvectorbitvectorbitvectorbitvector* var2, * var2, int * var2, * var2, int int var2_msb, int var2_msb, var2_msb, int var2_msb, int int int var2_lsb); var2_lsb); var2_lsb); var2_lsb); 書式
C
C
C
unsigned int *var1 : コピー先の変数 int var1_msb : コピー先範囲のmsb int var1_lsb : コピー先範囲のlsb unsigned int var2 : ビットを取出す変数 int var2_msb : 取出す範囲のmsb int var2_lsb : 取出す範囲のlsb 引数 アルゴリズム記述、ビヘイビア記述 レベル なし。 戻り値 ビットの指定範囲取出しと指定範囲へのコピー var1[var1_msb:var1_lsb] = var2[var2_msb:var2_lsb]; 機能 void void void
void isz_bitmoveisz_bitmoveisz_bitmove(unsigned isz_bitmove(unsigned (unsigned (unsigned intintintint *var1, *var1, *var1, int*var1, int var1_msb, intintvar1_msb, var1_msb, intvar1_msb, intint var1_lsb, unsigned intvar1_lsb, unsigned intvar1_lsb, unsigned var1_lsb, unsigned intintint var2, var2, var2, var2, int
int int
int var2_msb, var2_msb, var2_msb, intvar2_msb, intint var2_lsb) ;intvar2_lsb) ;var2_lsb) ;var2_lsb) ; 書式 なし。 引数 本関数内で並列動作する関数を登録する。登録できる関数は512個まである。 この登録された関数はモジュールとして合成される。 機能 void void void
void isz_schedulerisz_schedulerisz_scheduler(); isz_scheduler(); (); (); 書式