數位IC相關修課心得與選課建議

大家好,有鑑於選課日(6/12)即將來到,整理一下自己碩班修過的課程,並提供給學弟妹們參考,希望對於各位在數位IC路程上有所幫助~ 由於是第一次寫心得文,若是有需要我補充或是有遺漏的部分都歡迎討論! 前言:我背景是中字理學院,碩士期間修習了14門課程,其中11門與數位IC相關,另外3門為通訊以及深度學習課程,所有課程評分都是A開頭。剛入學的時候,發現版上碩班的課程整理較少,有些課程的了解來源也有些不足,所以想趁這次選課前,花了點時間把自己的修課經驗整理出來,給之後想走數位IC相關方向的學弟妹參考。 下面的心得會大致分成我覺得的必修課以及選修課兩個部分來整理。每一堂課會依照自己的修課經驗,從我認為的收穫度以及loading兩個面向來評分(⭐為1分 ☆為0.5分),並搭配一些課程內容、作業形式、修課感受。不過每個人的背景、研究方向和學習習慣都不同,所以以下心得會比較偏向我個人的主觀經驗,不一定完全適用於所有人,大家可以依照自己的狀況再做調整。 希望這篇文章可以減少大家剛進碩班時資訊不足的焦慮,也希望對正在規劃數位 IC 學習路線的同學有一點幫助。   另外以下部分內容有經過AI潤筆修飾,但整體內容皆為我自己的心得,無AI自行生成,請放心查閱。   ##### 推薦的必修課程 ##### ##### 超大型積體電路設計 (1131/電子所/林銘波教授) ##### 收穫度:⭐⭐⭐⭐⭐ Loading:⭐⭐☆ 推薦度:⭐⭐⭐⭐⭐   VLSI算是IC設計領域非常基礎也很重要的一門課,不管之後想走數位或是類比IC,都滿建議修的。課程前半部分可能會和「超大型積體電路設計導論」有一些重疊,主要是在建立MOSFET、CMOS電路與基本邏輯閘設計的觀念;後半部分則會開始帶到比較偏實務與數位IC設計會用到的基礎概念,例如low power design、setup / hold time的來源、同步器設計(Clock Domain Crossing)內容,有助於之後進一步研究時,會比較知道每個觀念大概是從哪裡來的,也比較不會覺得突然冒出一堆陌生名詞。   評分方式主要是四次作業(40~50%)以及期中、期末考(60~50%),會點名。作業部分,第一次作業可能會勸退不少人,因為需要用full-custom (Virtuoso) 的方式完成1-bit全加法器,對剛接觸layout的人來說會需要花一點時間熟悉工具。不過如果第一次作業有順利做出來,後面的作業難度就相對沒有那麼高,整體loading算是可以接受。   ##### FPGA系統設計實務 (1132/電子所/林銘波教授) ##### 收穫度:⭐⭐⭐⭐☆ Loading:⭐⭐⭐☆ 推薦度:⭐⭐⭐⭐⭐   這堂課是RTL課程的進階版,課程會從基礎語法重新教起,也會帶入一些平常比較少用到、且偏向不可合成的語法,例如fork-join、wait等較常出現在testbench撰寫中的內容。   這堂課最主要的價值在於term project需要完成一個RISC指令集的CPU。這個project有助於複習計算機組織中CPU架構的內容,而CPU架構本身也是一個很典型的硬體設計case。由於許多常見的邏輯設計概念都會在CPU中呈現,如果能夠獨立完成,對於自己的硬體設計能力會有相當大的提升。   評分方式為兩次作業(40~50%),以及期中、期末考(60~50%),會點名。作業部分,期中作業需要使用schematic的方式完成,也就是使用基本邏輯閘拼湊出一個完整的CPU。雖然過程會相當繁重,但對於架構的理解會變得更加透徹。建議CPU架構比較不熟悉的同學,最好在繳交期限的三週前就開始動工,否則高機率會來不及完成。   期末作業則是使用Verilog進行撰寫,完成期中作業中的CPU架構。相較於期中作業,這部分的負擔就不會那麼重,通常可以比較輕鬆地完成。作業要求主要是希望同學們完成3-stage multi-cycle CPU,我個人建議也可以在閒暇之餘嘗試完成5-stage pipeline架構的CPU,會是一個比較完整的學習。   ##### 數位訊號處理架構設計 (1142/台大/蔡佩芸教授) ##### 收穫度:⭐⭐⭐⭐⭐ Loading:⭐⭐⭐⭐⭐ 推薦度:⭐⭐⭐⭐⭐   如果要舉出學士課程和碩士課程最大的差別,我覺得就是這堂課。學士班的課程比較多是在培養撰寫RTL的能力,很多時候不會特別帶入硬體架構的設計方法;而這堂課會從演算法的角度出發,介紹一些常用的架構設計技巧,例如pipeline/parallel、unfolding、folding、systolic array等電路設計方法。這堂課會是以「系統性」的方式來分析架構,並選擇相對合理的方式來建構你的電路。   評分方式為五次作業(40%)、一份期末project(25%),以及期末考試(35%),不會點名。作業部分每次會挑選一個演算法,例如CORDIC電路,並要求做出一個未改良版本,以及一個使用課堂上所教架構設計方法改良後的版本,最後再進行比較。設計方法,通常都會對應到前一週上課所教的內容,是一個很充實也很合理的安排方式。期末project則是一到兩人一組,並且會挑選一種矩陣分解方法(QRD、SVD或EVD)來進行設計,並進行timing、area的比較。   對台科學生來說,修這堂課比較麻煩的地方在於名額限制,以及需要實驗室自備ADFP製程。因此如果選不到課的話,也很推薦可以去旁聽。雖然這堂課是EMI課程,但教授上課講解非常詳細,也很樂意回答學生問題,非常推薦修習或旁聽此課程。   ##### 其他課程 #####   接下來的課程會以我修習順序來進行排列,與推薦度無關   ##### 電腦輔助晶片系統設計 (1131/資工所/劉一宇教授) ##### 收穫度:⭐⭐⭐⭐☆ Loading:⭐⭐⭐⭐☆ 推薦度:⭐⭐⭐☆   這堂課是EDA組的必修課程,通常教授會建議修課學生上完這堂課後,下學期再去選修台大張耀文教授所開設的「奈米積體電路實體設計」。不過由於小弟我不是走EDA方向,所以後來沒有繼續選修。關於那堂課的內容,可以請同學們再去爬其他心得文,應該會有不少相關分享。   教授上課非常認真,也會將上課內容錄影,方便同學們課後複習。課程內容主要涵蓋整個design flow中會遇到、且需要使用演算法處理的部分,因此會教到許多演算法,內容非常充實。對於有想要往EDA方向深入的學生來說,非常推薦選修這堂課。   評分方式為五次作業(100%),不會點名。其中兩次作業會要求使用OpenROAD這款開源的EDA Tool。第一次作業會請你使用OpenROAD完成整個design flow,並稍微介紹每個步驟;第二次作業則會分成好幾個主題,並請你詳細介紹自己抽選到的主題在OpenROAD中是如何實現的,越詳細越好,並且可以嘗試自行更改演算法。   剩下三次作業則是coding作業,使用語言為C++,主題分別為CTS、placement以及scheduling。這堂課的loading對於非資工的學生可能會稍微吃力一些。   ##### 超大型積體電路測試與可測試性設計 (1131/電機所/呂學坤教授) ##### 收穫度:⭐⭐⭐☆ Loading:⭐⭐ 推薦度:⭐⭐⭐   這堂課比較適合之後有想走DFT方向的人選修,課程內容基本上會和一般數位IC設計不太相同,會介紹一些fault model,如何將錯誤偵測,以及scan chain、ATPG等。如果想要更了解DFT flow的人,會建議可以把下學期的「容錯系統設計與分析」也一起學完。不過小弟我覺得這堂課的內容有些偏離自己的領域,所以後來就沒有繼續選修相關課程。   評分方式為兩次作業(30%)、期中考(30%)、期末考(40%),會點名。作業內容主要是課堂上提到的一些概念,只要有上課,基本上都能夠滿順利地完成。   ##### 高等計算機結構 (1131/電子所/林昌鴻教授) ##### 收穫度:⭐⭐⭐⭐ Loading:⭐ 推薦度:⭐⭐⭐⭐   這堂課是計算機組織的進階版,為EMI課程,內容會從更高層次去分析現代處理器。課程前半會先複習ISA、datapath、pipeline、hazard等基礎觀念。後半部分則會著重在instruction level parallelism,也就是如何透過重疊多個instruction的執行來提升CPU效能,內容包含dynamic instruction scheduling、scoreboarding等現代處理器常見的核心概念。這堂課比較適合想深入理解CPU、SoC或系統架構的同學;如果只是想訓練RTL撰寫能力,這堂課就不是最直接的選擇。   評分方式為每堂點名(20%)、兩次期末作業(80%)。作業部分主要是以lab為主,內容不是撰寫RTL,而是使用SimpleScalar、Wattch、Powertop和Perf等工具,針對benchmark或程式進行架構模擬、CPI分析、branch prediction影響以及功耗估測等。會提供投影片帶著你做,基本上按照投影片做即可。 ##### 低功率系統晶片設計 (1132/電子所/阮聖彰教授) ##### 收穫度:⭐⭐⭐ Loading:⭐⭐⭐⭐☆ 推薦度:⭐⭐☆   這堂課為實作課,主要課程會是助教來帶,教授會介紹一些基礎的功耗來源,以及一些常見的解法,並且一學期會有兩次業師,會分享一些實務上會碰到的問題。   實作內容我們這屆分成兩次lab,不點名。分組為一到三人一組,第一次為一個systolic array的矩陣乘法,助教會提供範本,主要的任務會是跑完整個design flow,需要完成synthesis + APR的部分,使用的tool是Design compiler + INNOVUS,可以選擇是否對design進行優化。而第二次作業內容為AI加速器,目標是自行設計Mnist手寫辨識的神經網路,並且使用助教提供的single cycle CPU對自己設計的加速器進行控制。對於一些研究內容會是AI加速器的同學可以選修。(有聽說今年的flow改成FPGA,好像loading有比較減輕)   ##### 嵌入式深度神經網路處理 (1132/電子所/阮聖彰教授) ##### 收穫度:⭐⭐⭐☆ Loading:⭐⭐☆ 推薦度:⭐⭐⭐   也是實作課,教授會介紹基礎的神經網路,並且一學期也會有兩次業師,會分享一些實務上會碰到的問題。   實作內容為三次lab + 一次propasal + 一次期末報告,不點名。分組為一到三人一組,三次的目標都是將訓練的網路部署至樹莓派,並使用TPU進行加速。第一次為簡單的範本,照著跑就可以;第二次為唇語辨識,助教會將一部份的網路挖空,請你填空,並且原本的架構無法在TPU進行加速,會請你想辦法更改架構使TPU能夠加速;最後一次為自訂題目,需要符合邊緣裝置的概念,且是否有充分理由使用到AI,期中教授會請各組上台propasal,來審題目,最後完成後會再進行期末報告。 ##### 數位積體電路分析與設計 (1132/電子所/林銘波教授) ##### 收穫度:⭐⭐☆ Loading:⭐⭐⭐☆ 推薦度:⭐   這堂課是VLSI的進階課程,比較偏離數位IC會用到的一些內容,部分概念可能會在APR使用到,重要性比較低一些,並且課程內容比較困難,可能需要花多一點時間。   評分方式為四次作業(40%)、期中、期末考(60%),會點名。作業內容皆為建立spice模型,題目也都是講義上的內容。   ##### 高等數位訊號處理 (1132/台大/丁建均教授) ##### 收穫度:⭐⭐⭐⭐ Loading:⭐ 推薦度:⭐⭐⭐⭐   通訊的一堂課,基本上就是提到一些數位訊號處理的內容,上課內容淺顯易懂且豐富,loading不重也學得到東西。授課內容會錄影放在NTU COOL,供需要的同學複習。   評分方式為五次作業(60%)、出席(15%)、期末報告(25%),不會點名。作業內容有上課的大多都會寫,出席則是基本分12分以及剩下4題加分題,每週會按照學號尾數抽題目,都不難,加分題目教授會幫忙標註在影片,不用擔心不小心跳過。期末報告只要與通訊相關的任何主題都可以,給分極甜。   ##### 基於深度學習之影像辨識 (1141/電子所/李佩君教授) ##### 收穫度:⭐⭐⭐☆ Loading:⭐☆ 推薦度:⭐⭐⭐☆   課程loading不重,且教授授課內容也相當豐富,很適合對一些想要基礎了解神經網路的同學選修,會從一些機器學習會用到的概念開始教起,再來帶到卷積、神經網路,最後是yolo架構。由於我本身研究也是AI加速器,這堂課對於了解簡單的深度學習很有幫助。   評分方式為5次lab + 期末實作(55%~50%)、期中考(30%~35%)、期末報告(10%)、出席(5%),最後一次會點名。Lab皆為簡單的python實作,期末報告目標是挑選一篇論文,改善一小部分(參數量、準確度等),最後繳交一份報告 + 錄製約五分鐘的報告影片。   ##### 高等計算機演算法 (1141/電子所/林銘波教授) ##### 收穫度:⭐⭐⭐ Loading:⭐☆ 推薦度:⭐⭐☆   是比較偏向架構設計的課程,但由於講述的架構受限於講義提到的演算法,可能比較不通用。課堂會提到的演算法為針對prefix adder、sorting、RSA、AES、FFT等經典電路。   評分方式為一次作業(40%)、期中、期末考(60%),會點名。作業內容為抽取講義上提到的10個演算法選1個實現,會限制腳位數量,來模擬實際上晶片設計受到腳位限制的問題,需要配合Serial In Parallel Out (SIPO)以及Parallel In Serial Out (PISO) 電路來實現。   ##### 先進製程數位晶片設計實作(二) (1142/電機所/陳元賀教授) ##### 收穫度:⭐⭐⭐ Loading:⭐⭐⭐⭐⭐ 推薦度:⭐⭐⭐   (二)的部分主要在教APR的內容,使用的tool是INNOVUS,(一)的部分因為衝堂選擇另一堂課。聽教授說之後(一)跟(二)會合併開授,loading應該會減輕不少。若是有需要熟悉design flow的同學可以選修。   評分方式為四次作業(100%),不點名。作業一會給個Mnist手寫辨識神經網路,需要你實作一個AI加速器;作業二為1536點的FFT;作業三是退火晶片設計,為Max-Cut的硬體加速。作業四為團體自訂題目,一到兩人一組。以上作業全部都要完成APR並且DRC以及LVS通過。   ##### 低功率積體電路與系統設計 (1142/電機所/盛鐸教授) ##### 收穫度:⭐⭐⭐ Loading:⭐ 推薦度:⭐⭐⭐☆   比較完善的提到整個數位IC設計會遇到的功耗問題,並且都有提到常用的解法,是一堂適合入門低功率設計的一堂課,但這堂課比較可惜的點是沒有需要實作的部分,比較沒辦法練習到UPF script等低功率設計必要的內容。   評分方式為proposal(10%)、期中考(30%)、paper presentation(30%)以及期末紙本報告(30%),不點名。一到兩人一組,報告就是選定一個低功率相關主題即可,並且找尋至少三篇相關論文,基本上報告就是用你找到的那些論文來做參考進行報告就好。   ##### 其他推薦可旁聽課程 #####   1. 數位訊號處理架構設計 (1141/台大/簡韶逸教授)   基本上授課內容與蔡教授無異,兩位教授的教學內容都很好,如果想要聽兩位教授的差異可以在上學期的時候向簡教授要取旁聽資格,建議第一堂課要到,有機會能夠抽中上課名額(但機率非常非常非常低)。   2. 電腦輔助積體電路系統設計 (1131/台大/楊家驤教授)   也就是CVSD,若是想要培養自己整個design flow的能力,可以嘗試去要要看旁聽,但不確定是否還有開放旁聽名額。   ########################### 以上為心得 ###########################   後記:花了一點時間整理這兩年的修課資料。由於個人規劃,近期也準備到業界實習,因此在回頭整理這些課程時,也重新思考了哪些課程內容和實務能力比較有關聯。這篇整理主要會針對授課內容、評分方式以及個人心得進行分享。部分課程可能沒有整理得非常詳細,也有些課程未來可能不會再次開授,如果有想進一步了解的地方,也歡迎一起討論。   基本上,評分三分以上的課程,我都滿推薦可以選修;至於低於三分的課程,也不是代表課程內容不好,而是我自己的主觀判斷,僅供參考。實際選課時,還是建議大家依照自己的研究需求、未來規劃以及當學期loading來做取捨。   碩士班修課在許多碩士生眼中可能不是最主要的考量,但台科的修課環境相當充裕,其實有很多課程內容都很有幫助。尤其數位IC這個領域,很多時候也會看重求學過程中累積了哪些訓練,因此我會建議大家在研究之餘,也不妨多花一點時間在課程學習上,對於自身實力的提升會很有幫助。   若是有其他問題,也都歡迎提出,我很樂意回答~
愛心
65
28
全部留言