Vivado 比特流编译时间获取以及FPGA电压温度获取(实用)

Vivado 比特流编译时间获取以及FPGA电压温度获取

语言 :Verilg HDL 、VHDL
EDA工具:ISE、Vivado

      • Vivado 比特流编译时间获取以及FPGA电压温度获取
        • 一、引言
        • 二、 获取FPGA 当前程序的编译时间
          • verilog中直接调用下面源语
          • 2. FPGA电压温度获取
          • (1)使用源语调用
          • (2)温度和电压解析
          • 温度解析公式
          • 电压解析公式
          • 测到的一组值:
          • (2)调用xadc ip核
        • 三、结尾

  • 关键词: 调用,Vivado,
一、引言

在FPGA开发中,经常需要对整个系统进行健康信息监控以及版本信息管脚,这时,需要知道FPGA 当前程序的编译时间以及FPGA实时的温度电压信息,本文对这两个部分进行总结说明,方便诸君不时之需,直接调用便可,不需要多在这上面耗费时间和精力。

二、 获取FPGA 当前程序的编译时间
verilog中直接调用下面源语

 reg[31:0] DATA ;
   USR_ACCESSE2 USR_ACCESSE2_inst (
      .CFGCLK( ),       // 1-bit output: Configuration Clock output
      .DATA(DATA),           // 32-bit output: Configuration Data output
      .DATAVALID( )  // 1-bit output: Active high data valid output
   );

因为USR_ACCESSE2 为源语,所以直接在调用上面的模块,便可以得到32-bit 输出DATA,这便是当前bit(比特流)的详细编译时间,该数据的解析格式如下:

在这里插入图片描述
只需要把DATA中对应的位数取出来,即可解析出当前bit的编译时间年月日时分秒。

下面是 VHDL的调用。

inst_usr_access2: USR_ACCESSE2
port map (
    CFGCLK                  => open,
    DATA                    => bit_stream_info,
    DATAVALID               => open
);
 
2. FPGA电压温度获取
(1)使用源语调用
reg[15:0] vccint_dout

xadc_test xadc_test_inst (
	 .clk_100mhz(clk_50M), 
	 .rst_n(FPGA3_RST), 
	 .temperature_dout(temperature_dout), 
	 .vccint_dout(vccint_dout), 
	 .vccaux_dout(vccaux_dout), 
	 .vccbram_dout(vccbram_dout)
	 );

可以在下面链接中直接下载该模块,然后直接用上面的例化调用即可。
7系列以上xlinx FPGA +xadc模块+获取FPGA的温度电压+使用源语 直接调用模块

(2)温度和电压解析
温度解析公式
Temp()=(MEASURED_TEMP[15:4]* 503.975)/4096-273.15
电压解析公式
VCCINT=  (MEASURED_VCCINT[15:4]* 3)/4096
测到的一组值:

Tem: 16’hA534;

VCCINT: 16’h5478;
VCCAUX: 16’h988F;
VCCBRAM: 16’h535F;
([15:4]就是高12位,去掉低四位便是有效值。即:Tem有效值等于16’hA53)

(2)调用xadc ip核

调用ip核与使用xadc源语本质是一样的,只是稍微有些繁琐。

IP核的主要设置如下:
(1)
在这里插入图片描述
(2)
在这里插入图片描述
(3)在这里插入图片描述
(3)
在这里插入图片描述

IP的定层模块我也附上:

