Como obter um design de processador no FPGA

20

Recentemente, fiz uma longa viagem de projeto de lógica de auto-ensino. O produto final disso é uma CPU funcional de 16 bits que funciona exatamente como projetada em um simulador . Agora, comecei a estudar a possibilidade de colocá-lo em silício por meio de um FPGA. Sei que precisarei fazer muitos ajustes na arena de entrada / saída (o mundo real é diferente do ambiente de simulação) e descobri que fiz meu design inteiramente em um programa que não exporta listas de rede ou código HDL então tudo o que realmente tenho é um esquema.

Mas, supondo que, de alguma forma, chegue a um ponto em que possuo um código de netlist ou HDL do meu design, qual é o meu próximo passo para transformá-lo em silício? Longe do que eu li, parece que a FPGA é a minha solução, mas olhar para os sites Xilinx e Altera faz minha cabeça girar. Estou latindo na árvore errada? Basicamente, estou procurando uma descrição simples em inglês do que o próximo passo é para um cara com um esquema funcional de uma CPU. Depois de saber em que direção seguir, posso decifrar os livros e descobrir tudo o que preciso saber sobre como chegar lá. Além disso, estou no Mac OS X, mas tenho uma caixa XP do Windows que posso conectar se for absolutamente necessário.

Rory O'Hare
fonte
O programa que você faz o seu projeto em? Pode haver conversores de terceiros por aí.
Connor Lobo

Respostas:

17

Parabéns pelo seu design de CPU. Sim, o FPGA é definitivamente o seu próximo passo. Mas você não está muito claro o que faz sua cabeça girar. Presumo que seja o grande número de dispositivos diferentes em oferta. Você também não diz qual simulador está usando.
Quando você sintetiza um design, o sintetizador deve fornecer um relatório sobre os recursos utilizados , como número de portas e RAM. Isso deve lhe dar uma idéia de quais peças são adequadas para o seu design. Verifique se você tem espaço suficiente . Escolha uma parte que possua RAM extra , que você precisará executar programas em sua CPU.

editar (re seu comentário)
Você precisa de um sistema de desenvolvimento para um fabricante específico. Altera e Xilinx são os grandes jogadores, e ambos têm seus crentes. Qual você escolhe não é tão importante, pois ambos têm partes diferentes o suficiente para satisfazer suas necessidades.
Se você escolher o Xilinx, ele possui o ISE WebPACK Design Software , que é gratuito (download grande de 3,4 GB). As limitações em comparação com versões mais avançadas do software não devem incomodá-lo no momento.
Em seguida, você precisa de uma placa de desenvolvimento. Você precisa ter uma idéia de qual FPGA precisará selecionar. Se você for para o Xilinx, eu escolheria um espartano, talvez um Spartan-6, o Virtex já seja IMO de alto nível. Ainda há muitas opções, principalmente diferentes nos extras do quadro. Você quer uma placa com um pouco mais do que alguns interruptores e LEDs. Gostaria de procurar um conector de teclado e um módulo de exibição.
O Xilinx possui várias placas e, para os FPGAs da Xilinx, há também a Digilent , Avnet , Xess e muitas outras.

Portanto, compare um número de placas (presumo que o preço também será importante) e faça o download do software de desenvolvimento para o FPGA que você planeja usar. Sintetize seu design para verificar se ele se encaixa no FPGA escolhido e, em seguida, você está pronto para comprar uma placa em torno desse FPGA.

Eu esqueci de contar um pouco sobre FPGAs. Um FPGA é basicamente uma grande coleção de portas com conexões programáveis ​​entre elas, para que você possa criar praticamente qualquer função / sistema lógico com elas. Ao longo de várias gerações, os FPGAs se tornaram mais avançados e agora têm blocos otimizados para criar funções eficientes como a RAM. O sintetizador do seu software de desenvolvimento cria o diagrama de conexão entre os portões. Isso não é armazenado permanentemente no FPGA, mas deve ser carregado na inicialização a partir de uma memória Flash de configuração externa. É aí que seu design será armazenado. Como qualquer outra memória Flash, ela pode ser apagada e reescrita várias vezes.

