台灣的半導體產業相當有名,其中的「IC 設計」更是在全球市場有一席之位。在半導體設計公司( IC Design House)當中,除了類比/數位電路設計師之外,系統設計師也是非常重要的工作。
IC 的開發流程,從規格制定、系統架構、實作到生產、甚至到客戶 design-in,需要一年以上的時間。所以一旦初期系統架構設計有誤,浪費的時間與金額相當可觀 (包括:市占率、薪水、tape-out 成本… 等)。
所以,要在「效能」、「成本」、「彈性」之間取得完美的平衡,就是「系統設計」的挑戰之處。
底下是我過往經驗 (200x年) 中的一個例子,產品是個高階的乙太網路交換器 (Management Ethernet Switch)。
在交換器當中,最重要的一個功能就是要找出「封包要往那一個網路孔傳輸」。所以在交換器的實作當中,會有下圖的MAC address table lookup:
上圖的左邊是 48-bit 的 CAM (Context-Aware Memory),跟 cache 比對記憶體地址的機制很像。 CAM 的速度很快 ,可以在 one cycle 內決定有沒有 hit。
網路封包比對流程很直覺:封包進來之後,將 Destination MAC address (同時間) 拿去跟所有的 CAM 比對,如果有中,接著就去 SRAM 找對應的 port ID (網路孔)。
而整個 lookup table 的維護(新增/刪除 MAC address),可以用硬體實作,也可以用軟體實作。
這個系統架構的問題是:CAM 非常的貴(面積大),而且耗電。所以在高階的交換器當中,需要支援的電腦數量越多,就需要越大的 lookup table。以這個例子當中,48-bit * 64K 之後,是個很大的成本。
很明顯的,將 CAM 移除是個可以思考的方向。但是,要怎麼做呢?
於是,就有了底下的這個設計:既然 lookup table 的維護可以用軟體來做,何不「排序」 MAC address 呢?軟體工程師都知道,排序過的資料「可以用 binary search 來加速」!!!
所以,硬體只要使用 lower/upper bound 兩個 index ,透過 log(n) 的時間就可以找到對應的 port ID 了 (下略五千字)。