MAXU PLD入門 その1 元クロックの1/2で、90度位相差のあるクロックを作る


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度)位相差のあるクロックが、発生しています。

    波形の形が悪いのは、無負荷で、しかも、下図のような接続で、横着してるからです、御免チャイ。

    

 2.どんな回路か?

    「わかる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"

module d_ff(
 clk,
 Q3,
 Q4
);


input clk;
output Q3;
output Q4;

wire SYNTHESIZED_WIRE_0;
reg DFF_inst;
reg DFF_inst2;

assign Q3 = 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

assign SYNTHESIZED_WIRE_0 =  ~DFF_inst2;


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