2010年2月28日 星期日

H.264 進度報告 --- 雙魚

== 2010.02.28===

在程式中去找intra prediction幾種比對模式的程式碼
luma有分成16*16和4*4兩種,Chroma提供4種兩個8*8模式

(1)luma 16*16是以一個16*16大小block去作預測,提供4種模式


(2)luma 4*4是把一個16*16 block再切成4個4*4去作預測,提供9種模式


(3)Chroma提供4種兩個8*8模式,分別是DC Mode、Horizontal Mode、
Vertical Mode、和 Plane Mode , 其中DC Mode會把8*8再切成4*4 block
依照每個4*4 block上側和左側資訊而有不同的數學式子去進行預測

這邊有從網路上找資料,資料pdf中有每一種預測模式的數學式子
從式子去推導每一點像素的式子數字,接著再和程式碼的寫法相對照
參考的pdf連結: http://0rz.com/LnhA

這學期理想的進度甘特圖

希望一個月可以完成一個元件的改寫,先從intra prediction開始
下禮拜會看AVS中intra prediction的文件內容

== 2010.02.01===

對quatization後的Y數值來壓縮和解壓縮
利用上次產生出來的codeword table來練習

(1)去找每個數值對應的codeword
ex:有三個數值5,13,-5, 5的codeword是101
13的codeword是0101 ,-5的codeword是1111

(2)codeword累積到8個以1個byte寫入新的檔案
設一個變數unsigned char c去記錄要寫入檔案的數值
a陣列記錄要壓縮數值所對應的codeword
當a[i]=1 , c = c先往左shift一個 再和00000001 作or
當a[i]=0 , c = c往左shift一個
如果c未滿8個 後面也沒有其他數值要壓縮
c=c往左shift讓剩下位置補0到滿8個

ex: 要壓數值5,13,-5 , codeword如(1)
第一次a陣列中是101, 判斷完a陣列中每個位置後 c=00000101
第二次a陣列中是0101, 判斷完a陣列中每個位置後 c=01010101
第三次a陣列中是1111, 判斷完a[0]位置後 c=10101011 已經達到8個
這時候就要把c寫入檔案 , 寫檔後讓c=0 再繼續判斷a陣列中剩下的位置
判斷完剩下的位置 c=00000111 , 因為後面沒有數值要壓縮所以補0
c = 11100000 , 最後再把此值寫入檔案中


(3)把(2)寫入的檔案讀出 , 把1個byte拆成8個bit
讀出1個unsigned char c 後 ,下面的動作要作8次
先 c= c和10000000作and , 再讓c往左shift一位
把解出來的bit放在buf 陣列中

ex: 把(2)產生的檔案數值讀出做完拆解判斷後
buf中會是: 10101011 11100000


(4)到table中找codeword對應的數值
table會先依照codeword大小排序 , 從小到大排序
buf會一個一個位置去找現在停在哪個codeword中的哪bit
如果此codeword下一個bit是'\0' , 代表找到一個對應的數值

ex: 假設table只有三種codeword , 設定如(1)
codeword排序後是: 0101 , 101 , 1111
buf是: 10101011 11100000

當buf[0]=1 , 會停在 codeword 101 中的第0個bit
當buf[1]=0 , 會停在 codeword 101 中的第1個bit
當buf[2]=1 , 會停在 codeword 101 中的第2個bit
codeword 101 第三個bit是 '\0' , 所以就找到一個對應數值5


== 2010.01.22===

建立 huffman tree來產生對應的codeword
拿上禮拜作完quatization後的Y數值來練習

(1)去計算Y數值中每一種數值出現的機率
假設4種節點機率分別為0.15 , 0.2 , 0.25 , 0.4 (圖中紫色點)

(2)開始建立 huffman tree
S為所有節點的集合 , 從S中找出機率最小的兩個 : t1 t2
用t1 t2來產生一新節點N, N 是 t1 和 t2 的 parent節點
而且N的機率為 t1 + t2 , 接著把 t1 t2 從S中刪掉, 把新節點 N 加入S中

圖中用4種節點來說明步驟 , S= {0.15,0.2,0.25,0.4}
先拿0.15 和 0.2 來組合 , 此樹節點機率為0.35 (圖中藍色點)
把 0.15 和 0.2 從S中刪掉 , 把藍色點的樹0.35加入S中
接著拿0.25 和 藍色點的樹 來組合 , 此樹節點機率為0.6 (圖中咖啡點)
把0.25 和 藍色點的樹從S中刪掉, 把咖啡點的樹0.6加入S中
最後拿0.4和 咖啡點的樹 來組合 , 最後root的機率為1


(3)去找每種數值對應的codeword
左邊樹分支填 0, 右邊樹分支填 1
每個分支的 0 或 1 是圖上的黃底綠色字
每種數值的codeword就是從root到該數值節點的 0 和 1 組合

