2009年5月24日日曜日

FMステレオチューナに選局機能をつける(その4)

5.ピン配置の指定
 DIPスイッチ(オプションスイッチ)が接続されている、FPGAのピン番号をDesign Plannerで指定します。

Design Plannerの起動
 ispLEVERの"Sources in Project"のパネルでデバイス名 "LFXP2-5E-5TN144C" を選択し、右側の "Processs for current source" のパネルで "Design Planner(Pre-Map)" をダブルクリックします。"SpreadSheet View" ウインドウが出てこないときは、"Design Planner Control" で "View - Spreadsheet View" を選ぶと表示されるはずです。























 DIPスイッチはFPGAボードCN1のA15, A16, A17, A18に接続されています。
それぞれに対応するFPGAのピン番号とピン名称は次の通り。
CN1 A15: P46(PB14A_Bk5)
CN1 A16: P48(PB14B_Bk5)
CN1 A17: P52(PB16B_Bk5)
CN1 A18: P54(PB17B_Bk5)

これらの情報をもとにSpreadSheet Viewにピン番号を書き込んでいきます。
OPTSW_IN_3: 46
OPTSW_IN_2: 48
OPTSW_IN_1: 52
OPTSW_IN_0: 54














6.FPGAへの書き込み
 ispLEVERの "Sources in Project" のパネルでデバイス名 "LFXP2-5E-5TN144C" を選択し、右側の "Processs for current source" のパネルで "Generate Data File(JEDEC)" をダブルクリックします。
"Done: completed successfully" と出れば、成功。
いっぱいWarningがあるとも言われますが、Errorじゃないしまあいいか。

 FPGAへの書き込みにはispVMを使います。ispLEVERで"L"マークのアイコンをクリックして起動します。



"L"マークをクリックしてispVMを起動











書き込みケーブルを接続して、
"Scan"をクリックするとデバイスが認識されます









 ケーブルが認識されないなどエラーの場合は意外に的確なメッセージが出ます。
 ドライバーがインストールされていないときは、"ispTools"の"Install/Uninstall LSC USB/Prarell Port Driver"でインストール。そして、ドライバ設定の不備なら、"Options"の"Cable and I/O Port Setup"のお世話になるはずです。




デバイス名が出ている行をクリックして、書き込みたいjedファイルを選んでおきます。











"GO"をクリックすると、書き込みを開始します。
数十秒で書き込み完了です。
















7.最後に ディップスイッチを読み込みNCOの係数を変えるだけのごく簡単な変更でした。でも、XilinxのISEとは勝手が違い意外に面倒でしたのでDDT誌のチュートリアル記事を見ずに使い方がわかるように、を意識して書きました、実は自分の備忘録だったりします。

 今回は、自分で使うため最低限欲しかった簡易選局機能をつけましたが、ディップスイッチをぱちぱち操作するのはやはり不格好。次は外部にマイコンを繋いでデジタル表示をつけるなど見栄えの良いものにしたいですね。でも、その前にマイコンを覚えなくちゃいけないですが。

2009年5月21日木曜日

FMステレオチューナに選局機能をつける(その3)

4.トップレベル回路図の修正
 const.vhdを変更して、新たにDIPスイッチの入力を追加しました。const.vhdはトップレベル回路図から呼び出されているので、この回路図でも入力を明示する必要があります。まずは回路図で使われるconst.vhdの回路図シンボルを生成します。このへんのやり方は、XilinxのISEと同じですね。

 ispLEVERの"Sources in Project"のパネルで"const.vhd"を選択し、右側の"Processs for current source"のパネルで"Generate Schematic Symbol"をダブルクリックします。回路図シンボルを上書きするか聞いてきますので新しいものに置き換えます。














 次に、ispLEVERの"Sources in Project"のパネルで"top.sch"をダブルクリックすると、Schematic Editorが起動します。"CONST"のシンボルマークに"OPTSW_IN"の入力が新たに追加されるので、この入力にワイヤを接続します。そしてこのワイヤに名前を付けます。バス配線の名前は、"OPTSW_IN[3:0]"のような感じにしておきます。この名前をI/O Marker で囲むと、入力端子として認識されるようになります。このあたりめちゃくちゃわかりにくいです。
















 この段階で機能追加は完了ですが、このまま進めるとリソース不足でFPGAに入りませんでした。

 ・・・が、このチューナの設計者様より設定を変更すれば当初書いたようなSPDIF出力を犠牲にせずともFPGAに入りますよとの知らせを受け、試してみたところ無事入ってくれました。その方法とは、論理合成のターゲット周波数を既定の200MHzから、実際のクロックにあわせ74MHzに変更するというものです。
 
 ispLEVERの"Sources in Project"のパネルで"top.sch"を選択し、右側の"Processs for current source"のパネルで"Synplify Synthesize VHDL file"を右クリックして"Properties"を選択。図の通り設定を変更します。













