MAXUPLD入門 その5 DDS実験結果


1次LowPassFilter(fc=140KHz)通過後なので、振幅が減少している。


周波数は、クロックが50MHzぴったりと計算して、0.7Hzの誤差。
 カウンタは、GPSで同期させた信号源を、元クロックとしている。

 1.MAXUマイクロキットでDDS

    外付けは、1次ローパスフィルタ(fc=140KHz)のみです。

    MAXUPLDによる構成は、以下のようにしました。



    実験結果を列挙します。

    100KHz 出力



                                                             後ほどsin波のromデータ上下限値を90%に抑えると、更に綺麗になりました。

    200KHz 出力



    以下、振幅が小さくなっていくのは、1次ローパスフィルタ(fc=140KHz)の為です。



    この、1.6MHZを拡大してみます。

次に

この辺りになると、さすがに、駄目ですね。

下がって、10KHz 出力


                                                                後ほど、sin波のromデータの上下限を90%に抑えると、更にきれいになりました。

    こうして、見てみますと、

    10KHz出力でも、100KHz出力でも、高調波のレベルは、大差ありません。

    この理由が解らなくて、頭いたいですわ、涙  (-_-)

    でも、第2高調波が、-50dBCと言う事は

    -40dBで、1/100、更に 6dBの-46dBで 1/200 だから、そこそこ、いいのかも.....贅沢は敵?

    そして、ノイズレベルは、いずれも、-80dBC以下で、素晴らしいです。

    パルス密度変調( Pulse Density Modulation )って、素晴らしいですね。

    1bitDACって、この事を言うんですね、知らなかった.....PWMより、よさげ。

    しかし、この高調波、なんとか取れないでしょうかね....と、未練たっぷり。

    ΔΣ変調の事、ここで調べさせていただいています、御礼。

 2.verilogHDLでのプログラムは

    
          16bitのデータが 1024個のromでも、LEは、半分の消費のみ

           周波数分解能は
      


 トップモジュールは

//address 32bit, data 16bit。 KEYを押す度に、100KHz up。 clock=50MHz
module myDDS4(clock,KEY,carry_out);
 input   clock;
 input   KEY;
 reg  [31:0] inc;
 wire [9:0] addr;  //10bit rom address
 reg  [31:0]  add2;  //32bit
 wire [15:0] data; //16bit data
 output carry_out;
  
 assign  addr =add2[31:22];
 
 mSinRom  mSinRom1(addr,data);
 acum  PDM(data,clock,carry_out);
 
 always @(posedge clock) begin
  add2 <= add2 + inc;
 end
 
 always @(negedge KEY) begin
  //inc <= inc +32'h0083126F;//100KHz :
  inc <= inc +32'h000D1B72; //10KHz=32'h000D1B72
 end
 
 initial begin
  //inc <=32'h0083126F;//100KHz
  inc <=32'h000D1B72;//10KHz
 end
 
endmodule

以下、

module mSinRom(adr,dat);
 
input [9:0]  adr; //10bit address
 output [15:0] dat; //16bit data
 reg [15:0]  romdat;
 
 assign dat=romdat;
 
 always @(adr) begin
  case(adr)
  
10'h000:romdat=16'h7FFF;
10'h001:romdat=16'h80C8;
10'h002:romdat=16'h8191;
10'h003:romdat=16'h825A;
......
10'h3FD:romdat=16'h7DA3;
10'h3FE:romdat=16'h7E6C;
10'h3FF:romdat=16'h7F35;

  default romdat=16'h7FFF;
 
  endcase
 end
endmodule

module acum(VDA,clk,cy_out);

 input [15:0] VDA ;
 input  clk;
 output   cy_out;
 
 reg [15:0]   R;
 reg    cy_out;
 
 
 initial begin
     R <=0;
 end

 always @(posedge clk) begin
  { cy_out, R } <= VDA +R;
 end
  
endmodule

   
 こんなに素早く DDSができるとは、知りませんでした。

    時代錯誤の回路図によるCPLD設計の上田様に、御礼。

H.21.2.18