TRX-305 DSP部近況報告

間が空いてしまいました。いいわけでしかありませんが、仕事のトラブルがおきると長距離通勤者はもうダメですね。仕事と通勤でごっそり体力を持って行かれます。若い頃はそれでも何とかなったものですが。というか、トラブルが無くても平日は家に帰ったらもう、ぐったりしています。

さて近況報告。

ブート問題再び

「お前、ブート問題は自分の問題じゃ無いって書いたろ」

はい、書きました。

あの問題は別プラットホームでは再現しないことを確認し、システム設計者にレポートを提出しました。で、5月に対策版のシステム・バイナリ(FPGAイメージを含むSHのソースコード)をもらって解決を確認しました。

が、違う問題が発生しています。

前回の問題はまったく同じバイナリ(LEDが点滅し、シリアルからデータを垂れ流すだけの小さなプログラム)が

  • TRX-305ではブートしない
  • 別プラットホーム(mbed+Kobanzame)ではブートする

というものでした。今回、修正版のSHコードをいただき、上記の小さな検証用Blackfinプログラムがブートすることを確認しています。ところが、TOPPERS/JSPがブートをしないのです。

  • TRX-305でTOPPERS/JSPがブートしない
  • 別プラットホーム(mbed+Kobanzame)でもブートしない

なんてこった。明らかに今回の問題はこちら側にあります。

TOPPERS/JSPはかなり古くからメンテしているプログラムです。Blackfinブートローダーに関しては、パラレル・フラッシュ、シリアル・フラッシュ(SPIマスター)、UARTスレーブのそれぞれのブートで実績があります。

今回SPIスレーブ・ブートで問題が生じている原因がどこにあるかは不明ですが、これまでの調査ではそもそもメモリーへの転送が完了していない節があります。ツールの不備まで視野に入れて腰をすえて対策するしかありません。

送受信非同期問題は解決

ブート問題の他は、じりじりと前進しています。

かなり長い間頭を悩ました「送受信の非同期」は解決しました。原因は、結局送信側のスペックを私が読み違えていたことでした。同期信号は「送信のフレーム信号を除いてすべて外部生成」なのですが、これを「すべて外部生成」と勘違いしていたのです。修正後は両者の非同期問題は消えました。なお、この問題はTOPPERS/JSPのデータキューAPIからのエラーですぐに検出できており、RTOSをつかったかいがありました。

10MHzクロックへの対応

上記ブート問題(その1)の対策コードが来た際、DSPの入力クロックに変更がありましたが、ここで躓いてしまいました。デバッグの結果わかったことは、10MHz入力のときにはPLLの初期化が行われていないということです。これは不思議なことです。PLLの初期化コードは、随分前に実装してこれも多くの実績があります。実際、PLLの初期化には問題が無く、今回発覚したのは「そもそも初期化コードを実行しない場合がある」という事でした。

Blackfinはブートの状況により、PLLの初期化の要不要がことなります。一番面倒な場合は、

  • 外部SDRAMを持ち
  • コードがそこに展開される

場合です。普通だろと侮るなかれ、この場合はブートコードがSDRAMにコードを展開する前に、SDRAMとPLLの初期化を行わなければなりません。この初期化を行う部分は、当たり前ですがブートされるコードには存在していません。ブートローダーが認識できる別領域に小さな初期化コードを入れておき、二段ブートを行うことで解決します。

そして、この「小さな初期化コード」は当然ですがGDBからはロードされません。そんなこんなで、「SDRAMで走るアプリケーションのデバッグ用」に、TOPPERS/JSP for BlackfinのPLL初期化コードには「外部でPLL/SDRAMが初期化されたか」検出するコードがあります。これまで問題無く動作していたこの判別コードが今回に限り誤動作したのが問題の根本原因でした。10MHz入力の時には、Blackfinの動作が多少不安定なのかもしれません。ともかく、この問題は解決しており、現在プログラムは10Mhzで動作しています。

RXパラメタAPI実装済み

また、デコーダー・アルゴリズムから各種パラメータを参照するAPIも実装しました。TRX-305はSHで解析したコマンドをFPGA経由でDSPに送ります。これらは復調モードの他、スケルチなどいくつかのパラメータを含みます。これらのコードをFPGAから受け取り、内部に展開してデコーダー・アルゴリズムから参照できるようにしています。

ほとんどのAPIが返す値については、トランジスタ技術誌2014年11月号で紹介された一覧表と対応が取れていますが、一部はっきりとしないものもあります。これらの解析についてはフレームワーク開発の手に余りますので、単に値を渡すだけで、フレームワーク側では何も解釈を入れない設計としています。

浮動小数点ライブラリのリンクも完了しています。このフレームは固定小数点信号処理を想定していますが、浮動小数点演算が全く使えないというのも無粋ですし、なにより実験一つ出来ないのは不便です。これはこれで、門司に書くと簡単ですが、Makefileの書き方にとldコマンドの特性から来るトラブルで半日ほど頭を抱えていました。今は動いています。

微速前進中

そんなこんなで、今は開発中のフレームワーク内部でsin波を生成して外で聞くことが出来る程度に開発が進んでいます。まだ出力されてくる音が変ですが、ともかくプロジェクトは前進しています。

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください