132.10+Software


 * Introdução > Hardware > Software > Descrição do Projeto > Problemas e Soluções > Resultados > Instalação e Uso > Conclusão > Referências **

=2 Implementação=

2.2.1 Linguagem de Programação
Para programar um FPGA, é comum usar linguagens de descrição de hardware (HDL ou //Hardware Description Languages//), como VHDL ou Verilog (sendo esta última a escolhida para o projeto). Verilog possui muitas semelhanças com C, porém também apresenta estruturas próprias, devido à natureza de suas aplicações. Verilog descreve circuitos eletrônicos digitais abstraídos a nível de registradores (//register-transfer level//). Isto significa que seu circuito é composto de várias células de memória conectadas, com funções lógicas que afetam os dados entre elas. Por exemplo, o seguinte código


 * reg [3:0] entrada; **
 * reg [3:0] resultado; **
 * always @( posedge clk) resultado <= entrada & 4'b1010; **

declara dois registradores, **entrada ** e **resultado **, de quatro //bits// cada, e declara uma conexão entre eles, dentro da estrutura **always **. Pode ser lido como "sempre à borda crescente ( // positive edge // ) do // clock //, **resultado ** registra (guarda em sua memória) o valor da expressão **entrada & 4'b1010 ** ", similar a uma atribuição em C. Por sua vez, **entrada ** pode também estar registrando alguma expressão ou // input // externo em algum outro lugar do código. Assim, definindo uma malha de conexões entre registradores e funções aplicadas aos dados, é possível criar circuitos complexos que realizam tarefas úteis.

2.2.2 Ambiente de Desenvolvimento Integrado
A Altera, desenvolvedora do FPGA utilizado, provê um Ambiente de Desenvolvimento Integrado (IDE ou //Integrated Development Environment//), o Quartus II, específico para seus produtos, que mantém organizados os arquivos do projeto e contém todos os programas necessários à compilação da linguagem, à solução das rotas de conexão das células lógicas físicas dentro do FPGA e à geração das instruções para a programação do // chip //.



2.2.3 Assembler
O programa do jogo, por sua vez, será programado em linguagem de montagem (//assembly language//). Para permitir o desenvolvimento e mudança das instruções durante o andamento do projeto, foi desenvolvido, em C++, um montador (//assembler//) que lê a definição das instruções (lista de mnemônicas e os códigos de operação -- //opcodes// -- correspondentes) de um arquivo e, em seguida, traduz o código para uma sequência de bytes reconhecida pelo processador. O arquivo gerado pode ser importado no projeto do Quartus II, e será fixado na memória RAM do FPGA quando este for configurado.