什么是組合邏輯環(huán)路?
組合邏輯環(huán)路(Combinational Loops):指組合邏輯的輸出信號不經(jīng)過任何時序邏輯電路(FF等),而直接反饋到輸入節(jié)點,從而構(gòu)成的電路環(huán)路。

此外,如果直接將寄存器的輸出端通過組合邏輯反饋到該寄存器的異步端口(異步復(fù)位或異步置位),也會形成組合邏輯環(huán)路。

為什么要避免組合邏輯環(huán)路?
在FPGA設(shè)計中,絕大多數(shù)的應(yīng)用場景都不需要使用組合邏輯環(huán)路,我暫時能想到的例外只有隨機數(shù)發(fā)生器(評論區(qū)可以補充一下)。

在實踐中,避免使用組合邏輯環(huán)路主要是因為它的特性所導(dǎo)致的危害:
組合邏輯環(huán)路違反了同步設(shè)計原則,容易振蕩,從而導(dǎo)致整個設(shè)計不穩(wěn)定和不可靠。
組合邏輯環(huán)路的行為功能取決于該環(huán)路上的延遲(邏輯延遲和布線延遲),一旦延遲發(fā)生變化,整個設(shè)計的行為功能將變得無法預(yù)測。
組合邏輯環(huán)路的振蕩將導(dǎo)致EDA軟件做無窮無盡的計算。為了完成這種計算,EDA軟件將會切割環(huán)路。不同的EDA軟件的切割方式不盡相同,這可能會與設(shè)計者的設(shè)計目的相違背,從而導(dǎo)致邏輯功能錯誤。
組合邏輯環(huán)路無法進行靜態(tài)時序分析(STA),可能會出現(xiàn)時序違例,或者導(dǎo)致STA過程時間過長。
什么情況會導(dǎo)致組合邏輯環(huán)路?
情況1:組合邏輯的輸出信號僅經(jīng)過組合邏輯電路后又反饋到了輸入節(jié)點。比如下面的代碼:


這樣的設(shè)計在Vivado中不會報錯,但會報嚴重警告(Critical warning)。


情況2:寄存器的輸出端通過組合邏輯直接反饋到該寄存器的異步端口(異步復(fù)位或異步置位)。比如下面的代碼:


這種情況所導(dǎo)致的組合邏輯環(huán)路在實踐中還是比較少出現(xiàn)的,因為一般情況下,寄存器的異步端口都是直接由模塊外部連接的信號所驅(qū)動。
如何處理組合邏輯環(huán)路?
最重要的一點:一定要堅決避免組合邏輯環(huán)路!現(xiàn)在的EDA工具基本上都可以把組合邏輯環(huán)路識別出來,并報錯或者報警告。寫完RTL代碼后請一定要記得看EDA工具的報告的錯誤和警告信息Message!
組合邏輯環(huán)路的避免首先應(yīng)該通過良好的編碼習(xí)慣來避免。上述的兩種示例代碼就是典型的錯誤,請不要在設(shè)計中使用類似的代碼。
如果出現(xiàn)了組合邏輯環(huán)路且當前設(shè)計修改困難,那么請修改你的RTL代碼--通過添加寄存器的方式來切斷反饋回路。就像這樣:

如果組合邏輯環(huán)路的出現(xiàn)是符合預(yù)期設(shè)計目的的(比如隨機數(shù)發(fā)生器),想將其保留該如何操作?只要在XDC約束文件中添加這一句即可:

什么是語言模板?
不論是Xilinx的Vivado,還是Altera的Quartus II,都為開發(fā)者提供了一系列Verilog、SystemVerilog、VHDL、TCL、原語、XDC約束等相關(guān)的語言模板(Language Templates)。
在Vivado軟件中,按順序點擊Tools----Language Templates,即可打開設(shè)計模板界面。


在Quartus II軟件中,需要設(shè)計文件(.v文件等)的需要處點擊右鍵,然后點擊Inset Templates,即可打開模板界面。


設(shè)計模板有什么用?
語言模板的內(nèi)容還是非常豐富的,比如你可以看看xilinx推薦的文件頭是什么樣的:

Verilog語法(邏輯運算符):

找不到原語使用方式的時候,也可以來這里查找(當然你也可以查xilinx的官方文檔):

有些時序約束語法不太好記,你可以用這個工具查找,比如:

看看xililnx提供的宏XPM(Xilinx Parameterized Macro)是怎么用的,比如CDC這部分的:

最最重要的一點是,它提供了很多典型電路的設(shè)計方法。
由于各家FPGA的結(jié)構(gòu)差異,可能相同的代碼在不同的器件上生成的結(jié)構(gòu)會存在很大差異。比如有時候,可能你想設(shè)計的是一個分布式DRAM,但是由于你的代碼風(fēng)格和綜合工具的原因,它給你生成的事BRAM,那這樣就和你的設(shè)計初衷相違背了(當然隨著綜合工具的發(fā)展,這類情況是越來越少了)。所以在設(shè)計相關(guān)電路時,請盡量參考xilinx提供的代碼,以確保vivado能正確生成你想要的電路(Altera 的FPGA類似)。

總 結(jié)
● 語言模板可以學(xué)習(xí)HDL語言語法、綜合屬性等;
● 語言模板可以快速查找設(shè)計內(nèi)容、模板;
● 語言模板提供的電路設(shè)計模板可以保證綜合工具能正確推斷出對應(yīng)的電路。
-
FPGA
+關(guān)注
關(guān)注
1660文章
22412瀏覽量
636350 -
組合邏輯
+關(guān)注
關(guān)注
0文章
48瀏覽量
10376 -
環(huán)路
+關(guān)注
關(guān)注
0文章
51瀏覽量
12441
原文標題:FPGA編碼風(fēng)格集錦
文章出處:【微信號:Hack電子,微信公眾號:Hack電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
FPGA實戰(zhàn)演練邏輯篇39:代碼風(fēng)格與書寫規(guī)范
FPGA實戰(zhàn)演練邏輯篇41:代碼風(fēng)格
Linux內(nèi)核編碼風(fēng)格(編程代碼風(fēng)格推薦)
Gowin HDL編碼風(fēng)格要求及編碼實現(xiàn)
基于FPGA的非編碼無線模塊的應(yīng)用設(shè)計
基于FPGA的非編碼無線模塊的應(yīng)用設(shè)計
自適應(yīng)算術(shù)編碼的FPGA實現(xiàn)
高精度增量式編碼器與基于DSP和FPGA編碼器信號測量模塊
基于FPGA的Varint編碼設(shè)計原理和實現(xiàn)
關(guān)于Linux的內(nèi)核代碼風(fēng)格
Gowin HDL編碼風(fēng)格用戶指南
Verilog編碼風(fēng)格的建議
FPGA編碼風(fēng)格介紹
評論