從圖上標記可以看到:
數值0.4的codeword是 0
數值 0.25的codeword是 10
數值 0.15的codeword是 110
數值 0.2 的codeword是 111


== 2010.01.15===

完成 DCT-> quatization -> IDCT 的練習
一樣是用txt檔案中的YUV數值
分別對YUV去作DCT-> quatization -> IDCT

YUV以4:2:0的方式儲存 , 4個Y共用一個U和V
所以 Y 範圍是352*288 , U和V則是 176 *144
先對Y作處理 , 接著就是U和V , 每次都以8*8為單位
流程如下:
(1)用下列的公式去產生DCT 8*8矩陣的數值
Aij = Ci*(cos((2*j+1)*i*pi)/2*N) ,
when i=0 , Ci= (1/N)^1/2
when i>0 , Ci= (2/N)^1/2

因為DCT是8*8 , 所以N=8
Aij代表的是矩陣中第 i行第j列的數值
DCT陣列的數值是double的形態儲存

(2)利用 D=(A)(X)(T)來作DCT
A是步驟(1)產生的DCT矩陣
T是A矩陣的轉置矩陣
X是圖片切出來的8*8方塊
D是AXT三者作矩陣運算後的8*8矩陣
D也是用double的形態儲存

(3)去網路找 YUV的 quatization table
quatization table也是8*8的矩陣
把經過DCT後的數值除以quatization table上的數值
除以quatization後的數值先做四捨五入
接著以 int的型式儲存起來

(4)把步驟(3)儲存的數值再乘上quatization table的數值
再以double的形態把乘完quatization的數值儲存起來

這時候會發現數值和一開始經過DCT後的數值有稍微的不同
ex: 經過DCT後是527.89 , 除以quatization 16 再四捨五入後
會以33的數值存起來 , 再乘回quatization 16 會變成528
雖然會有些微的不同 但是誤差都不會太大

(5)利用 X=(T)(D)(A) 來作IDCT
A是步驟(1)產生的DCT矩陣
T是A矩陣的轉置矩陣
D是步驟(4)儲存的8*8矩陣
X是TDA三者作矩陣運算得到的8*8矩陣

要去判斷X中的每一點的數值
如果數值>255, 要讓它等於255
如果數值<0 , 要讓它等於0
最後把X中的數值轉成 unsigned char 型式儲存起來

等 Y, U, V的範圍都作完上述流程
最後把數值以二進位模式寫入.yuv檔案中即可

如果quantization的數值比較小 , 被忽略掉的訊息比較少
作出來的圖片結果會和原始圖差距較小
如果quantization的數值稍大,被忽略掉的訊息比較多
可以從圖片上看到一些地方會變得比較模糊


== 2009.12.30===

利用之前txt檔案中YUV數值
此txt檔案中只有影片中第0張的YUV數值
將這些數值以frame型式寫入新的.yuv檔
檢查新檔案顯示的畫面是否和原本影片中第0張一樣

接著把txt檔案中YUV的數值轉成RGB模式
YUV是以4:2:0的方式儲存 , 每4個Y會共用一個U,V
一個MB裡面會有16個Y,4個U和4個V
RGB是4:4:4, 所以要先弄成一個MB裡面有16個Y,16個U和16個V

接著套用 YUV->RGB 的公式去計算
如果轉換後的數值>255, 要讓它等於255
如果轉換後的數值<0 , 要讓它等於0
最後再寫入.rgb的新檔案中即可


== 2009.12.24===

寫了一個小程式去判斷抓出的圖片數值是否正確
1.先讀取存在txt檔中的YUV數值
2.直接寫一個函式去讀取圖片的YUV數值
3.最後比較兩者的YUV是否一致



這邊是練習對MB 和 frame的位置概念
參考圖片 , 整張圖是352*288, MB是16*16 (圖中紅色方塊)
txt檔中是把每個MB中16的點 由左至右 由上到下寫入
一個MB寫完在換下一個 , MB也是由左至右 由上到下
frame是一個點一個點讀取 由左至右 由上到下 (圖中紫色方塊)

所以讀出txt檔每一個數值, 都要放回它在圖片的原本位置
步驟2是把圖片一個點一個點的讀入,然後儲存起來
最後再比較這兩個種數值是否有一致


== 2009.12.10===

目前已經把上次提的數值抓出
除了bitrate, 其他數值都以binary型式寫入檔案

1. 每個16*16 (MB) 的數值
圖片大小352*288 , 每16*16切成一塊
把16*16裡每點的pixel數值寫入檔案

2. 每個MB作完intra prediction的different值
intra prediction 分成 4*4和 16*16 兩種
(1) 4*4有9種mode , 每一種mode都會算出一個different值
先用一個陣列暫存每種mode算出來的different值
接著計算每種mode的cost大小, 找出一個最好的mode
這邊也會有個變數去記錄哪個mode是cost最小的
最後把此種mode的different值存進陣列(a4)
以4*4 去算different值 , 但最後要的是16*16
所以每次算完的4*4 要按著順序存進陣列(a4)

(2)16*16則有4種mode , 作法同上
差別在於 這邊是用16*16去算different值
只要把最好mode的different值存進陣列(a16)即可

作完上述兩點 , 每個MB會有 4*4 和 16*16算完的最佳解
會從中選一個來當作這個MB使用的different值
所以最後選出的different值才是要寫入檔案的


3. 每個MB作完 DCT+ quantization 後的數值
程式作完 DCT+ quantization的值存在 nMBQuant_Y變數裡
而且大小也是宣告成 16*16
只要將 此變數中 256個數值 寫入檔案即可
有記錄 Frame_I DCT+ quantization 後的數值
以及 Frame_P DCT+ quantization 後的數值


4. 得到每個MB需要的bits數量
此數值存在nRDBitRate變數裡
只要將此變數的值寫入檔案即可
一樣要記錄 Frame_I 和 Frame_P的BitRate


== 2009.11.18 ===

已經跟小新學長拿了程式
為了達成了解基本的H.264運作流程
計畫先取出下列幾個數值:
1.抓出MB pixel值
2.抓出MB pixel值 做過 Prediction(inter or intra)
3.抓出MB 4x4 DCT值
4.抓出MB 4x4 DCT值做過 quantization
5.得到MB壓縮所需要的bits數量

把這五個項目的數值取出來,分別存成一個新檔
這些檔案裡面的數值是後續步驟會使用到的
存檔的類型沒有限制 , 我想說把每項的數據存成txt檔
就從第一項開始作起 , 現在剛看程式 大略知道第一項要的數值在哪
這邊會再問一下學長 , 希望下禮拜可以抓出第一項的數值

2010年2月23日 星期二

[轉錄] Gallery of Processor Cache Effects

分享一篇文章:Gallery of Processor Cache Effects

作者 Igor Ostrovsky 在  Microsoft Microsoft's Parallel Computing Platform team 服務。這篇文章透過 C# 七個實作來講述 Processor cache 的影響。測試程式簡短但切中要害,適合作為瞭解 cache 的入門。下面引用一些有趣的例子,希望勾起大家的興趣:

  1. 下面的 code, loop1 和 loop2 的效能差異會是 1/16 嗎?
    int[] arr = new int[64 * 1024 * 1024];

    // Loop 1
    for (int i = 0; i < arr.Length; i++) arr[i] *= 3;

    // Loop 2
    for (int i = 0; i < arr.Length; i += 16) arr[i] *= 3;



  2. 下面的 code ,loop1 和 loop2 跑得一樣快嗎?



    int steps = 256 * 1024 * 1024;
    int[] a = new int[2];

    // Loop 1
    for (int i=0; i<steps; i++) { a[0]++; a[0]++; }

    // Loop 2
    for (int i=0; i<steps; i++) { a[0]++; a[1]++; }




一些外國鄉民的討論:http://www.reddit.com/r/programming/comments/ax1nv/gallery_of_processor_cache_effects/



P.S. 在 a 哥面前班門弄斧了!!

2010年1月30日 星期六

多核心8051與代理人伺服器

摘要

多核心處理器是目前最重要的研究議題之一,在未來要提高計算能力而同時不讓功率與散熱成為阻礙時,多核心處理器是解決方法之一,不過多核心處理器的開發不僅僅是硬體的問題,同時在系統設計以及軟體開發方面也具備多重困難。與其一開始就切入使用過於複雜的處理單元,本系統採用簡單的8051為基礎,經過適度的修改後,將多顆修改過的8051以晶片網路(Network on Chip-NoC)的方式連結起來,並且採用服務導向架構(Service Oriented Architecture-SOA)以及元件式軟體架構(Component Based Software Architecture-CBSA)的方式讓多顆8051可以共同運作並且為同一套應用軟體進行運算,我們使用代理人伺服器(Agent)負責將軟體元件的二元碼(Binary)透過元件快遞協定(Component Dispatch Protocol)傳送至多顆8051進行運算,而軟體元件之間所需要的資料交換則是利用我們所定義的元件資料交換協定(Component Data Exchange Protocol)透過晶片內網路進行傳輸,而運算的結果透過代理人/元件通訊協定(Agent Component Communication Protocol),最重要的是,我們提供了包含以SystemC為基礎的電子系統層(Electronic System Level-ESL)的模擬器(Simulator)並執行在我們自行開發的開放原始碼的OpenESL發展平台之上,同時我們也提供了FPGA的實體模擬器(FPGA Emulator),而代理人伺服器暫時是使用一部PC來取代。整體的成果呈現出一個簡單的多核心系統所應具備的基本功能,相信這是一個具體而微的展示,讓人可以看見(Visualize)未來真正功能強大的多核心系統,我們計畫在不久的未來採用更先進的處理器以及作業系統,讓多核心系統真正具備實用價值。

