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.
Respostas:
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.
fonte
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
#5
que 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:
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,Q
somente muda se houver uma borda ascendente ativadaRESET
ouCLK
(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 nenhumposedge
ounegedge
modificador 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:
Observe que os sinais na lista de sensibilidade são separados por vírgulas. Isso ocorre porque
or
era confuso, poisand
não podia funcionar lá. Observe também a substituição de1'b0
(um único0
bit) por'0
(um símbolo que se expande para o número de0
bits 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 dealways
(que pode ser usada para qualquer coisa; lógica combinatória, travas e chinelos) com aalways_ff
qual requer que o conteúdo seja sintetizado nos chinelos. Há também umalways_comb
que 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!
fonte
Z:= A & (B # C); Z.ar = C & D;
sem ter que se preocupar com listas de sensibilidade e outras).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
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ê.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte