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

news2024/10/6 18:30:41

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电压温度获取的方法,以及获取后将数据进行解析的公式,以上内容都是实际工程中验证过的,可放心使用,如有问题可私信博主,知无不言。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决CentOS 7无法识别ntfs的问题

解决CentOS 7无法识别ntfs的问题 方式一&#xff1a; Centos默认不支持ntfs文件格式&#xff0c;直接在Centos7上插U盘或移动硬盘无法识别&#xff0c;安装 ntfs-3g即可&#xff1a; # yum install epel-release -y # yum install ntfs-3g -y[rootbogon ~]# rpm -qa | grep nt…

外贸干货|如何提高商机转化率?

常常听到外贸业务员抱怨“询盘质量不高”、“有询盘没转化”、“有些客户只是来比价格的”……想必大家都不陌生&#xff01; 但难道只有询盘问题、客户问题吗&#xff1f;我们自身的处理真的没问题吗&#xff1f;我想只有更多的自省自查我们可以控制的问题&#xff0c;优化我们…

尚云SunClouds打造以云算力为核心的混合云平台!

在数字经济迅猛发展的今天&#xff0c;算力已跃升为新基础能源&#xff0c;人工智能成为引领产业革新的核心工具。5月24日&#xff0c;尚云依托尚航科技全国智算中心的资源网络&#xff0c;打造了以云算力为核心的新一代混合云平台&#xff0c;尚云SunClouds品牌焕新上线&#…

React -- memo允许你的组件在 props 没有改变的情况下跳过重新渲染。

memo(Component, arePropsEqual?) 使用 memo 将组件包装起来&#xff0c;以获得该组件的一个 记忆化 版本。通常情况下&#xff0c;只要该组件的 props 没有改变&#xff0c;这个记忆化版本就不会在其父组件重新渲染时重新渲染。但 React 仍可能会重新渲染它&#xff1a;记忆化…

OpenAI新研究破解GPT-4大脑,分解1600万个特征打开“黑匣子”,Ilya 、Jan Leike也参与了!

6月7日凌晨&#xff0c;OpenAI在官网发布了一个新的研究成果&#xff0c;首次破解GPT-4的神经网络活动。通过改进大规模训练稀疏自动编码器将GPT-4的内部表示分解为 1600 万个特征。而且&#xff0c;前段时间离职的Ilya Sutskever、Jan Leike也是作者之一&#xff01; 这不是破…

计算机专业本科就业还是考研?考研有哪些热门方向?

考研并不是一个逃避就业的避难所&#xff0c;也不是一个简单的提升待遇的手段。考研是提升自我的途径&#xff0c;特别是对于那些对特定技术领域有浓厚兴趣并愿意深入研究的人来说 一个本科生能够认真学三年&#xff0c;那么他们所掌握的技能和知识不应该逊色于那些通过短期培…

Faiss框架使用与FaissRetriever实现

Faiss是一个由Facebook AI Research开发的库&#xff0c;用于高效相似性搜索和稠密向量聚类。它为机器学习和深度学习中的向量检索问题提供了一种高效的解决方案&#xff0c;特别是在处理大规模数据集时。Faiss支持多种索引类型&#xff0c;包括基于量化的索引、基于聚类的索引…

Apache Doris 基础 -- 数据表设计(模式更改)

用户可以通过schema Change操作修改现有表的模式。表的模式主要包括对列的修改和对索引的修改。这里我们主要介绍与列相关的Scheme更改。对于与索引相关的更改&#xff0c;可以查看数据表设计/表索引&#xff0c;查看每个索引的更改方法。 1、术语 基本表&#xff08;Base Ta…

命运2联机出错、无法组队?命运2频繁卡顿、延迟高的解决方法

命运2是一款由Bungie制作的第一人称射击游戏&#xff0c;昨日玩家们期待的最新DLC在全球发布&#xff0c;steam同时在线人数几乎打破历史记录达到314K&#xff0c;但是有不少玩家遇到联机失败、无法联机、匹配不了的情况&#xff0c;不知道怎么解决&#xff0c;下面提供几种解决…

Hi3519DV500 学习摘录

