2017-09-05 13 views
0

UVM Testbench scenario서로 다른 두 UVM 에이전트의 두 가지 무관 한 UVM 시퀀스 항목을 동기화하는 방법은 무엇입니까?

이것은 패리티 인코더 - 디코더 DUT를 검증하는 나의 시나리오입니다. 디코더 여기서 입력 에이전트는 재 활성화 에이전트이며 Encoder Output 에이전트의 패시브 모니터에서 캡처 한 데이터 스트림에 오류를 주입합니다.

이제 인코더 및 디코더 입력 에이전트 모두에 대해 시퀀스 및 시퀀스 항목을 따로 갖고 있습니다. 그러나 디코더 재 활성화 에이전트가 오류를 추가하고 모든 데이터에 대해 새 패킷을 순서대로 생성하도록 두 에이전트를 모두 동기화하는 방법은 무엇입니까?

예를 들어 인코더가 1000, 1010, 0100, 1011 순서로 데이터를 전송하고 디코더 재 활성화 에이전트가 0010, 1000, 0001, 0100 순서로 오류 패킷을 생성한다고 가정합니다. 서로 관련없는 패킷. 그러나 재 활성화 에이전트는 패시브 에이전트 모니터에서 두 개의 데이터, 즉 1000과 1010을 함께 수신하더라도 첫 번째 데이터를 1000^0010과 같은 첫 번째 패킷으로 추출해야합니다. 또한 두 에이전트 모두 항목을 생성하므로 디코더는 (인코더 에이전트 모니터를 통해) 인코더 에이전트에서 데이터를 받기 전에 항목을 보내면 안됩니다.

+0

의미 상으로 실용적입니다. 두 에이전트를 서로 존속시키고 타이밍 순서를 따르는 코드 작성 방법을 알고 싶습니다. –

+0

시퀀스 항목 또는 순차를 동기화 하시겠습니까? –

+0

일단 엔코더 드라이버에서 보내고 엔코더 모니터에서 수신 된 디코더 드라이버가 디코더 드라이버로 보내지도록 시퀀스 항목을 동기화하려고합니다. 또한 모니터에서 순서가 잘못된 수신을 고려해야합니다. –

답변

0

다른 개체 사이에 lockign 메커니즘을 사용하고 싶다고 생각합니다.

IPC (프로세스 간 통신) 방법을 사용하여 이벤트, 사서함, 세마포어 등을 제어 할 수 있습니다.

UVM에서는 사용자의 목적에 따라 사용할 수있는 uvm_event, TLM FIFOs과 같은 고급 방법을 사용할 수 있습니다.

+0

어떻게 수행합니까? 잠금 장치가 도움이 되나요? –

+0

당신의 목적은 한쪽에서 어떤 일이 일어날 때까지 기다린 다음 다른 쪽에서 무언가를하는 것입니다. 권리? 그래서 위의 메소드는 그 목적을 위해 유용합니다. 예를 들어'uvm_event'가 무언가를 할 때까지 기다릴 수 있습니다. –

0

하나의 옵션은 endcoder 트랜잭션을 거기에 넣고 디코더 재 활성화 에이전트에서 가져 오기 위해 config_db를 사용하는 것입니다. 나는 그것이 좋지 않다고 생각한다. 또 다른 옵션은 인코더 및 디코더 시퀀스를 포함하는 가상 시퀀스를 가져서 인코더 패킷을 가져와 디코더 시퀀스를 제공하는 것입니다.

+0

인코더와 디코더는 서로 다른 가상 시퀀스를 가지고 있습니다. uvm_event 또는 인코더가 데이터 및 디코더 가져 오기 또는 엿보기 데이터를 가져 오는 일종의 FIFO를 통해 수행 할 수 있는지 궁금합니다. –

+0

그런 경우에는 포트가 다른 옵션으로 put 및 get 포트를 사용한다고 생각합니다. uvm examples 폴더에서 그러한 예를 찾을 수 있습니다. – haykp

+0

put 및 get 포트를 사용하여 두 에이전트가 동기화되는 예제 링크로 이동시킬 수 있습니까? –