当前位置:   article > 正文

ZYBO/ZYNQ XADC 的使用_zynq pl xadc

zynq pl 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
);

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53

数据捕获:


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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

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

下面是一些资料:

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/509900
推荐阅读
相关标签
  

闽ICP备14008679号