Download presentation
Presentation is loading. Please wait.
1
컴퓨터 구조 실습 #4 - systemC process
Lee, JongTae Dept. Computer Eng. Hankuk University of Foreign Studies RTDCS. 2011
2
과제 참고 사항 이번 과제는 소스 첨부하지 않으셔도 됩니다.
소스 코딩 대신 소스 분석에 대한 부분을 문제 해석이나 해결 방안 등의 항목에 기술하세요. 앞으로 시스템 등록정보 첨부 여부는 상관하지 않겠습니다. 대신 양심껏 과제에 임해주시길…
3
systemC의 요소들 Clock Module Process Data type
4
프로세스 모듈의 기능을 모델링 Return value, argument가 없음 계층 구조를 가질 수 없음
5
프로세스 종류 SC_METHOD SC_THREAD SC_CTHREAD
6
SC_METHOD 지정된 정적 센서티비티에 의해서 해당 프로세스 수행
Combinational logic 기능을 모델링 할 때 적합 내부에 무한루프를 가질 수 없음 Suspend 시킬 수 없음 (wait() 함수 사용 할 수 없음) 모듈의 구축자(SC_CTOR)에서 프로세스를 등록할 때 지정된 정적 센서티비티의 신호들이 변할 때 마다 해당 프로세스를 수행한다. SC_METHOD는 다른 프로세스와는 다르게 독자적인 thread를 갖지 않는다. 즉, 센서티비티에 등록된 event가 발생하면 해당 프로세스가 함수로서 수행된다. 조합로직과 같이 내부상태를 유지하지 않는 기능을 모델링하는데 적합하다
7
SC_THREAD 지정된 정적 센스티비티에 의해서 해당 프로세스 수행 독자적인 쓰레드 형성 반드시 무한루프를 가져야함
반드시 하나 이상의 wait()함수가 있어야 한다. wait()를 만나면 센스티비티에 등록된 사건이 발생할 때까지 대기 SC_METHOD 프로세스는 함수를 수행하는 것이지만, SC_THREAD는 독자적인 thread를 형성 SC_METHOD와는 다르게 내부에 항상 무한루프를 갖고 있어야 한다. 프로세스 수행을 잠시 중지(suspend)시키는 함수가 반드시 하나 이상 있어야 한다. Wait() : 센서티비티에 등록된 사건이 발생할 때 까지 기다린다. Wait(event) : 프로세스 등록 때 지정된 정적 센서티비티를 일시적으로 무시하고 동적으로 센서티비티를 지정
8
SC_CTHREAD 정적 센스티비티로 클럭의 한쪽 모서리(edge)만을 사용할 수 있다. 독자적인 쓰레드 형성
반드시 무한루프를 가져야함 반드시 하나 이상의 wait()함수가 있어야 한다. wait()를 만나면 센스티비티에 등록된 클럭의 모서리가 발생할 때까지 대기 wait(n) : 센서티비티에 등록된 클럭의 모서리가 n번 발생할 때까지 기다린다. wait_until(expression) : 프로세스 등록 때 지정된 정적 센서티비티를 일시적으로 무시하고 동적으로 센서티비티를 지정할 때 사용 expression이 참이 될때까지 프로세스의 수행이 멈춘다. Expression은 불리안으로 계산되는 표현식.
9
Sensitivity 해당 프로세스를 기동 또는 수행하는 조건
정적 센스티비티 : 프로세스를 등록할 때 지정하는 것으로 컴파일 시점에 정해진다. Ex) stream style – sensitive << A << B; function style – sensitive(A); sensitive(B); 동적 센스티비티 : 프로세스가 수행되는 동안 변화시키는 것 센서티비티에 등록할 신호 또는 포트의 데이터타입이 bool인 경우 sensitive_pos 또는 sensitive_neg를 sensitive 대신 사용할 수 있다. 특히 SC_METHOD 프로세스의 경우 특정 모듈의 모든 입력을 정적 센서티비티로 지정하는 것이 바람직하다. 만약 일부 입력신호가 센서티비티에서 빠지면 입력이 변했는대도 출력이 변하지 않는 경우가 생길 수 있다.
10
프로세스 정리 SC_METHOD SC_THREAD SC_CTHREAD 기동트리거 Signal events Clock edge
무한 루프 NO YES 등록 형태 SC_METHOD(pro); sensitive(sig); sensitive_pos(sig); sensitive_neg(sig); SC_THREAD(pro); SC_CTHREAD(pro, clock.pos()); SC_CTHREAD(pro, clock.neg()); 정지와 복구 해당사항없음 wait(); wait(); wait(n); 동적센스티비티 Next_trigger(ev); wait(ev); 기타 wait_until(exp); watching(exp); - Pro : process, sig : signal, ev : event, exp : expression, n : 양수
11
실습 및 과제 프로세스 방식과 프로세스 기동 조건이 다른 5개의 adder 모듈을 만든다
각 adder의 기능은 input A와 B를 합하는 것 다음 실습시간에 제출
12
5개의 adder 1 -> 방식 : METHOD , Sensitivity : A,B
2 -> 방식 : THREAD , Sensitivity : clk(positive) 3 -> 방식 : THREAD , Sensitivity : A,B 4 -> 방식 : THREAD , Sensitivity : A,B, clk(positive) 5 -> 방식 : CTHREAD, Sensitivity : clk(positive)
13
adder * R_M * adder R_T1 stimulus * adder * R_T2 * adder A * R_T3 B *
SC_METHOD R_M * adder SC_THREAD R_T1 stimulus * adder * SC_THREAD R_T2 * adder A * B SC_THREAD R_T3 * clk * adder SC_CTHREAD R_C clock(clk) *
14
7개의 파일 adder_method.h adder_thread1.h adder_thread2.h adder_thread3.h
adder_cthread.h test.h main.cpp
15
adder_method.h
16
adder_method.h
17
adder_thread1.h
18
adder_thread1.h
19
adder_thread2.h
20
adder_thread2.h
21
adder_thread3.h
22
adder_thread3.h - sensitive << A << B << clk.pos(); 도 가능
23
adder_cthread.h
24
adder_cthread.h SC_CTHREAD(do_adder, clk.pos());
25
test.h wait() 는 프로세스의 수행을 잠시 멈추었다가 해당 모듈에서 지정한 센서티비티에 등록한 event (여기서는 clk) 가 발생할 때 상쇄된다. 상쇄된 이 후 그 다음 명령을 실행한다.
26
main.cpp
28
R_M과 R_T2 그리고 R_T3가 동일한 결과를 보이고 있고, R_T1과 R_C가 역시 동일한 결과를 보이고 있다.
서로 다른 프로세스 형식을 사용해도 같은 결과를 낼 수 있다는 것을 알 수 있다. R_M과 R_T2 그리고 R_T3는 조합로직과 같은 결과이고 R_T1과 R_C는 내부에 플립플롭이 있는 것과 같은 결과를 보인다
Similar presentations