2011年1月13日 星期四

沒有你們,生命就不精采:我的懺悔文

從1994年回國開始在交大兼任開始算起,我在研究與教學的位置上已經17年了。一剛開始還只是玩票性質,但是當隔年決定到中華大學任教時,對於如何當一個好老師這件事成了我第一件與最重要的思考要件,多年來沒有改變過。



但是以做一個研究人員來說,我不覺得自己是成功的。以目前學術界的氣氛,發表足夠多的質量的論文是評斷一個研究者最直接與簡單的方法。就這一點來說,我不算是個好的研究人員,因為我的被訓練過程裡,寫論文從來不是最重要的,也看多不太有用的論文,大概也因為這樣子,我不太愛寫論文,而喜歡做一些自己覺得有趣與有用的論文。在美國,我接收到的觀念是:能拿到Funding的研究才算是有用的研究,尤其像是史丹福這種學校。問題是並非所有研究都可以拿到Funding,所以出論文也是一個不算太差的評斷標準,只不過我的偏見讓我覺得要是寫些自己都不確定會不會有用的論文,那還不如做一些有趣的應用還好些。

也因為如此,我的論文很少。而就我自己的標準來說,質也不好。因為每當一篇論文寫好,或甚至登出來之後,我就開始覺得自己做得不好。這樣子的心理,讓寫論文變成一件難過的事。但是,這樣子下去,對於學生的畢業會有問題,所以我總是勉力做下去,論文雖不多,但是夠學生畢業就好。這幾年政府五年五百億的政策,讓論文發表一事更形複雜,缺少論文,不僅個人升等,學生畢業受拖累,其影響層面更是深遠,我就不再這裡多說,一剛開始,我還是堅持要好的研究才寫論文,但是,大勢所趨,我不能因為自己不在乎升等這件事而影響學生的前途,我想自己還是放棄一些堅持,畢竟,一篇論文只需要三到四位審查委員的同意即可。

但是,可想而知,我寫論文的取向,選擇容易出論文的題目,投稿的技巧,甚至決定怎麼運做實驗室來讓出論文變成簡單一點,等等,都不太純熟。當有學生跟我提起我的實驗室的論文極少時,我也只能不好意思的承認了。

不再有論文壓力的我只能說,為了學生著想,只好老狗學新把戲一樣來面對這日益複雜的論文大環境。

我跟自己說:繼續努力。

多年來,在這個工作崗位上我卻有另一個讓我自己覺得驕傲的地方。那是教學方面的。上課方面盡力之外,最重要的是帶學生做研究。

每一個學生我都盡力去了解他們的個性,把他們當做家人,當做子弟來看待。每個星期的一對一或一對二的Meeting,甚至還幫學生看code或寫幾行sample code給他們參考,這樣子讓我可以更了解每一個學生的特質,也因此可以隨時調整我帶他們的方法與態度,只要兩年下來,功夫都會有長進,若是博士班的學生,雖說不一定很會寫論文,但是實做與研究能力都會變得很好。於是,每一天我都拖著極度疲累的身心回家,但是,也無形中跟學生的感情就很好,畢業後,我當他們是朋友,,而多數學生畢業後都跟我保持聯絡,也還會回來看我,有男女朋友也會跟我說或帶來給我看看,結婚都會請我去吃喜酒,甚至還會在我生日時回來幫我過生日。

不過,這一切從2006年我接任計網中心的行政職務開始變了。我把許多時間投入在改善學校行政電腦化的工作,雖然三年下來,做了非常多改善,可是畢竟一個人一天只有24小時,加上Diane到來,我取消了每周一對一的師生討論,只以每周的Group Meeting取代,除非問題一看起來就很大,否則有何研究的問題只在那時討論,剛開始還感覺不到壞處,因為那時的研究生在大學部時就修過我的課,而過去我其實也花很多時間在大學部學生的輔導方面,所以跟大學部學生的感情也好。但是,越到後來,問題越多,我感到跟碩士班學生間的嚴重隔閡,所有學生的進展也慢了下來,然後,開始有學生兩年畢不了業,博士班學生到外面interm後不打算再回來繼續學業,這個實驗室出了毛病,而毛病的根源在我自己。

然後,我從同學眼中不再看到早期的學生看著我時的親近的眼神,我一向引以為傲的部分現在反而成為我最大的失落,但是病弱的身體讓我有藉口,直到,我自己的專題生,曾經是本系大學部前幾名的學生無法準時畢業,我覺得難過極了。諷刺的是,我竟然得到一個名不符實的優良教師獎,讓我連領獎都不敢去。

