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