USB電源のノイズ対策

 ヘッドホンアンプの電源にUSBを使ったらノイズがひどくて使えたもんじゃない、という記事を載せた。
オシロスコープのトリガをautoにしてフリーランで波形を見てみたら一目瞭然だった。



上が電池、下がUSB電源。5mV/1div。これだけノイズがあると耳に聴こえてしまうようだ。
そこでローパスフィルタを作ってみよう、ということで考えてみた。
初めてのローパスフィルタ。
pdfにしといた。→LC.pdf
ジャジャガッチ | 電子工作 | 22:37 | comments(0) | trackbacks(0) |

FPGAで4bitシフトレジスタ

 さて、FPGAでSFCコントローラの制御をするときに必要になるのはシフトレジスタだ。
まずは4bitシフトレジスタだ、ということでVerilog HDLで書いてみた。
自動制御に使ったTC74HC165APを参考にした。
大きな違いは、load端子がHighでロードすること。ちょっと引っかかったのはブロッキング代入'='とノンブロッキング代入'<='だ。ブロッキング代入は逐次的に実行されるのだが、ノンブロッキング代入は並列的に実行される。使い分けよう。

module SH(a,clk,load,q);
input [3:0] a;
input clk,load;
output q;
reg q;
reg [3:0] r;

always @(posedge load) begin
  r = a;
  q <= a[3];
  r <= (r << 1);
  end

always @(posedge clk) begin
  if(load==0)
    begin     
      q <= r[3];
    end
      r <= (r << 1);
end
endmodule

(注:Model Simだとコンパイルが通るが、Quartusiiだと通らない。二つのalways文の中で同じ変数mに代入操作することは出来ない?2013/9/7追記)
シミュレーションのためのモジュールは次のとおり。

`timescale 1ps/1ps
module sim;
  reg [3:0] a;
  reg clk,load;
  wire q;
  parameter STEP = 100000;
  SH SH0(.a(a),.clk(clk),.load(load),.q(q));
 
  always begin
    clk = 0;
    #STEP;
    clk = 1;
    #STEP;
  end
 
  always begin
    load = 0;
    #(STEP*7);
    load = 1;
    #(STEP);
   end
 
  initial begin
  a = 4'b1111;
  #(STEP*10);
  a = 4'b0111;//0がa[3]
  #STEP;
  #STEP;
    end
endmodule

シミュレーション結果を見てみよう。

上からパラレル信号、クロック、ロード信号、シリアル信号の順。
ロード信号の立ち上がりのところでレジスタにパラレル信号が記憶され、ロードがHighの間パラレルの最初の信号が出力される。ロードがLowになるとクロックの次の立ち上がりで次のパラレル信号が出力される。
SFCのコントローラにオシロを繋いで見た波形そのものだ。

あとは16bitに拡張すればよい。

あと、関係ないけどFPGAで数値計算とかしたいな。素数判定とか並列的にさ。プロジェクトオイラーの問題解けないかな。
ジャジャガッチ | FPGA | 02:48 | comments(0) | trackbacks(0) |

Model Sim-Alteraの使い方

 今日もFPGA。さあ、今日は適当に回路を作ってシミュレーションしてみよう。
DE0についてきたModel Sim-Alteraを使ってシミュレーションする。
まず、Model Simでソースファイルを書く。

module notclk(clk,a,q);
input clk,a;
reg r;
output q;

always @(posedge clk) begin
r <= !a;
end
assign q = r;
endmodule

順序回路を使うときはreg型を使うらしい。(※8/31追記 reg q;というのを最初の方に入れとけばreg rを使わなくてもよいらしい)
入力端子clkにはクロックを入れ、クロックの立ち上がりでレジスタに入力端子aを反転したものを入れ、それを出力する、という回路になっている。
では、シミュレーション用のモジュールsimを定義する。

module notclk(clk,a,q);
input clk,a;
reg r;
output q;

always @(posedge clk) begin
r <= !a;
end
assign q = r;
endmodule

`timescale 1ps/1ps
module sim;//シミュレーション用のモジュール
reg a,clk;//入力はreg型
wire q;//出力はwire型
parameter STEP = 100000;//1STEP = 100ns C言語でいう#defineか。
notclk notclk0(.clk(clk),.a(a),.q(q));
initial begin
  a = 0;
  #STEP a = 1;//#STEP => #100000って書いてもok。
