TA的每日心情 | 难过 2020-6-28 12:14 |
---|
新手上路

- 积分
- 31
|
本帖最后由 神经蛙_HAt4a 于 2020-6-28 09:57 编辑
编写了一个16位DAC芯片——AD5541BRZ的驱动模块,通过在电脑端修改DAC_DATA=的值来获得对应的电压输出值。
但是实际测量情况和理论计算情况相差甚远(可以参考如下的测量数据,给我的感觉就像AD5541实际上是个15位的DAC一样)。pll给DAC分配的是1Mhz的时钟。因为压缩包太大,无法上传,具体代码可参考图片或者如下代码。
请求各位大佬指教!
理论电压输出 实际的输出电压
2.5V (16'HFFFF) 2.5v(等于参考电压)
1.25V (16'h8000) 0
0.625V(16'4000) 1.253V (为理论值的两倍)
0.3125V(16'2000) 0.627v(为理论值的两倍)
0.15625V(16'1000) 0.314v (为理论值的两倍)
//AD5541驱动顶层模块
module ADC5541_top(
Clk, //模块时钟50M
rstn, //模块复位
DAC_CS_N, //AD5541的CS_N接口
DAC_DIN, //AD5541的DIN接口
DAC_SCLK //AD5541的SCLK接口
);
input Clk;
input rstn;
output DAC_CS_N;
output DAC_DIN;
output DAC_SCLK;
wire [15:0]DAC_DATA;
wire DAC_State;
wire Set_Done;
wire clk1;
pll pll_u0(
.areset(~rstn),
.inclk0(Clk),
.c0(clk1),
.locked(locked)
);
assign DAC_DATA=16'h8000;//修改这里的值获得不同的输出电压
ADC5541 ADC5541_u0(
.clk_in(clk1),//1M
.rstn(rstn),
.DAC_DATA(DAC_DATA),//用于外部改变DAC输出值
.DAC_CLK(DAC_SCLK),
.DAC_CS(DAC_CS_N),
.DAC_DIN(DAC_DIN)
);
endmodule
//////////////////////////////////////////////////////////////////////////////////
AD5541驱动模块
//////////////////////////////////////////////////////////////////////////////////
module ADC5541(
input clk_in,//1M
input rstn,
input[15:0] DAC_DATA,
output DAC_CLK,
output DAC_CS,
output DAC_DIN
// output DAC_LADC
);
reg[11:0] DAC_cnt;
wire clk;
assign clk=clk_in;
always@(posedge clk)
if(!rstn)
DAC_cnt<=12'd0;
else if(DAC_cnt<=12'd21)
DAC_cnt<=DAC_cnt+1'b1;
else
DAC_cnt<=12'd0;
/////////generate cs////////////
reg DAC_CS_buf;
always@(posedge clk)
if(!rstn)
DAC_CS_buf<=1'b1;
else if((DAC_cnt<=12'd18)&(DAC_cnt>=12'd2))
DAC_CS_buf<=1'b0;
else
DAC_CS_buf<=1'b1;
assign DAC_CS=DAC_CS_buf;
/////////generate DAC_DIN////////////
reg DAC_DIN_buf;
wire[15:0] DAC_DATA_buf;
assign DAC_DATA_buf=DAC_DATA;
always@(posedge clk)
if(!rstn)
DAC_DIN_buf<=1'b0;
else if((DAC_cnt<=12'd17)&(DAC_cnt>=12'd2))
DAC_DIN_buf<=DAC_DATA[17-DAC_cnt];
else
DAC_DIN_buf<=1'b0;
assign DAC_DIN=DAC_DIN_buf;
/////////generate DAC_clk////////////
assign DAC_CLK=((DAC_cnt<=12'd19)&(DAC_cnt>=12'd3))?(~clk):1'b1;
endmodule
|
|