2006年12月14日

Phase Locked Loop

今回はPLLについて基礎的な実験を行ってみる。PLLとは一言でいえば逓倍回路(可変周波数発生回路)のことだ。入力されたクロックを整数倍化して出力することが出来き、場合によってはカウンタを用いて分周し整数で割った周波数に落とすことも出来る。つまりは(制限付きだが)入力された周波数を「有理数倍化」して出力することが可能になる。

今回の実験は位相をズラした時にどのような動きになるかを調べてみた。PLLに設定したパラメタに因って、どのような挙動を示すかを正確に知っておく必要があるからだ。ここでは初代Cycloneの内蔵PLLを用いて試験した。スケマとシミュレーション結果を以下に示す。

pllsche.PNG
pllsim.PNG

入力は24[MHz]、単に2逓倍して48[MHz]出力するようにし、更にpllout1(c0)は位相0[deg.]、pllout2(c1)は位相90[deg.]に設定した。その時のMegaWizardのダイアログ内容を次に示す。

plldialog1.PNGplldialog2.PNG

左図がpllout1(c0)、右図がpllout2(c1)の設定内容。シミュレーション結果から判ることは次の通り。

1) 非同期リセットが終了してから、PLLの出力が安定するまで(plllockedが'H'になるまで)220[ns]程度掛かる。
2) pllout1をベースにした時、pllout2は90[deg.]、およそ5.2[ns]分「遅れる方向」へズレている。

上記1)については、PLLがそのような特性を持つものとして考慮すれば良いだけの話だが、特に留意しなければならないのは2)である。これを逆に「時間的に進んだ方向」へズレる、と思い込んでいたりすると大変な騒ぎになる。またこの信号を外部へ出力する場合は、内部遅延に留意する必要がある。特に高い周波数を扱う時は要注意だ。
posted by Masa. at 01:12| Comment(0) | 基礎実験 | このブログの読者になる | 更新情報をチェックする

2006年10月12日

Pulse Width Modulator

前稿の兄弟関係にあるPWM(パルス幅変調)について実験してみる。PWMは密度ではなく、ある周期中のパルスの幅で制御を行う手法。実際PWMはPDMに比べて更に低コストで実現出来ることが多い(PDMも単純だが加算器が必要なので高コスト)。その非常に簡易な手法の具体例として、LEDの輝度制御回路を作る。先ずはスケマとシミュレーション結果を示す。

pwm9.PNG
pwm9sim.PNG


LEDの輝度制御(ここでは負論理)は、前例の音の出力より大雑把でも問題がない。多少のグリッチが実用性を損なうことはないのでここでは放っている(もし取りたい場合は出力側にFFを入れる)。実際にこの回路を動かした時、輝度は次のような感じになる。

06101201.JPG


右から左に向かって、LED点灯時間(パルス幅)を1/1、1/2、1/4、…、1/256、1/512と制御し、輝度を10段階で調整していることになる。因みにこの回路は17LEsの資源で実現出来る。

続きを読む(余談)
posted by Masa. at 06:25| Comment(0) | 基礎実験 | このブログの読者になる | 更新情報をチェックする

2006年09月19日

Delta-Sigma Modulator (3)

前述の2つの回路を繋いだ回路図と、そのシミュレーション結果を示す。少し判り難いが、出力spkr_driveは正弦波のパルス密度変調になっている。

swg16.PNG
swg16sim.PNG


因みに例のNiosII評価キットは、spkr_drive(LVTTL)出力の先にアナログ回路(電流制限抵抗+一次LPF)が用意されている。6[dB/oct.]のフィルタだが充分である。これで高周波域へ移動した量子化ノイズを排除することになり(この場合Hi-Fiとは言えないが)実用レベルの正弦波を出力することが出来る。最後に、アナログ部のスケマと周波数特性について計算した結果を示す。

SpkrDrive.PNG
FreqRes.PNG


周波数特性図の左側はスケマ上に見える51[Ω]で計算した結果(fcutoff≒31.2[kHz])で、右側はFPGAのI/O出力インピーダンスを考慮してトータル100[Ω]と見積もって計算した結果(fcutoff≒15.9[kHz])だ。直接スピーカを繋いだ場合、そのスピーカのインピーダンスに影響し、このグラフ通りの特性にはならないので、為念。
posted by Masa. at 22:06| Comment(0) | 基礎実験 | このブログの読者になる | 更新情報をチェックする

2006年09月16日