次に、ispLEVERの"Sources in Project"のパネルで"top.sch"を選択して、右側の"Processs for current source"のパネルで"Synplify Synthesize VHDL File"をダブルクリックして論理合成を行います。成功すれば、"Done: completed successfully."というメッセージが出ます。
.

2009年5月20日水曜日

FMステレオチューナに選局機能をつける(その2)

3.VHDLソースの変更
 NCOの設定値は、VHDLソース "const.vhd"に書かれているのでispLEVERを起動して変更します。
単に、DIPスイッチの4ビットの設定を読み込んで、NCO周波数設定値に反映させるごく単純な組み合わせ回路です。ispLEVERでは、verilogとVHDLを混在できなさそうなので、VHDLの教科書を片手にcase文のサンプルコードを書き写しました。


library ieee;use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;


entity const is


port(
const_out: out std_logic_vector ( 27 downto 0 ); OPTSW_IN: in std_logic_vector(3 downto 0));
end;


architecture RTL of const is


begin


--const_out <= X"2C95555"; -- 10.7MHz @ Fs=61.44MHz
--const_out <= X"25271C7"; -- 10.7MHz @ Fs=73.728MHz

--const_out <= X"1E75554"; -- 8.772/82.5MHz @ Fs=73.728MHz
process(OPTSW_IN) begin

case not OPTSW_IN is
when "0000" => const_out <= X"0E238E3"; -- 77.8MHz when "1000" => const_out <= X"119C71C"; -- 78.8MHz when "0001" => const_out <= X"140AAAA"; -- 79.5MHz when "1001" => const_out <= X"1940000"; -- 81.0MHz when "0010" => const_out <= X"1835555"; -- 80.7MHz when "1010" => const_out <= X"1BAE38E"; -- 81.7MHz when "0100" => const_out <= X"1E75555"; -- 82.5MHz when "1100" => const_out <= X"21EE38E"; -- 83.5MHz when "0011" => const_out <= X"2031C71"; -- 83.0MHz when "0111" => const_out <= X"334AAAA"; -- 88.5MHz
when "1111" => const_out <= X"2618E38"; -- 84.7MHz when others => const_out <= X"1E75555"; -- 82.5MHz end case;

end process;

end RTL;

2009年5月18日月曜日

FMステレオチューナに選局機能をつける(その1)

 ディジタル・デザイン・テクノロジ誌のディジタルFMステレオチューナに、ボード上のDIPスイッチで周波数を変更できるよう簡単な選局機能をつけました。ただ現状の設計で既にFPGAのリソースを使い切っているので、今回の選局機能の追加にあたってはSPDIF出力機能を犠牲にせざるを得ませんでした。


1.受信周波数設定値の決め方
 受信周波数は、NCOの周波数により決められています。このチューナでは、NCOの周波数はVHDLのソース"const.vhd"の中で指定されているので、DIPスイッチの設定でNCOの周波数を変更できるように、手を入れました。
 この回路でA/Dコンバータは73.728MHzのサンプルレートでFM帯の信号をアンダサンプリングしています。すなわちFM周波数帯の信号は73.728MHzの局発で周波数変換されたように見えることになります。

 (例) 受信周波数82.5MHz - 73.728MHz = 8.772MHz(A/D変換された信号の周波数)

 この信号を、FPGA内部のNCOで生成した局発信号でベースバンドに変換するので、受信周波数はNCOの周波数設定で決まることになります。NCOの動作周波数は73.728MHzで、周波数設定は28ビットなので出力周波数は次の式で決まります。

 NCO出力周波数 = 73.728MHz × (周波数設定値)÷ 2の28乗

