6

저는 DPI를 사용하여 'C 소스'에 인터페이스 된 Verilog 기반 테스트 벤치를 가지고 있습니다. 이제 DPI를 사용하여 전체 펌웨어를 작성할 계획입니다. 나는 레지스터 읽기 DPI를 사용하여 'C로 태스크 내보내기'

  • 등록이
  • 인터럽트 핸들러를 작성 3 가지
    • 필요 이렇게하려면 내가 알고있는 것처럼, 레지스터는 읽기 및 쓰기 내가 RTL 테스트 벤치에서 내 보내야 작업입니다. 그리고 인터럽트 처리기 (나는 'C'에서 함수를 가져옴으로써 구현했다.).

    대부분의 종지 문서를 확인 했으므로 유용한 힌트가 없습니다. 케이던스 사용자 커뮤니티에도 등록했는데 내 등록을 승인 할 때까지 질문 할 수없는 것 같습니다.

    누군가가이를 알고 있다면, 도움을 주시면 감사하겠습니다.

  • +1

    C 앞에 어포 스트로피가 무엇입니까? C와는 다른 언어입니까? – unwind

    답변

    3

    사실 나는 이것을 이렇게 이해했습니다.

    //--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를 사용하여 저에게 적합합니다.

    2

    쿨 ...이 주제에 대한 기사를 실제로 작성했습니다. link

    실제로 종이는 레지스터 읽기 및 쓰기 작업을 내보내고 DPI를 통해 TCL 인터프리터를 추가하므로 TCL을 사용하여 시뮬레이션을 제어 할 수 있습니다. 이것은 모든 도구가 이미 Tcl에 있기 때문에 실험실 친구들이 좋아했던 것입니다.

    지침에 따라 DPI에서 C에서 SV로 함수 호출을 통합 한 다음 TCL 자료가 재생되면 중지 할 수 있습니다.

    +0

    주어진 링크가 유효하지 않습니다. –

    +1

    어 ... IC 저널이 더 이상 존재하지 않는 것 같습니다. 다음은 작동 원리에 대한 링크이지만 상당히 높은 수준입니다. https://www.eejournal.com/article/20080826_vmm/ 어디서나 게시 된 기사를 찾을 수 있으면 다시 돌아올 것입니다. 여기에 링크를 남겨주세요. – SDGator

    관련 문제