如何将自己做的网站放到网上去,广州市网站建站,wordpress 加描述,赣州市建设工程质量监督平台网站Vivado 比特流编译时间获取以及FPGA电压温度获取 语言 #xff1a;Verilg HDL 、VHDL EDA工具#xff1a;ISE、Vivado Vivado 比特流编译时间获取以及FPGA电压温度获取一、引言二、 获取FPGA 当前程序的编译时间verilog中直接调用下面源语2. FPGA电压温度获取#xff08;1Verilg 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_doutxadc_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 / 1psmodule 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(1b0), // input wire vp_in.vn_in(1b0), // 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 Readassign di_in 16d0; //not usedassign dwe_in 1b0; //not usedassign den_in eoc_out;assign daddr_in {2d0,channel_out};//-------------------------------------//Read Temperature Datareg temperature_dout_en ;reg vccint_dout_en ;reg vccaux_dout_en ;reg vccbram__dout_en ;always (posedge clk or negedge rst_n)beginif(!rst_n) begintemperature_dout 16d0;vccint_dout 16d0;vccaux_dout 16d0;vccbram_dout 16d0;temperature_dout_en 1b0;vccint_dout_en 1b0;vccaux_dout_en 1b0;vccbram__dout_en 1b0;endelse beginif((drdy_out) (channel_out 5d0)) // Latch ADCcode of On-chip-temperaturebegintemperature_dout (drdy_out1b1)?do_out:16d0;temperature_dout_en drdy_out;endelse if((drdy_out) (channel_out 5d1)) // Latch ADCcode of VCCINTbeginvccint_dout (drdy_out1b1)?do_out:16d0;vccint_dout_en drdy_out;endelse if((drdy_out) (channel_out 5d2)) // Latch ADCcode of VCCAUXbeginvccaux_dout (drdy_out1b1)?do_out:16d0;vccaux_dout_en drdy_out;endelse if((drdy_out) (channel_out 5d6)) // Latch ADCcode of VCCBRAMbeginvccbram_dout (drdy_out1b1)?do_out:16d0;vccbram__dout_en drdy_out;endelsebegintemperature_dout_en 1b0;vccint_dout_en 1b0;vccaux_dout_en 1b0;vccbram__dout_en 1b0;endendendwire[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电压温度获取的方法以及获取后将数据进行解析的公式以上内容都是实际工程中验证过的可放心使用如有问题可私信博主知无不言。