---
# System prepended metadata

title: Physically-Aware-HLS-DF 備忘錄

---

# Physically-Aware-HLS-DF 備忘錄


### Abstract 2

+ 高階合成，也就是HLS因為只需要處理behavorial level的東西，tool就會根據指定的需求自動生成RTL，可以省下很多設計時間。
+ 但是在後端的IC開發也就是佈線的時候會遇到Routing congestion（繞線壅塞）的問題（等一下再提），這個問題通常會需要回到前端去解決，就需要花很多時間。所以就會想要在最一開始的HLS就解決這個問題，但是很難一開始就被看出來。
+ 所以這篇paper提出了一個方法，就是在HLS的時候就去考慮Routing congestion的問題，這樣就可以省下很多時間。這個方法還有一個好處，就是在大部分情況下可以省面積還有時間。

### Intro 2
+ Routing Congestion，在之後會簡稱RC，是指過多的線路想要穿越某區域，但是該區域沒辦法容納的現象。
+ 如果沒有辦法容納，那就只能讓線繞更遠的路，最後會造成delay的增加，這樣就會影響整個電路的效能。
+ 圖片是有一個R.C.也就是壅塞的區域，可以看到他cell利用率特別低，因為都是線所以cell根本擺不進去。

### Intro 3
+ 因為會影響整個電路的效能，所以RC一直是很嚴重的問題，但是在傳統的RTL設計流程中，都只能到後端，也就是佈線的時候才會發現。這樣就會花很多多餘的時間回到前端解決。
+ 可以看到右邊，虛線以前是前端，以後是後端，現在引入了HLS，也就是高階合成之後，設計的過程離實際硬體更遠，這個問題就變得更糟。
+ 現在其實有Physically aware邏輯合成工具可以解決RC的問題，但是他只是用於一開始就用RTL的設計上，但現在都是從HLS，開始，所以這個方法就不適用了。
+ 現在其實也有一些方法可以在HLS的時候就在嘗試解決RC，但這些方法都只有在真正Physically implementation之後用feedback去做調整後重新生成設計，不是很有效率。

### Intro 4
+ 研究者發現許多RC問題是在HLS之前，也就是在用SystemC做系統設計的時候就產生的了。
+ 同時，也有許多問題是之後HLS的directive，也就是指令產生的。這些指令包含常見的pipelining, loop unrolling, function inlining等等。
+ 但是，以現有的HLS tool來說，沒辦法在HLS的階段就處理這些問題。
+ 我們可以看看右邊這張圖，這是一個systemC產生RC的例子，可以看到上面有一個switch case，是看index的值決定下面陣列引數的start end，雖然我們現在都知道這是個很爛的coding style，但是原作者說這是從實際的系統設計來的。

### Intro 5
+ 那為什麼會產生RC呢？因為在產生RTL的時候不知道要指定到陣列的哪個引數，也就是不知道要存到第幾個register，於是就只好套三個超大的demux。這種超大的demux呢，因為針腳非常密集，所以很容易就產生RC，線路太多了。

### RCAHLSDF 2
+ 這篇paper提出了一個新的方法，叫做Physically Aware HLS Design Flow，也就是在一般的HLS Design Flow中加入了兩個新的步驟。
+ 這兩個步驟分別是在RTL生成之後、邏輯和成之前先做一個Congestion Detection；如果發現有壅塞現象，再回到Hardware Refinement或是High Level Synthesis的階段去做一些調整，稱作Congestion Improvement。
  
### RCAHLSDF 3 
+ 首先要介紹他們怎麼做Congestion Detection。研究者發現絕大部分的RC都來自非常大的MUX還有DEMUX。
+ 所以他們就想了一些辦法，從SystemC階段就開始做追蹤。高階合成生成RTL之後，如果發現RTL一些部件會造成Congestion，就開始追本溯源去找是SystemC的哪個部分讓這個部件產生。

### RCAHLSDF 4
+ 這個是他們Congestion Detection的方法，他們把HLS Tool和Physically Aware Logic Synthesis Tool包在他們的Package裡面，這個Package會生成Report，給後續的Congestion Improvement使用。

### RCAHLSDF 5
+ 這個是找尋造成Congestion的MUX和DEMUX的psuedo code，他們會在physically aware logic sythesis tool跑完之後把congestion area的cell找出來，然後再把經過這些cell的path列出來，再把經過這些path的MUX列出來，並印成報告。

### RCAHLSDF 6
+ 這個就是Congestion summary，除了一些統計數據外，還可以看到水平方向和垂直風向的Congestion Overflow，通常要在1%以內才能叫做沒有壅塞。另外，Congestion還有另外一個指標，就是total net length。如果異常的長，那可能就是有Congestion

### RCAHLSDF 7
+ 除了印出summary以外，他們也會印出MUX的資訊，甚至告訴你這是在你寫的systemC的哪個檔案的第幾行code產生的，方便你去做修改。

### RCAHLSDF 8
+ 在經過Congestion分析之後，就需要Designer自行決定怎麼修改。稱作Congestion Improvement。
+ 現有的Improvement包括重新在高階合成階段做reallocating registers還有rescheduling，可是這些效果有限，因為一開始硬體的系統模型就做爛了，再做改善當然沒有什麼用。

### RCAHLSDF 9
+ 所以，就要從之前提到的Congestion報告去做修改。下面這個是之前那個Coding style很爛的人，經過修改後的結果。我們可以看到do while loop不見了，改成for迴圈在switch case裡面，這樣引數start和end就很明確，在做RTL的時候就不會有看到剛剛的巨大的DEMUX產生。
  
### RCAHLSDF 10
+ 除了改剛剛的SystemC code以外，還可以透過改高階合成的指令來改善Congestion。下圖是一個例子，把原本HLS tool的使用最少register的選項改成使用最少的MUX，congestion就幾乎完全解決了。當然，因為register增多，需要付出多19%的面積做代價。

### ER 2
+ 這是他們的實驗結果，可以看到他們的方法在congestion overflow上都有很大的改善，變成幾乎是0。
+ 另外，還觀察到net length ratio都小於1，cell area ratio也幾乎都小於1。剛剛說有面積代價的是model 2，也犧牲不多。

### Thanks
謝謝大家。






