基于xilinx 7系列fpga的xdc代码,获取fpga内部温度、各电压值

这篇具有很好参考价值的文章主要介绍了基于xilinx 7系列fpga的xdc代码,获取fpga内部温度、各电压值。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、注意事项

1、参考文档:UG480(7Series_XADC)和PG091(XADC_Wizard);
2、一个FPGA内部只有一个ADC模块,当我们使用了MIG控制器时,在生成MIG的过程中要disable XADC,否则会产生冲突;
3、内部的ADCCLK最大时钟速率为26MHz,程序中默认ADCCLK=DCLK/4;
4、ADC的最大转换速率为1MSPS。

二、温度和电压值的计算:

1、Temp=[(MEASURED_TEMP[15:4]*503.975)/4096] – 273.15;
2、Vccint=(MEASURED_VCCINT[15:4]*3)/4096;
3、Vccaux,Vccbram的电压转换方式和Vccint一样;

三、例化接口

DCLK通常为50M或100MHz,复位信号高有效,其VAUXP,VAUXN,VP,VN四个输入信号可直接给0,例化的接口如下:
XADC_7series_Measure XADC_7series_Measure_inst(
        .DCLK               (clk_100m       ), // Clock input for DRP
        .RESET              (reset_H        ),//active high
        .VAUXP              ('d0), 
        .VAUXN              ('d0), // Auxiliary analog channel inputs
        .VP                 ('b0), 
        .VN                 ('b0),// Dedicated and Hardwired Analog Input Pair
        .MEASURED_TEMP      (fpga_temp      ), 
        .MEASURED_VCCINT    (fpga_vccint    ),
        .MEASURED_VCCAUX    (fpga_vccaux    ), 
        .MEASURED_VCCBRAM   (),
        .MEASURED_AUX0      (),
        .MEASURED_AUX1      (),
        .MEASURED_AUX2      (), 
        .MEASURED_AUX3      (),
        .ALM                (),
        .CHANNEL            (),
        .OT                 (),
        .XADC_EOC           (),
        .XADC_EOS           ()
    );

四、代码

module XADC_7series_Measure (
input DCLK, // Clock input for DRP
input RESET,
input [3:0] VAUXP, VAUXN, // Auxiliary analog channel inputs
input VP, VN,// Dedicated and Hardwired Analog Input Pair
output reg [15:0] MEASURED_TEMP, MEASURED_VCCINT,
output reg [15:0] MEASURED_VCCAUX, MEASURED_VCCBRAM,
output reg [15:0] MEASURED_AUX0, MEASURED_AUX1,
output reg [15:0] MEASURED_AUX2, MEASURED_AUX3,
output wire [7:0] ALM,
output wire [4:0] CHANNEL,
output wire OT
);
wire busy;
wire [5:0] channel;
wire drdy;
reg [6:0] daddr;
reg [15:0] di_drp;
wire [15:0] do_drp;
wire [15:0] vauxp_active;
wire [15:0] vauxn_active;
reg [1:0] den_reg;
reg [1:0] dwe_reg;
parameter init_read = 8'h00,
read_waitdrdy = 8'h01,
write_waitdrdy = 8'h03,
read_reg00 = 8'h04,
reg00_waitdrdy = 8'h05,
read_reg01 = 8'h06,
reg01_waitdrdy = 8'h07,
read_reg02 = 8'h08,
reg02_waitdrdy = 8'h09,
read_reg06 = 8'h0a,
reg06_waitdrdy = 8'h0b,
read_reg10 = 8'h0c,
reg10_waitdrdy = 8'h0d,
read_reg11 = 8'h0e,
reg11_waitdrdy = 8'h0f,
read_reg12 = 8'h10,
reg12_waitdrdy = 8'h11,
read_reg13 = 8'h12,
reg13_waitdrdy = 8'h13;

reg [7:0] state = init_read;
wire    eoc;
wire    eos;

always @(posedge DCLK)
if (RESET) begin
state <= init_read;
den_reg <= 2'h0;
dwe_reg <= 2'h0;
di_drp <= 16'h0000;
end
else
case (state)
init_read : begin
daddr = 7'h40;
den_reg = 2'h2; // performing read
if (busy == 0 ) state <= read_waitdrdy;
end
read_waitdrdy :
if (drdy ==1) begin
di_drp = do_drp & 16'h03_FF; //Clearing AVG bits for Configreg0
daddr = 7'h40;
den_reg = 2'h2;
dwe_reg = 2'h2; // performing write
state = write_waitdrdy;
end
else begin
den_reg = { 1'b0, den_reg[1] } ;
dwe_reg = { 1'b0, dwe_reg[1] } ;
state = state;
end
write_waitdrdy :
if (drdy ==1) begin
state = read_reg00;
end
else begin
den_reg = { 1'b0, den_reg[1] } ;
dwe_reg = { 1'b0, dwe_reg[1] } ;
state = state;
end
read_reg00 : begin
daddr = 7'h00;
den_reg = 2'h2; // performing read
if (eos == 1) state <=reg00_waitdrdy;
end
reg00_waitdrdy :
if (drdy ==1) begin
MEASURED_TEMP = do_drp;
state <=read_reg01;
end
else begin
den_reg = { 1'b0, den_reg[1] } ;
dwe_reg = { 1'b0, dwe_reg[1] } ;
state = state;
end
read_reg01 : begin
daddr = 7'h01;
den_reg = 2'h2; // performing read
state <=reg01_waitdrdy;
end
reg01_waitdrdy :
if (drdy ==1) begin
MEASURED_VCCINT = do_drp;
state <=read_reg02;
end
else begin
den_reg = { 1'b0, den_reg[1] } ;
dwe_reg = { 1'b0, dwe_reg[1] } ;
state = state;
end
read_reg02 : begin
daddr = 7'h02;
den_reg = 2'h2; // performing read
state <=reg02_waitdrdy;
end
reg02_waitdrdy :
if (drdy ==1) begin
MEASURED_VCCAUX = do_drp;
state <=read_reg06;
end
else begin
den_reg = { 1'b0, den_reg[1] } ;
dwe_reg = { 1'b0, dwe_reg[1] } ;
state = state;
end
read_reg06 : begin
daddr = 7'h06;
den_reg = 2'h2; // performing read
state <=reg06_waitdrdy;
end
reg06_waitdrdy :
if (drdy ==1) begin
MEASURED_VCCBRAM = do_drp;
state <= read_reg10;
end
else begin
den_reg = { 1'b0, den_reg[1] } ;
dwe_reg = { 1'b0, dwe_reg[1] } ;
state = state;
end
read_reg10 : begin
daddr = 7'h10;
den_reg = 2'h2; // performing read
state <= reg10_waitdrdy;
end
reg10_waitdrdy :
if (drdy ==1) begin
MEASURED_AUX0 = do_drp;
state <= read_reg11;
end
else begin
den_reg = { 1'b0, den_reg[1] } ;
dwe_reg = { 1'b0, dwe_reg[1] } ;
state = state;
end
read_reg11 : begin
daddr = 7'h11;
den_reg = 2'h2; // performing read
state <= reg11_waitdrdy;
end
reg11_waitdrdy :
if (drdy ==1) begin
MEASURED_AUX1 = do_drp;
state <= read_reg12;
end
else begin
den_reg = { 1'b0, den_reg[1] } ;
dwe_reg = { 1'b0, dwe_reg[1] } ;
state = state;
end
read_reg12 : begin
daddr = 7'h12;
den_reg = 2'h2; // performing read
state <= reg12_waitdrdy;
end
reg12_waitdrdy :
if (drdy ==1) begin
MEASURED_AUX2= do_drp;
state <= read_reg13;
end
else begin
den_reg = { 1'b0, den_reg[1] } ;
dwe_reg = { 1'b0, dwe_reg[1] } ;
state = state;
end
read_reg13 : begin
daddr = 7'h13;
den_reg = 2'h2; // performing read
state <= reg13_waitdrdy;
end
reg13_waitdrdy :
if (drdy ==1) begin
MEASURED_AUX3= do_drp;
state <=read_reg00;
daddr = 7'h00;
end
else begin
den_reg = { 1'b0, den_reg[1] } ;
dwe_reg = { 1'b0, dwe_reg[1] } ;
state = state;
end
endcase

XADC #(     // Initializing the XADC Control Registers
.INIT_40(16'h9000),// averaging of 16 selected for external channels
.INIT_41(16'h2ef0),// Continuous Seq Mode, Disable unused ALMs, Enable calibration
.INIT_42(16'h0400),// Set DCLK divides
.INIT_48(16'h4701),// CHSEL1 - enable Temp VCCINT, VCCAUX, VCCBRAM, and calibration
.INIT_49(16'h000f),// CHSEL2 - enable aux analog channels 0 - 3
.INIT_4A(16'h0000),// SEQAVG1 disabled
.INIT_4B(16'h0000),// SEQAVG2 disabled
.INIT_4C(16'h0000),// SEQINMODE0
.INIT_4D(16'h0000),// SEQINMODE1
.INIT_4E(16'h0000),// SEQACQ0
.INIT_4F(16'h0000),// SEQACQ1
.INIT_50(16'hb5eb),// Temp upper alarm trigger 85°C
.INIT_51(16'h599a),// Vccint upper alarm limit 1.05V
.INIT_52(16'hA148),// Vccaux upper alarm limit 1.89V
.INIT_53(16'h0000),// OT upper alarm limit 125°C using automatic shutdown - see Thermal
.INIT_54(16'ha939),// Temp lower alarm reset 60°C
.INIT_55(16'h5112),// Vccint lower alarm limit 0.95V
.INIT_56(16'h91Ed),// Vccaux lower alarm limit 1.71V
.INIT_57(16'hae4f),// OT lower alarm reset 70°C - see Thermal Management
.INIT_58(16'h599a),// VCCBRAM upper alarm limit 1.05V
)
XADC_INST (// Connect up instance IO. See UG580 for port descriptions
.CONVST (1'b0),// not used
.CONVSTCLK (1'b0), // not used
.DADDR (daddr),
.DCLK (DCLK),
.DEN (den_reg[0]),
.DI (di_drp),
.DWE (dwe_reg[0]),
.RESET (RESET),
.VAUXN (vauxn_active ),
.VAUXP (vauxp_active ),
.ALM (ALM),
.BUSY (busy),
.CHANNEL(CHANNEL),
.DO (do_drp),
.DRDY (drdy),
.EOC (eoc),
.EOS (eos),
.JTAGBUSY (),// not used
.JTAGLOCKED (),// not used
.JTAGMODIFIED (),// not used
.OT (OT),
.MUXADDR (),// not used
.VP (VP),
.VN (VN)
);

文章来源地址https://www.toymoban.com/news/detail-795298.html

到了这里,关于基于xilinx 7系列fpga的xdc代码,获取fpga内部温度、各电压值的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Xilinx 7系列 FPGA硬件知识系列(九)——FPGA的配置

    目录 1 .1配置模式 1.1.1  主模式 1.1.2  从模式 1.2  7种配置模式 1.2.1  主串配置模式 1.2.2  从串配置模式 ​编辑1.2.3  主并配置模式 1.2.4  从并配置模式 1.2.5  JTAG配置模式 ​编辑1.2.6  主SPI配置模式 ​编辑1.2.7  主BPI配置模式 1.2.8  FPGA BPI加载时间(参考xapp587) 2、BPI

    2024年03月13日
    浏览(74)
  • xilinx 7系列fpga上电配置

    Xilinx FPGA通过加载比特流到内部存储单元来进行配置。 Xilinx FPGA存在两种数据配置路径,一种是满足最小引脚需求的串行路径,一种是可用8位、16位或32位来连接到行业的高性能通用接口,如处理器,8位或者16位并行的闪存。与处理器和处理器外围设备一样, FPGA可以在系统中

    2024年04月14日
    浏览(87)
  • FPGA学习_Xilinx7系列FPGA基本结构

    参考:https://xilinx.eetrend.com/content/2019/100042384.html xilinx7系列FPGA主要包括:Spartan®-7、Artix®-7、Kintex®-7、Virtex®-7。其性能/密度/价格也随着系列的不同而提升。 Spartan7 系列拥有最低的价格、最低的功耗、最小的尺寸以及最低的设计难度,一些低端应用中极为合适。 Artix7 系列相

    2024年04月09日
    浏览(93)
  • xilinx 7系列FPGA 官方文档整理

    1. 官方文档查找链接 搜索结果 • AMD 自适应计算文档门户 (xilinx.com) 2. ug470 - 配置user guide 7 Series FPGAs Configuration User Guide • 7 Series FPGAs Configuration User Guide (UG470) • 阅读器 • AMD 自适应计算文档门户 (xilinx.com) 3. ug471 -IO资源 ug471_7Series_SelectIO.pdf • 查看器 • AMD 自适应计算文档

    2024年04月13日
    浏览(53)
  • Xilinx 7系列FPGA局部时钟资源

    局部时钟网络是玩去哪独立于全局时钟网络的。与全局时钟不同,局部时钟信号(BUFR)的覆盖范围仅限于一个时钟区域。一个I/O时钟信号驱动单个时钟区域。这些网络对于源同步接口设计特别有用。在7系列器件中,I/O bank与局部时钟域的大小相同。 在7系列器件中,局部时钟

    2024年04月29日
    浏览(58)
  • xilinx 7系列FPGA时钟布线资源

    7系列FPGA拥有多种时钟路由资源,以支持各种时钟方案和需求,包括高扇出、短传播延迟以及极低的偏斜。为了最佳地利用时钟路由资源,需要了解如何将用户时钟从PCB传递到FPGA,确定哪种时钟路由资源最优,然后通过利用适当的I/O和时钟缓冲器来访问这些时钟路由资源。

    2024年04月22日
    浏览(63)
  • Xilinx 7系列FPGA内置ADC

     Xilinx 7系列FPGA全系内置了一个ADC,称之为XADC。这个XADC,内部是两个1mbps的ADC,可以采集模拟信号转为数字信号送给FPGA内部使用。      XADC内部可以直接获取芯片结温和FPGA的若干供电电压(7系列不包括VCCO),用于监控FPGA内部状况。同时提供了17对差分管脚,其中一对专用

    2024年02月09日
    浏览(51)
  • Xilinx 7系列FPGA的时钟管理

    在7系列FPGA中,时钟管理单元(CMT)包含了混合模式时钟管理器(MMCM)和锁相环(PLL)。PLL是包含了MMCM功能的一个子集。CMT骨干网可用于链接CMT的时钟功能。CMT图(图3-1)展示了各种时钟输入源与MMCM/PLL之间连接的高级视图,时钟输入连接允许多个资源为MMCM/PLL提供参考时钟

    2024年04月26日
    浏览(41)
  • Xilinx 7系列FPGA配置(ug470)

    如果 M[2:0] 为 ”101“,则该FPGA 只支持 JTAG 进行配置。处于其余配置模式下时,依旧可以使用 JTAG 模式进行调试,并且优先级最高。 串行配置模式 接口 从-连接方式 主-连接方式 除了CCLK 连接不同,其他都和从串行模式一样 串行菊花链(非同时配置) 上升沿采样DIN数据,下降

    2024年03月22日
    浏览(58)
  • Vivado | FPGA开发工具(Xilinx系列芯片)

    官网下载地址 最详细的Vivado安装教程 Vivado的安装以及使用_入门

    2024年02月12日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包