2010年1月20日 星期三

2010寒假training course

目前LAB training course 時間為2/1~2/5 共計5天 早上9點開始

請碩0新生務必出席 專題生做相關領域的也請出席

也請講者 AAA學長 宗胤學長 塞公學長 嚕嚕帥哥

將課程投影片及相關文件上傳上來

課程設計部份

FPGA 2/1~2/2(一~二)講者 SCAAA 2/2 4282 2/3 4285
SLIM 2/3(三) 講者 塞公 4282
SYSTEMC 2/4(四) 講者 嚕嚕 4282
ANDROID 2/5(五) 講者 宗胤 4285

也歡迎其他有興趣的可以來聽

2010年1月18日 星期一

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

1/18, 2010

由於學長在期末作業的tool kits上出了一點小問題, 所以必須延遲kit的上傳時間. 老師在此感到十二萬分的抱歉, 讓大家無法早一點回家放假.  不過為了讓大家的學習可以有一個比較完美的成果, 還是請大家勉為其難一下.

Kit預計在星期三(1/20)上傳. 星期四(1/21)學長會在4263等各位並且做詳細的說明. 原則上, 假如會正確使用套件以及之前的作業都做好了, 那摸應該只需要2~3天就可以完成了.

無論如何, 這是我們的疏失, 所以作業繳交期限延至1/2/2010.

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

1/8, 2010

期末作業注意事項請在這裡下載: Final Project

由於期末作業套件準備不及, 作業繳交時間延後至1/25晚上12點. 請隨時注意套件上傳的資訊.

過去第四與第五個作業還沒交的組, 可以在1/25前繳交. 已經按時繳交的組該作業加5分.

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



1/4/2010

這是關於Ports/Interfaces的最後的一次投影片, 我引用參考資料裡對階層式通道的例子, 這是要進入實做比較複雜的介面, 如AMBA或者是晶片內網路(NOC- Network on Chip)等的時候你所必須採取的方法.

這也是這學期最後的一份投影片, 我把它跟Ports放在一起. 我在之後會將這學期所有的投影片再做一次總整理, 並且會有一份附帶的講義, 預期在半年後放上來, 請各位同學到時候來下載.

請在這裡下載: Hierarchical Channel

最後提醒各位, 期末作業的套件講解是1/7, 請務必來上課.

最後祝大家學習愉快與順利, 也希望這個課程對大家的未來有所幫助, 更希望有更多資訊系同學能投入到這個領域的研究, 假如我上課有不周全的地方, 請大家到這裡留言, 我會想辦法改進, 這樣對以後來修課的同學會更有幫助.

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



12/31

這是SystemC有關Ports的部分. 這次先上傳一部分.

請在這裡下載: Ports

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

12/28

有許多同學在問第五個作業是什麼, 我記得我在課堂上講很多次了.  就是

第四個作業用OpenESL的Command Line模式再做一遍, 用意在讓各位熟悉ESL工具.

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



12/8

這是SystemC有關Communication的部分. 目前完成的部分是Primitive Channels的部分, 其他的會在之後上課前放上來.

本周的作業是將此次投影片裡有關sc_semaphore的範例的其中一個master module改成用method來實做. 請在12/24前繳交.

這一周除了上SystemC之外, 另外要請同學開始試用實驗室宗胤學長開發的8051 SystemC Simulator. 下周品皓學長也會把對應的GDB也做好. 這是期末作業的最重要的元件之一, 請同學一定要熟悉.

下周會請哲榮上OpenESL的使用, 請同學下載試用. 請在Windows XP或Linux環境下使用.

請在這裡下載: Communication Channel

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

12/1

這是SystemC有關Thread與Method更進一步的介紹, 不過也因為還沒完全寫好, 只算是完成70%, 請見諒.

請在這裡下載: Thread and Method

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

12/1

這是SystemC有關Concurrency, 不過因為還沒完全寫好, 只算是完成70%, 請見諒.

請在這裡下載: Concurrency



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

11/25

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

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

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

11/25

這是一份 SystemC的Overview, 講一些有關SystemC的基本概念與元件是開發觀念. 有Example提供大家參考.

請在這裡下載: SystemC Overview

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

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

11/24

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

請在這裡下載: Timing

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

11/24

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

請在這裡下載: Data Types

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

11/23

這是OpenESL的投影片, 主要是說明SCREAM Lab所開發的ESL 整合設計環境(IDE)的使用方式.

