有群友提問,下面的代碼為什么在DC里可以綜合成DFF,而在FPGA上卻綜合成了latch。
always@(posedgeclk,negedgerstn,negedgesetn) if(!rstn) a <= 1'b0; ??else?if(!setn) ????a?<=?1'b1; ??else ?? a <= a;
我們可以看到這段代碼有兩個特別之處:
同時有異步復位和異步置位
除了復位和置位,數據要保持
我們可以畫出這段代碼的邏輯圖,如下圖。這圖也就是DC綜合出來的結果。
那在FPGA上為什么會變成latch呢?有人說FPGA平臺沒有latch,但quartus里確實報了生成latch的warning。我們來試著把電路等價變換,先把setn端簡化掉:
我們看到上圖左邊dff的邏輯,當rstn==0時,dff輸出0,否則就保持。這不就是latch的邏輯嗎?整理出下圖:
由此可見FPGA平臺綜合成latch也是有可能的。
后來讓群友直接看看FPGA平臺綜合出來的電路圖,看看究竟是什么樣的電路。群友回復如下:
哎,真是神奇!時鐘都優化沒了,直接用了一個帶復位和置位的latch。看了這個電路的邏輯,確實與一開頭的RTL等價的,并且還不需要數據loop了,挺簡潔的。
所以得出結論,FPGA平臺之所以與DC有差異,只是綜合策略或者說是綜合引擎優化算法的問題。綜合結果都是可以用的。
審核編輯:劉清
-
FPGA
+關注
關注
1626文章
21678瀏覽量
602040 -
時序電路
+關注
關注
1文章
114瀏覽量
21682 -
異步復位
+關注
關注
0文章
47瀏覽量
13300 -
dff
+關注
關注
0文章
26瀏覽量
3400
原文標題:時序電路為什么綜合成了latch
文章出處:【微信號:處芯積律,微信公眾號:處芯積律】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論