復(fù)位的基本目的是使器件進(jìn)入到可以穩(wěn)定工作的確定狀態(tài),避免器件在上電后進(jìn)入隨機(jī)狀態(tài)。
同步復(fù)位
同步復(fù)位就是在是在時(shí)鐘上升沿到來(lái)時(shí),復(fù)位信號(hào)有效。
下面是一個(gè)簡(jiǎn)單的同步復(fù)位的D觸發(fā)器,代碼如下:
module Sync_rst (
input clk,
input rst, // Synchronous reset
input [7:0] d,
output reg [7:0] q
);
always@(posedge clk)
begin
if (!rst) q <= 8'b0;
else q <= d;
end
endmodule
同步復(fù)位的優(yōu)點(diǎn):
1、抗干擾性高,可以剔除復(fù)位信號(hào)中周期短于時(shí)鐘周期的毛刺。
2、電路穩(wěn)定性強(qiáng)。
同步復(fù)位的缺點(diǎn):
1、大多數(shù)邏輯器件的目標(biāo)庫(kù)內(nèi)的DFF都只有異步復(fù)位端口,適用同步復(fù)位時(shí),綜合器就會(huì)在寄存器的數(shù)據(jù)輸入端插入組合邏輯,占用更多的邏輯資源。
2、同步復(fù)位依賴于時(shí)鐘,如果電路中的時(shí)鐘信號(hào)出現(xiàn)問(wèn)題,無(wú)法完成復(fù)位。
3、對(duì)復(fù)位信號(hào)的脈沖寬度有要求,必須大于指定的時(shí)鐘周期,由于線路上的延遲,可能需要多個(gè)時(shí)鐘周期的復(fù)位脈沖寬度,且很難保證復(fù)位信號(hào)到達(dá)各個(gè)寄存器的時(shí)序。
異步復(fù)位
異步復(fù)位是指無(wú)論時(shí)鐘沿是否到來(lái),只要復(fù)位信號(hào)有效沿到來(lái),就進(jìn)行復(fù)位。
下面是一個(gè)簡(jiǎn)單的同步復(fù)位的D觸發(fā)器,代碼如下:
module Async_rst (
input clk,
input rst_n, // asynchronous reset
input [7:0] d,
output reg [7:0] q
);
always@(posedge clk or negedge rst_n)
begin
if (!rst_n) q <= 8'b0;
else q <= d;
end
endmodule
異步復(fù)位的優(yōu)點(diǎn):
1、無(wú)需額外的邏輯資源,實(shí)現(xiàn)簡(jiǎn)單。
2、復(fù)位信號(hào)不依賴于時(shí)鐘。
異步復(fù)位缺點(diǎn):
1、復(fù)位信號(hào)容易受到外界的干擾,如毛刺等影響;
2、復(fù)位信號(hào)釋放的隨機(jī)性,可能導(dǎo)致時(shí)序違規(guī),倘若復(fù)位釋放時(shí)恰恰在時(shí)鐘有效沿附近,就很容易使電路處于亞穩(wěn)態(tài),如下圖所示:
在這里多加一段對(duì)于亞穩(wěn)態(tài)的介紹以及其處理辦法:
(1)建立時(shí)間與保持時(shí)間的概念?
建立時(shí)間:觸發(fā)器在時(shí)鐘上升沿到來(lái)之前,其數(shù)據(jù)輸入端的數(shù)據(jù)必須保持不變的最小時(shí) 間。
保持時(shí)間:觸發(fā)器在時(shí)鐘上升沿到來(lái)之后,其數(shù)據(jù)輸入端的數(shù)據(jù)必須保持不變的最小時(shí)間。
(2)為什么觸發(fā)器要滿足建立時(shí)間和保持時(shí)間?
因?yàn)橛|發(fā)器內(nèi)部數(shù)據(jù)的形成是需要一定的時(shí)間的,如果不滿足建立和保持時(shí)間,觸發(fā)器將進(jìn)入亞穩(wěn)態(tài),進(jìn)入亞穩(wěn)態(tài)后觸發(fā)器的輸出將不穩(wěn)定,在0和1之間變化,這時(shí)需要經(jīng)過(guò)一個(gè)恢復(fù)時(shí)間,其輸出才能穩(wěn)定,但穩(wěn)定后的值并不一定是你的輸入值。這就是為什么要用兩級(jí)觸發(fā)器來(lái)同步異步輸入信號(hào)。這樣做可以防止由于異步輸入信號(hào)對(duì)于本級(jí)時(shí)鐘可能不滿足建立保持時(shí)間而使本級(jí)觸發(fā)器產(chǎn)生的亞穩(wěn)態(tài)傳播到后面邏輯中,導(dǎo)致亞穩(wěn)態(tài)的傳播。
處理亞穩(wěn)態(tài)的經(jīng)典辦法——雙觸發(fā)
設(shè)計(jì)中使用的任何寄存器都會(huì)指定一個(gè)建立和保持時(shí)間,在時(shí)鐘上升沿前后的這個(gè)時(shí)間內(nèi)輸入數(shù)據(jù)被禁止發(fā)生任何變動(dòng)。所有器件中的寄存器都要指定這個(gè)精確參數(shù),就是為了防止數(shù)據(jù)信號(hào)兩次變化發(fā)生的時(shí)間間隔太過(guò)靠近,從而導(dǎo)致其輸出陷入亞穩(wěn)態(tài)。
最常見(jiàn)的同步器就是使用兩級(jí)寄存器,即使用寄存器打兩拍的方式進(jìn)行同步。所謂的同步器就是采樣一個(gè)異步信號(hào),采樣輸出能夠同步到本地或采樣時(shí)鐘的模塊。
FPGA中的亞穩(wěn)態(tài)
亞穩(wěn)態(tài)問(wèn)題
異步復(fù)位同步釋放
推薦的復(fù)位電路設(shè)計(jì)方式是異步復(fù)位、同步釋放。這種方式,可以有效地繼承
異步復(fù)位設(shè)計(jì)簡(jiǎn)單的優(yōu)勢(shì),并克服異步復(fù)位的上述風(fēng)險(xiǎn)與缺陷。
異步復(fù)位,同步釋放本質(zhì)就是引入兩個(gè)觸發(fā)器,其電路圖和時(shí)序處理如下圖所示:
觀察上述電路圖和時(shí)序圖就知道,其實(shí)異步復(fù)位同步釋放和兩級(jí)打拍的跨時(shí)鐘域信號(hào)處理很相似,本質(zhì)上都是對(duì)信號(hào)進(jìn)行同步處理。上述電路的代碼如下:
module Rst_gen (
input clk,
input rst_async_n,//異步復(fù)位信號(hào)
output reg rst_sync_n //同步釋放信號(hào)
);
reg rst_s1;
always @(posedge clk or negedge rst_async_n)
begin
if(!rst_async_n)
begin
rst_s1 <= 1'b0;//復(fù)位信號(hào)有效時(shí)拉低
rst_sync_n <= 1'b0;
end
else
begin
rst_s1 <= 1'b1;
rst_sync_n <= rst_s1;// 復(fù)位信號(hào)無(wú)效后,通過(guò)兩級(jí)打拍,實(shí)現(xiàn)釋放同步
end
end
endmodule
得到的電路圖如下:
1、異步復(fù)位,同步釋放的含義
異步復(fù)位:就是復(fù)位信號(hào)可以直接不受時(shí)鐘信號(hào)影響,在任意時(shí)刻只要是低電平就能復(fù)位,即復(fù)位信號(hào)不需要和時(shí)鐘同步。上圖中,當(dāng)rst_async_n有效時(shí),第一個(gè)D觸發(fā)器的輸出是低電平,第二個(gè)D觸發(fā)器的輸出rst_sync_n也是低電平,第二個(gè)方框中的異步復(fù)位端口有效,輸出被復(fù)位。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-802717.html
同步釋放:讓復(fù)位信號(hào)取消的時(shí)候,必須跟時(shí)鐘信號(hào)同步,即剛好跟時(shí)鐘同沿。上圖中,假設(shè)rst_async_n撤除時(shí)發(fā)生在clk上升沿,如果不加此電路則可能發(fā)生亞穩(wěn)態(tài)事件(有的時(shí)候會(huì)打三拍)。但是加上此電路以后,假設(shè)第一級(jí)D觸發(fā)器clk上升沿時(shí)rst_async_n正好撤除,則D觸發(fā)器1可能輸出高電平“1”,也可能輸出亞穩(wěn)態(tài),也可能輸出低電平。但此時(shí)第二級(jí)觸發(fā)器不會(huì)立刻更新輸出,第二級(jí)觸發(fā)器輸出值為前一級(jí)觸發(fā)器Q1的輸出狀態(tài)。顯然Q1之前為低電平,故第二級(jí)觸發(fā)器輸出保持復(fù)位低電平。直到下一個(gè)時(shí)鐘有效沿到來(lái)之后,才隨著變?yōu)楦唠娖健<磳?shí)現(xiàn)同步釋放。
第二種異步復(fù)位同步釋放方法(此方法筆者也只理解部分)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-802717.html
always @ (posedge clk)
reset reg <= rst//將異步復(fù)位信號(hào)用同步時(shí)鐘打一拍
always @ (posedge clk or negedge reset reg)
if (!reset reg)
begin
........
end
else
begin
........
end
到了這里,關(guān)于同步復(fù)位、異步復(fù)位和異步復(fù)位同步釋放的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!