請在這裡下載: OpenESL

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

11/23

這是SystemC的安裝教學.

請在這裡下載: Installing SystemC

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

11/22

這是簡單的Verilog與Logic Design教學以及ModelSim的用法.

請在這裡下載這三份檔案:

 Using ModelSim

Basic Logic Design

Verilog Basics

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

10/6, 2009

這是第五回的投影片, 是有關SystemC的概念性簡介:

For SystemC Beginners

請在這裡下載: SystemC Beginners

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

9/29, 2009

這是第四回的投影片, 是有關ESL的整體的概念性簡介:

Basics of ESL Design and Modeling

請在這裡下載: ESL Basics

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

9/24

這是第二回的投影片, 是有關8051的簡介以及工具

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

未來的Topics包含:

Review of Verilog coding and simulation

Basics of ESL Design and Modeling

SystemC coding and simulation

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

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

 

假如你們還對此一topic想有進一步的了解, 相關研究所課程的內容如下, 近期會有一個討論串發佈.

Topics:

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

HW and Grading:

1. 10 to 12 presentations

2. 3 projects

如有作業未交或超過3次presentations未準備者則不及格.

課程資料:

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

參考資料: 1. SCREAM Lab Blog 

               2. SCREAM Lab Open Source Blog

               3. SystemC From the Ground

               4. The Guide to SystemC

               5. CUDA

               6. TLM

               7. ARM ESL


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

9/22

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

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

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



9/20

ruru: 請將8051 simulator的用法加在品皓底下post的power point裡再傳給我, 請包含如何跟SystemC銜接的方法.  另外我的ESL Basics有幾張圖要畫一下, 我再寄Powerpoint給你.

宗胤:  請將C++/threads/processes的投影片寄給我. 請你寫一份TLM2.0/2.1的投影片. 一月中會用到, 請你12月完成.



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

7/24, 2009

提醒我自己與大家一下, 該上傳了. 我自承有點怠惰, 會趕快把SystemC的部分一點點補上來.

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

6/18, 2009

投影片我改成PDF檔, 請指教. 請負責的同學記得在7月底上傳投影片.

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

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

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

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

Electronic System Level Design Basics

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

1. C++ Basics: Gary

2. Threads: 塞公

3. Processes: 塞公

4. Verilog HDL Basics and Logic Design: ruru

5. HDL Simulator and FPGA: ruru

6. SCREAM 8051 and toolchain: 品皓

7. SCREAM OpenESL: 小龍

8. Computer Architecture Basics: 品皓

這一部分是:



All programming skills you need to know to master SystemC and learn ESL design together with some useful information

請各位就一個不是懂太多的大學部學生為準則, 盡量寫得讓他們看得懂. 順便幫他們複習一下他們過去學過的, 但是對這門課重要的部分. 不過請不要copy你過去學過的書或講義, 務必是你消化後再寫出來的東西比較好.

接下來我會寫SystemC的部分以及請Gary寫一章TLM2.0的部分. 至於OCP與AMBA, 我還在考慮要不要放進來, 但是還是請ruru準備, 反正都是要寫的.

以上請各位有空可以開始寫了, 我希望大家在七月底可以完成四個Chapters的powerpoint, 並且開始寫書的部分.

以上請各位學長與學姐指教, 如能自願幫忙, 感激不盡.

2010年1月8日 星期五

操作的必要性與不方便的必要性

Nita來訪, 確實給我許多啟發, 對孩子的教養就不提了, 因為這部分太多了我需要時間去消化.

偶然間, 她提到安藤的建築. 以下圖片是google來的, 要是有人覺得我這樣有點違反規則, 留一下言, 我把他刪了就是.

ap_20070724022248243



住吉的長屋據說是他為人設計但是之後買回來當自己事務所的房子. 這房子把一大堆地坪分給了天空, 然後把房子一分為二, 你要從房子的一邊到另一邊, 天氣好的時候可以曬一下太陽, 對健康有益, 要是遇到下雨, 恐怕要撐一下傘, 每一間房間都不大, 動線也不是太好, 總而言之是不太方便使用的那種, 看起來平凡簡樸至極, 可是卻是常被拿來討論的屋子, 傢俱據說也都不是方便大氣的那類, 因為擺不下. 看了下面幾張圖, 請自己揣摩一下.

7f0a6d5d

房子已經不大, 入口更小, 大約就是70~100cm寬的門.

sumiyoshi_no_nagaya_01

這房子住起來肯定沒有時下台灣所謂的豪宅舒服與方便, 以安氏而言, 電視裡面老是愛宣傳的那類超大豪宅他是絕對住得起的, 不過人家可是在這不太方便又小小的屋子裡面構想與誕生出一堆很棒的設計. Nita說得好, 就是要這麼不方便, 住在裡面的人就是要這麼遷就這建築才行. 不這樣, 無法有操作的機會, 不這樣, 無法有傑作誕生, 歷來一位作者一生中最好的藝術作品不都是作者在不方便, 甚至困頓的情況下誕生的嗎?