Delta-Sigma Modulator (2)

前稿の回路を用いて実際に波形を出力されてみることを試みる。先ずは簡単な正弦波のPCMデータテーブルを作成しそれをROM化する。ここでは正弦波1周期を256点で分割した。sinθのθを0から2π/256単位で求め、それを[.mif]ファイル化した。オフセット値8000[Hex]を中心とし±7fff[Hex]、従って0001[Hex]〜ffff[Hex]の振幅となる。その[.mif]ファイルの具体的な内容は最後に示す。

下の図は具体的に正弦波データ生成ロジックも付けてみた。入力clkには24[MHz]のクロック、それをカウンタで3回分周して3[MHz]を作り、Delta-Sigma ModulatorのPDM出力基準周波数(fs64)として使う。実際の波形データのサンプリング周波数fs=46.875[kHz]とし理論上の周波数特性上限は約23.4[kHz]を確保。この例の場合46.875/256=183.10...なので、約183.1[Hz]の正弦波の16ビットPCMデータがspcm[15..0]から出力されることになる。少し判り難いがシミュレーション結果も示す。clkは24[MHz]入力とした。

s16b256p.PNG


s16b256psim.PNG

-- 更に続く --

続きを読む(正弦波データテーブル)
posted by Masa. at 16:26| Comment(0) | 基礎実験 | このブログの読者になる | 更新情報をチェックする

2006年09月13日

Delta-Sigma Modulator (1)

本家で書いたことの繰り返しだが、Delta-Sigma Modulator (Pulse Density Modulator)についても基礎と言えるので、ここにも記録しておこうと思う。先ずはスケマと簡単なシミュレーション結果を示す。


dsm16.PNG

dsm16sim.PNG


本家の方ではかなり端折って解説を入れてなかったが、この例の場合、入力dinはoffset 0x8000のunsigned入力である。従って0x8000を中心(0)として0x0000(-32768)〜0xffff(+32767)の範囲の16ビットPCMデータということになる。出力aoutはパルス密度変調の結果で、最終的には適度な(というより相当適当な)LPF(ローパスフィルタ)を介してアナログ信号に戻す。

なお、シミュレーションではfs64入力を100[MHz]クロックとしたが、例えばSACDの場合は64倍オーバサンプリング2.8224[MHz](fs=44.1[kHz])である。

-- この項続く --

posted by Masa. at 12:07| Comment(0) | 基礎実験 | このブログの読者になる | 更新情報をチェックする

2006年07月02日

Chattering Reducer

最近、入力ボタンのチャタを取り除く回路を久々に書き換えた。良くハードウエア入門レベルで採り挙げられることが多いが、謎電の作者が使っているものを紹介する。


crlite.PNG
crltmg.PNG


上図はスケマ、下図がそのシミュレーション結果。ON/OFF検出時のワンショットパルス付き。シミュレーションではtimer入力が100[MHz]になっているが、実際には1〜2[kHz](0.5〜1[ms]周期)程度で使う。チャタが多く品質の悪いスイッチを使う時は250〜500[Hz](2〜4[ms]周期)位。因みにこの回路は、Cycloneの場合10LEsの資源を使う。ワンショット出力が不要の場合は8LEsとなる。

続きを読む
posted by Masa. at 13:36| Comment(0) | 基礎実験 | このブログの読者になる | 更新情報をチェックする

2006年06月24日

Divider

Cプログラムですら除算演算子を使うことを避ける謎電の作者だが、ハードで除算を行うとどうなるか、今回ちょっと興味が湧いたので調べてみることにした。実際に試験的に作った回路は次の通りである。

div25.PNG


内容は、被除数をクロックと7ビットカウンタで作り、除数は定数25固定(符号なし5ビット)にして解(商・余)を求めるというものだ。この回路を、初代Cycloneを用い100[MHz]で動かした時のシミュレーション結果は次の通り。

div25tmg.PNG


registeredではないのでグリッチだらけという感じだが、余が変化し始めて安定するまでの時間が最も長い部分について計ってみると約6.64[ns]となった。入力である被除数が変化したのはもう少し前のタイミングなので実際には7[ns]以上掛かっているものと思われる。高々7ビット÷5ビット定数でこれほどの時間が掛かるというのは、現在の半導体技術を基準に考えれば正に永遠の時間が過ぎ去っていくように感じる遅さである。
posted by Masa. at 04:46| Comment(0) | 基礎実験 | このブログの読者になる | 更新情報をチェックする

