FPGA, primeiros passos

11

Bem, esta é uma continuação da minha pergunta no FPGA aqui .

Finalmente, selecionei um Digilent Atlys com um Spartan 6 FPGA, não tenho nenhuma experiência anterior com FPGA, apesar de ter trabalhado bastante com microcontroladores.

Passei os últimos dias lendo as folhas de dados do FPGA e acho que seria uma boa opção começar com o Verilog. Não consegui encontrar nenhum exemplo de código e mesmo as folhas de dados não são amigáveis ​​para iniciantes.

Eu quero fazer um pouco de programação, simulação, síntese agora e é isso que eu quero fazer

  1. Gere uma frequência ímpar, digamos 54Mhz do FPGA (ele roda em um relógio de 100Mhz) e direcione-o para um dos pinos. Eu provavelmente teria que usar o DCM ou PLL para isso, mas não tem idéia de como começar por aqui?

  2. Implemente algum tipo de gravação de leitura I2C do FPGA.

O que estou procurando é uma referência, possivelmente uma online ou um livro que me dê exemplos de código e descrição de cada um dos componentes de hardware disponíveis dentro do FPGA, como DCM, fatias, clb's etc.

Eu acho que isso deveria me levar ao mundo dos FPGAs.

Kevin Boyd
fonte

Respostas:

13

Exemplos de código

para o OpenCores e você encontrará dezenas de projetos de código aberto. Existem muitos escritos em Verilog e abrangem a gama de dispositivos de E / S até os processadores.

Além disso, não esqueça as muitas notas de aplicação disponíveis no Xilinx. Eles são muito úteis com seus próprios dispositivos.

Design Flow

Escolha um ou dois livros sobre o fluxo do design para obter uma visão geral das etapas envolvidas no design do FPGA. Em resumo, eles envolverão:

  1. Entrada de design - no seu caso, Verilog.
  2. Simulação funcional - usando várias ferramentas.
  3. Síntese - no seu caso, usando as ferramentas Xilinx ISE.
  4. Simulação - para verificar seu design pós-síntese, porque alguns aspectos do Verilog não são sintetizáveis.
  5. Place & Route - usando as ferramentas Xilinx ISE.
  6. Implementação - baixando o design no FPGA.
  7. Teste.

Componentes FPGA

Quanto ao uso dos componentes FPGA, existem diferentes maneiras de usá-los. Mas, supondo que você esteja usando uma entrada de design da Verilog, é possível inferir ou instanciar os diferentes componentes.

A inferência geralmente envolve fazer com que a ferramenta de síntese escolha os melhores componentes a serem usados ​​com base na funcionalidade necessária. O melhor exemplo disso seria projetar um somador.

Ao fazer q <= a + bou q = a + bvocê pode deduzir um somador. Ambos irão inferir o somador, mas há uma diferença em quando você usa a sintaxe de bloqueio / não bloqueio.

A instanciação geralmente envolve chamar o componente exato da biblioteca no código. Alguns componentes simplesmente não podem ser facilmente deduzidos no código, como o DCM. Você pode usar as ferramentas e exemplos do ISE para aprender mais sobre isso.

A lista real de componentes em si é fornecida pelo Xilinx no Guia de bibliotecas .

Protip

A melhor maneira de aprender isso é, na verdade, experimentar pequenos bits de código e executá-los na síntese do ISE para ver o que ele expõe. Também há muitos exemplos no próprio conjunto de ferramentas do ISE.

sybreon
fonte
5

Suas referências absolutas serão os guias do usuário do Spartan 6 . Por exemplo, o guia Clocking Resources (UG382) aborda como configurar os DCMs. Para exemplos de como o código real olha, o ISE tem um banco de dados deles. Abra Modelos de idiomas (a lâmpada na barra de ferramentas) e procure no idioma (VHDL ou Verilog) -> Instância primitiva do dispositivo -> família de chips (Spartan-6) -> Componentes do relógio.

Detalhes da sua placa estão disponíveis na Digilent, em particular você desejará o UCF (que nomeia todas as E / S) e o manual de referência (que explica os circuitos periféricos).

A estrutura geral do seu idioma, incluindo como criar um componente, é provavelmente melhor escolhida em livros e exemplos. Eu não usei o Verilog, por isso não tenho sugestões específicas. Ainda assim, os modelos também incluem trechos de vários contratos genéricos.

Yann Vernier
fonte
Você é especialista em VHDL? Em relação à UCF, por que seria importante trabalhar com o conselho da Digilent?
Kevin Boyd
1
Eu não sou especialista como tal - apenas não estudei Verilog. O UCF é o arquivo que descreve a quais pinos suas portas se conectam, bem como as demandas de clock. Sem ele, os pinos são atribuídos aleatoriamente, o que não corresponde ao quadro existente.
Yann Vernier
Entendi a parte da atribuição dos pinos. O que há com as demandas de relógio?
Kevin Boyd
1
As restrições de tempo cobrem coisas como frequência do relógio, configuração e tempos de espera. Você ainda obterá as informações na análise de tempo, mas especificar os requisitos no arquivo de restrições permite que as ferramentas detectem quando elas falham e possivelmente se esforçam mais para satisfazer suas necessidades quando estiver na fronteira.
precisa saber é o seguinte
1

Para o relógio, você usa o megacore DLL / PLL.

Brian Carlton
fonte
O spartan 6 possui DCM e PLL, ainda não encontrado DLL. Após pesquisar nos fóruns, descobri que o Xilinx possui uma ferramenta chamada Core Generator que pode ser configurada para gerar recursos de clock.
Kevin Boyd