2012年4月7日土曜日

QuartusII システムコンソール

クロックボードのClock Synthesizer TI CDCE913のI2Cの制御ですが、Arduinoを考えていましたが、今後のこともあるのでFPGAにマスタ機能を実装して制御することに方針変更。

I2CマスタのRTLは、OpenCores.orgにあるWISHBONEバス用I2CマスタverilogコードをベースにAvalonMM スレーブインタフェースに変更、systemverilogコード化等を施しました。

さて、QuartusIIの新しい機能にシステムコンソールという機能があり、PCからFPGAのメモリ、レジスタのリード.ライトアクセスや、ボタン、ダイヤル、グラフなどのGUI 機能にさまざまなシステム・レベル・トランザクションを追加し、データ処理をモニタリングするカスタム検証ツールやデモ・ツールを比較的簡単に作ることができます。

この機能を使って、PCからI2Cのアクセス制御や、ES9018のレジスタをGUI制御することに挑戦してみたいと思います。

先ずはQurtusIIをV11.1sp2にバージョンアップ。ディスク容量(64G SSD)が限界だったMusicPCにSSD128Gbyte(128GB Crucial m4 2.5-inch SATA 6GB/s)に新調し、MusicPCの方にインストールしてみました。
しかし何故かUSB Blaster(実際にはDE0-nano)を認識してくれません。Windows7 Ultimate 64bitマシンなのですが、原因は今のところ不明。仕方が無いので、メインマシンの方にもインストールすることに...


システムコンソールとI2Cマスタの機能確認用に、先ずはI2CコントローラとJtag to Avalon Master Bridge のみのQsysモジュールを作成。今までSOPCビルダーを使っておりQsysを使うのも初めてになります。


 I2CコントローラとJtag to Avalon Master Bridge のみのQsysモジュール


以下、簡単にSystemControlによるレジスタのリード/ライトを行う手順をリストします。



1. 上記のQsysとI2CマスタモジュールをDE0-nanoに実装してコンパイルし、DE0-nanoにコンフィグ

2. QsysのウインドウからTools-System ConsoleでSystem Consoleを起動。

3. System Console Files-Load Design....で開くウインドで、qpfファイル(今回の場合DE0-Nano.qpf)を選択し"開く"をクリック



  システムコンソール

4. JTAG Avalon Master Bridge の提供するJtag debug serviceの場所の指定 

 % set jtag_debug [ lindex [ get_service_paths jtag_debug ] 0 ]
 /devices/EP3C25|EP4CE22@1#USB-0/(link)/JTAG/(110:132 v1 #0)/phy_0

 


5. リセット解除の確認
 % jtag_debug_sample_reset $jtag_debug  
 1

/* jtag_debug_sample_reset <service-path> 
     Returns the value of the reset_n signal of the Avalon-ST 
JTAG Interface core. If reset_n is low (asserted), the value 
is 0 and if reset_n is high (deasserted), the value is 1.  */


6.クロックがトグルしているかの確認 (何度か繰り返し”1""0"両方が表示されるとトグルしている)
 % jtag_debug_sample_clock $jtag_debug
 1    

/*jtag_debug_sample_clock <service-path>
Returns the value of the clock signal of the system clock that drives the module's system interface. The clock value is sampled asynchronously; consequently, you may need to sample the clock several times to guarantee that it is toggling. */


7.もうひとつのクロック確認手段(リセット中にクロックが数回トグルすると"1"が表示される)
 % jtag_debug_sense_clock $jtag_debug
 1    

/*jtag_debug_sense_clock  <service-path>
Returns the result of a sticky bit that monitors for system clock activity. If the clock has toggled since the last execution of this command, the bit is 1. Returns true if the bit has ever toggled and otherwise returns false. The sticky bit is reset to 0 on read. */

8.Jtag Avalon master のパスを見つける
 % get_service_paths master
 /devices/EP3C25|EP4CE22@1#USB-0/(link)/JTAG/(110:132 v1 #0)/phy_0/master}   

/* get_service_paths <service_type_name>

Returns a list of paths to nodes that implement the requested service type.
Note: When this command returns an item in the list that has only one element and the element has no spaces in it, you should not pass the element to other commands.
As an example, do not run this command: 
set master [ get_service_paths master ] master_read_memory $master 0x0200 16
Instead, please run this command:
set masters [ get_service_pathsmaster ]
set master [ lindex $master 0 ] master_read_memory $master 0x0200 16 */

9.マスターを指定
 % set master [ lindex [get_service_paths master] 0 ]
 /devices/EP3C25|EP4CE22@1#USB-0/(link)/JTAG/(110:132 v1 #0)/phy_0/master 

10.ライトアクセス(32bit)
 % master_write_32 $master 0x000 0x1234


/* master_write_32 <service-path> <address><list_of_32_bit_words>
Writes the list of 32-bit values, starting at the specified base address, using 32-bit accesses.*/


11.リードアクセス
 % master_read_32 $master 0x000 4
 0x00001234 0x00000000 0x00000000 0x00000000  


/* master_read_32 <service-path> <base_address> <size_in_multiples_of_32_bits>
Returns a list of <size> 32-bit bytes. Read from memory starts at the specified base address, using 32-bit accesses.*/

0 件のコメント:

コメントを投稿