MAXU
PLD入門 その1 元クロックの1/2で、90度位相差のあるクロックを作る 2.どんな回路か? module d_ff( wire SYNTHESIZED_WIRE_0; assign Q3 = DFF_inst2; assign SYNTHESIZED_WIRE_0 = ~DFF_inst2;
clockの1/2で、90度位相差を作る
追記
私のテストした回路は、元クロックをインバータで反転していますから、片方に遅延が生じ、
正確に、90度位相差のある2相クロックに、ならないかも知れません。
(MAXUマイクロキットの場合は、50MHz外部クロックですから、
内部動作周波数は、100MHz(10nS)以上だと思います。
MAXUの内部動作では、パルスの立ち上がり、立ち下り等は、pS(pico
second)のオーダー、(UFMを除く)だ、そうです。)
上記の遅延を補う為に、以下の回路を考えました。
同じ回路を、別に組む場合、74HC04を使うならば、27nS〜75nS位の大きな遅延がありますから、
この場合、元クロックを遅延していない方の回路出力に、同じインバータを、かましてやれば
2相のクロックは、90度位相差を保つと、思われます。
追記終り
――――――――――――――――――――――――――――――――――――――――――――――――-----------------------------
1.これは本当か?
従来、90度位相差のあるクロックを作るには、4倍の周波数の発振器が要ると言われていました。
私も、そう思っていました。
でも、上図では、
MAXUマイクロキット内臓のクロックである50MHzの、半分で、1/4周期(90度)位相差のあるクロックが、発生しています。
波形の形が悪いのは、無負荷で、しかも、下図のような接続で、横着してるからです、御免チャイ。
「わかるVerilogHDL入門 木村先生 トラ技special 95」で、verilogHDLを、調べています。
まだ、半分位しか、読んでません。
そこで、
勉強の意味も込めて、
自分の作りたい回路(90度位相差のあるクロックを作る)が、出来ないものか?と、
verilogHDLで記述してみる事に、しました。 ええ勉強になるでエ 。 新たな発見もあったし.....
先ず、
クロックの立ち上がりだけでなしに、立下りも利用できないかな? と、考えました。
これは、簡単で、
クロックを反転すれば、OKなのです。
そうすっと、クロックの立下りが、反転して、クロックの立ち上がりとして、数える事ができます。
これが、ミソなのです。
3.QuartusUweb edition
は、素晴らしい!
まず、
QuartusU内で、verilogHDLで、以下の デザインプログラムを書いてみました。
module
_2phase(clk0,Q1,Q2);
input
clk0;
output Q1,Q2;
reg Q1,Q2;
wire
clk1,clk2;
assign clk1=clk0;
assign
clk2=~clk0;
initial begin
Q1
<=0;
Q2
<=1;
end
always @(posedge clk1)
begin
Q1 <=~Q1;
end
always
@(posedge
clk2)begin
Q2=~Q2;
end
endmodule
で、
compile
all すると、素晴らしい事に、RTL viewerが、以下の図面を、吐き出してくれるのです。
ははん.... Dと、Qを、こんな風に結ぶんやったか.......と、QuartusUに、教えてもらいましたわ (^_^;;
逆も又、真なり.....
つまり、デザインを、BlockDiagramで書くと、反対に、HDLに翻訳してくれるんです、有り難い、Quartus様。
top
menu から、File ->Create/Update -> Create HDL Design file for
Current
Fileを選択します。
見事に、***.v ファイルが出来上がります。
以下は、出来上がったverilogHDLのファイルの一例です。(ちゃんと動くか、どうかは 知りませんけど)
//
PROGRAM "Quartus II"
// VERSION "Version 8.1
Build 163 10/28/2008 SJ Web Edition"
// CREATED ON "Fri Jan 23
16:22:43 2009"
clk,
Q3,
Q4
);
input clk;
output Q3;
output Q4;
reg DFF_inst;
reg DFF_inst2;
assign Q4 = DFF_inst;
always@(posedge
clk)
begin
begin
DFF_inst =
SYNTHESIZED_WIRE_0;
end
end
always@(posedge
clk)
begin
begin
DFF_inst2 =
DFF_inst;
end
end
endmodule
4.MAXUに実際に書き込む
Pin
Plannerを使います。
それには、MAXUマイクロキットの端子を、user's
guideで調べておきます。
注意点は、
使わない端子は、settingで、3stateのinput pinに設定しておきます。
5.simulator(SIMetrix Intro
5.50)で、確認する
従来の回路
QuartusUで、私が考えた回路
これの、simulationの結果です。
いけてるようですね。
注意点: SIMetrix
Introをインスツールしただけでは、simulateできません。
defaultで、D-FFは HC74Dを選択できますが、動きません。
NXP 標準ロジック
SPICE Models で、HC等を探して来て、そのファイルを
drag-dropして、SIMetrix
Introに、installして下さい。(tks to 「ベルが鳴がなっています」のリビエラ様)
veirlogHDLで書いた回路が、実際に動いている......
なんか、
文章で書いた事が、現実になる
不思議な体験ですね。
H.21.1.24