11月初,我的一位學生回到實驗室,決定完成學業。有一次,她跟我說她很不習慣現在的實驗室,因為一點discipline也沒有,老師不再跟過去一樣跟學生那麼親近,實驗室的研究能量嚴重下降,她跟我說,要不是當年我陪過她走過一大段做學問的路,今天她根本不會回來這樣子的地方。

對我來說,這是無比沉重的一席話,我誠意的接受下來,覺得慚愧,也願意懺悔。

我記得很久以前我說過一句話,現在我對自己再說一遍:

老師教給學生知識,學生拯救老師的靈魂。

對我來說,真的是我的學生在最重要的時刻拯救了我。

11月,我決心恢復一對一或一對二的師生meeting,不管我的身體有多麼疲累。雖然我的程式能力不再優良,但是眼光還沒退化殆盡,我陪著大家看Code,依照結果,當場請學生改code,一再的修正,一邊講解原因,一邊回到過去依照學生的特質來引導他們的教學方式。

老師用多少心思在學生身上,學生就會如實回應,真是一點不假。

12月,我把碩三的那位其實是極優秀的學生找回來,每周跟他做密集的討論,在12月的最後一星期,我讓他住到我家來,多次改進code,一邊幫忙看論文與彩排,終於在2010年12月的最後第二天完成口試。

兩個多月來,我懷著贖罪的心情努力著,我把實驗室的重點研究分成兩部分,一是以音樂為主,一是以系統實做為主,前者以做出一流的研究與論文為主,後者以架構多核心雲端基礎結構與應用為主,以做出有商業價值但不一定要出論文為目標。然後刪除其他能做想做但是不一定有資源與時間做的研究。

2011年1月,在音樂方面,我們終於有相當大的進展,這星期,我在會議時感謝我的學生容忍我這個怠惰已久的老師,感謝他們做出這麼棒的研究,讓我們在專精的這部分能夠有領先全球的研究機構的可能性,讓我可以不會愧對我的老師當年對我的教誨。在多核心系統方面,我們的軟硬體環境日益成熟,今年內,我們的以ARM與FPGA為元件的多核心系統以及我們稱為ThinCloud的雲端Infrastructure的原型將會問世。另外,有關SystemC運算核心的平行化也快要到開花的階段,而由玉琳獨自闖入的幼兒腦波研究領域也將會有第一份入門的研究成果產出,我衷心期盼因為她的努力可以為不幸的孩子帶來一點希望。

曾經,我以身為老師為終身志業,曾經,我一度迷失在這條路上,但是我覺得我的身上一定帶著眾多前世以來就一直帶在身上的地圖,所以我總是會找到回來的路,我想,至少在這一世我大概是不會再迷路了。

我再次對過去我所對不住的所有學生說抱歉,雖然人生無法重來,我也很難彌補我的過失,但是,我還是要厚顏的請求您們的原諒,同時也原諒我不時的疏忽,任性,甚至孩子氣等等種種缺點。假如在未來,你們需要我的意見的話,又或,您只是希望跟人話話家常,請隨時來找我,我總是我的辦公室裡或是家裡,放著音樂,準備好咖啡與茶在等帶著你們回來,希望能做你們一生中最好的朋友。

只是為了自己的生活而做事,這樣子的生命沒有意義。作為一個老師,沒有了能跟他成為終生朋友的學生,這樣子的生命就不精采。

某齣日劇裡,女主角問男主角覺得甚麼時候最幸福,男主角在劇中開了一間小小的花店,他回答道,當人家稱呼我為"花店老闆"時是我覺得最幸福的時候。

對我來說,那就是把"花店老闆"換成"老師"。我想現在的我是幸福的,希望你們也都能幸福。

2010系統層級程式設計簡介與實做

2011/1/12

期末Project評分方式請見:

期末作業評分

-------------------------------------------------

2010/1/5

期末Project:

期末作業的規範如下:

1. 使用8051當做中央處理的機器,此為模組一,其工作如下:

      1.1 接收來自影像輸入模組的資料。

      1.2 傳送已處理之影像資料至檔案寫入模組。

      1.3 接收來自參數模組織參數決定處理方式,處理動作於接收來自參數模組之訊息後才開始。

              1.3.1 如參數為0, 將每一影像pixel亮度加上20

              1.3.2 如參數為1, 將每一影像pixel亮度加上20

              1.3.3 如參數為2, 將每一影像pixel亮度取sqrt後乘以16

              1.3.4 如參數為3, 將每一影像pixel亮度平方後除以256

      1.4 通知影像輸入模組可以再輸入下一張影像