stevenvh
fonte
Usei o Logisim, o que é fantástico para os esquemas, mas não possui um método de gerar nada além de imagens (png, jpeg etc.). Nas confusões sobre FPGA que tenho, isso é parcialmente uma grande variedade de dispositivos, mas também não encontro recursos que expliquem o básico e os fundamentos. Se eu colocar minha CPU lá, como ela se relaciona com o mundo exterior? De que equipamento eu preciso? Posso reprogramar o FPGA repetidamente? etc etc etc É realmente apenas uma total falta de familiaridade com o assunto. Acho que preciso de um guia para iniciantes, mas não encontro nenhum.
Rory O'Hare
2
Suas perguntas, em ordem: 1) Os FPGAs fazem interface com o mundo externo via pinos de E / S. A diferença é que você pode escolher os pinos, diferentemente dos chips dedicados. 2) Você pode começar com um kit inicial, kit de desenvolvimento ou similar. Isso terá o FPGA, alguns conectores para E / S e fontes de alimentação a bordo. A maioria também inclui o programador; se não se esqueça de pegar um. 3) Sim, você pode reprogramar o FPGA. O programa é armazenado no chip no que é essencialmente um registro de turno gigante. Na inicialização, uma máquina de estado dedicada ou fonte externa a carrega no chip.
25811 Mike DeSimone
9

Não estou familiarizado com as ferramentas do Xilinx, mas estou com as do Altera, por isso vou falar sobre as ferramentas deles. Xilinx e outros não devem ser muito diferentes.

Verilog