文章目录 一、问题1、open-vm-tools 安装2、pushd: not found3、autoreconf4、编译util-linux源码时报错 ERROR: You must have autopoint installed to 二、NFS1、服务器搭建2、u-boot常用命令3、配置4、问题 三、补缺1、make 一、问题 1、open-vm-tools 安装 open-vm-tools…

Phpstorm使用xdebug断点调试

一、目标 1、在浏览器地址栏里操作页面访问接口时&#xff0c;可以在项目代码对应入口处断点拦截调试&#xff1b; 2、在postman调用接口时&#xff0c;可以在项目代码对应入口处断点拦截调试&#xff1b; phpstorm版本&#xff1a;PhpStorm 2024.1.2 二、具体操作 1、安装…

2种方法!一键批量下载1688主图、sku图、视频和详情页

最近关于如何一键下载1688主图、sku图、视频和详情页相关的问题被商友们问爆了。店雷达直接上实操教程&#xff0c;建议收藏&#xff0c;不迷路&#xff01; 方法一&#xff1a;通过选品中心下载 1、在店雷达选品中心&#xff08;如果想在1688进货的就在1688选品库中选品&…

激发AI创新潜能,OPENAIGC开发者大赛赛题解析

人工智能&#xff08;AI&#xff09;的飞速发展&#xff0c;特别是AIGC、大模型、数字人技术的成熟&#xff0c;不仅改变了数据处理和信息消费的方式&#xff0c;也为企业和个人提供了前所未有的机遇。在这种技术进步的背景下&#xff0c;由联想拯救者、AIGC开放社区、英特尔共…

图标绘制软件draw.io中文安装包

Draw.io&#xff08;也称为Diagrams&#xff09;是一款功能强大的免费在线图表绘制工具。它支持绘制多种类型的图表&#xff0c;如流程图、UML图、组织结构图等&#xff0c;满足了从商务到工程设计的多领域需求。软件界面直观友好&#xff0c;操作简单&#xff0c;用户无需安装…

若依框架改造多租户模式

当前使用版本3.6.416.20.2 (Currently using 64-bit executable)https://doc.ruoyi.vip/ruoyi-cloud/document/hjbs.html 一、若依Cloud改为多租户模式 当前使用版本3.6.4&#xff0c;既然要改为多租户模式&#xff0c;多租户重点是什么&#xff0c;数据隔离&#xff0c;那么…

​【JS重点知识04】JS执行机制(重点面试题)

学前案例&#xff1a; console.log(111); setTimeout(function () {console.log(222); }, 1000) console.log(333); //输出结果&#xff1a;1111 333 222 console.log(111); setTimeout(function () {console.log(222); }, 0) console.log(333); //输出结果&#xff1a;111 33…

各行业万能预约门店小程序源码系统 支持多门店预约 前后端分离 带完整的安装源码包以及搭建教程

在移动互联网快速发展的今天&#xff0c;小程序以其轻量级、即用即走的特点&#xff0c;成为了企业连接用户、提供服务的重要桥梁。特别是在服务行业&#xff0c;如美容美发、餐饮、医疗、教育等领域&#xff0c;门店预约系统的重要性不言而喻。为了满足各行业对门店预约系统的…

C语言实现map数据结构 key—value对应

1.首先43行 createKeyValuePair(char*key ,int value)这个函数就是给一个keyValuePair *pair的指针来通过内存分配将数据key和value存入这个pair指针所对应的内存空间 2.52行freeKeyValuePair这个函数是释放内存空间 3.头文件 struct结构体KeyValuePair就是一个指针一个值 4…

node-mysql的批量插入

此前我批量插入都是用类似这样的命令&#xff1a; sqlcmdinsert into table(field1,field2,...) values ? indata[["f1v1","f2v1"],["f1v2","f2v2"],...] mysqlconn.query(sqlcmd,[indata],(err,res)>{...})但是感觉不太舒服&…

Puffer Finance 如何凭借“再质押”,化解以太坊节点运行难题?

去中心化、DeFi 增强、全链化等 LST 赛道竞争背景下的市场争夺热点频现&#xff0c;以太坊该如何化解节点中心化的现实困境&#xff1f;一起来看看 TinTin AMA 第 10 期活动看看原生流动性再质押平台 Puffer Finance 的技术解决方案&#xff0c;以再质押理念优化用户参与项目流…