差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
testbench:introduction_to_verilog_hdl:vme_encoder [2015/05/21 19:30]
kyotoatlas [PT6 の VME 操作]
testbench:introduction_to_verilog_hdl:vme_encoder [2019/02/15 09:07] (現在)
行 99: 行 99:
 こうすることで、いちいち bitfile を作り直す必要がなくなり、VME から ( 実際に操作するのは PC ) Prescale factor を変更することが可能です。 こうすることで、いちいち bitfile を作り直す必要がなくなり、VME から ( 実際に操作するのは PC ) Prescale factor を変更することが可能です。
 ここでは VME から操作するのは 1 つの値だけですが、通常複数(数十、数百)の値を設定出来るようなデザインが普通です。 ここでは VME から操作するのは 1 つの値だけですが、通常複数(数十、数百)の値を設定出来るようなデザインが普通です。
- 
  
  
行 106: 行 105:
 CPLD は不揮発性(電源を切った後も書き込んだファームウェアが残る)ので、通信制御などを行うためにボードに載せています。 CPLD は不揮発性(電源を切った後も書き込んだファームウェアが残る)ので、通信制御などを行うためにボードに載せています。
 </note> </note>
 +
 +
 +
 +必要なコードはここにあります。[[https://svnweb.cern.ch/cern/wsvn/atlas-tkunigo/tkunigo/software/testbench/Bit3/pt6/FPGA/PT6_VMEEncoder/?|svn url]] もしくは svn からとってくるには
 +   svn co svn+ssh://$USERNAME@svn.cern.ch/reps/atlas-tkunigo/tkunigo/software/testbench/Bit3/pt6/FPGA/PT6_VMEEncoder
 +です。
 +
 +コードの基本的な見方は最初に詳しく説明したので、今は省略します。(あまりにも分からないようなら、後に追記します。)
 +VMEEncoder モジュールでは、上で示したタイミングチャートに合わせて、VME のアドレスを見て、 Prescale factor レジスターの値の読み書きを行っています。
 +
 +出来上がる bitfile を FPGA に書き込み、その後実際に fact を読み書きしてみましょう。
 +どこのアドレスに書き込めばいいのかを知るには PT6 のアドレス空間を知る必要があります。
 +下にアドレス空間の表を書いておきます。
 +^ アドレス     31 - 20             19,18  ^  17 - 11    10  ^  9 - 2    1, 0         ^
 +| FPGA        ボードアドレス       00    not used  |    |  offset  |  Byte access  |
 +| CPLD        ボードアドレス       00    not used  |    |  offset  |  Byte access  |
 +  * 実際に FPGA にやってくる ( VMEEncoder でしている )アドレスは offset 部分です。
 +  * ボードアドレスは、同じクレート内でアドレスが被らないようにボード上の DIP SW で指定しています。
 +ボードアドレスを 0x0f1 だとした時、VMEEncoder モジュール内で Prescale factor に対して定めているアドレス 0xf0 にアクセスするためには
 + 0x0f1007c0 というアドレスにアクセスすればよいことが分かります。
 +本当かどうか vmeget で確かめてみましょう。
 +正しく読めれば、初期値の 10 ( = 0xa ) が返ってきます。
 +その後、好きな値に書き換えて遊んでみてください。
 +
 +ここまで出来れば、結構色んなことが出来るようになります。
 +値を自由自在に書き換えられれば、色んなボードの設定を変更することが可能です。
 +
 +
 +<note tip>
 +上の例で何となく分かると思いますが、ボードを操作する上でアドレスの定義が非常に重要です。
 +ボードをデザインすることがあれば、どこにどれだけのアドレス空間を割り振るのか、また同じクレートに存在するボードとアドレスを衝突させないようにするにはどうしたらいいのか、というのに頭をひねる必要があります。
 +</note>
 +
testbench/introduction_to_verilog_hdl/vme_encoder.1432236608.txt.gz · 最終更新: 2015/05/21 19:30 by kyotoatlas
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0