Special
» 2017年06月01日 10時00分 UPDATE

アナログ回路設計講座(11):Avalonバスでの通信 ―― 簡略型FPGAインタフェース

数種類の組み込みプロセッサを使用する昨今のFPGAデザインでは、Avalon Memory Mapped(MM)バスを介して周辺デバイスと接続する手法が用いられる。しかし、プログラミングに高度な知識、ノウハウが必要になり、特にハードウェアエンジニアには課題だ。そこで今回は、組み込みプロセッサに全く触れずに、PLLの周波数やDACの電圧設定などが行える方法を紹介する。

[PR/EDN Japan]
PR

組み込みプロセッサに全く触れずにシステムを制御

 多くの最新FPGAデザインでは、数種類の組み込みプロセッサを制御に使用します。標準的な解決策では、NIOSなどのソフト組み込みプロセッサを使用します。もう1つの解決策は、ハード・プロセッサを内蔵したSoCデバイスを使用する方法です。プロセッサを内蔵した標準的なAltera FPGAシステムと、Avalon Memory Mapped(MM)バスを介して接続される周辺デバイスとの組み合わせを図1に示します。これらのプロセッサによってエンド・アプリケーションは大幅に簡略化されますが、プログラミングの実力と複雑なツールチェーンに関する知識を必要とし、デバッグの妨げになることがあります。特に、ハードウェア・エンジニアがソフトウェア・エンジニアを悩ませないように、周辺デバイスに対する読み出しと書き込みの簡単な方法を必要とする場合は妨げになりやすいと言えます。

図1:Avalon Memory Mapped(MM)バスを介して接続された標準的なAltera FPGAシステム

 この設計アイデアでは、Altera社のSPIスレーブ-Avalon MM間ブリッジを使用して、Avalonバスで通信する簡単な方法が得られます。この方法を使用する利点は2つあります。元のシステム・デザインが損なわれないことと、ブリッジが組み込みプロセッサと共存できることです。図1に示したシステムでは、SPI-Avalon MMブリッジを使用することにより、エンジニアはLTC6948(分数分周方式PLL)の周波数の直接制御、LTC1668(DAC)の電圧設定、LTC2498からの電圧の読み出し、あるいはLTC2983からの温度の読み出しをまるでプロセッサのように行うことができます。

Linduino マイクロコントローラ

 Altera社はSPI-Avalon MMブリッジのリファレンス・デザインを提供しています。残念ながら、文書はどう見ても内容が乏しく、NIOSプロセッサをSPIマスタとして使用しています。これではNIOSプロセッサとAvalon MMバスとの直接インタフェースが可能なので、SPIブリッジの目的を事実上無視しています。実用的なSPIマスタはリニアテクノロジーのLinduino マイクロコントローラです。これはArduinoクローンであり、リニアテクノロジーのデモボードとインタフェースする付加機能を備えています。付加機能の1つはレベルシフトSPIポートです。このレベルシフト機能が特に役立つのは、わずか1.2Vの低電圧でFPGAのI/Oバンクとインタフェースする場合です。Linduinoファームウェアを使用することで、仮想COMポートを介してコマンドを解釈し、コマンドをSPIトランザクションに変換することができます。

図2:蛍光ペン+コード例+リバース・エンジニアリング=Pythonスクリプト

 Altera社の設計例(図2の左側)をリバース・エンジニアリング後、ブリッジが解釈できるパケットを作成するためにPythonライブラリが開発されました。その後、これらのパケットはLinduinoコマンドに変換されます。これにより、ハードウェア・エンジニアは簡単なPythonスクリプトによって、インタフェース・プロトコルを作り直す必要なく、プロジェクトを完全に制御することができます。LTC1668(DAC)用のデジタル・パターン発生器の周波数を制御するPythonスクリプトの例がLinearLabToolsのPythonフォルダに置かれており、http://www.linear-tech.co.jp/solutions/linearlabtoolsで入手できます。デモボードのセットアップを図3に示します。