end
always begin//クロックの生成
  clk = 0;
  #(STEP/100);
  clk = 1;
  #(STEP/100);
end
endmodule

では、コンパイルしよう。

コンパイルできたらいよいよシミュレーション開始。

出てきたダイアログでシミュレーションしたいモジュールを選択します。
View→Waveで波形を見ていきます。Objectsウィンドウから見たい変数をドラッグアンドドロップします。


Runします。ここらへんを適当にいじろう。右から3番目を押してすぐに一番右を押せば大分時間が進みます。

波形が出てきた。

赤いのは出力が不定ということだと思う。-(マイナス)を押すとズームアウトします。+はズームイン。マイナスを適当に押してやるとそれっぽい波形が見えます。

入力が0から1に変化していて、その次のクロックの立ち上がりでちゃんと出力が反転していることが見えます。よかったよかった。
ジャジャガッチ | FPGA | 23:19 | comments(0) | trackbacks(0) |

FPGA:回路図を確認する

 HDLの記述だけでは味気ない、実際に回路を見たいというときは
Tool→Netlist Viewer→RTL Viewer
を使えばよいらしい。試しにNAND回路を記述してみた。

module tmp(a,b,c);
input a,b;
output c;
wire w;
MYAND AND0(.a(a),.b(b),.c(w));
MYNOT NOT0(.a(w),.c(c));
endmodule

module MYNOT(a,c);
input a;
output c;
assign c = !a;
endmodule

module MYAND(a,b,c);
input a,b;
output c;
assign c = a & b;
endmodule

こいつをRTL Viewerで見ると



こういうのが見れます。モジュールのとこをダブルクリックするとちゃんとANDゲートなども見えます。
ジャジャガッチ | FPGA | 21:15 | comments(0) | trackbacks(0) |

FPGA:色々試してみる

Verilog HDLの記述を色々試してみる。昨日試した

module tmp(a,b,c);
input a,b;
output c;
assign c = a & b;
endmodule

これからスタート。モジュールを増やしてみる。

module tmp(a,b,c);
input a,b;
output c;
assign c = a & b;
endmodule

module test(A,B,C);
input A,B;
output C;
add add0(.a(A),.b(B),.c(C));
endmodule


無事コンパイルできた。モジュールを呼び出してみる。
module tmp(a,b,c);
input a,b;
output c;
assign c = a & b;
endmodule

module add(a,b,c);
input a,b;
output c;
assign c = a + b;
endmodule

module test(A,B,C);
input A,B;
output C;
add add0(.a(A),.b(B),.c(C));
endmodule


これもコンパイルは通った。順番を入れ替えてみる。

module tmp(a,b,c);
input a,b;
output c;
assign c = a & b;
endmodule

module test(A,B,C);
input A,B;
output C;
add add0(.a(A),.b(B),.c(C));
endmodule

module add(a,b,c);
input a,b;
output c;
assign c = a + b;
endmodule

C言語的な頭だとtestの前にaddを記述しておかないとエラーになる気がしたのだが、問題なくコンパイルできた。

ちなみにコンパイルはCtrl + Lでも出来ます。

ジャジャガッチ | FPGA | 20:48 | comments(0) | trackbacks(0) |

FPGA再挑戦!

 今日からFPGAに再挑戦します。
大分前に購入したDE0を使います。
まず周辺ソフトウェアをインストール(QuartusII)。
開発ソフトは付属のDVDから無事インストールできたが、ドライバ(USB Blaster)のインストールで問題が。
Windows 7に対応していないらしい。