A primeira coisa que você precisa fazer é aprender o Verilog . Isso fará sua cabeça doer porque o Verilog (e o VHDL um tanto semelhante) foi projetado pela primeira vez como uma linguagem de simulação e muitas construções (como o #5que significa "aguarde 5 etapas de tempo", uma etapa geralmente sendo um nanossegundo). Portanto, há muitas restrições que você deve ter em mente para tornar seu código Verilog sintetizável , ou seja, compilável em um fluxo de bits para um FPGA.

O maior choque, porém, é que o que você escreve em Verilog (e VHDL) é o comportamento que você espera do sistema , e o compilador infere a lógica apropriada da sua descrição. Se você não for cuidadoso, poderá obter muitos erros desagradáveis ​​com isso.

Por exemplo, um flip-flop D se parece com:

always @(posedge RESET or posedge CLK)
begin
    if(RESET)
        Q <= 1'b0;
    else if(CLK_ENA)
        Q <= D;
end

Isso descreve como um DFF funciona, e o compilador precisa analisá-lo e descobrir que você deseja um DFF. A @(...)chamada lista de sensibilidade , que é uma lista de sinais que acionam uma reavaliação do bloco de código; portanto, neste bloco, Qsomente muda se houver uma borda ascendente ativada RESETou CLK(isto é para uma redefinição ativa-alta). Se você esquecer algo da lista de sensibilidade (que deve conter todas as variáveis ​​do lado direito, sem nenhum posedgeou negedgemodificador para um bloco lógico combinacional), o compilador sintetizará as travas conforme necessário, em vez de chamar um erro. Louco, mas é assim, porque o Verilog era originalmente uma linguagem de simulação que escondia (e, portanto, não exigia) detalhes de implementação. VHDL é o mesmo, mas muito mais detalhado.

Finalmente, uma nova versão do Verilog, chamada SystemVerilog, foi lançada alguns anos atrás, o que torna muito mais fácil escrever código sintetizável . Se possível, aprenda esse idioma, pois o Xilinx ISE e o Altera Quartus II o suportam. O principal problema é a total falta de bom material de referência.

A versão SystemVerilog de um DFF limpa algumas pequenas coisas:

always_ff @(posedge RESET, posedge CLK)
begin
    if(RESET)
        Q <= '0;
    else if(CLK_ENA)
        Q <= D;
end

Observe que os sinais na lista de sensibilidade são separados por vírgulas. Isso ocorre porque orera confuso, pois andnão podia funcionar lá. Observe também a substituição de 1'b0(um único 0bit) por '0(um símbolo que se expande para o número de 0bits necessário com base no que está sendo atribuído; muito mais flexível com os módulos com parâmetros). Por fim, observe a substituição de always(que pode ser usada para qualquer coisa; lógica combinatória, travas e chinelos) com a always_ffqual requer que o conteúdo seja sintetizado nos chinelos. Há também um always_combque elimina a lista de sensibilidade, uma vez que apenas elabora as sensibilidades das entradas ao bloco.

O software de design da Altera chama-se Quartus II e você procurará a Web Edition . (As edições de assinatura são bastante caras e necessárias apenas para os modelos FPGA mais rápidos ou mais recentes.)

O triste é que não encontrei um bom livro sobre o assunto. O que eu aprendi foi que reuni coisas de várias fontes, como os livros da Verilog, que não fazem um bom trabalho em dizer o que é sintetizável e o que não é, e o código de exemplo. O Quartus II possui um comando "inserir modelo" que insere o código do modelo para várias estruturas comuns, de flip-flops em D a máquinas de estado.

Hardware de demonstração

Depois de implementar seu processador no Verilog, você precisará construí-lo. Por enquanto, deixe a Quartus escolher o chip (você tem que escolher a família; eu recomendaria o Cyclone IV) e as pinagens. Depois que ele se formar, você saberá quanto chip precisa. Ele informará quantos elementos lógicos, chinelos, bits de RAM etc. você usou. Verifique se você não está acima de 50% em nenhum deles; se estiver, observe o chip que o compilador escolheu e selecione manualmente o próximo chip maior (em elementos lógicos) que possui pelo menos o mesmo número de pinos e repita até obter uma utilização abaixo de 50%.

Depois, compre uma placa de demonstração com um chip pelo menos tão grande quanto o que você finalmente construiu. Verifique se ele possui os periféricos e / ou conectores de E / S necessários. Não é incomum criar uma placa filha conectada a um conector de expansão para fornecer qualquer hardware ausente.

Agora que você escolheu seu hardware, descubra as pinagens reais e use o Pin Planner para colocar os sinais certos nos pinos certos. A placa de demonstração terá um guia do usuário que informa quais pinos estão conectados a quais dispositivos ou pinos de conector na placa de demonstração.

Depois de definir as pinagens, construa-a novamente para usar os pinos desejados. Lembre-se de que alguns sinais, como relógios do sistema, precisarão de pinos de entrada dedicados (para que sejam roteados diretamente para os PLLs internos).

Use o programador para baixar seu design diretamente no FPGA (o registro de turno que mencionei há algum tempo). Agora você está no familiar ciclo de depuração de edição, compilação e execução. Bata nele até que funcione.

Depois de funcionar, você pode usar o programador para fazer o download do código no dispositivo de configuração integrado , para que o programa seja carregado e executado na inicialização.

Isso foi muito longo e espero que tenha ajudado alguns. Há muito o que aprender; não é como aprender uma nova linguagem de programação, é como aprender um novo paradigma de programação, por exemplo, passar de linguagens procedurais para funcionais. Verilog é uma linguagem simultânea; a maior parte do código está sempre em execução.

Boa sorte!

Mike DeSimone
fonte
Ótimo, isso é muito útil. Só para verificar uma coisa, eu ouvi sobre captura esquemática. Essa é uma alternativa viável para aprender o verilog? Vou aprender se for preciso, mas se não for 100% necessário, prefiro não adicioná-lo à enorme lista de coisas que já preciso descobrir. Muito obrigado.
Rory O'Hare
Honestamente, não de verdade. Um grande problema é que você está à mercê do programa de captura esquemática: se ela pega o seu esquema e gera um Verilog incorreto, o que você pode fazer? Ao escrever Verilog, você terá a autoridade necessária para corrigir todos os erros. A grande razão, no entanto, é que existem coisas que a captura esquemática nunca fará tão bem quanto a Verilog: Módulos parametrizados e divisão e mesclagem de barramentos são os que vêm imediatamente à mente.
Mike DeSimone
11
Existem ferramentas que podem transformar uma linguagem um pouco mais "descritiva de hardware" em Verilog ou VHDL (por exemplo, se eu quiser que o net Z seja um flip-flop cuja entrada de dados seja uma combinação de A, B e C, que é redefinida de forma assíncrona C e D são verdadeiros, seria bom poder dizer algo como Z:= A & (B # C); Z.ar = C & D;sem ter que se preocupar com listas de sensibilidade e outras).
Supercat
O Altera Quartus permite que você insira seu design como um esquema ou AHDL (versão do VHDL da Altera), ou qualquer combinação dos mesmos, provavelmente incluindo outros HDLs. (sendo antiquado, eu usei principalmente a entrada esquemática para meus projetos CPLD e FPGA, com um pouco de AHDL.)
Peter Bennett
Só para esclarecer, o AHDL não é uma versão do VHDL. Tanto o VHDL quanto o Verilog são linguagens de inferência , nas quais seu código descreve o comportamento do circuito desejado e o compilador deve inferir a implementação dessa descrição comportamental. Este é um legado do fato de que ambos começaram como linguagens de simulação e foram reutilizados para síntese. AHDL é uma linguagem declarativa , na qual você declara primitivas (por exemplo, flip-flops, tabelas verdadeiras) e como elas estão conectadas, para que o compilador não precise adivinhar. AHDL remonta aos anos 80 e está muito mais próximo da ABEL.
Mike DeSimone
5

Sim, FPGAs são quase certamente a sua solução!

Você quase certamente vai precisar usar uma das linguagens de descrição de hardware, ou re-introduzir os seus esquemas em uma ferramenta diferente. Eu recomendaria contra a abordagem esquemática como

  1. os fornecedores de ferramentas FPGA não estão realmente apoiando-os bem
  2. Não é portátil

Depois de escrever o HDL, desde que você não insira diretamente as coisas da biblioteca de fornecedores usando seus vários "assistentes de IP" ou cole diretamente os componentes de suas bibliotecas, você terá um código que poderá transportar para outros chips de maneira justa facilmente (muito mais do que, por exemplo, portar C IME incorporado)

Além disso, você tem um ambiente de teste e validação muito melhor, pois pode escrever testes que "entendem" sua funcionalidade e pode verificar os resultados para você, em vez de observar as formas de onda para ver se tudo parece correto.

Os dois grandes HDLs são VHDL e Verilog. Você pode ler esta resposta sobre como elas diferem ...

VHDL ou Verilog?

Eu diria também que o MyHDL também vale a pena dar uma olhada se você já conhece o Python - oferece uma enorme capacidade de verificação, mas ainda a maior parte do controle de baixo nível que um HDL "normal" oferece.

Depois de escolher um HDL e, em seguida, fazê-lo funcionar (novamente, desculpe!) Em uma simulação, você estará em um estado em que poderá empurrá-lo através das ferramentas do fornecedor e aprender o próximo grande pedaço da tarefa - depois de simular corretamente, sempre há mais esforço do que você pensa conseguir sintetizar :)

Se você está ligado ao esquema e pode obter uma licença, o LabviewFPGA pode ser adequado a você.

Martin Thompson
fonte
3

Obtenha uma cópia da Prototipagem Rápida de Sistemas Digitais de Hamblen et al:

http://users.ece.gatech.edu/~hamblen/book/bookte.htm

Ele usa principalmente VHDL, que eu prefiro ao Verilog.

Ele inclui uma CPU de 8 bits muito simples, a uP3, que eu implementei em meu próprio hardware Altera FLEX 10K há alguns anos, usando uma edição anterior do livro. Vou portá-lo para esta placa Cyclone II de US $ 25 quando eu fizer minha PCB do "painel frontal". Ele também inclui um processador MIPS e Altera NIOS II. Você pode trabalhar nos exercícios uP3 do livro com as ferramentas gratuitas Altera Quartus II, reescrever o código da CPU em VHDL e fazê-lo funcionar em uma placa Cyclone II. Como alternativa, o Quartus II possui entrada esquemática, e você deve poder inseri-lo diretamente, simulá-lo e executá-lo no Cyclone II.

Leon Heller
fonte
1

Se a dificuldade for uma curva de aprendizado acentuada com habilidades em ferramentas, siga o caminho mais fácil. Actel (agora Microsemi) possui o Libero , o pacote de ferramentas FPGA que requerem leitura zero e são fáceis de começar a usar: imediatamente após a instalação. Na verdade, você pode criar esquemas lá à mão e, com poucos cliques, fazer o upload para o FPGA físico, as telas a caminho são muito auto-explicativas.

dext0rb
fonte
0

Se você optar por aprender um HDL, onde você está pode influenciar qual é o melhor idioma. Na Europa, o VHDL é mais popular. Nos EUA, o Verilog é mais popular, exceto no setor de defesa, que é o VHDL. (O departamento de defesa dos EUA criou originalmente o VHDL). Isso significa apenas que as pessoas próximas a você podem ajudar melhor em um idioma ou outro. Mas se você estiver procurando ajuda on-line, isso pode ser irrelevante.

Outros livros a considerar são a Prototipagem Rápida de Sistemas Digitais: SOPC Edition, que se refere às placas Altera DE1 e DE2. Já existem vários computadores diferentes portados para DE1 e DE2, para lhe dar idéias de como eles funcionam. Minimigtg68 (Amiga), FpgaGen (Sega Genesis) etc. são portados para este fórum para dar uma olhada em exemplos.

Se você for para o Xilinx, há dois livros em que estou estudando agora. Prototipagem FPGA por Verilog Exemplos: Versão Xilinx Spartan-3 Prototipagem FPGA por VHDL Exemplos: Versão Xilinx Spartan-3 Embora eu não conheça uma placa específica para recomendar com elas. Estou empolgado com a possibilidade de uma placa em breve, FPGA Arcade, mas esqueço se ela terá um Xilinx ou outra coisa.

faturar
fonte
0

Encontrei essa variante que está desenvolvendo o Logisim, agora chamado Logisim Evolution. Eles implementaram um recurso para exportar para VHDL a partir dos esquemas de um circuito lógico incorporado no logisim.

Pode ser encontrado aqui: https://github.com/reds-heig/logisim-evolution

Sei que esta pergunta é antiga, mas ela me ajudou muito e espero que ajude outra pessoa.

LaptonSpark
fonte