|
減少關鍵路徑的邏輯等級 本文節(jié)選自特權(quán)同學的圖書《FPGA設計實戰(zhàn)演練(邏輯篇)》 配套例程下載鏈接:http://pan.baidu.com/s/1pJ5bCtt 下面要列舉的代碼示例是一些能夠起到系統(tǒng)性能提升的代碼風格。在邏輯電路的設計過程中,同樣的功能,可以由多種不同的邏輯電路來可以實現(xiàn),那么就存在這些電路中孰優(yōu)孰劣的討論。因此,帶著這樣的疑問,我們也一同來探討一下幾種常見的能夠提升系統(tǒng)性能的編碼技巧。請注意,本知識點所涉及的代碼更多的是希望能夠授人以“漁”而非授人以“魚”,大家重點掌握前后不同代碼所實現(xiàn)出來的邏輯結(jié)構(gòu),在不用的應用場合下,可能會有不同的邏輯結(jié)構(gòu)需求,那么大家就要學會靈活應變并寫出適合需求的代碼。(特權(quán)同學,版權(quán)所有) ① 減少關鍵路徑的邏輯等級 在時序設計過程中遇到一些無法收斂(即時序達不到要求)的情況,很多時候只是某一兩條關鍵路徑(這些路徑在器件內(nèi)部的走線或邏輯門延時太長)太糟糕。因此,設計者往往只要通過優(yōu)化這些關鍵路徑就可以改善時序性能。而這些關鍵路徑所經(jīng)過的邏輯門過多往往是設計者在代碼編寫時誤導綜合工具所導致的,那么,舉一個簡單的例子,看看兩段不同的代碼,關鍵路徑是如何明顯得到改善的。(特權(quán)同學,版權(quán)所有) 這個一個簡單的例子要實現(xiàn)如下的邏輯運算: y = ((~a & b& c) | ~d) & ~e; 他們的運算真值表如表5.2所示。(特權(quán)同學,版權(quán)所有) 表5.2 運算真值表
注:x表示可以任意取0或1。(特權(quán)同學,版權(quán)所有) 按照常規(guī)的思路,我們可能會寫出如下的代碼: // Verilog例程 module example(a, b, c, d, e, y); input a,b,c,d,e; output y; wire m,n; assign m = ~a & b & c; assign n = m | ~d; assign y = n & ~e; endmodule 使用Quartus II自帶的綜合工具,我們可以看到它的RTL視圖如圖5.10所示,和我們的代碼相吻合。(特權(quán)同學,版權(quán)所有)
圖5.10 未優(yōu)化前綜合結(jié)果 而現(xiàn)在假定輸入a到輸出y的路徑是關鍵路徑,影響了整個邏輯的時序性能。那么,下面我們就要想辦法從這條路徑著手做一些優(yōu)化的工作。很簡單,我們的目標是減少輸入a到輸出y之間的邏輯等級,目前是3級,我們可以想辦法減少到2級甚至1級。(特權(quán)同學,版權(quán)所有) 我們來分析公式“y = ((~a & b & c) | ~d)& ~e;”,把~a從最里面的括號往外提取一級就等于減少了一級邏輯。我們簡單的分析,當a=0時,y = ((b & c) | ~d) & ~e;當a=1時,y = ~d & ~e。由此我們不難得到“y = ((~a | ~d) & ((b &c) | ~d)) & ~e;”與前式是等價的。我們可以修改前面的代碼如下: // Verilog例程 module example(a, b, c, d, e, y); input a,b,c,d,e; output y; wire m,n; assign m = ~a | ~d; assign n = (b & c) | ~d; assign y = m & n & ~e; endmodule 經(jīng)過修改后的代碼綜合結(jié)果如圖5.11所示,雖然b和c到y(tǒng)的邏輯等級還是3,但是關鍵路徑a到y(tǒng)的邏輯等級已經(jīng)優(yōu)化到了2級。與前面不同的是,優(yōu)化后的d信號多了一級的負載,也多了一個邏輯門,這其實也是一種“面積換速度”思想的體現(xiàn)。正可謂“魚和熊掌不可兼得”,在邏輯設計中我們往往需要在“魚和熊掌”間做抉擇。(特權(quán)同學,版權(quán)所有)
圖5.11 優(yōu)化后綜合結(jié)果 上面的這個實例,只是一個也許未必非常恰當?shù)摹棒~”的例子。在前面的章節(jié)里已經(jīng)介紹過,在實際工程應用中,類似的邏輯關系可能在映射到最終器件結(jié)構(gòu)時并非以邏輯門的方式來表現(xiàn),通常是四輸入查找表來實現(xiàn),那么它的優(yōu)化可能和單純簡單邏輯等級的優(yōu)化又有些不同,不過希望大家能在這個小例子中學到“漁”的技巧。(特權(quán)同學,版權(quán)所有) | ||||||||||||||||||||||||||||||||||||||||||||||||