QuartusII 10.0付属のドライバはWindows 7に対応しているらしいのでドライバのみダウンロードしてくる。
これでさしあたって必要なソフトは準備出来た。

では、簡単な回路を作ってみよう。
File→New Project Wizard
で新たなプロジェクトを作成する。
プロジェクト名はtmpにした。
デバイスはCycloneIIIのEP3C16F484C6を選択。
あとは全部すっ飛ばした。

左上のアイコンをクリックして新しいファイルを作成する。

Verilog HDLファイルを作成する。
次のように入力する。

module tmp(a,b,c);
input a,b;
output c;
assign c = a & b;
endmodule

ただのand回路だ。モジュールの名前はプロジェクト名に一致させないといけないみたい。
右の方のアイコンでコンパイルできる。

次に実際のデバイスとのピン対応を設定する。


マニュアルにどのピンがどういう役割を持っているか書いてあるのでそれを見て設定する。
今回はH2⇔a、G3⇔b、J1⇔cと対応させる。H2、G3がプッシュボタン、J1がLEDになっている。
NodeNameとLocationを対応させる。そしたら再コンパイル。次にデバイスに回路を構築する。

Hardware Setupでデバイスを選択して、Startを押せばデバイスに回路が構築される。
ジャジャガッチ | FPGA | 20:48 | comments(0) | trackbacks(0) |

3石ヘッドホンアンプ

 とりあえず3石ヘッドホンアンプの実装完了。

さ〜っ、っていう雑音がある。単三乾電池3Vを電源にとるとなくなるので、USB電源由来のものだと思われる。
パスコン入れたり色々試してみたい。
最終的にはケースにきちんと収める予定。

詳しくはここ
特性評価はそれから。
ジャジャガッチ | 電子工作 | 17:44 | comments(0) | trackbacks(0) |

3石ヘッドホンアンプ

 USBで駆動する3石ヘッドホンアンプの回路図をupしておく。

これから回路シミュレーションをして細かい修正をしたのち、実装する。
今回やりたいことは、これをケースに収めること、そして特性の評価をすることだ。

どうやってこういう設計に至ったかはここ

ジャジャガッチ | - | 03:03 | comments(0) | trackbacks(0) |

自作SFCコントローラのプログラムを作った

 今日(昨日?)は飲み会でした。興奮して寝付けないので自作SFCコントローラのプログラムを作った。
 出来る限りシンプルにすべく、エラー対策などはオミットした。
一応動くことは動くのだが、シリアルの送受信の成功率が低い。プログラム的な工夫が必要だ。
ちょこちょこいじろう。
プログラムはここを参照。
ジャジャガッチ | 電子工作 | 02:23 | comments(0) | trackbacks(0) |

今後の予定

 SFCコントローラのハードが完成したので制御プログラムも仕上げなくてはならない。今回はボタンの同時押しにも対応させる予定。
例えばマイコン側で'A'を受信したらLowに、'a'を受信したらHighにするようにすれば、
Send('A');
Send('B')
Wait(500ms);
Send('a');
Send('b');
などとPC側のプログラムを書けばAとBの同時押しが出来るはずだ。

 あと、ひそかな野望としてFPGAを使ってSFCのコントローラを作りたいと思っている。
DE0を買ったはいいけどあんまりいじってないし。
ただ、FPGAに関する知識はほとんどふっとんでるので再勉強する必要がある。

 もうひとつやりたいのはヘッドホンアンプ作りだ。
USBから電源をとって動くアンプを作りたい。
既に回路設計はほぼ終えている。
とは言っても前に作ったエミッタ接地+2段エミッタフォロアのパラメータを少し変えただけだが。

ジャジャガッチ | その他 | 23:26 | comments(0) | trackbacks(0) |
1/2PAGES | >> |

08
--
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
--
>>
<<
--
PR
RECOMMEND
RECENT COMMENT
MOBILE
qrcode
OTHERS
Since 2013/09/17
LATEST ENTRY
CATEGORY
ARCHIVE
LINKS
PROFILE
SEARCH