ZYBO/ZYNQ XADC 的使用

ZYBO XADC 的使用

前言:关于xadc官方给出了 关于ps端读取数据的例程
本篇文章主要写pl端读取数据

vivado ip核调用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
这是ip设置

接着就是进行例化module

顶层

module XADC_top(
input clk_in,
input vp_in,
input vn_in,   
input vauxp7,  
input vauxn7,  
input vauxp15, 
input vauxn15
);

wire [4:0] channel_out;
wire eoc_out;
wire drdy_out;
wire [15:0] do_out;



xadc_wiz_0 xadc (
  .di_in(16'b0),              // input wire [15 : 0] di_in
  .daddr_in({2'b0,channel_out}),        // input wire [6 : 0] daddr_in
  .den_in(eoc_out),            // input wire den_in
  .dwe_in(1'b0),            // input wire dwe_in
  .drdy_out(drdy_out),        // output wire drdy_out
  .do_out(do_out),            // output wire [15 : 0] do_out
  .dclk_in(clk_in),          // input wire dclk_in
  .reset_in(),        // input wire reset_in
  .vp_in  (vp_in),              // input wire vp_in
  .vn_in  (vn_in),              // input wire vn_in
  .vauxp7 (vauxp7),            // input wire vauxp7
  .vauxn7 (vauxn7),            // input wire vauxn7
  .vauxp15(vauxp15),          // input wire vauxp15
  .vauxn15(vauxn15),          // input wire vauxn15
  .channel_out(channel_out),  // output wire [4 : 0] channel_out
  .eoc_out(eoc_out),          // output wire eoc_out
  .alarm_out(),      // output wire alarm_out
  .eos_out(),          // output wire eos_out
  .busy_out()        // output wire busy_out
);

data_cap data_cap(             
  .clk_in       (clk_in),             
  .drdy_out     (drdy_out),            
  .channel_out  (channel_out),   
  .do_out       (do_out)
);   
ila_0 ila_0 (
	.clk(clk_in), // input wire clk


	.probe0(channel_out), // input wire [4:0]  probe0  
	.probe1(do_out) // input wire [15:0]  probe1
);

数据捕获:


module data_cap(
input    clk_in,
input   drdy_out,
input   [4:0] channel_out,
input   [15:0] do_out
    );
    
reg [11:0] Temperature;
reg [11:0] Vcc_int;
reg [11:0] v_in;
reg [11:0] v_in7;
reg [11:0] v_in15;

    
    
always@(posedge clk_in)
begin
if(drdy_out == 1'b1 && channel_out ==5'd0)begin    
    Temperature <= do_out[15:3] ;    
end 
else if ( drdy_out == 1'b1 && channel_out ==5'd1) begin
    Vcc_int <= do_out[15:3] ;
end 
else if ( drdy_out == 1'b1 && channel_out ==5'h10) begin
    v_in <= do_out[15:3] ;
end else if ( drdy_out == 1'b1 && channel_out ==5'h17) begin
    v_in7 <= do_out[15:3] ;
end else if ( drdy_out == 1'b1 && channel_out ==5'h1F) begin
    v_in15 <= do_out[15:3] ;
end 
else begin
    Vcc_int <= Vcc_int ;
    Temperature <=  Temperature ;       
end  
end 

endmodule

读取address 就是根据channel输出通道 补两个0,但drdy输出高电平 表明数据有效 那么就可以进行读取 根据通道知道 是哪路采集的数据 然后要对数据进行相应的运算,比如:1v对应12bit的 FFFH即为:4095
那么实际电压就是:v_real = 1/4095*v_in(单端输入模式)
关于如何运算:
XADC基础知识
下面是结果:
在这里插入图片描述

下面是一些资料:

通道的具体地址:
在这里插入图片描述
两份官方文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值