`timescale 1ns / 1ps

module xadc_test(
input                 clk_100mhz,
input                 rst_n ,
output	reg[15:0]    temp_dout , //Data
output	reg	[15:0]    vccint_dout ,
output	reg	[15:0]    vccaux_dout ,
output	reg	[15:0]    vccbram_dout 
    );
 
    wire    clk;
    reg[15:0]    temperature_dout;
   //-------------------------------------
   //---- XADC IP INST ------------- 
   wire [15:0]	di_in;
   wire [6:0]	daddr_in;
   wire			den_in;
   wire			dwe_in;
   wire			drdy_out;
   wire [15:0]	do_out;
   
   wire [4:0]	channel_out;
   wire			eoc_out;
   wire			eos_out;
   wire			busy_out;
   
 
   assign clk = clk_100mhz;
   
   //XADC IP (Mode:Channel Sequencer)
   xadc_wiz_0 xadc_ip_inst (
     .di_in(di_in),                              // input wire [15 : 0] di_in
     .daddr_in(daddr_in),                        // input wire [6 : 0] daddr_in
     .den_in(den_in),                            // input wire den_in
     .dwe_in(dwe_in),                            // 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),                          // input wire dclk_in
     .reset_in(!rst_n),                        // input wire reset_in
     .vp_in(1'b0),                              // input wire vp_in
     .vn_in(1'b0),                              // input wire vn_in
     .user_temp_alarm_out(),  // output wire user_temp_alarm_out
     .vccint_alarm_out(),        // output wire vccint_alarm_out
     .vccaux_alarm_out(),        // output wire vccaux_alarm_out
     .ot_out(),                            // output wire ot_out
     .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(eos_out),                          // output wire eos_out
     .busy_out(busy_out)                        // output wire busy_out
   );
   //only Read
    assign di_in = 16'd0;   //not used
    assign dwe_in = 1'b0;   //not used
    assign den_in = eoc_out;
    assign daddr_in = {2'd0,channel_out};
    
    //-------------------------------------
    //Read Temperature Data
    reg    temperature_dout_en ;
    reg    vccint_dout_en ;
    reg    vccaux_dout_en ;
    reg    vccbram__dout_en ;
	always @(posedge clk or negedge rst_n)
        begin
            if(!rst_n) 
                begin
                    temperature_dout <= 16'd0;
                    vccint_dout <= 16'd0;
                    vccaux_dout <= 16'd0;
                    vccbram_dout <= 16'd0;
                    
                    temperature_dout_en <= 1'b0;
                    vccint_dout_en <= 1'b0;
                    vccaux_dout_en <= 1'b0;
                    vccbram__dout_en <= 1'b0;
                end
            else 
                begin
                    if((drdy_out) &&(channel_out == 5'd0))     // Latch ADCcode of On-chip-temperature
                        begin
                            temperature_dout <= (drdy_out==1'b1)?do_out:16'd0;
                            temperature_dout_en <= drdy_out;
                        end
                    else if((drdy_out) &&(channel_out == 5'd1))     // Latch ADCcode of VCCINT
                        begin
                            vccint_dout <= (drdy_out==1'b1)?do_out:16'd0;
                            vccint_dout_en <= drdy_out;
                        end
                    else if((drdy_out) &&(channel_out == 5'd2))     // Latch ADCcode of VCCAUX
                        begin
                            vccaux_dout <= (drdy_out==1'b1)?do_out:16'd0;
                            vccaux_dout_en <= drdy_out;
                        end
                    else if((drdy_out) &&(channel_out == 5'd6))        // Latch ADCcode of VCCBRAM
                        begin
                            vccbram_dout <= (drdy_out==1'b1)?do_out:16'd0;
                            vccbram__dout_en <= drdy_out;
                        end
                    else
                        begin
                            temperature_dout_en <= 1'b0;
                            vccint_dout_en <= 1'b0;
                            vccaux_dout_en <= 1'b0;
                            vccbram__dout_en <= 1'b0;
                        end
                end
        end
        
        
        
        wire[20:0] p;
        
        
  mult_x504 m504 (
  .CLK(clk),  // input wire CLK
  .A(temperature_dout[15:4]),      // input wire [11 : 0] A
  .P(p)      // output wire [20 : 0] P
);  
        
   always@( posedge clk)  temp_dout = p[20:12] - 273 ; 
        
 
endmodule

其中mult_x504 是一个乘法器ip,输入值乘无符号数504,然后再减去273,就是结果temp_dout 就是真实的温度结果了。

三、结尾

本文总结了Vivado 比特流编译时间获取以及FPGA电压温度获取的方法,以及获取后将数据进行解析的公式,以上内容都是实际工程中验证过的,可放心使用,如有问题可私信博主,知无不言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/668552.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大厂Java面试题:MyBatis的映射器(Mapper.xml)中有哪些常见的元素?

大家好&#xff0c;我是王有志。今天给大家带来的是一道来自京东的 MyBatis 面试题&#xff1a;MyBatis的映射器&#xff08;Mapper.xml&#xff09;中有哪些常见的元素&#xff1f;MyBatis 的映射器中提供了 9 个顶级元素&#xff0c;按照功能可以分为 3 类&#xff1a; SQL …

常用电机测试方法的介绍与功能实现(M测试方法)

目录 概述 1 常用电机测速方法简介 1.1 方法概览 1.2 编码器测速方法 2 M法测速 2.1 理论描述 2.2 实现原理 2.3 速度计算方法 3 功能实现 3.1 功能介绍 3.2 代码实现 3.2.1 使用STM32Cube配置参数 3.2.2 脉冲计数功能 3.2.3 测速函数 4 测试 概述 本文主要介绍…

MySQL:CRUD进阶(七千五百字)

文章目录 前置文章&#xff1a;&#x1f4d1;1. 数据库约束&#x1f324;️1.1 约束类型&#x1f324;️1.2 NULL约束&#x1f324;️1.3 Unique&#xff1a;唯一约束&#x1f324;️1.4 Default&#xff1a;默认值约束&#x1f324;️1.5 Primary key&#xff1a;主键约束&…

一个不错的讲解做竞品分析的方法

比如选了竞品1&#xff0c;竞品2&#xff0c;然后每个功能项&#xff0c;选定1个做标准被比较的锚点&#xff0c;比如外观&#xff0c;用竞品2&#xff0c;设置为1分&#xff0c;然后看竞品1&#xff0c;在外观的评分上&#xff0c;相比竞品2&#xff0c;是分数低点还是高点&am…

java期末细节知识整理(一)

1.java程序的执行过程&#xff1a;先编译后解释。也就是我们在idea写的文件叫做java源文件&#xff08;.java结尾的文件&#xff09;&#xff0c;经过编译器会生成字节码文件&#xff08;.class结尾的文件&#xff09;&#xff0c;再通过解释器进行实现 2.栈用来存储引用类型的…

免费实现网站HTTPS访问

HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;是一种基于SSL协议的HTTP安全协议&#xff0c;旨在为客户端&#xff08;浏览器&#xff09;与服务器之间的通信提供加密通道&#xff0c;确保数据在传输过程中的保密性、完整性和身份验证。与传统的HTTP相比&a…

C语言-单精度和双精度浮点型

文章目录 一、遇到的问题二、解决方案三、问题根因float和double的区别&#xff1a; 总结-浮点数 一、遇到的问题 将NXP项目的代码移植到RH850F1K的项目上时&#xff0c;程序运行异常&#xff1a; u16Volt (uint16)((double)u16ADVal * (double)6.3) 执行到这一行程序就跑飞了…

HMI-Board上手指南

介绍 HMI-Board为 RT-Thread 联合瑞萨推出的高性价比图形评估套件&#xff0c;取代传统的 HMI主控板硬件&#xff0c;一套硬件即可实现 HMIIoT控制的全套能力。依托于瑞萨高性能芯片 RA6M3 及 RT-Thread 软件生态&#xff0c;HMI-Board 不仅硬件性能强劲&#xff0c;同时软件生…

C语言 指针——函数指针

目录 什么是函数指针&#xff1f; 函数指针的定义 定义函数指针时的常见错误 函数指针有什么用&#xff1f; 函数指针的主要应用 什么是函数指针&#xff1f; 函数指针 (Function Pointer) 就是指向函数的指针变量 数据类型 ( * 指针变量名 ) ( 形参列表 ); 例如&#x…

芋道系统,springboot+vue3+mysql实现地址的存储与显示

1.效果图 2.前端实现&#xff1a; <el-form-item label"地址" prop"entrepriseAddress"><el-cascaderv-model"formData.entrepriseAddress"size"large":options"region"/></el-form-item> //导入组件 im…

【vue】v-for只显示前几个数据,超出显示查看更多

v-for只显示前几个数据&#xff0c;超出显示查看更多 如图 <div v-for"(item,index) in list.slice(0,3)" :key"index"><div class"degreeNo" :class"index0?noOne:index1?noTwo:index2?noThree:"> NO{{index1}}:<…

【网关】工业智能网关-02

一 公司简介 保定飞凌嵌入式技术有限公司始于2006年&#xff0c;是一家专注嵌入式核心控制系统研发、设计和生产的高新技术企业&#xff0c;是国内最早专业从事嵌入式技术的企业之一。 经过十几年的发展与积累&#xff0c;公司拥有业内一流的软硬件研发团队&#xff0c;在北京…

【EFK日志系统】docker一键部署kibana、es-head

docker一键部署kibana、es-head kibana部署es-head部署 上一篇文章搭建了es集群 规划服务器是 es01:172.23.165.185 es02:172.23.165.186 es03:172.23.165.187 那么kibana就搭建在主节点es01:172.23.165.185 按照顺序参考&#xff1a; docker一键部署EFK系统&#xff08;elas…

【python】爬虫记录每小时金价

数据来源&#xff1a; https://www.cngold.org/img_date/ 因为这个网站是数据随时变动的&#xff0c;用requests、BeautifulSoup的方式解析html的话&#xff0c;数据的位置显示的是“--”&#xff0c;并不能取到数据。 所以采用webdriver访问网站&#xff0c;然后从界面上获取…

vscode怎么拷贝插件到另一台电脑

说明 vscode插件默认存放在 C:\Users\用户名\.vscode 目录下的 extensions 文件夹中 方法 拷贝 C:\Users\用户名\.vscode 目录下的 extensions 文件夹到另一台电脑的C:\Users\用户名\.vscode 目录下 C:\Users\用户名\.vscode

3. MySQL 数据表的基本操作

文章目录 【 1. MySQL 创建数据表 】【 2. MySQL 查看表 】2.1 DESCRIBE/DESC 以表格的形式展示表2.2 SHOW CREATE TABLE 以SQL语句的形式展示表 【 3. MySQL 修改数据表 】3.1 修改表名3.2 修改表字符集3.3 添加字段在末尾添加字段在开头添加字段在中间添加字段 3.3 修改/删除…

Java字符串String详解

Java中的String类作为存储和操作文本数据的基本类型&#xff0c;是开发过程中最常用的类型。 String类型的声明及初始化与基本数据类型非常相似&#xff1a; String name "lcy";但是String类型是引用类型&#xff0c;有着非常丰富的处理字符串的方法。正是因为其重…

LabVIEW远程开发与调试

在现代项目开发中&#xff0c;远程开发与调试已经成为一种常见的模式&#xff0c;特别是在使用LabVIEW进行工程项目时。本文将详细分析LabVIEW远程开发与调试的优缺点&#xff0c;并从多个角度说明如何建议客户采用这种方式&#xff0c;以提高项目效率和质量。 优点 灵活性和便…

全面理解渗透测试

揭秘网络安全的秘密武器&#xff1a;全面理解渗透测试 在数字化时代&#xff0c;网络安全已成为人们关注的焦点。网络攻击和数据泄露事件频发&#xff0c;给个人、企业和国家带来了巨大的损失。为了应对这一挑战&#xff0c;渗透测试作为一种重要的网络安全评估手段&#xff0…

Java之IO流

一、引言 &#xff08;1&#xff09;解释&#xff1a; i&#xff1a;input &#xff08;输入&#xff09; o&#xff1a;output &#xff08;输出&#xff09; &#xff08;2&#xff09;图解 注意&#xff1a; 1、Xxx 这个程序一旦在桌面关闭掉了&#xff0c;也就是运行完…