已回答假定已回答

AD5040数模转换

hejialiner 在 2016-12-12 詢問的問題
最後回覆由EmmaChen於2016-12-28提供

器件:AD5040

用法:简单的DA转换,FPGA驱动SPI,供电电压vdd是3.3V,参考电压vref是2.5V。

问题:只有低七位可以用,即写为16‘b0000_0000_0111_1111,这个数是2.5V,这个数以下也有输出,但是超过这个数,就没有电压输出。

程序:

module AD5040test(

  input i_clk,

  input ni_rst,

  output da_sync,

   output da_din,

  output da_sclk

    );

 

  oddr2_clk oddr2_clk_20m_0 (

  .po_clk(da_sclk),

  .i_clk(i_clk),

  .ni_clk(~i_clk)

  );

 

 

  reg nr_rst;

  reg r_dejitter;

  always@(posedge i_clk) begin

  if(!ni_rst) begin

  {nr_rst,r_dejitter} <= {r_dejitter,1'b0};

  end

  else begin

  {nr_rst,r_dejitter} <= 2'b11;

  end

  end

 

  //I路

  reg r_buf_sync;

  reg[15:0] r_buf_din;

  reg[7:0] r_da_cnt;

  reg r_da_cnted;

  reg rst;

  reg r_out_din;

 

  always @(posedge i_clk or negedge nr_rst) begin

  if (!nr_rst) begin

  r_buf_din <= 16'b0000_0000_0000_0000;

  r_buf_sync <= 1;

  r_da_cnt <= 0;

  r_out_din <= 0;

  end

  else begin

  if(r_da_cnt < 16)begin

  r_out_din <= r_buf_din[15 - r_da_cnt];

  r_buf_sync <= 0;

  r_da_cnt <= r_da_cnt + 1;

 

 

  end

  else begin

  if (r_da_cnt < 24) begin

  r_out_din <= 0;

  r_buf_sync <= 0;

  r_da_cnt <= r_da_cnt + 1;

 

 

 

  end

  else begin

  r_buf_sync <= 1;

  r_out_din <= 0;

  r_da_cnt <= 0;

  r_buf_din <= 16'b0000_0000_0101_0011;

 

 

 

  end

  end

  end

  end

  assign da_sync = r_buf_sync ;

  assign da_din  = r_out_din ;

/////////////////////////////////////////////////////////////

 

endmodule

結果