본문 바로가기
Language/Verilog & SV

[System Verilog] Event?

by VIR&US 2025. 4. 4.
반응형

Event?

목차

     

    IPC?

    출처: https://wikidocs.net/170340

    Inter Process Communication (IPC)

    모든 데이터의 교환 및 제어 동기화를 의미합니다. 기본적인 순서부터, 여러 thread가 DUT와 같은 단일 resource에 접근할 때 권한 분배 등이 이에 해당합니다.

    System Verilog에서 IPC를 구현하기 위해 사용

    Event, Semaphore, Mailbox

     

    Event?

     

    남자친구의 연락을 기다리고 있는 여자친구가 있다고 해봅시다.

    남자친구의 연락 ≒ event

    남자친구가 연락을 하는 순간 ≒     event
    기다리고 있는 여자친구 ≒ @event

     

    •  blocking or non-blocking를 이용해서 trigger 가능
    • event의 trigger를 wait하고 뒤 구문을 차단하는 두가지 방법
    • @event
    • wait(event.triggered)
    • @, wait 사용 외에도 if문내에서 사용가능,
    • @, wait는 뒤에 구문이 실행 되지 않지만 if문을 사용하면 if문과 뒤 구문이 차단되지 않음
    • if(event.triggered) 

    Example(1)

    Result(1)

     

    Verilog에서는 event를 trigger하는 동시에 다른 thread가 event를 차단하는 Race condition이 생길 수 있습니다.

    trigger thread가 wait thread보다 먼저 실행되면 trigger가 누락 됩니다.

    Simulator마다 동일하게 실행되지 않을 수도 있지만, 위의 initial 구문이 실행되고 아래의 initial 구문이 실행되어 @e1은 e1이 trigger된 이후에 실행 됩니다.

    Example(2)

    Result(2)

     

    Race condition에서의 @event의 문제를 해결하기 위해 System Verilog에서는 current time-slot를 포함한 wait(event.triggered)를 도입했습니다.

    Example(3)

    Result(3)

    Loop에서 event를 사용하는 경우 wait(event.triggered)를 사용하는 경우 계속해서 같은 시간으로 돌아갑니다.

    Example(4)

    Result(4)

    event대신 semaphore와 mailbox 사용을 권장합니다.

    만약 event를 사용해서 다음과 같은 단일 시간에서 알림을 반복적으로 보내고 싶다면, Delay를 사용하거나, @event를 사용해야 합니다.

    Example(5)

    Result(5)

    event대신 semaphore와 mailbox 사용을 권장합니다.

    만약 event를 사용해서 다음과 같은 단일 시간에서 알림을 반복적으로 보내고 싶다면, Delay를 사용하거나, @event를 사용해야 합니다.

    Example(6)

    해당 예시는 실제로 단일 event를 사용하는 예시입니다.

    현재는 ‘…’으로 기입되어 있지만, 해당 위치에 transaction과 같은 동작을 기입하고 끝나면 event를 trigger하여 transaction이 완료되었을 때 신호를 보낼 수 있습니다.

    동기화 및 동작순서를 조정할 수 있습니다.

    Example(7)

    다중 event를 사용하는 예입니다. wait fork는 fork문의 모든 과정들을 기다리긴 하지만, 상황에 적합하다면 가장 간단한 방법입니다.
    (해당 예시에서는 fork-join_none를 사용해서 내부에 기술된 wait(event[k].triggered)의 종료 여부와 관계 없음)

    728x90
    반응형