特權同學的非同步復位,同步處理方法總結

2021-08-11 18:33:11 字數 1879 閱讀 9479

//不帶pll的非同步復位,同步釋放:

//其實就是用的打節拍的方式將復位訊號控制成clk控制的訊號而已!

module reset

(input clk,

input reset,

output reset_2

);reg reset_1;

reg reset_2;

always@(posedge clk or negedge reset)

if(!reset)

reset_1<=1'b0;

else

reset_1<=1'b1;

always@(posedge clk or negedge reset)

if(!reset)

reset_2<=1'b0;  

else

reset_2<=reset_1;

endmodule

//特權同學寫的帶有pll的非同步復位,同步釋放

//思想:先將fpga的復位訊號做一次非同步復位,同步處理,將這個復位訊號輸入給pll,

//接著在將pll的復位訊號做一次非同步復位,同步處理,得到系統的復位訊號

//其實就是用的打節拍的方式處理非同步訊號的,使其都只受時鐘控制的訊號!

module sys_reset

(input clk,

input reset,

output sys_reset,

output clk_25,

output clk_100

);//第一次非同步復位,同步處理

reg reset_1;

reg reset_2;

wire pll_reset;

always@(posedge clk or negedge reset)

if(!reset)

reset_1 <= 1'b0;

else 

reset_1 <= 1'b1;

always@(posedge clk or negedge reset)

if(!reset)

reset_2 <= 1'b0;

else 

reset_2 <= reset_1;

assign pll_reset = reset_2;

//第二次非同步復位,同步處理,將系統用的復位訊號輸出

wire locked;//pll輸出有效標誌位,高電平表示pll輸出有效

wire sys_reset_0;

reg sys_reset_1;

reg sys_reset_2;

assign sys_reset_0 = reset & locked;//用這兩個訊號來標誌復位開始,然後用時鐘將其控制成同步訊號!

always@(posedge clk_100 or negedge sys_reset_0)

if(!sys_reset_0)

sys_reset_1 <= 1'b0;

else 

sys_reset_1 <= 1'b1;

always@(posedge clk_100 or negedge sys_reset_0)

if(!sys_reset_0)

sys_reset_2 <= 1'b0;

else

sys_reset_2 <= sys_reset_1;

assign sys_reset =sys_reset_2;

//這個例化其實應該放在第一次非同步復位,同步處理之後,這樣看的更清楚

pll u1

(.inclk0(clk),

.areset(pll_reset),

.c0(clk_25),

.c1(clk_100),

.locked(locked)

);endmodule 

同步復位和非同步復位的比較

同步復位 同步復位 顧名思義,同步復位就是指復位訊號只有在時鐘上公升沿到來時,才能有效。否則,無法完成對系統的復位工作。用verilog描述如下 always posedge clk begin if rst n end 非同步復位 非同步復位 它是指無論時鐘沿是否到來,只要復位訊號有效,就對系統進...

同步復位與非同步復位的區別

假設電路都是低電平復位 1 同步復位 復位的有效條件與clk的上公升沿有關,當clk的上公升沿採到rst n為低的時候可復位。如下圖所示 波形如下圖所示 解釋 復位訊號拉低後,當時鐘訊號上公升沿到來時,輸出訊號才復位。2 非同步復位 復位的觸發條件不僅與clk的上公升沿有關,還與rst n的下降沿有...

fpga的非同步復位同步釋放操作

大多數的復位操作通常是直接將rst n訊號拉低或置高,直接進行復位。但是這樣會產生乙個很大的問題,如果復位操作位於資料取樣沿的setup或holdon時間內,會發生什麼?整個電路會出現亞穩態,可能導致復位失敗。此時,如果採用非同步復位,同步釋放的操作,就能避免亞穩態的出現。先上 module rst...