在FPGA設計中,用戶邏輯功能最終在芯片的實體資源上實現,所以邏輯寫法不同最終影響兩點:
1) 路徑延遲; 2) 資源占用;
下面的例子對比非常明顯,異步reset與同步reset。
(一) 同步復位
在always block中的所有輸入信號都是同步的,A-E & RESET。因為優先級R>S>D,所以根據實際邏輯代碼級層,充分利用了Reset、Set、Data同步輸入引腳。
充分利用了資源管腳,同時只有LUT-FF兩級延遲。
(二)異步復位
敏感列表中的RST是異步輸入信號,使用的是Asynchronous Flip-Flop FDCE,RST連接到Clear異步腳。
那A-E五個同步信號就只能占用2xLUT4來實現,導致多一個LUT占用,同時延遲路徑也多一級。
在實際設計中,一般由於clk時鍾都很高,建議都用同步復位,還可以避免異步競爭冒險。
(三)沒有復位
芯片中像 reg & sram 這樣具有storage能力的觸發器都具有初始值,完全可以不用Reset信號。
reg [7:0] data = 8'b11111111;// reg變量或者fsm狀態機初始化定義,bram上電復位后全是00
如果代碼中沒有Reset,那么R腳完全可以接一個取非后的與邏輯輸入信號。
優秀的代碼結構完全可以帶來量級的優化結果。
以上分析是針對Xilinx結構分析的,暫未分析Altera家,但兩家都是基於sram型的FPGA,理應一致。