FC2カウンター FPGAの部屋 ハードウェアとファームウェア、バグはどっち?
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

ハードウェアとファームウェア、バグはどっち?

昨日は大きい基板の通信ポートからSDRAMへのDMA機能を使ったファームウェアをデバックしていた。(ハードを作ったのは私で、ファームを作ったのは違う人です。)
この基板のDMA機能は最初の設計段階ではDMAを入れない予定だったので、改修時に無理やりDMAをつけてしまった。既存リソースを活用してDMAエンジンが実装されているため、DMAの起動の仕方と終了判定が今までのDMAと異なっている。2つの条件を同時に満たさないと終了したとは、判定できないハードウェアになっている。

ファームがどうしても動かないということなので、チップスコープをかけてSDRAMに書き込まれるデータを見てみることにした。そうすると最初の7Kbyte位しか見えないものの、そこまではSDRAMに正しいデータが書き込まれている。ハード側のDMAエンジンは、ここまでは正常に動作しているようだ。もっと大きなデータサイズでだめだということなので、そのあとがだめなのかな?とも思ったが、ここまで正常に動いていて、後がまるでだめということは考えにくい。
ファームがおかしい可能性が大きいということで、一緒に見直してみると、DMA終了条件判定のバグ発見。
A条件が0でB条件も0の時に終了なのだが、終了判定ではwhile文で while(A==1 && B==1); でループして判定していたのだった。正しくは while(A==1 || B==1); だった。
これを修正したところ動作した。
ファームの作成者は”もうしわけなかった”といって謝っていたが、バグを修正するのに必要な作業と思っているので、謝る必要はないということを強調した。
誰もバグを出したくて出すわけではないし、私も昨日のファームのバグ以前にハードウェアバグで迷惑をかけている。やはり、ファーム、ハード双方が自分の生成物がバグっている可能性を常に考えてデバックする必要があると思う。(メーカーなど、もっと良い方法で効率的にデバックしているのかもしれないが。。。)
更に、他の人がわかりにくい設計をしないようにする必要があるだろう。判定条件を2つにせずに、ハードウェアで2つを1つにまとめて内部レジスタにマップしたほうが良いし、するべきであると思った。
人に優しい設計は自分に優しい設計でもある。
後で見たときに、自分でマニュアルを見ないと終了条件を忘れてしまっているので、そういうことがなくなるだろう。

ちなみにハードのバグは、SDRAMへバーストする際に列アドレスの境界で、一度プリチャージして、ACTコマンドを入れて再度、行アドレスを入れるのを忘れてしまって、データ転送する番地が間違っていたというバグだった。
  1. 2007年05月11日 05:39 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/483-9db83cc4
この記事にトラックバックする(FC2ブログユーザー)