受信周波数82.5MHzとするためNCO出力周波数を8.772MHzにする場合、

 周波数設定値 = (8.772 / 73.728)× 2の28乗 = 31,937,877 <10>

となります。31,937,877を16進数で表現すると、1E75555 です。


2.受信周波数とNCO設定値
 FMラジオは、都市部なら携帯チューナのイヤホンコードのアンテナでも強力に受信できます。しかし、強力に受信できたとしてもFM変調はアナログ方式なのでビルや山の反射波などいわゆるマルチパスの影響を受け案外キレイには受信できないものです。(よ~く耳を澄ませると、ジュルジュルといったノイズが聞こえるはずです)
 理想的には、やはり屋外アンテナやCATV(一部のCATV局はFMも再送信しています)の再送信を受信するのがベターです。そこで今回は、CATV経由でもFMを受信することにします。CATVのFM再送信では、放送局の周波数から少し周波数をずらしている例が多いです。調べたところ当地でもそのようになってました。

  局名    放送周波数   CATV再送信  ZIP-FM    77.8MHz    78.8MHz  Radio-i   79.5MHz    81.0MHz  FM Aichi  80.7MHz    81.7MHz
 NHK      82.5MHz    83.5MHz


これらの周波数をボード上の4ビットのDIPスイッチに割り当てます。

DIPスイッチ  受信周波数  NCO周波数  NCO設定値 0000      77.8     4.072     0E238E3 1000      78.8     5.072     119C71C
 0001      79.5     5.772     140AAAA
 1001      81.0     7.272     1940000 0010      80.7     6.972     1835555 1010      81.7     7.972     1BAE38E 0100      82.5     8.772     1E75555 1100      83.5     9.772     21EE38E 0011      83.0     9.272     2031C71 0111      88.5    14.772     334AAAA
 1111      84.7    10.972     2618E38

2009年5月17日日曜日

マスク売り切れ

新型インフルエンザの2次感染が見つかったということで、関西ではマスクが売り切れているそうです。
私も近くのドラッグストアを覗いてみたところ、徳用品はすでに売り切れ。3個450円とかの高額品しか残ってませんでした。事態が沈静化するまでの間、品薄状態が続きそうです。

2009年5月11日月曜日

iPod nanoの音が割れる

 触れて楽しくデザイン秀逸、大容量で低価格。iTunesでオンラインで新曲をダウンロードできて、Geniusを使えば今まで知らなかった曲にも出会うことができる。私にとっては買って満足、期待以上のデバイスです。もちろん音質面でも不満はない、と言いたいところですがイコライザを使うと音が割れてしまいす。仕方がないのですぐイコライザオフに戻して使っていました。イコライザオフのすっぴん状態ならちゃんといい音で鳴ってくれます。

 この件に関して、ソフトウエアのバージョンアップで改善できるというような情報を目にしたので再チャレンジ。まずはiTunesからソフトウェアのバージョンが最新(1.0.3)であることを確認。
ふるーいテストCDから1kHz フルスケール(最大音量)の信号をiPodに転送して再生。
・・・やっぱり音割れしてます

















次に波形を見てみます。
波形の頭で見事にクリップしています。イコライザの有無にかかわらず振幅はほぼ同じなのと音量を変えても傾向は同じなのでデジタル処理の段階でクリップしているようです。最近の音楽ソフトは、目一杯の音量で収録されたものが多いので、これでは音割れするはずです。とはいえ、今やそういうソフトがたくさん出回っているわけですから設計段階で何とか解決できなかったのでしょうか。疑問が残ります。


イコライザ "Pop"
波形の頭がクリップしてます

振幅:164mVp-p










