2016-02-06 63 views
1

什麼是不進行重置復位知道alaways_ff塊中一個失敗的後果是什麼?在復位感知always_ff塊中不復位寄存器的含義是什麼?

實施例1:

always_ff @(posedge clk, negedge rst) begin 
    if (~rst) begin 
     reg_a <='0; 
     reg_b <='0; 
    end else begin 
     if (condition_1) begin 
     reg_a <= some_signal; 
     end else if (condition_2) begin 
     reg_b <= some signal; 
     end 
    end 
end 

實施例2:

always_ff @(posedge clk, negedge rst) begin 
    if (~rst) begin 
     reg_a <='0; 
    end else begin 
     if (condition_1) begin 
     reg_a <= some_signal; 
     end else if (condition_2) begin 
     reg_b <= some signal; 
     end 
    end 
end 

實施例1和2之間的唯一區別是,實施例2中,reg_b沒有任何復位條件。後端/合成中這個錯誤的後果是什麼?我有前端RTL設計背景,在sylthesis方面經驗不多。所以,我想明白爲什麼上面的例子2是不好的做法。

一個明顯的問題是 - 剛剛復位後reg_b將X例如2.因此,如果reg_b在任何控制邏輯使用,那麼它可能會在設計中引入錯誤。除此之外,這可以創造什麼其他問題?

+0

合成器和掉毛工具可能會標記警告,但我想不出超出你已經提到的任何功能性問題。 – Greg

回答

0

我不認爲它會合成或泊車轉乘期間造成任何錯誤。
在巨大的設計,我也遇到了一些FF那些沒有復位。它可以避免對PnR工具的一些不必要的限制。
正如你所說然而,你應該小心,不要使用它,然後才寫成這將是「X」,直到再爲大家介紹的錯誤。