문제

Verilog 기반 테스트 벤치가 있으며 DPI를 사용하여 'C 소스에 인터페이스되었습니다. 이제 DPI를 사용하여 전체 펌웨어를 작성할 계획입니다. 이를 위해서는 세 가지가 필요합니다

  • 등록 읽기
  • 등록 쓰기
  • 인터럽트 핸들러, 내가 이해하고, 레지스터를 읽고, 쓰는 것은 RTL 테스트 벤치에서 내보내는 데 필요한 작업입니다. 인터럽트 핸들러 ( 'C에서 함수를 가져 와서 구현).

나는 대부분의 케이던스 문서를 확인하고 유용한 힌트를 찾지 못했습니다. 또한 Cadence 사용자 커뮤니티에 등록했지만 등록을 승인 할 때까지 질문을 할 수없는 것 같습니다.

누군가가 이것을 알고있는 경우를 대비하여 그들의 도움에 감사 할 것입니다.

도움이 되었습니까?

해결책

사실 나는 그것을 이런 식으로 알아 냈습니다.

//--From RTL ---
export "DPI" task reg_read;

task reg_read;
   input int nAddr;
   output int nVal;

 // -- read implementation --

endtask

// -- From C code
extern void reg_read (int nAddr, int *pVal);

void test_read (void)
{
   int nRegVal;

   // Dummy checking !!
   reg_read (0x100, &nRegVal);
}

// -- Again in RTL --
import "DPI" context task test_read ();

이것은 ncverilog를 사용하여 작동합니다.

다른 팁

쿨 ... 실제로이 주제에 관한 기사를 썼습니다. 링크

이 논문은 실제로 레지스터 읽기 및 쓰기 및 DPI를 가로 지르는 물건을 내보내고 TCL 통역사를 추가하여 TCL을 사용하여 SIM을 제어 할 수 있도록합니다. 이것은 모든 도구가 이미 TCL에 있기 때문에 실험실 친구들이 좋아했던 것입니다.

지침에 따라 기능 호출을 DPI를 통해 C에서 SV로 통합 한 다음 TCL 작업이 수행되면 중지 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top