イコライザ "Off"

振幅:164mVp-p










2009年5月9日土曜日

ディジタルFMステレオチューナ つくりました

ディジタル・デザイン・テクノロジ誌に掲載されていたディジタルFMステレオチューナ
を作ってみました。当地名古屋では、NHK FMが82.5MHzで放送されてますので、
あえてソースを修正してコンパイルせずに付属CD-ROMに収録されたjedファイルをそのままFPGAに書き込み、とりあえずアンテナ端子にクリップコードをつないで受信テスト。あっさり動いてくれました。
手持ちパーツの都合で高周波アンプが1段しか実装できなかったこともあり、受信レベル不足のためややノイズ混じりですが、音抜けがよく素直な音質という印象。
育ちの良さ?を感じさせます。








































★主要部品入手方法について
・A/D MAX12554 小売店では見あたらずマキシムから直接入手するしかないようです

・D/A PCM1716 Digi-Key

・光インターフェース TOTX173 共立エレショップ
  手持ちの関係でTOTX172を使用。
  他のモデルでも使用可能でしょうが、手持ちのTORX176はピンアサインが異なり使えませんでした。

・高周波アンプ ERA-3 Mini-Circuits  同じメーカのMAR-6を使用。ただしバイアス抵抗を91Ωに変更。
  ※手持ちが足らず、とりあえず1段のみとしています

・高周波トランス T4-1 Mini-Circuits
  Mini-Circuits製品は、ミニサーキットヨコハマでも買えます。
  私はジャンク基板からの取り外し品を使いました。

・クロックオシレータ 73.728MHz
 一般ではなかなか入手しづらく、どうやら特注するしかないようです。
 もうひとつの方法としては、割高ですがMouserでFOXの73.728MHzのやつが買えます。
 これは表面実装タイプなのでパターンの変更が必要ですが、
 3.3V品でHCMOS出力ですからバッファアンプに直結できそうです。

・74VCX04
 入手先がわからなかったので、とりあえずDigi-Keyで74LCX04のTSSOP版を選びました。
 動いているのでまあ大丈夫なんでしょう。

・チップコイル Digi-Key
 0.12uH3.3uH10uH(8.2uHの代わり)。
 このうち3.3uHはチップの底面にしか電極がないタイプで手はんだしづらかったです。 
 チップ側面の電極が見えているものをおすすめします。

・チップコンデンサ Digi-Keyなど
 概ね2012タイプとしました。
 100pF以下のものは同調用ですので、温度変化で静電容量の変動が少ない
 温度係数C0G, Np0タイプを選ぶ必要があります。
 この回路でそれ以外のものは温度特性にそれほどシビアな使われ方をしていません。

 A/Dコンバータ周りの10uFと4.7uFはta(タンタルコンデンサ)とos(三洋電機のOSコンデンサ)が
 指定されてますが、手持ちの都合でチップ積層セラミックコンデンサを使いました。
 1000pF以上のセラミックコンデンサは、コンデンサ材質の都合上、与える電圧によって大幅に
 静電容量が変化(半減してしまう)するものが多いですが、最近ではあまり変化が少ないものも
 手に入ります。誤差±10%程度のものを選んでおくのが無難です。
 秋月電子でも使えそうなものが買えます。

・電解コンデンサ
 実装写真によると、D/Aコンバータ周りの電解コンデンサは、三洋電機のOSコンやニチコン MUSE
 といったいわゆる”オーディオ用”パーツが使われています。千石電商でも買えます。
 気にしない場合は一般用でも問題ありませんし、低ESRをうたった製品もよいかと思います。
 音声出力部の3000pFは、スチロールコンデンサが使われていますが、手に入りにくいので
 マイラー(ポリエステルフィルム)コンデンサを使うのが一般的でしょう。
 私は手持ちがなく積層セラミックチップコンデンサを使いました。

・チップ抵抗 Digi-Key
 1608タイプの1/10W型を使いました。たとえばPanasonicなど。

・チップ集合抵抗 Digi-Key
 1608タイプの1/16W型、4個入りタイプのRohmを選びました。

