差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
testbench:introduction_to_verilog_hdl:vme_encoder [2015/05/21 19:29] kyotoatlas |
testbench:introduction_to_verilog_hdl:vme_encoder [2019/02/15 09:07] (現在) |
||
---|---|---|---|
行 95: | 行 95: | ||
追加後のブロック図は次のような感じです。// | 追加後のブロック図は次のような感じです。// | ||
{{testbench: | {{testbench: | ||
+ | |||
VMEEncoder モジュールを追加し、VMEEncoder モジュールと Prescaler ロジックとの間で fact という値を受渡しています。 | VMEEncoder モジュールを追加し、VMEEncoder モジュールと Prescaler ロジックとの間で fact という値を受渡しています。 | ||
こうすることで、いちいち bitfile を作り直す必要がなくなり、VME から ( 実際に操作するのは PC ) Prescale factor を変更することが可能です。 | こうすることで、いちいち bitfile を作り直す必要がなくなり、VME から ( 実際に操作するのは PC ) Prescale factor を変更することが可能です。 | ||
ここでは VME から操作するのは 1 つの値だけですが、通常複数(数十、数百)の値を設定出来るようなデザインが普通です。 | ここでは VME から操作するのは 1 つの値だけですが、通常複数(数十、数百)の値を設定出来るようなデザインが普通です。 | ||
- | |||
行 105: | 行 105: | ||
CPLD は不揮発性(電源を切った後も書き込んだファームウェアが残る)ので、通信制御などを行うためにボードに載せています。 | CPLD は不揮発性(電源を切った後も書き込んだファームウェアが残る)ので、通信制御などを行うためにボードに載せています。 | ||
</ | </ | ||
+ | |||
+ | |||
+ | |||
+ | 必要なコードはここにあります。[[https:// | ||
+ | svn co svn+ssh:// | ||
+ | です。 | ||
+ | |||
+ | コードの基本的な見方は最初に詳しく説明したので、今は省略します。(あまりにも分からないようなら、後に追記します。) | ||
+ | VMEEncoder モジュールでは、上で示したタイミングチャートに合わせて、VME のアドレスを見て、 Prescale factor レジスターの値の読み書きを行っています。 | ||
+ | |||
+ | 出来上がる bitfile を FPGA に書き込み、その後実際に fact を読み書きしてみましょう。 | ||
+ | どこのアドレスに書き込めばいいのかを知るには PT6 のアドレス空間を知る必要があります。 | ||
+ | 下にアドレス空間の表を書いておきます。 | ||
+ | ^ アドレス | ||
+ | | FPGA | ||
+ | | CPLD | ||
+ | * 実際に FPGA にやってくる ( VMEEncoder でしている )アドレスは offset 部分です。 | ||
+ | * ボードアドレスは、同じクレート内でアドレスが被らないようにボード上の DIP SW で指定しています。 | ||
+ | ボードアドレスを 0x0f1 だとした時、VMEEncoder モジュール内で Prescale factor に対して定めているアドレス 0xf0 にアクセスするためには | ||
+ | | ||
+ | 本当かどうか vmeget で確かめてみましょう。 | ||
+ | 正しく読めれば、初期値の 10 ( = 0xa ) が返ってきます。 | ||
+ | その後、好きな値に書き換えて遊んでみてください。 | ||
+ | |||
+ | ここまで出来れば、結構色んなことが出来るようになります。 | ||
+ | 値を自由自在に書き換えられれば、色んなボードの設定を変更することが可能です。 | ||
+ | |||
+ | |||
+ | <note tip> | ||
+ | 上の例で何となく分かると思いますが、ボードを操作する上でアドレスの定義が非常に重要です。 | ||
+ | ボードをデザインすることがあれば、どこにどれだけのアドレス空間を割り振るのか、また同じクレートに存在するボードとアドレスを衝突させないようにするにはどうしたらいいのか、というのに頭をひねる必要があります。 | ||
+ | </ | ||
+ |