図3:動作中のDC2459

 FPGAシステムのブロック図を図4に示します。数値制御発振器(NCO)はシフト・レジスタまたはPIOコアによって制御できることに注意してください。シフト・レジスタはNCOを直接制御できるので、デバッグ用として組み込まれています。GPIO回線のロジック・レベルを“H”に設定するとSPI-Avalon MMブリッジがイネーブル状態になり、その結果として32ビットのPIOポートがAvalon MMバスを介して制御されます。その後、PIO出力がNCO周波数を制御します。

図4:DC2459A FPGAシステムのブロック図

 最も基本的なシステムが動作している場合は、AvalonペリフェラルIPコアを追加してAvalon MMバスに接続することができます。システムを設計するため、Altera社はQsysと呼ばれるシステム統合ツールを提供しています。このツールは、IPを互いに接続するためのGUIを備えています。その後、GUIシステムをHDL verilogに変換するためにQsysが使用されます。図5にGUIを示します。最後に、システムを最上位に追加して実装する必要があります。IPのアドレスは完全に構成可能です。与えられた例の場合には、PIOを基底アドレスの場所である0x0に設定します。

図5:QsysのGUI

 デザインがFPGAに実装されると、LinearLabToolsの所定のPythonライブラリには、デザインとのインタフェースをとる次の2つの関数が組み込まれます。

transaction_write(dc2026, base, write_size, data)

transaction_read(dc2026, base, read_size)

 これらの関数の最初の引数はLinduinoシリアル・ポート・インスタンスです。2番目の引数はAvalonバス上での周辺デバイスのアドレスです。関数はそれぞれアドレスを解釈して数バイトのリストを返します。これらの2つの関数が記述されるのは、IPへの書き込み時と読み出し時に柔軟性を持たせるためです。与えられた例に対してNCOを設定するには、transaction_write関数が常に必要です。式1を使用して調整ワード(tuning word)を求めます。

式1

 50MSPSのサンプル・レートを使用してNCOを1kHzに設定する場合、調整ワードの値は85899です。これは16進法では0x00014F8Bであり、4バイトのリストとして渡されます。したがって、DACを1KHzに設定するPythonコードは次のようになります。

transaction_write(linduino_serial_instance, 0, 0, [0x0,0x01,0x4F, 0x8B])

注:PIOの基底アドレスはロジック設計により0です。

図6:Python Avalonバスの例

 FPGAデザインとPythonスクリプトのインタフェースのデモを行うため、図6に示す簡単なPythonスクリプトが用意されています。これにはNCOを構成する簡単なテキスト・インタフェースが含まれています。重要な注意点として、Avalon SPIブリッジがSPIモード3を使用することが挙げられます。試行錯誤して苦しんだ結果、これが正しいモードであることが分かり、Altera社の例ではNIOSプロセッサのSPIインタフェースを分析することによって検証されました。

ハードウェア・エンジニアはハードウェアに集中を

 まとめると、このプロジェクト例は、組み込みプロセッサに全く触れずにシステムを制御する能力を実証しています。これにより、ハードウェア・エンジニアはソフトウェア・エンジニアを悩ますことなくプロジェクトを進めることができます。この方法の利点はFPGAにさりげなく追加することが可能であり、元のデザインには影響しません。ハードウェア・エンジニアはハードウェアに集中することができます。

 Pythonコードはhttp://www.linear-tech.co.jp/solutions/linearlabtoolsから入手できます。

 LTC1668デモボードのHDLはDC2459設計ファイルに収録されており、http://www.linear-tech.co.jp/demo/DC2459から入手できます。

【著:リニアテクノロジー/Noe Quintero】

Copyright © ITmedia, Inc. All Rights Reserved.


提供:リニアテクノロジー株式会社
アイティメディア営業企画/制作:EDN Japan 編集部/掲載内容有効期限:2017年6月30日




















Dust Networks オススメ記事

ワイヤレス・センサ・ネットワーク技術が半導体工場の生産効率を高めた事例を紹介しよう。これまで人手に頼らざるを得なかった175本にも及ぶ特殊ガスボンベの常時監視を大きな工事を伴わず自動化し、ガスの使用率を高めるなどの成果を上げた事例だ。

RSSフィード

EDN 海外ネットワーク

All material on this site Copyright © ITmedia, Inc. All Rights Reserved.
This site contains articles under license from UBM Electronics, a division of United Business Media LLC.