2006年06月17日

Memory to Memory Delay

今回、理由あってメモリのアクセスタイムを調べてみた。特にブロック型RAMの、だ。実験に用いた回路は次の通りで、アドレスバス8、データバス8、ROMモードとした。

ROMtest.PNG


ROMsim.PNG


↑の図はStratixIIを使って500[MHz]で動かした時のシミュレーション結果。メモリの出力からpin間までの大きな遅延が含まれるので少し変だが、2[ns]サイクルで追いついて動いていることは間違いなさそうである。

因みに、CycloneIIおよび初代Cycloneについても調べてると次の様になった(QuartusIIのメッセージから引用)。

・StratixII(EP2S15F672C3)
 〔M4K×1を使った場合〕Info: Estimated most critical path is memory to memory delay of 1.623 ns
 〔M512×4を使った場合〕Info: Estimated most critical path is memory to memory delay of 1.720 ns

・CycloneII(EP2C35F672C6)
 〔M4K×1を使用〕Info: Estimated most critical path is memory to memory delay of 2.894 ns

・Cyclone(EP1C1212F324C8)
 〔M4K×1を使用〕Info: Estimated most critical path is memory to memory delay of 4.319 ns

このことから、1サイクルで使うことを前提とすると次のことが言える。

・StratixII(M4K):fmax=約616[MHz]
・StratixII(M512):fmax=約581[MHz]
・CycloneII:fmax=約345[MHz]
・初代Cyclone:fmax=約231[MHz]

今現在モンテカルロ碁の試作で使っている初代Cycloneはグレイド8なので相当遅い。メモリの性能だけでアプリのfmaxが決まるわけではないが、やはりStratixIIを使いたいところだ。
posted by Masa. at 06:29| Comment(0) | 基礎実験 | このブログの読者になる | 更新情報をチェックする

2006年01月23日

Register To Register Delay

Register to Register delay の非常に基礎的な実験を行ってみる。ここではStratixIIとCycloneIIではどのくらい性能が異なるかを厳密に測ってみることを目的とした。

クリックで拡大


クリックで拡大


上図は、実験に使用した回路。下図はStratixII(EP2S15F484C3)を使ってシミュレーションを行った時の結果。clkは1.25ns周期(800MHz)で、これがfmaxの限界のようだった。
以下、clkを50MHz単位で変えながらどこまでなら正常に動作するか(あくまでシミュレーションで)CycloneIIを含めて各スピードグレイド毎に検証してみた。参考までにStratixIIのFFのInternal Timing Microparametersの表も示す。

クリックで拡大


【StratixII series】
EP2S15F484C3 (Final) シミュレーション上は800MHzで動作可
Info: Clock "clk" Internal fmax is restricted to 500.0 MHz between source register "ff" and destination register "ff"

EP2S15F484C4 (Final) シミュレーション上は700MHzで動作可
Info: Clock "clk" Internal fmax is restricted to 500.0 MHz between source register "ff" and destination register "ff"

EP2S15F484C5 (Final) シミュレーション上は600MHzで動作可
Info: Clock "clk" Internal fmax is restricted to 450.05 MHz between source register "ff" and destination register "ff"

【CycloneII series】
EP2C5F256C6 (Preliminaly) シミュレーション上は500MHzで動作可
Info: Clock "clk" Internal fmax is restricted to 450.05 MHz between source register "ff" and destination register "ff"

EP2C5F256C7 (Preliminaly) シミュレーション上は450MHzで動作可
Info: Clock "clk" Internal fmax is restricted to 405.02 MHz between source register "ff" and destination register "ff"

EP2C5F256C8 (Preliminaly) シミュレーション上は400MHzで動作可
Info: Clock "clk" Internal fmax is restricted to 360.1 MHz between source register "ff" and destination register "ff"

結論として、register自体のtCLKLとtCLKHのタイミング制限に引っ張られてしまって本来のRtoRのクリティカルパスとfmaxは関連しない状態になってしまっているということであるが、この実験によってFPGAの本質的な限界を垣間見たような気はする。とは言えregisterだけが800MHz以上の動作周波数で動いたところで普通意味がないといえばないので、バランス的には悪くはないのかも知れない。
posted by Masa. at 21:17| Comment(0) | 基礎実験 | このブログの読者になる | 更新情報をチェックする

2006年01月07日

実験的に作ってみました。

とりあえず予約を兼ねて作ってみる。
posted by Masa. at 23:42| Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。