FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

FPGAのお勉強(01)

正月休みを利用して、少し、FPGAのお勉強をしてました。
自分用のメモ書き記事です。
しばらくは、読んで頂いてもあまり面白くない話が続きますが、ご容赦を。。。

今日は、SDカードの起動プログラムを作ってみました。



デジタル系のオーディオ機器を自作するのに、
今や、FPGAの活用が当たり前になってきましたねえ。
FPGAを使えば、マイコンでは実現困難な、リアルタイムDSP処理を行うことができます。
FPGAを利用した基板としては、有名なものだと、Electrartさんやchiakiさんの一連の作品がありますよね。

カニも、もしFPGAが使えるんだったら、作りたいものがい~っぱいあるんです!
というわけで、少しずつ、勉強をしてきましょうかね。

カニは「習うより慣れろ!」派なので、
易しめのプログラムを作りながら徐々にレベルアップして、目的のものを完成させようと思います。

勉強のベースにするのは、DE0という、FPGA学習ボード。
AlteraのCyclone3を核として、周辺回路にコンフィグレーションROM、外付けRAM、各種スイッチ、通信端子、SDカード等が搭載されています。

Cyclone3はLE数が約15,000個もあり、オーディオDSP用途にはオーバースペックな位の高性能FPGAですね。

DE0は、外付けRAMとSDカードスロットが付いている点が、カニの将来の使用目的に合致していてGOODです。
学習ボードと侮るなかれ。これ一つで、作りたいものの動作確認ができちゃますね!
また、コンフィグレーションROMをソケット交換式に改造してあげれば、ROMの量産もできそうで、キット頒布することになった場合に便利です。

参考書として、↓の3冊を買いました。
http://gihyo.jp/book/2011/978-4-7741-4839-7
http://www.cqpub.co.jp/hanbai/books/33/33981.htm
http://www.cqpub.co.jp/hanbai/books/37/37561.htm
で、試しに、参考書にあるサンプルプログラムをいくつか書いてみました。
FPGAのプログラミング言語であるVerilog HDLですが・・・う~ん。。。
カニがかじってるC言語とは、タイムシーケンスの概念が違うみたいで、やっぱり、慣れるのに時間がかかりそう。。。
文法も少し、違うしね!

まあ、とりあえずこれで、準備は万端!


最初の大きな目標としては
「ポータブルSDカードプレーヤー」
を、作ってみることにします!!
ホントに実現できるかどうか、分からないですけどね・・・^^;
カニなりに凝ったものにしたいんですけど、計画倒れだと恥ずかしいので、細かな仕様は、伏せておきます^^;


で、今回は、SDカードの通信と初期設定のプログラムを書いてみました。

まずはSDカードの動作概要について、調べてみました。

・通信方式はSDモードとSPIモードがあり、
 情報公開レベルやライセンスの関係から、SPIモードしか使用できない。
  ⇒SPIモードで制御するため、クロック(CLK)/CS(DAT3)/TX(CMD)/RX(DAT0)の4信号の動作を理解する必要がある
・初期設定後、通常はmax20~25MHzのクロックで512byteずつデータを読み出す。
  ⇒例えばFPGAのクロックを22.5792MHzで設定すれば、24bit/176.4kHzとかのハイレゾ音源も再生できる通信速度が可能。
  ⇒DE0のクロックは50MHzなので、とりあえず分周して25MHzで駆動してみる(22.5792MHzとの周波数差は、ひとまず気にしない)
・2GバイトまでのSDカードはFAT16フォーマット、それ以上の容量のSDHCカードはFAT32フォーマット
  ⇒違いがよく分からないが、ルートディレクトリ位置やクラスタ領域に違いがある???
   FAT16にも対応したいが、とりあえずFAT32仕様で設計する。
・SDHCカードとSDカードで、初期設定シーケンスが異なる。
  ⇒情報を探すのにすごく苦労した!SDカードならこちらとか、SDHCカードならこちらとかが参考になる。
・初期設定シーケンスは、基本的にコマンド送信⇒レスポンス受信、の繰り返しで、レスポンス内容により条件分岐を作る。
 例えば「CMD58送信⇒R1の0x01受信の場合、次に進む。それ以外はCMD58送信繰り返し」など。。。


まあ、経験者には簡単なプログラムなんでしょうが。。。
初期設定シーケンスは、初心者にとってはかなり長大ですねえ。
ステートマシンを、いかに可読性やメンテナンス性を高く作れるかがカギな気がします。
カニは、Mode_Sysという変数をマスターとしてこんな感じで状態遷移を設計してみました。
FPGA_003.gif


で、上記に従って、プログラムを書き書き。
SDカードの初期設定完了まで、完成してデバッグまで終わりました。
使用LE数は約500個(全体の約3%)
FPGA_001.gif
FPGA_002.jpg


初期設定という、たった一つの機能だけで一週間かかった~。。。
先が思いやられますな。。。
次回は、LCDの接続とか、SDカードのディレクトリ検索とかをプログラミングする予定です。

スポンサーサイト

USB経由で

カニさん

 すごい。新しい言語を使えると世界が変わるでしょうね。頑張ってください。
 カニさんのことですから、スタンドアローンのSDトランスポートを土台に、USBからデータを持ってくる、究極のネットワークオーディオ用プレーヤーを目指しているのかな?

No title

カニさん

新年おめでとうございます。

ES9018電圧出力受けではお世話になりました。

こちらは昨年末からLINUXカーネルビルドに嵌っています。

FPGAに手を染められたようですね。
これは全てが自分の手の中で動くので楽しいですね。

タイムクリティカルな処理をいかに効率良く実現するかなど思いっきり遊べます。

Re: USB経由で

simonさん

こんばんは。
お返事遅れてすみませんですm(_ _)m

いきなりSDカードプレーヤーを選んだのは、失敗だったかも。。。
本命で考えているもののほうが、はるかに簡単にプログラミングできそうなことに気が付きました^^;
まあ、せっかくなのでコツコツ勉強していきます!

>  カニさんのことですから、スタンドアローンのSDトランスポートを土台に、USBからデータを持ってくる、究極のネットワークオーディオ用プレーヤーを目指しているのかな?

おっと、これは、何かスイッチを押されているのかな?^^
しかし私はパソコンがからっきしダメなので、そのようなものは無理ですねえ。
でも、私なりに面白いものを作りたいですね。

Re: No title

Phoeniciaさん

こんばんは。
ウォッチして頂いてるんですね。光栄です。
LINUXですか~。私はパソコンがからっきしなので、想像の及ばない世界ですが。。。
やっぱりできる人はできるものなのですねえ。


> タイムクリティカルな処理をいかに効率良く実現するかなど思いっきり遊べます。
今のところFPGAに遊ばれてる感が強いですが。。。
オーディオ用のDSP処理なんか、FPGAでないとできませんもんね。
これから頑張ってみます~。


Secret

プロフィール

カニ

Author:カニ
DACやアンプの自作がメインの、オーディオブログです。
自作基板の頒布も行なっています。カテゴリ「頒布」をご覧下さい。

ニアフィールドリスニングや、ポータブルオーディオにも手を染めたいんですが、いつになることやら。。。

繊細で柔らかい音
実在感のある音
を目指して、
ゆっくり、ゆっくり、潜航中。

カテゴリ

月別アーカイブ

最新コメント

検索フォーム

最新記事

リンク

カウンター

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。