大哉斯言!

一個人必須透過不斷的操作, 包括心理與身體兩方面, 才可能可以有源源不斷的創意與作品誕生, 待在過於安逸的狀態是不足以產生好的東西的, 甚至連產生普通好的東西都不行. 好友吳鳴兄說, 要嫻熟一樣技藝, 或甚至只是初窺堂奧, 起碼需要一萬小時, 假如每天練習6小時, 那麼要四年多的時間才夠. 要成一家之言, 那非得日思夜想, 超過十年才行.

這讓我想起近年來, 物品越來越方便, 於是人類靠自己的雙手操作,  靠自己的感官判斷的機會越來越少, 當然由身體力行進而刺激思考的機會也就會更少, 接受新知識與新觀念的能力也就連帶的下降了. 所以人就會越來越退步了, 最後就像是提前衰老的人, 再也想不出新的東西來了. 很可悲的.

所以思想上與身體上的操作行為是必要的, 而要有機會操作, 那麼適當的不方便也是必要的了. 但是請不要誤會我的意思, 我並沒說一切都要不方便才行,  但是你必須知道你需要的是哪一類的不方便才行喔!

這讓我想起我的黑膠系統, 不方便的盤,  不方便的唱臂(沒有自動上下與舉臂停臂器), 要唱一張唱片要進行的儀式與過程以及要忍受的黑膠唱片的一些不完美很多, 這也許是現代用慣 CD, iPod, 甚至電腦音源的人所無法習慣的, 可是透過這些操作, 我似乎學到一點點道理, 也許就像是這住吉之長屋一樣, 不方便歸不方便, 它內在真正的好處還是要使用的人去體會才是. 雖然我自己做的東西不是頂極的東西, 多數頂極的東西在操作上面通常是需要下一點工夫的. 就像Stereo Sound裡描述的頂級音響一樣, 人是需要花以年為計算單位的時間去熟悉與操作, 才可以把器材的潛力帶出來的. 有一些東西, 為了達到終極功能的目的, 操作上的方便在設計時是可能被忽略或故意被忽略的.

DSC01872

DSC01871 

最後想到自己以前還是學生的時候, 那時的硬體與系統軟體工具都不方便, 所以要把一個硬體系統叫起來模擬需要一大堆前置步驟, 而每一個步驟之間的格式轉換多半要靠自己寫程式來弄, 因為沒有現成的人家寫好的code可以用, 所有的路徑, 目錄, script都要自己寫與管理. 所以還沒開始模擬就先花一個小時了. 不過因為這樣, 每一個步驟都清楚他在做什麼, 可是現在多的是人家編好的工具與寫好的script, 一旦叫不起來,  多數學生只能傻眼, 然後接下來就不知道怎麼辦了. 其實, 只要挖進去, 一步步了解他的步驟裡的所有動作以及去了解這些動作的意義, 一切就開朗了.

可惜的是, 當初我的訓練是一剛開始就從零開始, 所以這些步驟我很清楚, 現在的學生則是多半沒經過那樣子的訓練, 所以在解讀步驟時會不知道怎麼辦. 反過來說, 我自己就不知道那些script與伴隨那些script的那些工具的確實功能, 反之, 因為我自己沒寫過那樣子的script, 新的工具用新的語法或語言寫的, 而過去多半的工具是自己用很爛的程式寫的, 這也是因為我後來在這方面欠缺操作的原因. 不過終究script與工具如何寫在多數議題上是末節, 原理要是知道就容易解讀了. 以我的年紀以及目前與未來我所要做的工作內容, 如何寫出更好更方便的script與工具是不必要的就是了, 也就是我再也不需要去操作這類東西, 但是對於年輕學生來說, 這卻常常是他們在不遠的將來找工作與做研究時所需要的, 不了解這些我所謂的末節反而是不行的. 時代在變嘛! 無有辦法!

所以方便有時不見得是一件好事, 不方便也不見得是一件壞事, 反之亦然. 多數時候, 假如這是你該好好懂的東西, 當然不方便是有其必要性的. 至於你該讓哪些不方便的東西來訓練你產生操作的行為進而成為某方面的專家, 就只有你自己才知道的了.

關於這最後與最重要的一點, 安藤忠雄的住吉的長屋的例子可以給我們不少的啟發.

2009年12月23日 星期三

OpenSparc T2 in FPGA - 哲榮

------------------
2009 12 23 三
------------------
這禮拜把cygwin裝起來
然後執行yl學長說得指令sim xxx
可是沒有開啟modelsim

