SystemC 사건 구동 시뮬레이터의 작동 원리
하드웨어의 모델링의 핵심
-> 구문의 실행 순서에 무관
방법은
-> 하드웨어 객체 : 시스널 채널과 fifo 채널
-> 사건 공지와 콜-백 함수의 호출
하드웨어의 병렬 실행 시뮬레이터도 소프트웨어로 구현됨
-> 설계 도구에 관심을,
-> 시스템 수준 모델링 능력 배양
...
...
...
C++의 크래스로 구현한 SystemC의 패널과 포트
...
추상성 변화에 따라 별도의 테스트 환경을 요구하는 가장 큰 이유로 시험환경을 구축할 때 사용된 설계언어가 요구되는 추상성을 포용하지 못하기 때문이다. 시간(클럭과 사건)의 개념이 없는 알고리즘 언어로는 RTL을 검증 할 수 없다. 일예로 C++와 같은 프로그래밍 언어는 병렬성을 표현할 방법을 가지고 있지 않다. SystemC 크래스 라이브러리는 이를 극복하기 위해 높은 수준의 소프트웨어 기법을 동원하여 병렬 시뮬레이션 커널을 갖추고 있다.
춘 다.
시험에 과도한 시간이 걸린다는 점과
자동화 변환(또는 합성)으로
목적에 따라 다른 언어를 사용할 수도 있고 동일한 언어라도 추상화 수준이 다를 수 있다.
추상화 수준이
5-8. 하드웨어 시뮬레이터의 작동방식
하드웨어 언어는 디지털 회로를 묘사하기 위해 특별한 저장소를 운영하며 사건 구동 기법으로 병렬 실행을 구현한다. 병렬 시뮬레이션 커널의 작동을 간략히 살펴보면 다음과 같다. SystemC가 가지고 있는 병렬 시뮬레이션 커널을 기반으로 설명 한다.
의 표현
의 연결
I. 시뮬레이션 델타 개시: 시뮬레이션 시간 멈추고 사건 인지 처리
(1) 하드웨어 작동요소들 사이의 연결은 채널로,
(1)-1. 채널은 2중의 저장소를 가짐(new_val, curr_val)
(1)-2. 채널로 접근은 읽기 .read()와 쓰기 .write() 방법을 통함
(1)-3. 최초 채널쓰기시 값은 new_val에 저장
(2) 임의 프로세스에서 채널에 쓰기 접근, new_val에 새값 저장
(3) new_val과 curr_val 값이 다를 경우 사건 인지 후 커널에 고지
(4) 해당 채널 사건에 구동되도록 지정된 프로세스가 있을 경우 new_val을 curr_val로 갱신
(5) 사건구동이 지정된 프로세스 호출
(6) 호출된 프로세스에서 채널 읽기 접근 및 새로운 쓰기
II. 시뮬레이션 델타 종료
III. 새로운 델타 진행 (I->II 반복)
IV. 사건에 구동될 프로세스들이 완료된 후 모든 채널들 갱신
V. 모든 사건이 처리된 후 시뮬레이션 시간 진행
* 재귀적 사건의 경우 횟수 제한
* VCD는 curr_val로 기록됨
예) clk의 상승 엣지 사건에 감응된 프로세스에 대하여 입력 d 와 clk가 동시에 사건이 발생한 경우,
1) clk 채널과 d 채널에 각각 new_val 저장
2) 두 채널 모두 커널에 사건 공지
3) clk의 사전에 만 구동될 프로세스 존재
4) clk 채널 만 갱신: clk.new_val -> clk.curr_val
5) clk 사건에 구동될 프로세스(콜-백)호출
6) 프로세스 진입 후 d 채널 읽기 (갱신되기 이전이므로 d.curr_val)
사건 처리완료 후 d 채널 갱신
아래 파형은 트랜지스터 회로로 설계된 D-플립플롭을 SPICE 회로 시뮬레이션을 하여 얻은 것이다.
---------------
사건을 처리하는 순서에 관한 일관성 문제
clk 채널에 앞서 d 채널을 먼저 처리했다면?
- elaboration 시 콜-백 프로세스 독립
- 사건 감응 지정된 채널을 프로세스의 지역화
always @(d, a)
begin
y <= d & a;
end
always @(posedge clk)
begin
q <= d;
end
2.
댓글 없음:
댓글 쓰기