最近の更新 (Recent Changes)

2017-06-10
2015-11-04
2014-10-14
2014-07-01
2014-06-29

Neueste Datei-Release

TimingChartViewer (r245)2012-02-15 00:10
isesimutil (r230)2012-01-01 23:07
nbox_util (r247)2012-03-11 22:19
noodlybox (0012)2010-01-01 19:46

Wikiガイド(Guide)

サイドバー (Side Bar)

技術解説

C、Tcl、HDLの連携の図

dataflow.png

  • Cプログラムでprintf()をすると、その文字列がTclインタプリタに送り込まれます。
  • Tclインタプリタは、simForceによってHDL中の信号を操作します。
  • Tclインタプリタは、simExamineによってHDL中の信号の状態を調べ、それをputs $oChannelでCプログラムに伝えます。
  • Cプログラムはfgets()でTclインタプリタの出力を受け取ることによって、データバスなどの状態を知ります。

パイプは、fsm.tclのproc configにある、

set iChannel [open "|$channelTarget" r+]
で作成しています。

fsm.tclの記述中にはputs $oChannelしている個所はありませんが、noodlybox.cのreadGeneric()で「puts $oChannel $result」 をTclインタプリタに送り込んでいます。

TclでHDL中の信号状態の変化イベントを捕らえるために、whenやisim condition addを使っています。

また、信号の値の取得にはexamineを使っています。

fsm.tclでのオプションの渡し方・解釈の仕方

  • ModelSimでは、変数argcでdoコマンドに渡されたオプションの個数が分かるので、$数字でそれらにアクセスできます。
  • ISE Simulatorでは、オプションを渡す方法がわからなかったため、環境変数を使って受け渡しをしています。
  • 解釈には、tcllibのcmdlineパッケージを使っています。
  • tcllibはModelSimの中に含まれている(ModelSimのインストールディレクトリの中にtcl/tcllib1.xが存在します)ので、追加のインストール作業なしで使用できます。詳細はStandard Tcl Libraryを参照してください。

make depend

dpisampleでは、C++ソースにとってのヘッダへの依存記述を、make dependで自動作成するようにしました。
makefile中のincludeの前に'-'を挿入しておけば、ファイルが無くてもエラーメッセージが出なくなります。これにより、初回のmakeのときにmakefile.dependが無くても大丈夫になります。
-include makefile.dependがファイルの末尾にあるのは、ファイルの頭にあると'all'ではなくmakefile.dependに登場する最初の.oファイルが最終ターゲットにされてしまうからです。

onbreak

ModelSIMでは、シミュレーションを実行するスクリプトの中にonbreak { quit -force }と書いておくと、Verilog HDLの$stopに到達したときに自動的に終了してくれます。
sim.tclのようにclockコマンドを使用すれば、シミュレーションにかかった時間を表示することもできます。