2. 影像輸入模組,此為模組二,其工作如下:

     2.1 主動輸入一張以YUV格式的影像,檔名由使用者輸入。

     2.2  顯示此一影像

     2.3  通知模組一來接收影像。

     2.4  接收模組一的訊息以示可以處理下一張影像。

3. 檔案寫入模組,此為模組三,其工作如下:

      3.1 接收來自8051處理後的影像資料。

      3.2 根據使用者輸入之檔名寫檔。

      3.3 顯示接收之影像

4. 參數模組,此為模組四,其工作如下:

     4.1 使用者輸入處理參數

      4.2 通知模組一接收參數並開始處理。

在此,不限定模組織間的溝通通道之實作方式,但是,如果以

1. 一個統一的匯流排(Bus)的方式實做(也就是另外設計Bus為模組五),加學期總分三分。

2. 如果定出Bus 的協定(含Timing Diagram)並實做出Cycle Accurate (CA)的Bus模組,再加學期總分五分。

以上加分機制實施後,以總分為99分為成績上現。

期末作業需含完整報告,並附執行檔,將視報告完整度酌量增加評分。如果只有程式以及可執行之執行檔,將只有期末作業50%的分數。

   期末Project期限為11:59:59PM, 1/24, 2011,不再展延。如之前有作業要補交,也請以之為期限,但成績以乘以0.7計。成績將於11:59:59AM, 1/26, 2011公佈在系辦公室公布欄,如有疑義,請在4PM, 1/26, 2011前向助教詢問是否有登記錯誤,之後將不再接受更改。

-------------------------------------------

2010/12/20

這是SystemC有關Ports的部分.

請在這裡下載: Ports

有關SystemC Communication的更詳細解說請見: SystemCBook

---------------------------------------------

2010/12/17

有關8051的簡介以及工具

請在這裡下載: SCREAM 805,  its toolchain and FPGA Emulator

----------------------------------------------

2010/12/15

豪文學長說上星期竟然沒有人把8051 Simulator灌起來,所以實在不知道大家的問題是什麼,請大家趕快動作,因為這個作業最困難之處在於環境的設定。程式倒還是其次。

以下是作業要完成的。

1. 使用 8051 ESL/SystemC Simulator,請先在上面跑一個簡單的程式,然後使用GDB來debug。簡易程式如下:

    main(){

         int i,k,j;

         k=1000;

         j=1000;

         for(i=0:i<k;i++) j- -;

    }

   請觀察j的值是否對了。請注意,要知道j有沒有算對,除了用GDB之外,還可以有什麼方法呢?

2. 使用學長提供的8051環境。學長已經提供了一個範例,那是用一個8051以外的Module與8051之間進行溝通。 請改寫此一範例,將上述程式的迴圈數改變。也就是k的內含值。此一外掛模組的功能是自鍵盤輸入一整數,再將此一數字傳到8051模組已更改回圈數。

3. 請增加一個模組,將8051計算的每一個j的值傳過去,然後寫入一個檔案。

4. 更改8051之程式,讓它可以接受多次的外部回圈數的設定,並保持第3部分之寫檔功能,直到輸入迴圈數為-1為止。

-----------------------------------------------

2010/12/8

這是SystemC有關Channels的討論與作法

請在這裡下載: Channels

------------------------------------------------



2010/11/17

這是SystemC有關Concurrency的討論與作法.

請在這裡下載: Concurrency

------------------------------------------------

2010/11/16

這是SystemC有關SC_THREAD與AC_METHOD大致的實作方式與範例.

請在這裡下載: Thread and Method

2010/11/3

這是SystemC有關Main Function以及Module Function的宣告以及大致的實作方式與範例.

請在這裡下載: Structure: Main and Module

----------------------------------------------------------

2010/11/3

這是有關解釋SystemC如何根據時序(Timing)來進行模擬, 因為所有硬體系統都需要跟時序相關的.

請在這裡下載: Timing

-------------------------------------------------------------------

2010/11/3

這是有關解釋SystemC的資料型態.

請在這裡下載: Data Types

_____________________________________________________

2010/10/21

這次的投影片是講解更多的範例以便讓同學多了解SystemC的寫法,這個投影片也是一般SCREAM Lab的自己內部訓練用的簡易型資料,在此同時也規定了第二次的作業。



請在此下載: System Beginners

------------------------------------------------

2010/10/19

對不起,借一下版面,今年的專題指導名單為:

1. 李柏毅

2. 陳政澤

3. 陳奇鴻

