condição é acrescida de outra que limita a redução do lado l dos quadrados das células, de forma a não tornar ilegível o conteúdo do AC, que depende do lado L do painel gráfico e do
número de colunas c e linhas r da matriz. Sendo lzo limite mínimo para o lado do quadrado
de uma célula em zoom out, este só é permitido se se verificar que lx= L/c ≤ lz∧ ly= L/r ≤
lz. Os quocientes L/c e L/r são sempre arredondados por defeito às unidades o que leva a
que, se não forem inteiros, a área do painel gráfico não é ocupada na sua totalidade, uma vez
que se pretende manter a proporção de um quadrado, isto é, lx/ly= 1, então l = min(lx, ly).
Na aplicação, tem-se lz= 3 pelo que cmax= rmax= 200, o que significa que só é possível
fazer zoom out em ACs com dimensões iguais ou inferiores a 200x200 células. Na figura 5.10 ilustra-se o zoom out de um AC com 64x64 células com dois estados por célula.
Figura 5.9: Deslocamento de uma célula da matriz do AC no painel gráfico
5.6
Gestão de bitstreams e implementação em hardware
O gestor de bitstreams permite ao utilizador programar a FPGA com um bitstream gerado pre- viamente que especifica a arquitetura de um determinado AC, gerar novos ficheiros de bitstream, a partir da especificação das características e arquiteturas celulares do AC conforme explicado na secção 5.3 e especificar o caminho para o diretório de ferramentas da Xilinx. O processo de geração e programação de ficheiros de bitstream é concretizado por execução de scripts em linha de comandos, que realizam as chamadas à ferramentas da Xilinx necessárias para cada um dos processos. O processo de geração de um ficheiro de bitstream segue a sequência de passos indica- dos pelo “FPGA Design Flow” descritos sinteticamente na subsecção 5.6.1. Os scripts precedem
Figura 5.10: Zoom out sobre um AC de 64x64 células de dois estados por célula
a qualquer chamada às ferramentas com a execução de um script secundário, que já é fornecido pela Xilinx, que permite definir as variáveis de ambiente que indicam o caminho completo para a localização das ferramentas, o que, desta forma, torna possível a chamada direta às mesmas sem a necessidade de navegar internamente até cada um dos diretórios onde se encontram os ficheiros executáveis das ferramentas. O script secundário encontra-se no diretório de instalação das ferra- mentas da Xilinx e designa-se por “settings32.bat” ou “settings64.bat” consoante a plataforma. Se a aplicação não encontrar nenhum destes ficheiros no caminho especificado para as ferramentas, não é possível gerar nem programar um ficheiro de bitstream.
Na figura 5.11 mostra-se a janela do gestor de bitstreams. A árvore de diretórios existente mapeia diretamente o conteúdo do diretório “bitstreams” do diretório de trabalho (ver figura 5.3). Este diretório é por sua vez organizado em subdiretórios em que cada um diz respeito a uma espe- cificação de um AC diferente. Cada subdiretório contém cinco ficheiros distintos cuja descrição encontra-se na tabela 5.2.
Quando o utilizador seleciona na árvore de subdiretórios o ficheiro de extensão .info, o seu conteúdo é mostrado na área de texto à direita da árvore. O conteúdo dos ficheiros restantes é escondido uma vez que não tem qualquer importância para o utilizador comum.
Para programar um ficheiro de bitstream existente na FPGA, o utilizador deve escolher o subdiretório de especificação que pretende carregar, selecionar o ficheiro de bitstream associado e premir o botão intitulado de “Upload to FPGA”. A partir desse momento, a aplicação executa o script, de extensão .bat que chama a ferramenta iMPACT, em linha de comandos e em plano de fundo. O ficheiro de extensão .cmd é lido e o iMPACT vai produzindo mensagens à medida
5.6 Gestão de bitstreams e implementação em hardware 109
Figura 5.11: Janela do gestor de bitstreams
Extensão Descrição
.cmd Ficheiro de configuração da ferramenta da Xilinx para programar FPGAs, o
iMPACT, que contém os comandos para configurar a ligação com uma FPGA e programar um ficheiro de bitstream existente. Este ficheiro recebe como parâmetro o caminho para a localização de um ficheiro de bitstream.
.bat Ficheiro batch que executa o script que faz a chamada ao iMPACT que recebe
como parâmetro o ficheiro de extensão .cmd.
.info Ficheiro que contém a informação associada à especificação do AC, as suas
características e descrição, num formato legível para o utilizador.
.cfg Ficheiro que contém a informação de configuração da aplicação que é lido
e carregado para a mesma aquando da programação do ficheiro de bitstream na FPGA. O seu conteúdo é semelhante ao do ficheiro de extensão .info, mas o seu formato é idêntico ao de uma tabela de dispersão, cujas chaves são as características do AC, que facilitam a sua leitura por parte da aplicação.
.bit Ficheiro de bitstream que contém as definições da lógica interna da FPGA e
das suas interligações de especificação de arquitetura de hardware e informa- ção específica associada à FPGA em causa.
Tabela 5.2: Descrição dos ficheiros incluídos num subdiretório de especificação de um AC
que a configuração da ferramenta é realizada e o ficheiro de bitstream programado. No final do processo de programação é devolvida uma mensagem de erro ou sucesso em conformidade com o resultado. As mensagens devolvidas pela linha de comandos são processadas pela aplicação e
redirecionadas para a caixa de texto na interface gráfica onde também são registadas as mensagens de saída da aplicação, podendo o utilizador, se pretender, guardar um ficheiro de log. (ver figura 5.1, área marcada com o número cinco). Depois de programar a FPGA, o utilizador pode dar início às simulações do AC estabelecendo a comunicação série com a plataforma de hardware.
Após feita a especificação completa de um AC, o utilizador deve abrir o gestor de bitstreams, dar o nome desejado ao ficheiro de bitstream e uma descrição da especificação. Se o nome for- necido já existir, é devolvido um erro e o utilizador deve dar um nome diferente. Ao premir o botão intitulado de “Generate” o processo de geração do ficheiro de bitstream é iniciado. Agora, a aplicação lê do diretório “scripts” do diretório de trabalho o script que realiza a chamada às ferramentas da Xilinx na sequência dos passos especificados pelo FPGA Design Flow, o ficheiro “generate.bat”, e executa-o na linha de comandos em plano de fundo. As mensagens produzidas pelas ferramentas, da mesma forma que no processo de programação da FPGA, são reencaminha- das e registadas na caixa de texto de saída da interface gráfica. Quando o processo de geração do ficheiro de bitstream termina, se for bem sucedido, são criados os restantes quatro ficheiros (ver tabela 5.2) que constituem o conteúdo do subdiretório de especificação de um AC. Em primeiro lugar, o subdiretório é criado no diretório “bitstreams” cujo nome é o que o utilizador forneceu previamente. Os ficheiros de extensões .info e .cfg são criados no novo subdiretório a partir da especificação das características do AC existentes na aplicação. Os ficheiros de extensões .bat e
.cmd localizam-se no diretório “scripts” do diretório de trabalho como templates de nome “pro-
gram.bat” e “impact.cmd”, respetivamente, e o seu conteúdo é lido, modificado ao introduzir os parâmetros a eles associados (ver novamente a tabela 5.2) e escrito em novos ficheiros no subdi- retório de bitstream criado com as extensões respetivas. Por fim, o ficheiro de bitstream gerado “system.bit”, que se encontra no subdiretório “implementation” do diretório do projeto de hard- ware “xps_proj” (ver figura 5.3), uma vez que os ficheiros relacionados com a arquitetura de hardware estão aí localizados, é copiado para o novo subdiretório de bitstream e renomeado para o nome que o utilizador forneceu e a árvore de subdiretórios do gestor de bitstreams é atualizada au- tomaticamente. Todos os ficheiros associados a uma especificação de um AC, ficam com o mesmo nome do subdiretório de bitstream correspondente.
5.6.1 Fluxo de projeto para FPGA
O projeto de arquitetura de hardware completo que integra os núcleos IP de hardware com o processador MicroBlaze, foi desenvolvido no XPS que é um software da Xilinx para o desenvol- vimento de sistemas embebidos. O XPS cria automaticamente um ficheiro do tipo makefile para o projeto que, dependendo do parâmetro que lhe é passado, permite concretizar um ou mais passos associados ao fluxo de projeto típico de FPGA e gerar os ficheiros de saída correspondentes que descrevem o projeto de hardware. São feitas três chamadas ao ficheiro makefile que são integradas no script criado para gerar o ficheiro de bitstream. As operações realizadas por cada chamada são as seguintes:
5.6 Gestão de bitstreams e implementação em hardware 111
1. Remover todos os ficheiros previamente gerados para limpar o diretório do projeto de hard- ware.
2. Correr as ferramentas para síntese, implementação e geração do bitstream.
3. Inicializar o conteúdo da memória de instruções, armazenada em BRAMs, do processador MicroBlaze no bitstream.
O primeiro passo do fluxo de projeto é a síntese lógica que converte os ficheiros que descrevem o comportamento dos circuitos (HDL) numa netlist estrutural, um ficheiro NGC (Native Generic Circuit). A ferramenta Platgen (Platform Generation) analisa os ficheiros HDL que descrevem os núcleos IP que constituem o projeto do sistema embebido, neste caso o núcleo dos controladores UART e do codec de áudio AC‘97, e sintetiza cada um deles usando a ferramenta XST (Xilinx Synthesis Tecnhology). São também gerados os ficheiros HDL de alto nível, os wrappers ou envelopes, de cada núcleo IP do sistema de hardware e o ficheiro de alto nível do projeto de hardware completo, que interliga todos os núcleos IP, barramento PLB, processador MicroBlaze e inclui os pinos de entrada e saída da FPGA. Para este projeto, é usado um pino para entrada do sinal de relógio e outro para o sinal de reset. Para o controlador UART é usado um pino de entrada para receção (Rx) e um de saída para envio (Tx). Por fim, para o controlador do AC‘97 são usados dois pinos como entrada, um para o sinal de relógio (BITCLK) e outro para e entrada de dados em série (SDATA_IN), e três pinos como saída, um para o sinal de reset (RESET_N), um para a saída de dados em série (SDATA_OUT) e um sinal de sincronismo (SYNC). Estes cinco sinais, duas entradas e três saídas, fazem a parte da interface série digital, o AC-Link, que permite ao controlador comunicar com o chip do codec de áudio e vice-versa.
O segundo passo é a implementação do projeto que converte a netlist NGC gerada durante o processo de síntese num ficheiro NCD (Native Circuit Description), que é uma representação física do projeto de hardware mapeado em componentes da arquitetura da FPGA alvo, neste caso a Spartan6. Posteriormente, a ferramenta PAR (Plate and Route) produz um ficheiro NCD com os componentes necessários alocados e o encaminhamento de interligações da FPGA para a especi- ficação do projeto de hardware.
A geração do ficheiro de bitstream é o terceiro passo do fluxo de projeto. A ferramenta Bitgen recebe um ficheiro NCD já com a alocação de componentes e encaminhamento de interligações, e produz o ficheiro de configuração ou programação da FPGA que descreve a lógica interna da mesma para o projeto de hardware especificado. Uma vez que o projeto implementa um proces- sador soft-core na FPGA, é necessário inicializar o conteúdo da sua memória de instruções no bitstream. A ferramenta Bitinit recebe três ficheiros distintos: um ficheiro ELF (Executable and Linkable Format) que contém as instruções a executar no processador, um ficheiro MHS (Micro- processor Hardware Specification) que define as configurações do sistema embebido: a arquitetura do barramento, os periféricos, o processador, interligações entre componentes e o seu espaço de endereços e, por fim, um ficheiro BMM (Block RAM Memory Map) que contém o mapa de ende- reços e a localização da memória de instruções do processador. A ferramenta Bitinit, por sua vez,
invoca a ferramenta Data2MEM que permite inicializar o conteúdo de BRAMs da FPGA, onde a memória de instruções do processador é alocada.