再加上我對sim這個script的內容不太瞭解
請aaa幫忙看之後,發現有文件!可以參考

目前正在看這份文件
想說先找出memory.hex如何產生的
然後直接放到之前的專案裡面一起跑
因為直接執行它的script還是需要nc-verilog或synopsys


------------------
2009 12 16 三
------------------
目的是希望能夠把Sparc t2燒入FPGA中
並接上TLM2.0的bus
將Sparc作為一個運算的component

目前下載OpenSparc的opensource
http://www.opensparc.net/opensparc-t2/download.html

短期目標希望先在pc上跑RTL simulation
然後在program rom裡面寫入一個簡單的loop program
能夠正常執行後接下來再把program更換為一個小型的os或者更小的管理程式
來處理sparc與周邊的資料傳輸

原本直接把t2的verilog code直接放到ModelSim上跑simulation
但是compile的時候會遇到dump.v裡面出現error:
(vlog-2155)Global declarations are illegal in Verilog 2001 syntax

後來看了一下dump.v裡面只是在做VCD和FSDB(fast signal database) dumpfile
加上file list裡面又沒有dump.v 所以直接把它拿掉xd
當初會放進去的原因是因為他跟top module t2.v放在同個資料夾,沒注意到他不在file list裡面

後來simulation過程中又出現了
**Warning:(vsim-7) Failed to open readmem file "memory0.hex" in read mode
#No such file or directory.(errno = ENOENT)

似乎是memory map file沒有讀到
但是搜尋下載的t2檔案裡面又找不到memory0.hex

後來問了一下aaa,還是決定在linux底下裝NC-Verilog 來跑simulation
因為readme file裡面有教怎麼在NC-Verilog上跑,照著作應該比較不會有問題


2009年11月25日 星期三

出國遊學玩樂感。kiki。

大家好 ,我是老人一枚-kiki~奉老師之命來po個出國遊學之感想!

出國前
一開始是想要去Working Holiday的,但是跟爸媽談過之後她們怕太危險怕很大,最後覺得遊學可以達到我的目的,也可以學一些東西~所以~就讓我年輕瘋狂一次吧!

雖然五月就出國了,不過我也是二月才開始Survey學校,一開始什麼都不知道,就從身邊有出國的朋友們下手,然後上ptt(沒有錯我是鄉民!)看相關資料,最後跑去代辦中心詢問,因為代辦實在有點貴,所以我就開始自己動手找學校啦!心裡想要的學校大概就是幾個方向,是大學附屬的(不想要只去一般學校~很像補習班)+交通方便,所以最後就找到了BU啦!在美麗的Boston,大家都說很棒的地方,所以就決定他了。附上很方便的網站 ~就是她讓我完成手續地!

出國了
學校課程是每天的早上9~1點,下午會有一些club可以參加,晚上做作業後,再去gym跑跑步就差不多晚上該睡覺了。每天規律的學生生活,超懷念的!而課程我選擇的是Business Class,個人覺得師資還不錯,會請starbucks之類的公司經理人來講課,很特別!課程只有三個月,咻一下就過去了,去遊學的孩子好像通常都會待個一年,只待三個月的真的不多。

我的室友是日本醫生正妹,在出國前就一直想要認識日本女生,結果非常lucky的就遇到啦 !我跟她踏遍了Boston的大街小巷,任何大大小小的活動都參加,學校的老師行政人員都因此認得我們,我們也因此認識了更多朋友。不過挺可惜的是,我去的時候剛好是暑假,所以沒有很多學生在學校,無法真的感受到她們的校園生活。

Boston是個很漂亮又有著方便地鐵的小城市,聽說是全美最多學校的城市,最高學府都在這裡,這裡的台灣圈很小,所以不小心就認識了高檔的MIT media lab的小妹妹,還有一群Harvard/MIT的高材生,每個人都懷抱著夢想,很閃亮!

課程結束之後,就開始了美國東岸趴趴走行程了。第一趟是跟著學校同學一起參加國內旅行團,去了Washington DC+Niagara Falls,這些景點太經典,但是開車又不方便,跟團便宜又免煩惱!結束後就開始到東岸的朋友家寄生啦!首推ya+0小朋友,他在NY念MBA唷,所以我就以他家為主,到處去玩耍啦!

第二趟是ya+0加上俊一的老婆一起的Orlando-Disney之旅,好像重回小時後時光耶!其中四天都泡在Disney裡,每天都看著唐老鴨米老鼠,連做夢都會夢到耶~哈哈。Orlando與Boston感覺差很多,飯店附近都很度假~南洋棕梠樹風,市區附近則很退休有錢風,好像每天都很悠閒。

