Pergunta

Eu tenho um teste-banco com base Verilog, interface com 'fonte C usando DPI. Agora, usando o planejamento am DPI I para escrever toda a minha firmware. Para fazer essa necessidade I 3 coisas

  • Register Leia
  • Register Write
  • manipulador de interrupção Pelo que entendi, registo leituras e gravações são tarefas que eu preciso para exportação a partir do test-bench RTL. E manipulador de interrupção (I implementado através da importação de uma função de 'C).

Eu verifiquei mais a documentação cadência e não encontrou indícios úteis. Eu também ter registado com a comunidade os usuários de cadência, mas parece que eu não posso fazer a pergunta até que aprovar meu registro.

Apenas no caso de alguém está ciente disso, gostaria de receber sua ajuda.

Foi útil?

Solução

Na verdade, eu descobri-lo algo como isto.

//--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 ();

Isso funciona para mim usando ncverilog.

Outras dicas

Cool ... Na verdade, eu escrevi um artigo sobre este tema. ligação

O papel é realmente exportar registo leituras e gravações e coisas em todo o DPI e, em seguida, adicionando um interpretador TCL a ele para que você pode usar TCL para controlar o seu sim. Isso era algo que os caras do laboratório amou uma vez que todas as suas ferramentas já estão em Tcl.

Você pode apenas seguir as instruções para integrar suas chamadas de função de C para SV através do DPI, e depois parar quando as coisas TCL entra em jogo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top