150 likes | 371 Views
專題簡報. 指導教授 曾奕倫 學 生 江秋紜 鐘孟浩. Obstacle-Avoiding Rectilinear Clock Routing with Preferred Directions. 目標概述. 在超大型積體電路 (VLSI) 的 IC 設計中, clock routing 一直是一個很重要的議題,在這個專題裡,題目便將原本極度複雜的 routing 問題簡化。
E N D
專題簡報 指導教授 曾奕倫 學 生 江秋紜 鐘孟浩
Obstacle-Avoiding Rectilinear Clock Routing with Preferred Directions
目標概述 • 在超大型積體電路(VLSI)的IC設計中,clock routing一直是一個很重要的議題,在這個專題裡,題目便將原本極度複雜的routing問題簡化。 • 主要是尋找n-pin net的最短連線,並且以水平線與垂直線來做連接,來避免發生傾斜線段。在連線的時候,必須要避過題目所給定的障礙物,這邊的障礙物就代表了超大型積體電路(VLSI)的IC設計內之晶片。
目標概述 • 在不同的layer,有它連線的方向性,若不遵守其方向性,則所需要花費的cost將會非常大。 • 在switch內,則可以行走的方向會剛好和原本那層所規定的方向相反,此外,switch的邊緣也都是可以行走的,這些走法所花費的cost都是極小的。 • 在超大型積體電路(VLSI)的IC設計中極為重要,它可以手動地增加switch direction region來增加連線的可能性,最常用到此技術的就是當IC中有許多晶片時。
目標概述 • 除了所有點連接起來的線要越短越好之外,另外要考慮的問題就是clock skew的問題。 • 即要讓同一個net中的每一個sink,與source的連線長度盡量一致。 • 如此才不會發生當有些點已經收到訊號了,另外有些點要等待很久才會收到訊號,這樣容易產生出來的結果不正確。
問題描述 • 在一個三維空間中,最多十五層的,由下往上分別編號為1、2、3、…、15。每一層的面積大小最大是10000000* 10000000,每個Net最多要被連接的點是二十個,並且在每一個測試檔裡,Net最多只會有10000條。
問題描述 • Net中的所有點都必須以水平線和垂直線連接起來,並且需要避開障礙物。每一層layer除了有特定的線段方向性必須遵守外,它還有routing pitch必須要遵守,。
問題描述 • 連線線段,不可以和其他的Net相交,簡單來說:就是對於A Net而言,B Net的連線線段可以當作是A Net的障礙物。 • 當將所有Net的所有點全部連接後,要計算出total wire length和total routing cost,前者表示所用到的實際線段,後者表示整個系統的clock skew,這兩者都是越小越好。
程式架構 • 在這程式中, 我們使用多種不同的結構來儲存不同的資料 • struct NET • struct NETINFO //存每條線的資訊 • struct LAYER struct SWITCH struct VIA • struct OBS
程式規劃 • 我們把程式Functional, 切成分開的小程式以利管理 • intCheckCoverOBS(int x1, int y1, int z1, int x2, int y2, int z2); //檢查線段是否在obs裡 • intCheckCoverSWITCH(int x1, int y1, int z1, int x2, int y2, int z2); //檢查線段是否在switch裡 • intTouchNet(int x1, int y1, int x2, int y2, int layer1, int layer2, intnow_net); //檢查是否有碰到其他線段 • intCheckNetEnd(intin_x, intin_y, intin_layer, intout_x, intout_y, intout_layer); //檢查連線是否到終點
程式規劃 • void CheckNetInfo(intnow_net, int count); //檢查Net Info是否正確 • void InsertNet(int x, int y, int layer, intnow_net, int count); //插入新的點 • void DelNet(intnow_net, int count); //刪除不需要的點 • intCalDistance( int x1, int y1, int x2, int y2); //計算兩點間距離 • intCalPitch(int layer1, int layer2); //計算可以跳躍的pitch位置 • void Dijkstra(int count); //計算最短路徑, 以此作為依據來決定先後連接順序
程式規劃 • void BasicSortNet( int count); //基本線排序 • void ConnectNet(int count, intnow_number, intcon_number); //把NET連起來 • void Algorism(int count); //演算法 • void Wirelength(intnow_net, intnow_number, intcon_number); //算全部線段長 • void RoutingCost(intnow_net); //算routing cost
專題成果 • 以下是我們的一個執行結果 : Input : 5層layer, 2個switch, 3條net, 3個障礙物 Output : wirelength 6610 routingcost 10820