很多fpga設計中都會涉及到多個時鐘,使用器件內部的pll或者dll會使得多個時鐘的管理變得更加容易。但是當多個時鐘都是用pll/dll產生時,他們的系統復位訊號如何設計才更加穩定呢?
在上一章《fpga——復位設計》的內容裡提出了非同步復位、同步釋放的方法,那麼在系統復位後、pll時鐘輸出前,即系統的工作時鐘不確定的情況下,應該怎麼考慮這個復位問題呢?
下面就解釋一下所用的方法。
如下圖,就是所用的rtl電路圖。先用fpga的外部輸入時鐘clk將fpga的輸入復位訊號rst_n做非同步復位、同步釋放處理,然後這個復位訊號輸入pll,同時將clk也輸入pll。設計的初衷是在pll輸出有效時鐘之前,系統的其他部分都保持復位狀態。pll的輸出locked訊號在pll有效輸出前一直時低電平,pll輸出穩定有效之後才會拉高該訊號,所以這裡就把前面提到的fpga外部輸入復位訊號rst_n和這個locked訊號相與作為整個系統的復位訊號,當然了,這個復位訊號也需要讓合適的pll輸出時鐘非同步復位、同步釋放處理一下。也就是說,為了達到可靠穩定的復位訊號,該設計中對復位訊號進行了兩次處理,分別是在pll輸出前和pll輸出後。
input clk;//fpga輸入時鐘訊號
input rst_n;//系統復位訊號
output sys_rst_n;//系統復位訊號,低有效
output clk_25m;
output clk_100m;
wire locked;//輸出訊號有效標誌,高表示pll輸出有效
wire pll_rst;
reg rst_r1;
reg rst_r2;
always @(posedge clk or negedge rst_n)
if(!rst_n) rst_r1 <= 1'b1;
else rst_r1 <= 1'b0;
always @(posedge clk or negedge rst_n)
if(!rst_n) rst_r2 <= 1'b1;
else rst_r2 <= rst_r1;
assign pll_rst = rst_r2;
wire sys_rst_n; //系統復位訊號,低有效
wire sysrst_nr0;
reg sysrst_nr1,sysrst_nr2;
assign sysrst_nr0 = rst_n & locked;
always @(posedge clk_100m or negedge sysrst_nr0)
if(!sysrst_nr0) sysrst_nr1 <= 1'b0;
else sysrst_nr1 <= 1'b1;
always @(posedge clk_100m or negedge sysrst_nr0)
if(!sysrst_nr0) sysrst_nr2 <= 1'b0;
else sysrst_nr2 <= sysrst_nr1;
assign sys_rst_n = sysrst_nr2;
pll_ctrl uut_pll_ctrl(
.areset(pll_rst),
.inclk0(clk),
.c0(clk_25m),
.c1(clk_100m),
.locked(locked)
);endmodule;
51微控制器的復位引腳 51微控制器復位後的狀態
微控制器的復位操作使微控制器進入初始化狀態,其中包括使程式計數器pc 0000h,這表明程式從0000h位址單元開始執行。微控制器冷啟動後,片內ram為隨機值,執行中的復位操作不改變片內ram區中的內容,21個特殊功能暫存器復位後的狀態為確定值,見下表。值得指出的是,記住一些特殊功能暫存器復位後的主...
IC基礎 五 設計中的復位
一般來說,同步系統,都使用非同步復位。這是因為同步復位的電路實現,比非同步復位的電路實現,要浪費更多電路資源。工程實踐中,確實見過由於未做非同步復位的同步處理,而出現大概率系統宕機現象 復位的作用域是很大的 1.什麼是非同步復位 在帶有復位端的d觸發器中,當reset訊號 復位 有效時,它可以直接驅...
51微控制器復位電路的設計
微控制器在可靠的復位之後,才會從0000h位址開始有序的執行應用程式。同時,復位電路也是容易受到外部噪 聲干擾的敏感部分之一。因此,復位電路應該具有兩個主要的功能 1.必須保證系統可靠的進行復位 2.必須具有一定的抗干擾的能力 一 復位電路的rc選擇 復位電路應該具有上電復位和手動復位的功能。以mc...