guruguru123’s diary

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

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…

AD9851駆動回路の追加(DCM)

DCM構成の段階でBUFGをつなぐかどうかのチェックがあったため、今回構成したDCMのVHDLの記述を参照してみた。すると、内部にIBUFGとBUFGがすでにあったため、前回のエラーが発生していたようだ。 そこでIBUFG,BUFGの記述を削除し、32MHzのクロック信号をDCM…

ad9851駆動回路の追加

RAMコントローラが問題なく動いたため、AD9851の駆動用の回路を追加していく。ベースは以前作成したZPUinoに追加した回路。AD9851用の書き込みクロックであるW_CLKは、最小パルス幅が3.5nsであり、以前作成したものでは、カウンタを作ってそれでクロックの代…

ramコントローラの記述変更

前回のものでは次の状態(wからr_1等)への待機がうまく記述できていなかったため、待機状態を新たに追加した。また、状態遷移内での出力の変化がそのまま出力につながっていたため、これを以下のように変更した。 data_out <= data_o1 when r_o = '1' else (o…

RAMコントローラ記述変更

以前までの方法ではゲーテッドクロックの除去が難しかったため、記述方法を変えてみることにした。イネーブルを導入したものでの動作確認のためにテストベンチを作成した。動作をさせてみるとイネーブルは動作しているが状態遷移が起こっていないことがわか…

ゲーテッドクロックからクロックイネーブル付きへの変更練習

以前、ゲーテッドクロックをイネーブル付きのものに置き換えるというようなことを言っていた。そこでゲーテッドクロックをクロックイネーブルに変更していくための練習をした。 まずはゲーテッドクロックになってしまう例を作成。 entity clock_pra is port(…

Papilio Pro上にRAMを構成(4)

RS232C通信を用いてきてうまくいかないため、問題点をはっきりさせるために、いったんRS232C通信での出力の確認をやめた。代わりに出力の下位4bitをIOピンから1bitずつ出力して、目視による確認ができるようなものを作っていく。 製作していく中で以下のよう…

Papilio Pro上にRAMを構成(3)

前回までは、読み出しまでが終わったタイミングでRS232C通信を開始していたが、今回は1秒ごとに RAM制御→RS232C:DATA1→RS232C:DATA→RS232C:DATA1→RS232C:DATA2 でまたRAM制御に戻すようなものに改良してみた。 最初に以下のようにしてみた。 RAM制御→RS232C:…

Papilio Pro上にRAMを構成(2)

SDRAMコントローラとなるべく同じような動作をするようにRAMコントローラを作ってみた。動作させたところ、目的の信号が出てはいるのだが動作が不安定であった。その理由がわからないため、テストベンチを作るなどして原因を考えて行きたい。 以下、動作確認…

Papilio Pro 上にRAMを構成

SDRAMで行き詰っていたところ、ISEのBlock Memory Generatorで内部RAMを作って試してみたらと、アドバイスを頂いたので試してみた。 http://www.hmwr-lsi.co.jp/fpga/fpga_5.htm こちらのサイトを参考にとりあえず構成をしてみた。 Block Memory Generatorが…

SDRAMを用いてのAD9851への書き込み

SDRAMコントローラがとりあえずできたので、以前作ったAD9851ドライブ機構と合わせてみようとした。しかし、以前はVelirog hdlを用いていたため、また、ZPUinoに組み込んでいたため、信号部分等の変更が面倒だった。そこで新しくDDSドライブ部をつくり、組み…

Papilio Pro基板上SDRAMの利用(10)

前回に引き続き、一秒間隔の信号に従ってSDRAMへデータを書き込み、その書き込んだアドレスからデータを読み出す。そのデータをRS232C通信でPC上に表示させ、ここまで終わったら次の立ち上がり信号を待機する。というSDRAMコントローラの製作。 前回、RS232C…

Papilio Pro基板上SDRAMの利用(9)

前回RS232C通信部は問題ないと書いたが、一秒ごとに出力させるようにタイミング制御を入れたところうまく動作しなかった。そこで、以下のようにプログラムを改変した。 startが'1'の間送信部が働き、16bit送信が終わったらstate_fが立ち上がり、startを'0'に…

Papilio Pro基板上SDRAMの利用(8)

とりあえずこんな感じに組み込んでみた。今回はあまり速度は考えず、一秒間隔で書き込み、そのままそのアドレスを読み出しをする。読み出しが終わったらRS232Cのブロックにデータを渡してPCと通信させる。コンパイルまで終わったが、シリアルコンソールに出…

Papilio Pro基板上SDRAMの利用(7)

前回は起動からアクティブまで遷移するものを作った。今回はそこから書き込みをしてそのまま連続で読み出しをするものを作った。以下シミュレーションのキャプチャである。図を見るとアクティブであるときに、書き込みリクエストがあると書き込みサイクルへ…

Papilio Pro基板上SDRAMの利用(6)

前回まで作っていたものを改めてみたところ、ステートマシンとして記述していたつもりが状態判定部分が機能しておらず、正しく動作していなかったことがわかった。 そこで、とりあえず起動からアクティブまでを新しく作り直した。前回まではテストベンチを作…

Papilio Pro基板上SDRAMの利用(5)

プログラムを組み終わり、コンパイルからbitファイル生成までエラーなく成功した。しかし、SDRAMからのデータ読み出しの出力を確認したところ読み出しがうまくいっていないことがわかった。プログラムを確認したところSDRAMの信号線を何本か接続し忘れていた…