條件語句的可綜合性
HDL語言的條件語句與算法語言的條件語句,最大的差異在于:
1.不管條件:當(dāng)前輸入條件沒有對應(yīng)的描述,則該條件為不管條件(Don’tCare)。對應(yīng)不管條件的信號稱為不管信號
2.不選條件:多個條件分支中,未獲得當(dāng)前輸入條件指向的分析,稱為不選條件(Don’tSelect)。對應(yīng)的信號稱為不選信號。
不管不選發(fā)生時,HDL的綜合器,將盡量維持原值,并且得到額外的生成結(jié)構(gòu)。若無法用生成結(jié)構(gòu)維持原值,則直接報錯。根據(jù)行為語句的開節(jié)點ON/閉節(jié)點CN描述;部分條件PC/全部條件FC;以及條件分支的輸出是否具有同名信號(線與WAND)或不同名信號(非線與Not_WAND),綜合器將得到不同的處理結(jié)果。
開節(jié)點全部條件全部分支非線與描述
此時,全條件描述導(dǎo)致沒有不管條件和不管信號。但全部分支非線與(即每一個條件分支語句輸出不同名信號),將導(dǎo)致不選信號。對于不選條件不選信號,EDA將維持原值。生成結(jié)構(gòu)為鎖存器。
條件譯碼邏輯:
RTL視圖:(QuartusII)
這里的譯碼邏輯為:
一般性的代碼模型分析:
左側(cè)為代碼塊,全條件描述不存在不管條件,全部分支非線與存在不選條件和不選信號,EDA需要為這些不選信號生成鎖存器,用于維持原值。右側(cè)為其代碼模型:
結(jié)論:開節(jié)點全部條件全部輸出非線與的HDL描述,將得到
閉節(jié)點全部條件全部分支非線與描述
綜合分析:
1.閉節(jié)點描述將導(dǎo)致生成寄存器
2.全部條件描述,使得此時不存在不管條件
3.全部分支輸出非線與,將導(dǎo)致不選條件/不選信號。這些不選信號需要維持原值。
4.由于此時已經(jīng)輸出末端已經(jīng)得到有記憶的寄存器,因此綜合器此時將使用這些生成寄存器維持原值(不選信號)
例如:
RTL視圖(QuartusII):
這里譯碼邏輯為:
關(guān)于使用寄存器維持原值(不選信號/不管信號):
寄存器維持原值需要遵循兩個互相矛盾的綜合原則:
1.優(yōu)化原則:寄存器使用其使能端維持原值,將導(dǎo)致時鐘信號的路由產(chǎn)生邏輯,或者說時鐘信號被加工,最終導(dǎo)致時鐘偏斜參數(shù)的惡化,影響系統(tǒng)的最高速度。因此,綜合器將盡量避免寄存器使用使能端。
2.原創(chuàng)原則:綜合器根據(jù)代碼模型分析,和實際的物理實現(xiàn),必然需要對已經(jīng)的描述的代碼進(jìn)行加工和修改,最典型的例子就是生成結(jié)構(gòu)(生成鎖存器,生成寄存器)。但過多的生成結(jié)構(gòu),將導(dǎo)致最終實現(xiàn)的電路可能與設(shè)計者的愿望相悖。因此,綜合器將盡量避免生成結(jié)構(gòu)。
除了使用使能端維持寄存器原值,另一個產(chǎn)生生成結(jié)構(gòu)的方法則是多路器閉環(huán):
一般性的代碼模型分析:
結(jié)論:閉節(jié)點全部條件全部分支輸出非線與描述,將得到
5.3開節(jié)點全部條件全部分支線與描述
綜合分析:
1.全部條件避免了不管條件
2.全部分支線與(所以分支輸出同名信號),綜合器為了避免短路,將生產(chǎn)多路器。
注意此時沒有生成鎖存器。
RTL視圖:
一般性代碼模型分析:
結(jié)論:開節(jié)點全部條件全部輸出線與描述,將得到<多路器輸出>結(jié)構(gòu)。
注意這里沒有鎖存器,雖然有不選信號,但這些不選信號被多路器屏蔽。
編輯:jq
-
寄存器
+關(guān)注
關(guān)注
31文章
5294瀏覽量
119816 -
HDL
+關(guān)注
關(guān)注
8文章
326瀏覽量
47307 -
鎖存器
+關(guān)注
關(guān)注
8文章
904瀏覽量
41421 -
代碼
+關(guān)注
關(guān)注
30文章
4722瀏覽量
68234
原文標(biāo)題:FPGA學(xué)習(xí):條件語句的可綜合性
文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設(shè)計論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論