2011年1月13日 星期四

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要繳交的作業內容在新板投影片裡。

10 則留言:

locke2833 提到...

#include

using namespace std;


int main()
{
int **b = new int*[10];
for(int i=0;i<10;i++)
{
b[i] = new int[10];
b[i][0]=i;
}
delete[] b;

for(int i=0;i<10;i++)
{
printf("%d\n",b[i][0]);
delete[] b[i];
}


int c;
scanf("%d",&c);

return 0;
}


/*
也沒全刪掉...

delete[] b 只影響了 b[0],b[1]而已

Output :

3745464
3739992
2
3
4
5
6
7
8
9

*/
/* CSIE101 F74972215 陳映翰 */

D. N. A. 提到...

路過回一下

不是"只影響到b[0]跟b[1]" ....這段code 的第一個delete[] b;是刪掉int **b = new int*[10];製造出來的那10個int* 也就是說 之後的printf跟delete b[i]完全是有問題的 會正常是運氣好 記憶體的值還沒被用過 要是值變了也很正常 之後的delete要是砍到別人正在用的位址也可能runtime error

雖然不知道這是哪時在哪遇到的問題 不過我猜是上課或作業相關的...正常的話要先把b[i]一個一個刪掉才可以刪b

然後想要讓系統暫停可以用system("pause"); ...很方便的...

pcyu16 提到...

我也路過..

自從開始用 linux 之後發現以前一堆 code 都編不過之後就沒有再用 system("pause"); 這種東西了Orz

int c;
while((c = getchar()) != '\n' && c != EOF);

雨人 提到...

請看這
第一次作業成績
http://0rz.tw/5STja

OPENESL & 教學投影片位置
http://0rz.tw/sttXe

雨人 提到...

請看這
第一次作業成績
http://0rz.tw/5STja

OPENESL & 教學投影片位置
http://0rz.tw/sttXe

float 提到...

http://140.116.246.180/course/1202_TLM_8051withGDB.rar
GDB下載網址

豪貓 提到...

1202_TLM_8051withGDB Toolchain

http://140.116.246.180/course/

匿名 提到...

請問一下這次作業有問題,要寄信給哪位助教??EMAIL又是...= =?

SCREAMLab 提到...

請還是寄給原先的助教。 謝謝!

雨人 提到...

作業二成績如下

http://ludwig.csie.ncku.edu.tw/members/Longest/ESL_score.xlsx