読者です 読者をやめる 読者になる 読者になる

guruguru123’s diary

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

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の信号線を何本か接続し忘れていた…

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

基本的なSDRAMの動作について勉強したが、いまいちアドレス指定の仕方がわからない。ざっくりとアドレス指定のブロック図を示すと以下のようになると思う。SDRAMはクロックに同期して動作するため、ロウ/カラム・アドレスは同一の信号線を用いる。図では、バ…

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

前回rとnが何だかわからないと書いたが、用途はだいたいわかった。このプログラムは3つのprocess文から成り立っていて、rとnが出てくるのは以下2つだ。 1.process (r, rstate, address, req_read, rdata_write, req_write, addr_row, addr_bank, addr_col, d…

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

前回はentuty内部を見たので、今回からarchitecture内部を見ていく。 レコードタイプの定義 type reg is record address : std_logic_vector(ADDRESS_BITS-1 downto 0); bank : std_logic_vector( 1 downto 0); init_counter : std_logic_vector(14 downto 0…

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

ad9851の出力の周波数・位相を高速に切り替える(μs単位が目標)ためにあらかじめPapilio Pro基板上のSDRAMにad9851へ書き込む40bitデータと時間のデータを与えておく。それを順次読み出して40bitデータをad9851へ書き込みをできるようにする。 そのためにはま…

FPGAでArduino(7)

DDS-LSIであるad9851を駆動し、周波数・位相を高速で切り替えるためにXilinx社製のFPGA:Spaltan-6を搭載した開発用基板Papilio Proを用いて40bitのデータを書き込む。これにはZAP IDEから周波数と位相の数値データの入力し、FPGAプログラムで40bitデータを…

FPGAでArduino(6)

なんとなくコツがつかめてきたので、本題のAD9851へ40bitのデータを書き込むためのプログラムを作成していきたい。まずは、40biのデータをどうやって作成するかだが、これは、ZAPIDEで発振したい周波数、位相を指定し、それを40bitデータへ計算させるためSLO…

FPGAでArduino(5)

2進カウンタを追加してみようとして苦戦しているが、そもそもどこがだめなのかをはっきりさせるため、いったん2進カウンタの値をWISHBONEバスを用いて読み取るのをやめ、WISHBONEバスを用いて定数を読み出すことにした。すると、問題なく読み出せていること…

FPGAでArduino(4)

前回に引き続きSlot13にただの2進カウンタを追加しようと苦戦している。今回はbitファイルを生成して書き込みをし、ZAPIDEから動かすところまで行ったが、思ったような動作にならなかった。 シュミレーション上は動作しているので、原因はZAPIDEのスケッチで…

FPGAでArduino(3)

ZPUinoのソースコードにあるSlot13に自分で作成した回路を追加してみることにした。今回もVerilogHDLで記述していく。追加するのはただの2進カウンタ。しかし、やはりwishboneバス用の信号の出し方がいまいちつかめず苦戦している。また、wire宣言やreg宣言…

FPGAでArduino(2)

ZPGA版ArduinoであるZPUinoのHDLソースコードがVHDLで記述されているが、回路を追加する際、本ではVHDLだけでなくVerilogHDLで記述されたものも追加していた。そのため、自分でもVerilogHDLでモジュールを作成し追加しようと試みたが、Portの設定やインスタ…

VerilogHDLの学習(1)

VerilogHDLでAND回路と同期式10進カウンタを作成し、テストベンチを作成してシュミレーションをしてみた。 ・AND回路 AND回路記述↓ AND回路テストベンチ↓ AND回路シュミレーション結果↓:IN1,IN2が1のとき、OUTが1になっているので正しくAND回路が作成された…

FPGAでArduino

"FPGA版Arduino!!Papilioで作るディジタル・ガジェット"という本を見つけ、今までArduinoでやっていた部分をこれに置き換えられないかと思い、やってみた。今回、ザイリンクスのFPGAであるSpartan-6を搭載したPapilio Proを使用した。 まずはArduinoベースの…

ArduinoでAD9851へチューニングワードの書き込み(2) LforA

DDS素子であるAD9851にArduinoからチューニングワードを書き込みするために、以下のようなVIを作成した。以前作ったものに比べ多少は見やすくなったと思う。 VISAリソースの扱いがいまいちわからず配線が煩雑になってしまっている。 実際にAD9851に書き込み…

Digital出力ON/OFFを簡素に LforA

LabVIEWforArduinoでデジタル出力でON/OFFを切り替えて扱うことが多く、その部分だけでもプログラムが煩雑になってしまっていた。そのため、その部分をサブVIとして置き換えることで見やすく簡素にできるのではないかと思いVIを作成した。 以下作成したVIの…

ArduinoでAD9851へチューニングワードの書き込み

DDS-ICであるAD9851の周波数と位相が制御された正弦波発生器として用いるためにArdinoでチューニングワードを書き込みたい。そこで、Arduinoのデジタル出力ピンを3つ用いて、それぞれD7,W_CLK,FQ_UDに信号を送る。Arduinoを用いるにあたって、より周波数の変…

デジタル出力電圧のピンごとの違い

最初LabVIEWforArduinoを使ってLEDを光らせたときに、なぜか明るく光らなかった。気になったので電圧を測定してみたところ、1V程度しか出力されていなかった。この時はArduinoのデジタル9ピンを出力ピンとしていた。 しかし、この前8ピンに変えてみたところ…

マウスでArduinoを操作

前回と前々回で作ったプログラムを改変して、スイッチやカウンタで変化させていた部分をマウスでの操作に置き換えてみた。 一つ目は、7/2のものの、スイッチをマウスの左クリックに置き換えてみた。図の左下にある、マウスを初期化と入力データの取得の関数…

LabVIEWによるArduinoの制御 その3

前回作ったプログラムを改変して、今回は二種類のプログラムを書いた。 一つ目はブール配列を作り、そこから配列要素を呼び出すことによってケースストラクチャのT/Fを切り替える。今回もArduinoのデジタル出力にはLEDがつないである。このとき、どの配列要…

LabVIEWによるArduinoの制御 その2

前回で、ArduinoをLabVIEWで動かす準備ができたので、とりあえずLEDのON/OFFの制御をやってみた。LabVIEWを触るのが1年か2年ぶりくらいだったので、まずは簡単なものから。 今回はケースストラクチャを用いてON/OFF制御をした。以下ブロックダイアグラムとフ…

LabVIEWによるArduinoの制御

ArduinoをLabVIEWで動かしたいと考え、下記サイトを参考にしながらやってみた。 https://decibel.ni.com/content/docs/DOC-15971 流れとしては、 1 LabVIEW,ArduinoIDEのインストール 2 JKI VI Package Manager (VIPM)のインストール 3 LabVIEW Interface fo…

PWMによるLED制御

PWMを用いると擬似的なアナログ信号が生成される。ということなので、 これを用いてLEDをだんだん明るくしたり暗くしたりするスケッチを書いた上で、 そのスケッチに、任意で明滅の周期を変えられるようにしていきたい。 今回はとりあえず周期が変わることに…

LED ON_OFF制御

今回はシリアル入力一文字を読み込んでLEDを点灯、消灯するものを作成した。 if文の条件設定の部分で、”==”と書くべき部分を”=”と書いていて 何のキーを押してもLEDONになるプログラムになってしまっていた。 if(Serial.available()>0)の構文は必要か微妙…

温度センサー&LED

今回はLED2個と温度センサーを使ってみました。 ただ29°を超えたらLEDが切り替わるだけというものですが。 アナログ信号の処理がまだいまいち理解できていない気がする。 Arduinoについてわからないことが多すぎるので、何冊かArduino関連本を 借りたので読…

ARDUINOの学習

DDS-ICであるAD9851をarduinoで動かしていきたいと考え まずはarduinoの学習から始めようと思った。 今日は定番の"Hello,World"と、とりあえずLEDを光らせてみた。 c言語の知識は多少あるが、arduinoのリファレンスは全く分からなかったので 以下サイトを活…