guruguru123’s diary

かなり雑な作業日記です。

DACドライブブロックの作成(2)

前回guruguru123’s diaryDAC(MCP4726)ドライブブロックを作成し、シミュレーションは上手くいったが、実機では動作しなかった。 書き込みのクロックを100kHzにして、オシロスコープで100kHzクロックとシリアルデータを観測してみた。すると、スタートビット…

DACドライブブロックの作成

今回用いるのは12bitのD/AコンバータであるMCP4726。以前駆動しようとしたLTC2624は今回置いておいてこっちを動かしてみる。 MCP4726はI2Cで出力データ指定を行うようだ。I2Cは以下サイトを参考にした。 電子工作室 MCP4726のデータシートにデータ転送の例が…

コマンドの追加

コマンド受付機構の改良 - guruguru123’s diaryでコマンド受付機構の改良をおこなったため、各機能ブロックを修正しながらコマンドを追加していく。 追加したコマンドと継続して利用するコマンドを以下に挙げる。例ではTeraTermからコマンドを送っている。コ…

DDS単純駆動

今まで作った機能を統合するにあたり、DDSを単純駆動する機構も改良した。 コマンドをdds1とし、これを受け付けると16進数で10文字の40bitデータを要求する。10文字受け付けた時点でAD9851を駆動する。下図はデータ指定の様子。 また、前回(DDS,DAC用データ…

DDS,DAC用データ格納アドレス指定

DDSとADコンバータ用のデータをSerDes経由で受信を行い、SDRAMへ格納する際に、今までは0番地から書き込みしていたものを、アドレスを指定して書き込みができるように改良していく。 具体的には以下画像のようにRS232Cでアドレスを指定する。これはSDRAMから…

コマンド受付機構の改良

DDSやADコンバータ、DAコンバータの駆動回路を統合するために、コマンドを増やす作業が必要になった。コマンドはRS232_C通信で送っているが、今までは送信、受信ともにデータを16進数として内部で処理をしており、文字列解釈の記述量が多くなってしまってい…

ADC受信回路:実機試験

ADC受信回路:シミュレーション - guruguru123’s diary でシミュレーションを行い、正しく動作しそうなので、実機でテストを行った。 使うADコンバータはAD9294。以下リンクはデータシート。 http://www.analog.com/media/jp/technical-documentation/data-s…

D/Aコンバータ駆動ブロックの記述

今回はD/Aコンバータ動作テスト回路の記述、シミュレーション、実機テストを行った。 DACが4ポート(A,B,C,D)あるLTC2624のうちAポートのみを駆動することとし、単一のデータを書き込み続けて動作試験を行う。記述の中身としてはAD9851駆動回路とほとんど変わ…

ADC受信回路:シミュレーション

ADコンバータの回路記述が終わったため、シミュレーションを行った。 受信するデータ数は16bitを5個で、1つ受信するごとにSDRAM書き込みリクエストを行う。また、100Mhzでそのままデータを読まずに、下図のread_clkを読み込みクロックとし、これが1のときに…

A/Dコンバータからのデータ受信

SerDesでのデータ受信ブロックができたため、これを改造してA/Dコンバータからのパラレルデータを受信する機構にしてみた。 用いるA/DコンバータはAD9214で、これはアナログ値が10bitに変換され、パラレルで出力される。前回のSerDes受信ブロックとほとんど…

SerDes受信ブロックの検討(3)

SerDes受信ブロックの検討(2) - guruguru123’s diaryで記述したVHDLで実機が上手く動かなかったため見直し。前回のものだと、イネーブルがアクティブになった瞬間にREQ_Wが立ち上がってしまっていたため、新たにカウンタを設け、イネーブルがLow,ストロー…

Papilio Pro へのクロック入力

SerDesの受信ブロックで、SerDesからのクロックを入力するところでエラーが出て詰まった。エラーを見ると ERROR:Place:1108 - A clock IOB / BUFGMUX clock component pair have been found that are not placed at an optimal clock IOB / BUFGMUX site pai…

Papilio Pro基板上SPI Flashへのbitファイル書き込み不良

11/24に書いた二台のAD9851をドライブするプログラムを、独立させて動作させるためにPapilio Pro上のSPI FlashにbitファイルをPapilio Loaderを用いて書き込みしようとした。 すると、FPGAに直接書き込みしたときには動作していたものが、SPI Flashに書き込…

SerDes受信ブロックの検討(2)

SerDesの受信ブロックが記述し終わったため、シミュレーションを行った。64bitデータの個数をあらかじめ指定して、その個数受信したら終了というものも考えたが煩わしいため、SerDes_ENというイネーブルを1ピン追加した。SerDes_ENはアクティブLowで、Lowの…

SerDes受信ブロックの検討

SDRAMコントローラができたため、SerDesからデータを受信して次々SDRAMへ書き込んでいく機構を検討する。64bitをひとまとまりのデータとして扱うため、8bitパラレル×8でSDRAMへバースト長4の書き込みを一回行う。 今回用いるSerDes基板のSN75LVDT1422は14bit…

2台のAD9851をドライブ

以前dds1,out1をコマンドとしたAD9851ドライブ機構を作成した。今回はこれを拡張して2台のAD9851をドライブできるものにした。 componentでDDS駆動用モジュールのAD9851_ctrlを宣言してある。並列に2台駆動するために、これを二回呼び出して使用する。 また…

SDRAM動作の確認とADコンバータドライブ用ブロックの作成

前回AD9851の基準クロックをPapilioから供給すると言っていたが、あれは勘違いで実際にはAD9851基板に乗っている30MHz水晶発振器のクロックを6逓倍して180MHzを基準クロックとして用いている。そのため、w_clkは100MHzを供給しても問題ない。というか以前にA…

SDRAMのバースト動作(3)

前回はただaddr?とでるだけだったので、とりあえず"start_addr?”と"stop_addr?"と表示するようにした。これで開始と停止アドレスを指定できるようになった。 アドレスの指定はとりあえずbankを1ビット、rowを1ビット、colを1ビットで指定する。 ここまでは動…

SDRAMのバースト動作(2)

AD9851を高速にドライブするために、SDRAMに蓄えられているデータを連続で読み出してAD9851へドライブする機構を作成する。 今回もバースト長は4で、64ビットで一つのデータとして扱う。 今回はあらかじめSDRAMに10個の64ビットデータを蓄えておき、それを読…

SDRAMのバースト動作:バースト長4

バースト長2でSDRAMの動作が確認できたため、これをAD9851用の周波数チューニングワードとして駆動してみた。位相は固定。問題なく動作することが確認できた。 次にSDRAMをバースト長4で動作させてみた。アドレス指定は、カラムアドレスの下位2bitを自動的に…

SDRAMのバースト動作

前回はバースト長1でSDRAMを動作させた。今回はSDRAMにバースト動作をさせてみた。テストのためバースト長は2で動作させた。 変更点はモード設定用レジスタの下位3bitとライト、リードステート。 カラムアドレスの下位1bitを自動でインクリメントしてくれる…

SDRAMコントローラの作成とRS232C通信ブロックとの接続

以前SDRAMコントローラを作ろうとして失敗、その代わりにFPGA内部RAMを使っていた。しかし、SerDesを用いてAD9851用の大量データを蓄えるとなると容量が明らかに足りない。そこで改めてSDRAMコントローラを作成することにした。 今回はZPUinoのソースにあるS…

RS232C通信を用いてDDSへデータの書き込み

前回はTeraTermからFPGAへコマンドを送り、wdでデータを保持、rdでデータを返した。今回はこれを使ってRS232C通信を用いてFPGAへコマンドの送信と、コマンドによってDDS用のデータの受信、DDSへのデータのドライブを行った。 DDS用の40bitデータはアスキーコ…

rs232c通信を用いてコマンド送信:基礎編

AD9851の出力周波数を変えたり、複数動かすためには外部からコマンドを入力して制御することになるため、RS232C通信でコマンドを送ることにした。今回は基礎作り。 今回はTERA TERMを使ってFPGAへアスキーでwdと送ると40bit受付待機、rdと送るとその40bitの…

AD9851ドライブ用データのRS232C通信での転送

前回はRS232C通信によって、あらかじめ蓄えられているADF9851ドライブ用データの読み出し先を選択する機構を作った。 今回は蓄えるデータもRS232C通信でFPGA上のRAMに書き込みできるものをつくっていく。データ生成部も後々必要になるが、今回は手打ちでテキ…

AD9851ドライブ用データをRS232C通信を用いてPCから選択

そろそろ外部でデータ生成をして、それをRAMに格納して順次読み出し、AD9851をドライブする。といったものを作っていきたい。 今回は、PCからデータを受け渡す機構として、以前も出てきたRS232Cを使って試したいと思う。いきなりデータ生成まで作るのは大変…

AD9851へのドライブ信号を外部入力から選択

前回、AD9851を100MHzでドライブすることができたため、今回は外部入力から状態遷移(4データのRAMへの書き込み、それぞれのデータの読み出し)を行えるように組み替えた。I/Oポートにそれぞれのリクエスト信号に対応する5つのピンを設け、それをグラウンド…

AD9851へW_CLKの周波数を上げてドライブ

32MHzの周期を3.125nsだと一桁勘違いしていたため(本当は31.25ns)前回はW_CLKを分周して用いていた。そこで、今回は全ブロックを32MHzで動作するものを作成した。 また、これが動作したため、DCMを用いて、W_CLKの周波数を上げてAD9851へドライブするものを…

AD9851へのドライブ(2)

前回のAD9851への書き込み信号が連続して出力されてしまう問題(waitの状態に移行してくれない)の解決策が思い浮かばなかったため、問題を洗い出すためにシミュレーションをしてみた。以下がその結果。 すると、シミュレーション上ではstate_nがいったん書…

AD9851のドライブ

前回のエラー文中に PIN "clk_gen/clkout1_buf.O" CLOCK_DEDICATED_ROUTE = FALSE; を制約ファイルに入れるとエラーからワーニングに移るとあったため、試してみた。すると、出ていたエラーが消え、以下のようなワーニングに移った。 Pack:1653 - At least o…