・F型コネクタ Digi-KeyAmphenolのものを選んだら基板にそのままはまりました。

・ピンジャック 千石電商の店頭で買ったものがぴったりでした。たぶんこれです。

・DCジャック 秋月電子DCジャックが、そのまま使えました

・3端子レギュレータ TA48033STA48M033F 秋月電子

・高周波コイル FCZ 7S80 共立エレショップ
  ※手持ちが足らず1段目のコイルのみ実装してます

・ピンヘッダ、ピンソケット
  まともに買うと高いので秋月電子で購入しました。
  特にピンヘッダは途中でカットできるのものもあるので、長めのものを買うのがいいです。

・プリント基板
 サンハヤトのポジ感光基板31K型 共立エレショップ
 100mm×100mm ガラスエポキシ片面です。
 紙フェノールなど他の材質では基板が柔らかく、特にFPGAボードを取り付けるときに基板がしなり、
 チップ部品に物理的なストレスがかかるのでおすすめできません。

・DCアダプタ
 DC入力の5Vは、安定化せずにPCM1716や光インターフェースに接続されているので、必ず安定化されたDCアダプタを接続する。過電圧だとICが壊れます。秋月電子でも各種売られています。私は昔使っていた無線LANルータのアダプタがたまたま安定化された5Vだったので使ってます。

★製作時の注意
 A/Dコンバータチップ裏Exposed Padのハンダ付けが課題。私は基板に穴を開けて部品面からPadにはんだを盛る(基板パターンに薄く予備ハンダをしておく)方法をとりましたが、本当にはんだ付けできているのか確認する術がありません。CD-ROM中の文書に記載があるとおり「エポキシ系の導電接着剤」の使用が無難ですが付け過ぎると大変なことになりそうです。
 CD-ROMに入っている、部品配置が書いてあるPDFに記載モレあり。写真ではクロックオシレータのバッファ(74VX04)と、FPGA基板A25ピンとの間にチップ抵抗が挿入されているが、回路図に載っていない。部品配 置PDFにも書いてないので、写真と実物を照らし合わせながら、とりあえず10Ωを実装。クロックオシレータ出力にぶら下がっている12kΩと 10kΩ(R302)も部品配置PDFに載ってないので、忘れずに取り付けること。
 回路図をよく見ると細かいところがけっこう怪しい。あり得ないミスが多いので、回路を知らない編集部の人が書き直しているんでしょうか。結局のところ実装写真と実物をつきあわせて確認するのがベターです。


★FPGAボードの準備
親ボード接続用とJTAGポートのヘッダ、タクトスイッチを取り付けるだけです。
あとコンフィグレーションモード設定用の基板裏面のはんだジャンパHS1をカットしました。


★FPGAへの書き込み
パラレルポート用ケーブルを自作して書き込みに使用しました。
が、現用PCにはパラレルポートがないことに後から気づき唖然。
結局パラレルポートつきPCを探し出して使いました。

書き込みに際しては、雑誌の手順通りにやりましたが
パラレルケーブルが接続されていない旨のメッセージが出ます。
いろいろ設定画面を眺めているうちに
Cable and I/O Setup画面で、"Auto Detect"をクリックすると、デフォルトのLPT port modeは
"BiDir"モードだが、おすすめは"SPP"モードなので変更するかと聞いてきました。
よくわからないので"はい"を選んだところ無事に書き込みできるようになりました。



















★その他
基板上の赤LEDは、A/Dコンバータ過入力時に点灯する。
FPGAボード上の緑LED(DL3)がステレオ受信時に点灯。


★課題
A/Dコンバータが結構発熱します。長時間は触っていられないほどなので何らかの対策が必要。
接続する電源DCアダプタを間違えると過電圧で基板を壊す可能性があるので安定化回路を追加したい。
現状では受信周波数が固定。せめて選局できるよう、オプションスイッチにでも機能を割り当てたい。でも高周波系の同調回路が固定なのでどうしたものか。スルーしてしまうか、やはり周波数固定で使うしかない??
.