對於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可以看到以下畫面 點選新增按鍵新增自啟...