第三趟是飛到北卡找我高中同學,他在Duke念博士,超級優秀的孩子,不過北卡真的就非常大自然風,我從飛機上看下去都是綠通通的樹一大片,我為了入境隨俗,所以這裡的行程都是參觀校園~Duke+UNC+NCSU~沒有城市的塵囂味,非常舒服,沒有什麼誘惑所以可以好好念書。

第四趟則是到NY State比較北邊的Binghamton,這裡跟Boston的緯度一樣,只是在內陸一點,所以比較冷一點,但是他的感覺反而跟北卡比較像,因為都是走大自然風,沒有車無法生存的地方,也因此我又去參觀了名校:Cornell+也叫做BU的Binghamton University!超漂亮的!空氣都是甜的呢!!

最後一個星期我就乖乖的待在NY遊蕩了,因為Ya+0開學加上有在打工,很可憐很辛苦,所以我就上ptt去找人一起遊NY啦!台灣人見面格外親切,可以有人幫你拍照,也有人陪你聊天,超讚地!就這樣我的旅行就在NY畫下句點啦。

出國後
這樣出國也出去了四個半月,英文學好當然是必要的,但是最重要的是認識了好多不同國家的朋友喔!最多的是日本韓國朋友~還有哈薩克~多明尼加~阿拉伯ㄚ之類等等的,超級大開眼界的,每個國家的風俗名情都不一樣,產石油的國家真的都有比較有錢XD。。。

現在就算回國了,還是很努力的跟朋友保持聯絡,有認識這麼多朋友真是太划算了!有夢想就去實現他!這真的是我這生最棒的旅程啊!

詳細行程記錄在我的blog啦~一開始寫得很認真,後來都縮在一起啦~哈哈。報告結束,謝謝大家收看落落長文。

2009年11月23日 星期一

Google Chrome OS


義崧、禹鴻、跟唯中這個週末撥空南下巡視 …喔不,是南下探視成大的鄉親們,周大師甚至不棄嫌的願意下塌在小弟家,工業區晚上很冷清野狗又多的,大師一來連我家狗狗都不會吠他。


在聊天聊到半夜四點(?)的話題中,唯中提到Google宣佈了他們打算出產自家OS的消息,並且有初步的概念,很快的我訂閱的blog中也有人提到此事,所以貼上來分享給大家知道一下。目前我找到的project是Chromium,官方也釋出了有趣的介紹影片。

由影片中的介紹我們可以了解,他們的OS透過Chorme流覽器來當作我們習慣的「桌面」,使用他們的OS一定要接上網路,所有的資料都會透過網路來存取及計算,可想而知這是他們發展雲端計算後的下一步。以後開發程式可能不再是用C, C++,而是HTML5, CSS3, JavaScript …。

Who knows ?

2009年11月13日 星期五

Leon3, an OpenCore SoC system

Hello Everybody,

Long time no see... :)

I find that I'm losing to follow what everybody did since the blog are not up-to-date. However, I'd give a brief introduction of the SoC system adopted here. I especially highlight its debugging utility, being treated as a reference of 8051 project.

The SoC system is provided by AreoFlex. It consists of IP cores, OSs, compilers, debugger and simulators. Most are open-source following GPL licensing and some are commercial. The Leon3 is the processor core using the SPARC V8 architecture. The SoC system contains AMBA bus with plug&play functionality, so modules connect to the bus. Essential IPs are built in the package, as shown in the figure below. This system doesn't bound to any boards or processes. It means you can use it on whether Xilinx/altera FPGA and ASIC design. However, they collect various FPGA boards and fit the SoC system on them, including the peripherals on the board. A tool to configure the IPs is included. It helps you to construct the system you want, even without modifying any codes. You also can build multi-core system by configuring.

After configuring, synthesizing, and programming onto FPGA, you can execute program on the LEON3 processor. The GrMon is provided as a debugger. It can obtain the information from processors and other AHB slave by using the debug link module, which is a AHB master, as shown above. However, to access the registers in the processor, an additional debug support unit (DSU) is designed. The DSU is a separate AHB slave module, accessing the processor only when the processor is in debug mode. Once the GrMon tends to access the status of processor, its corresponding debug link module will signal the DSU. The DSU will enforce the processor to enter debug mode and halt, so that DSU can work. A DSU can cope with up to 16 processors.
As mentioned above, the SoC system has no limitation to FPGA boards, so their debugging environment is adaptable by providing various debug link modules. For example, it supports Xilinx standard USB-JTAG download cable for debugging. Some may question if there is no interface for the existing debug link. Don't worry. If you can connect your FPGA board with PC, all you need to do are to design your own debug link master module connecting to PC with interface on the board and to enable GRMon control your hardware module by implementing a set of pre-defined callback functions being invoked by GRMon. This makes it possible to build the system on the existing FPGA boards in our lab. :p
Moreover, the GRMon is an Eclipse plug-in and can attach with GDB for debugging. More information here.

Okay, that's it!