FPGA上電程式

2021-10-19 13:27:56 字數 3205 閱讀 4960

對於fpga晶元而言,上電之後最開始的一段時間是特別不穩定的,所以在fpga程式中新增乙個上電之後的延時程式,這個是很有必要的。

然而我們常用的是使用pll中的 locked 訊號,來判斷是否初始化成功,但是這個初始化僅僅是對於pll這個ip核所使用的,所以這個訊號還是不夠具有權威性。

根據上述問題,相對較好的方法是:在程式開始跑之前,就對程式進行延時操作。

首先先來乙個pll的頂層模組:其中包括了兩個部分:pll_ip核的初始化,初始化之後的延時。

module pll(	 

input wire ext_clk, //g21 , clk_50m

input wire ext_rst_n, //e4

// output wire sys_rst_n,

output wire clk0,

output wire clk1,

output wire clk2,

output wire clk3,

output wire clk4,

output reg rst_d=0

);wire sys_rst_n;

wire locked;

reg locked_temp;

reg locked_temp1;

reg [8:0] cnt_rst=255;

reg [8:0] cnt_rst1=255;

button rst

( .clk_in_button(ext_clk) ,

.input_button(ext_rst_n) ,

.pol_en_in(0) ,

.pol_en_out(1) ,

.output_button(sys_rst_n)

);pll_sys pll_sys_inst (

.areset ( sys_rst_n ),

.inclk0 ( ext_clk ),

.c0 ( clk0 ),

.c1 ( clk1 ),

.c2 ( clk2 ),

.c3 ( clk3 ),

.c4 ( clk4 ),

.locked ( locked )

);always@(posedge ext_clk)

begin

locked_temp <=locked;

locked_temp1<=locked_temp;

endalways@(posedge ext_clk) begin

if(locked_temp1==0&&locked_temp==1)

cnt_rst<=0;

else if(cnt_rst==255)

begin

if(cnt_rst1==255)

cnt_rst<=cnt_rst;

else

cnt_rst<=0;

endelse

cnt_rst<=cnt_rst+1;

end

always@(posedge ext_clk) begin

if(locked_temp1==0&&locked_temp==1)

cnt_rst1<=0;

else if(cnt_rst1==255)

cnt_rst1<=cnt_rst1;

else if(cnt_rst==255)

cnt_rst1<=cnt_rst1+1;

endalways@(posedge ext_clk) begin

if(cnt_rst1==255)

rst_d<=0;

else

rst_d<=1;

endendmodule

在這個模組中還有乙個模組,我把這個模組的**也附帶上。

`timescale 1ns / 1ps

module button

( input wire clk_in_button,

input wire input_button,

input wire pol_en_in, //select h/l intput flag

input wire pol_en_out, //select h/l output flag

output reg output_button=0

);//

reg[7:0] cont =0;

reg b_temp1 =0;

reg b_temp2 =0;

// always@(posedge clk_in_button)

begin b_temp1<=input_button; b_temp2<=b_temp1; end

always@(posedge clk_in_button)

begin

if((b_temp2==pol_en_in)&&(b_temp1==pol_en_in))

begin

if(cont==255) cont<=cont;

else if(cont==250) cont<=255;

else cont<=cont+1;

endelse

cont<=0;

endalways@(posedge clk_in_button)

if(cont==250) output_button<=pol_en_out;

else output_button<=!pol_en_out;

endmodule

經過這兩個模組之後,對於整個系統,上電也差不多就結束了,而且相對比較穩定,在發出程式執行的復位訊號(在未完成的時候是拉高的,完成之後是拉低的)

FPGA上電後IO的預設狀態

在進行fpga硬體設計時,引腳分配是非常重要的乙個環節,特別是在硬體電路上需要與其他晶元通行的引腳。xilinx fpga從上電之後到正常工作整個過程中各個階段引腳的狀態,會對硬體設計 引腳分配產生非常重要的影響。這篇專題就針對fpga從上電開始 配置程式,到正常工作整個過程中所有io的狀態進行分析...

FPGA上電後IO的預設狀態

概述 在進行fpga硬體設計時,引腳分配是非常重要的乙個環節,特別是在硬體電路上需要與其他晶元通行的引腳。xilinx fpga從上電之後到正常工作整個過程中各個階段引腳的狀態,會對硬體設計 引腳分配產生非常重要的影響。這篇專題就針對fpga從上電開始 配置程式,到正常工作整個過程中所有io的狀態進...

ubuntu上電自啟動程式

到這一步,將系統改為root啟動的方式已經實現,重啟系統後就會看到使用者已經變為root使用者 接下來使用gnome session properties工具對應用程式做自啟動設定 進入系統後按鍵進入搜尋介面,輸入gnome session properties可以看到以下畫面 點選新增按鍵新增自啟...