新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > VHDL編碼中面積優(yōu)化探討

VHDL編碼中面積優(yōu)化探討

作者: 時(shí)間:2017-06-06 來(lái)源:網(wǎng)絡(luò) 收藏
  1 引言

  (Very-High-Speed Integrated Circuit Hardware Description Language)是IEEE工業(yè)標(biāo)準(zhǔn)硬件描述語(yǔ)言,是隨著可編程邏輯器件(PLD)的發(fā)展而發(fā)展起來(lái)的。這種用語(yǔ)言描述硬件電路的方式,容易修改和保存,且具有很強(qiáng)的行為描述能力,所以在電路設(shè)計(jì)中得到了廣泛應(yīng)用。利用語(yǔ)言對(duì)PLD開發(fā),面積(Area)是一個(gè)很重要的指標(biāo)。通過(guò)“面積”優(yōu)化可以使用規(guī)模更小的可編程邏輯芯片,從而降低系統(tǒng)成本;改善電路性能,降低器件功耗;為以后的技術(shù)升級(jí)留下更多的可編程資源,方便添加產(chǎn)品的功能。

  包含的語(yǔ)句非常豐富,不同的描述可以實(shí)現(xiàn)同樣的邏輯功能。但應(yīng)注意,實(shí)現(xiàn)同樣功能的不同描述,可能在綜合出的電路規(guī)模上存在差異,也就是說(shuō),對(duì)資源的利用率有所不同。本文就有關(guān)VHDL方面的問(wèn)題進(jìn)行討論。

  2 常見(jiàn)問(wèn)題

  2.1 避免引入不必要的寄存器元件


  在描述組合邏輯電路時(shí),應(yīng)使用完整的條件語(yǔ)句結(jié)構(gòu)。因?yàn)椴煌暾麠l件語(yǔ)句的使用會(huì)引入不必要的寄存器元件,既浪費(fèi)邏輯資源,又降低電路的工作速度,影響電路的可靠性[1]。例如用IF條件語(yǔ)句設(shè)計(jì)一個(gè)純組合電路的比較器,比較以下兩例:

本文引用地址:http://2s4d.com/article/201706/349434.htm  例1中未提及當(dāng)a1=b1時(shí)q1作何操作,結(jié)果導(dǎo)致了一個(gè)不完整條件語(yǔ)句,VHDL綜合器對(duì)此解釋為:當(dāng)條件al=bl時(shí)ql保持原值,這意味著必須給ql配置一個(gè)寄存器。綜合結(jié)果如圖1所示。例2中“ELSE ql = ‘0’”語(yǔ)句交代了除“al = bl”以外的所有情況下ql的賦值行為,從而綜合出如圖2所示簡(jiǎn)潔的組合電路。

  2.2 寄存器描述中存在信號(hào)節(jié)點(diǎn)時(shí)

  信號(hào)可以作為設(shè)計(jì)實(shí)體中并行語(yǔ)句模塊間的信息交流通道,是具有全局性特征的數(shù)值容器。在時(shí)序電路設(shè)計(jì)中,為了在設(shè)計(jì)更大的電路時(shí)使用由此引入的時(shí)序電路的信號(hào),常在電路內(nèi)部定義節(jié)點(diǎn)信號(hào)。通過(guò)信號(hào)完成進(jìn)程之間的通信,從而保證結(jié)構(gòu)體中多個(gè)進(jìn)程能夠并行同步運(yùn)行。寄存器描述中有節(jié)點(diǎn)信號(hào)時(shí),不同的描述會(huì)產(chǎn)生不同的綜合結(jié)果。如以下兩例:


  雖然例3與例4都欲描述D觸發(fā)器的邏輯功能,但綜合的結(jié)果卻不同。因?yàn)檫M(jìn)程語(yǔ)句本身屬于并行描述語(yǔ)句,只要進(jìn)程中定義的任一敏感信號(hào)發(fā)生變化,進(jìn)程可以在任何時(shí)刻被激活,而所有被激活的進(jìn)程都是并行運(yùn)行的。例3中的兩個(gè)賦值語(yǔ)句QQ = din 和qout = QQ都在IF語(yǔ)句中,而IF語(yǔ)句屬于順序條件語(yǔ)句,并且它們的執(zhí)行都依賴于時(shí)鐘條件,即這兩條語(yǔ)句中的QQ并非是同一時(shí)鐘周期的值。因此在一個(gè)時(shí)鐘周期內(nèi),din不可能將值傳到qout。實(shí)際運(yùn)行中QQ被更新的值是上一時(shí)鐘周期的din,而qout被更新的值也是上一時(shí)鐘周期的QQ。顯然此程序的綜合結(jié)果只能是圖3所示的電路。而例4中的qout = QQ在END IF語(yǔ)句之后,它與IF語(yǔ)句的執(zhí)行具有順序/并行性[1][2],其執(zhí)行不依賴于時(shí)鐘條件,故而可以綜合出圖4所示的電路。顯然,例4要優(yōu)于例3。

  2.3 資源共享

  在設(shè)計(jì)數(shù)字系統(tǒng)時(shí)常常需要反復(fù)地調(diào)用一個(gè)同樣結(jié)構(gòu)的模塊,這類模塊往往是算術(shù)模塊。如例5中兩個(gè)加法器是在s不同取值時(shí)分別使用的,且輸入a一直接入加法器。略作修改,如例6,可以只用一個(gè)加法器完成同樣功能,從而有效地減小使用面積。

  2.4 慎用CASE語(yǔ)句

  CASE語(yǔ)句描述的程序可讀性較好,因?yàn)樗褩l件中所有可能出現(xiàn)的情況全部列出來(lái)了,可執(zhí)行條件一目了然,且條件句的次序并不重要。故而是常用的條件語(yǔ)句之一。因?yàn)樗膱?zhí)行過(guò)程更接近于并行方式,一般地,綜合后,對(duì)于相同的邏輯功能CASE語(yǔ)句比IF語(yǔ)句(順序條件語(yǔ)句)的描述耗用更多的硬件資源[1]。

  另外,Max+plusⅡ有時(shí)對(duì)NULL會(huì)出現(xiàn)擅自加入鎖存器的情況,在用CASE語(yǔ)句描述組合邏輯電路時(shí),應(yīng)盡量避免使用NULL來(lái)表示未用條件下的操作行為,改用確定操作,如例7。

  2.5 在進(jìn)程中,對(duì)變量要先讀后寫[3]

  因?yàn)樽兞恐凳橇⒓传@得的,如果先寫后讀就會(huì)產(chǎn)生長(zhǎng)的組合邏輯和鎖存器。因此,在編寫代碼時(shí),對(duì)變量要先讀后寫,如例8。

  2.6 簡(jiǎn)單的比較運(yùn)算符比排序操作符大大節(jié)省資源

  就綜合而言,簡(jiǎn)單的比較運(yùn)算符(=和/=)在實(shí)現(xiàn)硬件結(jié)構(gòu)時(shí),比排序操作符(>、>=、、=)構(gòu)成的電路芯片資源利用率要高。因此,如有可能,應(yīng)盡量用比較運(yùn)算府代替排序操作符。

  2.7 盡量采用可計(jì)算型下標(biāo)名

  下標(biāo)名用于指示數(shù)組型變量或信號(hào)的某一元素。如果下標(biāo)名是一個(gè)可計(jì)算的值,則此操作數(shù)可很容易地進(jìn)行綜合。否則,只能在特定的情況下綜合,且耗費(fèi)資源較大。所以,在進(jìn)行電路設(shè)計(jì)時(shí)盡量采用可計(jì)算型下標(biāo)名,以提高資源利用率。

  3 結(jié)束語(yǔ)

  功能強(qiáng)大的EDA開發(fā)軟件和專業(yè)的綜合工具的不斷發(fā)展,使應(yīng)用VHDL進(jìn)行PLD設(shè)計(jì)變得更簡(jiǎn)單、更快捷。但決不能忽視VHDL語(yǔ)言的使用。隨著所設(shè)計(jì)電路規(guī)模的增大,對(duì)有限的芯片資源的利用率問(wèn)題就顯得尤其重要。在不影響速度要求前提下,應(yīng)盡可能地進(jìn)行。適當(dāng)?shù)剡M(jìn)行是優(yōu)化設(shè)計(jì)的重要保障,對(duì)高質(zhì)量、高效率地完成VHDL是十分有意的。

  參考文獻(xiàn):

  [1] 潘松,黃繼業(yè).EDA技術(shù)實(shí)用教程.北京:科學(xué)出版社,2002

  [2] 趙剛 等.EDA技術(shù)簡(jiǎn)明教程.成都:四川大學(xué)出版社,2004

  [3] 林瑤,使用VHDL語(yǔ)言中幾個(gè)常見(jiàn)問(wèn)題的探討,微計(jì)算機(jī)信息:2004年,20卷,9期,136~137頁(yè)

  創(chuàng)新點(diǎn):寄存器描述中有節(jié)點(diǎn)信號(hào)時(shí),根據(jù)由節(jié)點(diǎn)信號(hào)向端口賦值語(yǔ)句在程序中的不同位置,綜合的結(jié)果存在差異:此語(yǔ)句在IF條件語(yǔ)句之內(nèi)時(shí)寄存器占用的邏輯資源比它在IF條件語(yǔ)句之外時(shí)多一倍。



關(guān)鍵詞: VHDL 編碼 面積優(yōu)化

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