4. 林俊緯

假如前面四位有人改變心意的話,那麼

5. 柯旻漢

對不起,耽擱大家。並向沒抽到的說聲抱歉。

-------------------------------------------------

2010/10/11

這上星期,我們對ESL的重要性做了一點簡單的介紹,為了讓課程的主要進度可以快一點,所以我要先介紹一點SystemC,此一目前的ESL標準程式語言,等大家做了第一個SystemC作業後,再回頭來講ESL的其他觀念。

以下是SystemC的Overview: SystemC Overview

HelloWorld程式範例如下: SystemC HelloWorld Example

範例程式請在這裡下載: SystemC Overview Program Example

-------------------------------------------------

2010/10/6

作業上傳位址:

ip : 140.116.82.184
port : 21
user:eslcourse
password: scream

--------------------------------------------------

2010/10/5

這學期,我把上課順序調整一下,先講一點ESL的觀念,然後上SystemC的入門,再回來講完ESL。然後再上其他的課程。

這樣做的用意是8051在其他課程已經再上了,我等一下子再上,其用意只是在於補充一點資料以及我的實驗室所在用的 與8051有關的ESL工具。這是有關ESL的整體的概念性簡介:

Basics of ESL Design and Modeling

第二回上課投影片在此下載: ESL Basics

未來的Topics包含:

SystemC coding and simulation

Review of Verilog coding and simulation

SCREAM8051 and its Toolchain

OpenESL

Heterogeneous Simulation Environment

Simple SoC Design, Modeling and Simulation

HW and Grading: 五個, 分別練習 C++/Threads, 8051 coding, Verilog coding, SystemC coding

Term project: Simple SoC Modeling and Simulation Using 8051/ModelSim/SystemC/Verilog

HW(60%)+Project(40%). 如期末作業未交或兩個作業(或以上)未交則不及格. 作業必須要能正常執行, 否則視同未交.

課程資料:

主要上課資料: 線上投影片(PDF  格式)

參考資料: 1. SCREAM Lab Blog

               2. SCREAM Lab Open Source Blog

               3. SystemC From the Ground

               4. The Guide to SystemC

助教的Email: ProdigyJerry@gmail.com

假如你們還對此一topic想有進一步的了解, 可以Google以下的關鍵字。

1. SystemC Simulation Kernel

2. Advanced OpenESL tool development

3. TLM2.X

4. ARM Processor ESL Model

5. Multi-core Virtual Model

6. Multi-core Programming on Virtual Model

7. Multi-core application programming using CUDA

8. Debugging tool for microprocessors

 

---------------------------------------------------

我一直覺得SoC設計應該要由資訊系的學生來做才恰當, 但是資訊系的學生一向怕硬體, 為了破除這個問題, 我在2009的下學期的大學部開一門選修課, 課名如標題. 英文標題是:

Introduction to Programming and Tools of Electronic System Level (ESL) Design

我寫了第一階段的投影片, 用意在簡介一下ESL的設計觀念. 如下:

Electronic System Level Design Basics

上面投影片的內容還會再更新,但是可以供大家參考。

因為是大學部的課, 一些基本的東西還是要含蓋一下, 我又不想把課弄得講太多ESL, 可是實務卻做的少. 所以我計劃有一章是基本工具與知識的介紹, 以便在實做term project或Homework時可以用到. 以下是幾個重要的Topics:

1. C++ Basics

2. Threads

3. Processes

4. Verilog HDL Basics and Logic Design

5. HDL Simulator and FPGA

6. SCREAM 8051 and toolchain

7. SCREAM OpenESL

8. Computer Architecture Basics

這一些Topics本來有些是同學在其他課程當中就修過了的,但是假如您覺得自己還不夠清楚,請自己加強一下,老師只負責簡單介紹。

這學期的上課資料多半會跟去年的類似,但是我會在做一些資料的修正與補充。而由於8051的部分,我們的工具經過一年的修正,加上專題學長的努力,bugs已經少很多了,也就是期末的作業會進行得更順暢,在此向上一屆的同學說抱歉,也向負責的學長說謝謝。

最後,我發現同學對微處理機與計算機組織的支是還太弱,這是硬體系統設計的基礎,希望同學多自己加強,另外就是8051的使用也是本學期的重點,希望同學在微處理機課程裡多用功。

2010/9/12

以下是第一回的投影片, 是有關C++, Process與Thread.

請在這裡下載: C++, Process與Thread

新版的投影片請在此下載: C++/Process/Thread

10/14要繳交的作業內容在新板投影片裡。