Como compartilhar definições de registro e campo de bits entre um driver de dispositivo e o FPGA que ele controla

StackOverflow https://stackoverflow.com/questions/1585751

Pergunta

Existem ferramentas de software boas e existentes disponíveis para ajudar na geração de arquivos de cabeçalho C com #Defines apropriados para compensações de registro, bem como definições de bits do VHDL? Se existem dessas ferramentas, quais restrições elas colocam no VHDL e como são as coisas que devem ser exportadas?

Até agora, encontrei essas ferramentas, mas elas não são exatamente o que estou procurando:

Com base nessas ferramentas, também estou interessado se o fluxo de trabalho adequado for gerar o C e o VHDL, em vez de tentar ir diretamente do VHDL (talvez com tags extras nos comentários) para C.

Foi útil?

Solução

Eu acho que o final, embora isso estivesse incomodando você está enviando você na direção certa. E eu concordo com o Redglyph, pois você deve considerar mudar um pouco o fluxo de trabalho.

Você já pensou em ter um 'documento mestre' para obter informações sobre o registro de controle e gerou tudo automaticamente a partir disso - RTL, código de teste, cabeçalhos de software de driver e documentação?

Eu trabalhei em projetos em que as informações de controle foram mantidas em uma planilha mestre e tudo o que precisávamos gerado a partir disso. Em uma família de chips, escrevi alguns scripts Python para gerar essas coisas a partir de arquivos CSV exportados da planilha. Em outro projeto, a planilha continha macros para gerar os arquivos RTL etc. que precisávamos.

Escrever scripts internos é bom e bom, pois você tem controle total sobre eles e sabe como eles funcionam em detalhes. Mas lembre -se de que você precisa gastar tempo apoiando esses scripts e atualizando -os para fazer coisas novas. E considere o que aconteceria se quem escrevesse esses scripts decidisse conseguir um novo emprego - alguém mais familiarizaria o suficiente com os scripts para modificá -los? Estamos pensando em comprar em uma ferramenta de terceiros pelos motivos mencionados acima.

Eu também trabalhei em projetos, onde os arquivos de documentação e cabeçalho foram devolvidos no RTL -foi um pesadelo. A documentação geralmente ficava para trás do design, e geralmente os campos de controle "desaparecem". Prefiro não estar envolvido em esse projeto novamente;)

Outras dicas

Você poderia dar uma olhada em doxygen, Ele suporta o idioma VHDL e, usando arquivos intermediários, você poderá extrair as informações com mais ou menos facilidade. Um subproduto seria a sua documentação de código RTL.

Outra opção é construir um analisador C a partir das definições YACC/LEX, você pode encontrar vários aqui. A partir daí, você pode analisar o VHDL, extrair as informações (você precisará determinar como recuperar a definição de seus registros) e produzir um arquivo de cabeçalho C. Provavelmente é bastante complicado.

Mas se eu fosse você, realmente procedia de maneira diferente e definiria as compensações e campos de registro em um arquivo separado (por exemplo, em XML) e escreva um pequeno script para gerar cabeçalhos C e um pacote VHDL, isso economizaria um Muito tempo e seria mais robusto do ponto de vista do fluxo.

Isso também ajudaria na construção de qualquer documentação.

É claro que você pode automatizar o processo com um script makefile/ou em um script que prepara o banco de dados antes da simulação/síntese.

Eu concordo com Marty, criar scripts internos para fazer esse tipo de coisa é divertido, mas pode ser problemático a longo prazo.

Criamos uma ferramenta chamada IdesignSpec, que é implementada como um plug-in para editores de documentos que permitem especificar registros em um documento e gerar cabeçalho C, VHDL, Verilog, OVM, VMM, IP-XACT, HTML, XML, Systemrdl, PDF etc. . a partir dele.

Você pode gerar saídas personalizadas usando a API TCL. Também pode ler em vários formatos de entrada, como XML, IP-XACT, Systemrdl, etc.

O benefício dessa abordagem é que você tem uma especificação e tudo se mantém automaticamente sincronizado.

Os editores atualmente suportados são: MS Word 2003 e 2007, OpenOffice, Staroffice e Framemaker.

Você pode obter mais detalhes em http://www.agnisys.com

Aqui está a lista completa de soluções disponíveis:

Nome da empresa: Ferramentas comerciais (solução fornecida)

  1. Agnisys: IdesignSpec (Plugin para Word/Excel/OpenOffice e Interface da linha de comando no Linux e Windows)
  2. Atrenta: 1Team-Gênese-Registres (Aplicativo de Desktop)-> Adquirido pela Synopsys. Ferramenta não disponível.
  3. Duolog: Bitwise (aplicativo baseado em eclipse) -> Adquirido pelo ARM, a ferramenta ainda está disponível.
  4. PDTI: SPECTAREG (Aplicativo baseado na Web) -> Ferramenta não está mais disponível.
  5. Semifore: CSRCompiler (interface da linha de comando)

Ferramentas gratuitas/OpenSource

  1. VERIPOOL: VREGS
  2. Paradigmworks: Spec2reg

Nosso grupo de design usa o SystemRDL para capturar as definições de registro para o nosso sistema programável no chip. Utilizamos o Blueprint Denali com scripts personalizados para os vários alvos - gerar o mapa do registro, documentação em PDF, verificação, arquivos de cabeçalho C etc.

Ainda não o estamos usando para gerar a fonte RTL.

http://www.spiritconsortium.org/releases/systemrdl
http://www.google.com/search?q=systemrdl

A resposta pode chegar um pouco tarde, mas usamos a biblioteca Netpp gratuita e algumas folhas de estilo XSL modificadas para gerar documentação, fonte VHDL e C de uma fonte XML. Há também uma extensão do simulador VHDL que permite que as bibliotecas VHDL e C trocem dados para criar um 'FPGA virtual' de rede. Chama -se Ghdlex, não me lembro exatamente onde está, mas você o encontrará em algum lugar no http://section5.ch Site na área de download do Netpp. É um pouco complicado de usar, mas bem, é grátis ..

A fonte real das informações compartilhadas é o seu design original, para que eu insira o design original em um formulário fácil de processar. Aqui estão algumas idéias ...


  1. Use Yaml. (Ou, suspiro, XML ou mesmo uma DSL muito simples do seu design.) Defina os dados originais. Escreva scripts para despejá -lo como VHDL e C. Todas as linguagens de script suportam o YAML e também foram projetadas para serem analisadas com ferramentas de shell. Você pode até usar o VHDL ou C simplificado e escrever um script para transformá -lo através de uma transformação de texto simples no C ou VHDL correspondente.

  2. Faça tudo no pré -processador C. Você pode escrever um conjunto de macro chamadas que especificam layouts de registro. Você poderia então ter um #if ou talvez dois separados .h Arquivos que definem duas versões diferentes da sua definição macros, uma que se expande para o VHDL e uma que expande essas mesmas definições para C.

SPECTAREG Permite especificar os registros em um só lugar e criar várias saídas para diferentes ambientes (por exemplo, VHDL, C, Verilog)

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