
SISTEMAS
EMBARCADOS
Um sistema embarcado (ou sistema embutido) é um sistema microprocessado no qual o computador é completamente encapsulado ou dedicado ao dispositivo ou sistema que ele controla.[1] Diferentemente de computadores de propósito geral, como o computador pessoal, um sistema embarcado realiza um conjunto de tarefas predefinidas, geralmente com requisitos específicos. Já que o sistema é dedicado a tarefas específicas, através de engenharia pode-se otimizar o projeto reduzindo tamanho, recursos computacionais e custo do produto.[2][3]
Em geral tais sistemas não podem ter sua funcionalidade alterada durante o uso. Caso queira-se modificar o propósito é necessário reprogramar todo o sistema.
Sistemas como PDAs são geralmente considerados sistemas embarcados pela natureza do material informático (hardware) que os compõe, apesar de serem muito mais flexíveis em termos lógicos (software). Fisicamente, os sistemas embarcados passam desde leitores MP3 a semáforos.
História
Nos primeiros anos dos computadores digitais na década de 1940, os computadores eram por vezes dedicados a uma única tarefa. Eram, entretanto, muito grandes para serem considerados embarcados. O conceito de controlador programável foi desenvolvido algum tempo depois.
O primeiro sistema embarcado reconhecido foi o Apollo Guidance Computer, desenvolvido por Charles Stark Draper no MIT. O computador de guia, que operava em tempo real, era considerado o item mais arriscado do projeto Apollo. O uso de circuitos integrados monolíticos para reduzir o tamanho e peso do equipamento aumentou tal risco.
O primeiro sistema embarcado de produção em massa foi o computador guia do míssil nuclear LGM-30 Míssil Minuteman, lançado em 1961. Ele possuía um disco rígido para a memória principal. Quando a segunda versão do míssil entrou em produção em 1966, o computador guia foi substituído por um novo, que constituiu o primeiro uso em grande volume de circuitos integrados. A tecnologia desse projeto reduziu o preço de circuitos integrados como o NAND de mil para três dólares americanos cada, permitindo seu uso em sistemas comerciais.
Desde suas primeiras aplicações na década de 1960, os sistemas embarcados vêm reduzindo seu preço. Também tem havido um aumento no poder de processamento e funcionalidade. Em 1978 foi lançada pela National Electrical Manufacturers Association a norma para microcontroladores programáveis.
Em meados da década de 1980, vários componentes externos foram integrados no mesmo chip do processador, o que resultou em circuitos integrados chamados microcontroladores e na difusão dos sistemas embarcados.
Com o custo de microcontroladores menor que um dólar americano, tornou-se viável substituir componentes analógicos caros como potenciômetros e capacitores por eletrônica digital controlada por pequenos microcontroladores. No final da década de 1980, os sistemas embarcados já eram a norma ao invés da exceção em dispositivos eletrônicos.
Características
Sistemas embarcados são desenvolvidos para uma tarefa específica. Por questões como segurança e usabilidade, alguns inclusive possuem restrições para computação em tempo real. O software escrito para sistemas embarcados é muitas vezes chamado firmware, e armazenado em uma memória ROM ou memória flash ao invés de um disco rígido. Por vezes o sistema também é executado com recursos computacionais limitados: sem teclado, sem tela e com pouca memória.
Interfaces do utilizador
Sistemas embarcados podem possuir desde nenhuma interface do utilizador (dedicados somente a uma tarefa) a uma interface de utilizador completa, similar à dos sistemas operacionais desktop (em sistemas como PDAs). Sistemas mais simples utilizam botões, LEDs ou telas bastante limitadas, geralmente mostrando somente números ou uma fila pequena de caracteres.
Sistemas mais complexos utilizam uma tela gráfica completa, usando tecnologias como tela tátil ou aquela em que o significado dos botões depende do contexto da tela. Computadores de mão também oferecem manípulos eletrónicos para apontar. O surgimento da World Wide Web forneceu aos desenvolvedores de sistemas embarcados a possibilidade de fornecer uma interface web através de uma conexão por rede. Isso evita o custo de uma tela sofisticada, ainda que seja fornecida uma interface complexa e completa a ser acessada em outro computador. De modo geral, roteadores usam tal habilidade.
Processamento
Em geral os sistemas embarcados possuem uma capacidade de processamento reduzida em comparação com computadores desktops. Ao invés de utilizar microprocessadores, os desenvolvedores preferem utilizar microcontroladores, pois estes já possuem diversos periféricos integrados no mesmo chip.
Outra diferença é a variedade de arquiteturas disponíveis tais como ARM, MIPS, Coldfire/68k, PowerPC, x86, PIC, 8051, Atmel AVR, Renesas H8, SH, V850, FR-V, M32R, Z80 e Z8. Isso contrasta com o mercado de computadores pessoais, limitados à somente algumas arquiteturas.[4]
Periféricos
Os sistemas embarcados comunicam-se com o meio externo através de periféricos. Estes periféricos podem ser combinados com o processador (como no caso dos sistemas microcontrolados) ou associados no sistema.
Entre os periféricos mais comum temos:
-
Entrada de dados através de teclas (geralmente através de teclados feitos com varredura matricial)
-
Display's de LCD (sendo os mais comuns os alfanuméricos por exemplo o HD44780)
-
Interface serial - (Por exemplo RS 232, I2C)
-
Universal Serial Bus - (USB)
Disponibilidade
Sistemas embarcados residem em máquinas que, espera-se, possam trabalhar continuamente por anos ininterruptamente, e que possam por vezes recuperarem-se sozinhas após erros.[5] Portanto, o software é geralmente desenvolvido e testado mais cuidadosamente de que em computadores pessoais. A recuperação de erros pode ser atingida com técnicas como o watchdog timer, que reinicia o sistema a menos que o software notifique periodicamente que está funcionando corretamente.
Alguns exemplos de onde são usados sistemas embarcados
-
Aviônicos, como sistemas de controle inercial, controle de vôo e outros sistemas integrados nas aeronaves, como sistemas de orientação de mísseis
-
Equipamentos de redes de computadores, como roteadores, hubs, switches e firewalls
-
Dispositivos de armazenamento (discos rígidos e disquetes)
-
Controladores da tracção, do motor e do antibloqueio em automóveis: freios ABS e controle de tração
-
Eletrodomésticos, como fornos microondas, máquinas de lavar, aparelhos de TV, DVD players
-
Equipamentos médicos
-
Tratores e implementos agrícolas
SOC - SYSTEM ON A CHIP
System-on-a-chip (SoC), System On Chip (SOC) ou, em português, sistema-em-um-chip, se refere a todos os componentes de um computador, ou qualquer outro sistema eletrônico, em um circuito integrado (chip). Ele pode conter funções digitais, analógicas, mistas e, muitas vezes, de Radiofrequência - RF; tudo em um.[1]Uma típica aplicação é na área de sistemas embarcados.[2]
As características de um SoC assemelham-se às de um microcontrolador. Normalmente, microcontroladores possuem menos que 100K de RAM (apenas poucos KBytes), e frequentemente são sistemas de chip único. Enquanto que o termo SoC é várias vezes usado para processadores mais potentes, capazes de executarem programas como o Windows ou o Linux, nas quais necessitam de memórias externas (flash, RAM) para funcionarem, e que são usados com vários periféricos acoplados. A grande maioria dos sistemas que se rotulam System-on-chip, possuem uma conotação técnica maior de que a realidade: aumentam a integração do chip para reduzir os custos de fabricação e tornar disponíveis sistemas mais compactos. Muitos são complexos demais para se ajustarem em apenas um chip construído com um processo otimizado para apenas uma das funções do sistema.[3]
Quando não há praticidade para construir uma determinada aplicação SoC, uma alternativa é o sistema em um encapsulamento (System in package (SiP), em inglês), abrangendo vários chips em um único encapsulamento. E, em larga escala, acredita-se que o SoC possui um custo menor que o SiP, quando aumentada a produção,[1] por ser mais simples realizar o agrupamento.[4]
Outra opção, por exemplo, como visto na maioria dos telefones celulares e no Beagleboard, é o Pacote em Pacote empilhando durante a montagem do cartão. O SOC chip inclui processadores e números digitais periféricos, e vem em uma grade de bolas, pacote com conexões inferiores e superiores. As bolas inferiores conectam o cartão e vários periféricos, com as bolas superiores em um anel segurando um barramento de memórias usado para acessar NAND flash e DDR2 RAM. Pacotes de memória podem vir de vários fornecedores.
Estrutura
Um típico SOC consiste de:
- Um microcontrolador, um microprocessador ou núcleo(s) DSP. Alguns SOCs chamados sistema multiprocessador no chip (MPSOC) inclui mais do que um processador de núcleo.
- Blocos de memória incluindo um sistema de ROM, RAM, EEPROM e memória flash.
- Cronometragem de fontes, incluindo osciladores e anéis de bloqueio de fase.
- Periféricos incluindo contra temporizadores, temporizadores em tempo real e geradores de redefinição de ativação.
- Interfaces externas, incluindo os padrões da indústria, tais como USB, FireWire, Ethernet, USART, SPI.
- Interfaces analógicas incluindo ADCs e DACs.
- Reguladores de tensão e circuitos de gerenciamento de energia.
Estes blocos são ligados por qualquer proprietário ou barramento padrão da indústria, tais como o AMBA da ARM Holdings, controladores de rota de dados DMA direto entre interfaces externas e memória, o processador núcleo bypassing e thereby aumentando os dados de rendimento do SOC.
Fluxo de projeto
Um SOC consiste tanto das ferramentas (hardware) descritas acima, e do software controlando do micro controlador ou núcleos DSP, periféricos ou interfaces. O fluxo de projeto para um SOC pretende desenvolver este hardware e software em paralelo. A maioria dos SOCs são desenvolvidos a partir de blocos de hardware pré-qualificados, para os elementos de hardware descritos acima, juntamente com os drivers de software que controlam o sua operação. De particular importância são as pilhas de protocolos que orientam interfaces padrão da indústria, como USB.
Os blocos de hardware são colocados em conjunto, utilizando ferramentas de CAD; Os módulos do software são integrados usando um ambiente de desenvolvimento de software.
Chips são verificados quanto à sua exatidão lógica antes de ser enviado para fundição. Este processo é chamado de verificação funcional e é responsável por uma parcela significativa do tempo e energia gasta no ciclo da vida de design de chips (embora a figura frequentemente citado de 70% é provavelmente um exagero).
Com o crescimento da complexidade dos chips, as línguas de verificação de hardware, como SystemVerilog, SystemC e OpenVera estão sendo usados. Bugs encontrados na etapa de verificação são relatados para o designer. Tradicionalmente, os engenheiros têm utilizado simuladores de aceleração, emulação e/ou um protótipo de FPGA para verificar e depurar tanto hardware e software para SoC para projetos prévios de tapeout. Com alta capacidade e tempo de compilação rápida, aceleração e emulação são poderosas tecnologias que proporcionam ampla visibilidade em sistemas.
Ambas as tecnologias, contudo, operar-se lentamente, a fim de MHz, que pode ser significativamente mais lento - até 100 × lento - SOCs que a frequência de operação. Aceleração e emulação de caixas também são muito grandes e caros em US $1M +.
Protótipos FPGA, ao contrário, usam FPGAs diretamente para permitem que os engenheiros validem e testem, ou perto de, frequência de operação completa do sistema com estímulos do mundo real. Ferramentas como Certus são usados para inserir sondas no FPGA RTL que fazem sinal disponível para observação. Isto é usado para depuração de hardware, firmware e software através de vários FPGAs com capacidades semelhantes às de um analisador lógico.
Após depurar o hardware do SOC segue a fase de lugar e rota (Place and route) do projeto de um circuito integrado ou ASIC antes de ser fabricado.
Fabricação
- SOCs podem ser fabricados por diversas tecnologias, incluindo:
Full custom
Standard cell
FPGA
SOC projetados geralmente consomem menos energia e têm um custo mais baixo e maior confiabilidade do que os sistemas multi chips que eles substituem. E com menos pacotes no sistema, custos de montagem são bem reduzidos. No entanto, como a maioria dos projetos VLSI, o custo total é maior para um chip grande do que para a mesma funcionalidade distribuída ao longo de vários chips menores, por causa de rendimentos mais baixos e custos mais elevados de engenharias não recorrentes (NRE).
Exemplos de aplicações
Arquitetura ARM
Todos os chips contendo ARM Cortex-A sejam, Allwinner, Exynos Samsung, MediaTek, Texas Instruments OMAP, Rockchip, nVidia Tegra, Snapdragon
Firmware
Em eletrônica e computação, firmware é uma classe específica de software de computador que fornece controle de baixo nível para o hardware específico do dispositivo. O firmware pode fornecer um ambiente operacional padronizado para o software mais complexo do dispositivo (permitindo maior independência de hardware) ou, para dispositivos menos complexos, atuar como o sistema operacional completo do dispositivo, executando todas as funções de controle, monitoramento e manipulação de dados. Exemplos típicos de dispositivos que contêm firmware são sistemas embarcados, dispositivos de consumo, computadores, periféricos de computador e outros. Quase todos os dispositivos eletrônicos, por mais simples que seja, contêm algum firmware.
O firmware é armazenado permanentemente num circuito integrado (chip) de memória de hardware, como uma ROM, PROM, EPROM ou ainda EEPROM e memória flash, no momento da fabricação do componente. Muitos aparelhos simples possuem firmware, entre eles: controles-remotos, calculadora de mão, algumas partes do computador, como disco rígido, teclado, cartão de memória, unidades USB, muitos instrumentos científicos e robôs. Outros aparelhos mais complexos como celulares, câmeras digitais, sintetizadores, entre outros, também possuem um firmware para a execução de suas tarefas.[1][2][3]
Não há fronteiras rígidas entre firmware e software, pois ambos são termos descritivos bastante livres. Contudo, o termo firmware foi originalmente inventado para contrastar com software de alto nível que poderia ser alterado sem a troca de um componente de hardware, e o firmware está normalmente envolvido com operações muito básicas de baixo nível das quais sem um dispositivo seria completamente não-funcional.
História
O primeiro microprocessador foi o 4-bit Intel 4004 lançado em 1971. Com o tempo, foram criados microcontroladores mais eficientes como o Intel 8008 e outros. No entanto, ambos chips precisavam de componentes externos para funcionar, tornando custo total do sistema elevado sendo impossível, economicamente, informatizar aparelhos.
O Smithsonian Institution, com os créditos do produto para os engenheiros da Texas Instruments Gary Boone e Michael Cochran criaram o primeiro microcontrolador comercial em 1971. O resultado de seu trabalho foi a TMS 1000, que se tornou comercialmente disponível em 1974. Combinou memória somente para leitura, memória de leitura / gravação , processador e relógio em um único chip e tinha como alvo sistemas embarcados.[2]
Aplicações
Microcontroladores são geralmente utilizados em automação e controle de produtos e periféricos, como sistemas de controle de motores automotivos, controles remotos, máquinas de escritório e residenciais, brinquedos, sistemas de supervisão, etc. Por reduzir o tamanho, custo e consumo de energia, e se comparados à forma de utilização de microprocessadores convencionais, aliados a facilidade de desenho de aplicações, juntamente com o seu baixo custo, os microcontroladores são uma alternativa eficiente para controlar muitos processos e aplicações.
Cerca de 50% dos microcontroladores vendidos são controladores "simples", outros 20% são processadores de sinais digitais (DSPs) mais especializados. Os microcontroladores podem ser encontrados em praticamente todos os dispositivos eletrônicos digitais que nos cercam: teclado do computador, dentro do monitor, disco rígido, relógio de pulso, rádio relógio, máquinas de lavar, forno de micro-ondas, telefone, etc. Você está certamente cercado de dezenas deles agora.
Certamente eles foram tão ou mais importantes para a revolução dos produtos eletrônicos que os computadores. Eles permitiram a evolução de equipamentos que há anos não evoluíam, como os motores a combustão, que agora com o novo controle eletrônico podem funcionar com sistema bi-combustível e poluindo menos e as máquinas fotográficas, que migraram de processos químico/mecânico a circuitos com microcontroladores+Sensores Digitais+Memória.
Os microcontroladores são programados geralmente por computadores ou discos de memoria. Existindo então algumas ferramentas que criam uma ponte de transferência de dados entre o aparelhoutilizado e o microcontrolador, o Arduino por exemplo.
ASIC - APPLICATION SPECIFIC INTEGRATED CIRCUITS
Application Specific Integrated Circuits (ASICs), ou seja, circuitos integrados de aplicação especifica (CIAEs), são circuitos orientados para implementação de tarefas específicas em domínios bem definidos, estão em contraste com os circuitos de aplicação geral, por exemplo, um chip projetado somente para rodar um telefone celular, circuirados circuitos ASICs.[1]
Com o recurso, tamanho e ferramentas de design melhorado ao longo dos anos, a complexidade máxima possível num ASIC cresceu de 5.000 portas para mais de 100 milhões. ASICs modernos incluem muitas vezes microprocessadores internos, blocos de memória incluindo ROM, RAM, EEPROM, memória flash e outros grandes blocos de construção. ASIC é muitas vezes denominado sistema em um chip (System-on-a-chip). Projetistas de ASICs digitais costumam usar uma linguagem de descrição de hardware (HDL), como Verilog ou VHDL, para descrever a funcionalidade de ASICs.
Os componentes (modelos) de um circuito integrado para aplicação especifica são subdivididos em totalmente personalizado e semipersonalizado, sendo que o semipersonalizado também é subdividido em Matrizes de portas e Célula Padrão.[2] Alguns fabricantes e pesquisadores consideram dois modelos de Dispositivos Lógicos Programáveis (PLD) como dispositivos ASICs, porém esta afirmação gera polêmicas devido ao fato de PDLs serem programados pelo usuário, e alguns modelos podem ser alterados após a primeira configuração.
História
Os primeiros ASICs utilizavam tecnologia de Matrizes de portas (gate array). A empresa Ferranti do Reino Unido produziu por volta de 1980, o primeiro gate array, a ULA (Uncommitted Logic Array), uma aplicação de grande sucesso encontrado nos computadores pessoais de 8 bits ZX Spectrum, ZX81 e low-end, introduzido em 1981 e 1982. Estes foram usados por Sinclair Research (UK) essencialmente como solução de baixo custo de E/S visando à manipulação de gráficos do computador.
Totalmente Personalizado
O componente totalmente personalizado (full custom) tem o seu projeto desenvolvido a nível de transistores. O projeto completo e desenvolvimentos do circuito são personalizados (desenvolvidos) manualmente pelo designer. Devido a este fator seu custo é muito elevado, fazendo com que os atualmente clientes migrem, conforme o possível para outros modelos de ASIC .
As vantagens deste projeto é que oferece alto desempenho, menor custo para a produção de grandes quantidades, maior confiabilidade, menor dissipação de energia e também a capacidade de integrar componentes analógicos, porem as desvantagens deste são o aumento do tempo de criação, complexidade, exigência de muito maior equipe de design especializada tornando maior as despesas do projeto, e uma vez transformado em silício o projeto não pode ser modificado. Exemplos de ASICs Full- Custom são processador móvel, circuitos integrados de sensores e projetos que exigem grande confiabilidade em pouco tempo.[3]
Célula Padrão
Em meados dos anos 1980, quando um designer iria escolher um fabricante de ASIC, tinha apenas a possibilidade de implementar o seu projeto apenas usando as ferramentas de designer disponíveis a partir do fabricante. Não havia uma ligação efetiva das ferramentas de projeto entre fabricantes. Uma solução para este problema, que também produziu um dispositivo de densidade muito mais elevada, foi a implantação de células padrão (standard cells) onde cada fabricante ASIC poderia criar blocos funcionais com características elétricas conhecidas, utilizavam células lógicas predefinidos (portas AND, OR, multiplexadores e flip-flops, por exemplo) conhecidas como bibliotecas de células.
Layouts do modelo células padrão são facilmente identificados por fileiras de células de mesma “altura”, separados por canais de fiação. Células grandes, como multiplicadores ou micro-controladores pode abranger várias linhas celulares e bloquear alguns dos canais de fiação. Este padrão geralmente são menos eficientes do que uma padrão totalmente personalizado, devido às restrições de tamanho de células fixas e requisitos para canais de fiação dedicados.
Projeto de Célula Padrão se encaixa entre Matrizes de Células (Gate Array) e design Totalmente Customizado (Full-Custom) tanto em termos de sua engenharia não recorrente e custo. Célula Padrão é uma tecnologia ASIC que reduz o custo de implementação física e tempo de projeto em relação à tecnologia de circuitos totalmente personalizado. A tecnologia Célula Padrão usa bibliotecas de portas ou pequenos circuitos lógicos.
A vantagem é que os designers Célula Padrão é a economizar tempo, dinheiro e reduzir o risco por meio de um pré-projetado já pré-testado e com biblioteca de células padrão caracterizada. Além disso, cada célula padrão pode ser otimizada individualmente. As desvantagens são o tempo gasto na concepção de bibliotecas de células.
Matriz de Portas
Matriz de Portas são arranjo de transistores que o fabricante disponibiliza para que seja personalizado de acordo com a informação de interconexões fornecida pelo cliente.
Este é um método de fabricação em que os transistores e outros dispositivos ativos, são predefinidos no wafers de silício. Só as melhores camadas de metal, que definem a interconexão entre transistores, são definidas pelo desenvolvedor. Usando wafers pré-fabricadas até os passos de metalização podemos usar o mesmo padrão de wafers para mais de um cliente assim reduz o tempo necessário para fazer um novo ASIC Matriz de Portas.
Este modelo de ASIC contém centenas de milhares de portas, o custo de fabricação é menor do que os de Célula Padrão e Totalmente Personalizado, devido a fato que os custos dos wafers são baixos porque muitos projetos de clientes diferentes podem ser criados a partir do mesmo projeto wafer base, assim os ciclos de produção são muito mais curtos a produção é muito mais rápida. Da mesma forma, as embalagens de fundição e os custos de teste são baixos devido ao padrão de pinos e dispositivos de teste comuns que podem ser usados para vários projetos.[4]
FIRMWARE
Em eletrônica e computação, firmware é uma classe específica de software de computador que fornece controle de baixo nível para o hardware específico do dispositivo. O firmware pode fornecer um ambiente operacional padronizado para o software mais complexo do dispositivo (permitindo maior independência de hardware) ou, para dispositivos menos complexos, atuar como o sistema operacional completo do dispositivo, executando todas as funções de controle, monitoramento e manipulação de dados. Exemplos típicos de dispositivos que contêm firmware são sistemas embarcados, dispositivos de consumo, computadores, periféricos de computador e outros. Quase todos os dispositivos eletrônicos, por mais simples que seja, contêm algum firmware.
O firmware é armazenado permanentemente num circuito integrado (chip) de memória de hardware, como uma ROM, PROM, EPROM ou ainda EEPROM e memória flash, no momento da fabricação do componente. Muitos aparelhos simples possuem firmware, entre eles: controles-remotos, calculadora de mão, algumas partes do computador, como disco rígido, teclado, cartão de memória, unidades USB, muitos instrumentos científicos e robôs. Outros aparelhos mais complexos como celulares, câmeras digitais, sintetizadores, entre outros, também possuem um firmware para a execução de suas tarefas.[1][2][3]
Não há fronteiras rígidas entre firmware e software, pois ambos são termos descritivos bastante livres. Contudo, o termo firmware foi originalmente inventado para contrastar com software de alto nível que poderia ser alterado sem a troca de um componente de hardware, e o firmware está normalmente envolvido com operações muito básicas de baixo nível das quais sem um dispositivo seria completamente não-funcional.
Aplicações
Firmwares estão presentes em computadores na forma de BIOS, leitores e/ou gravadores de CDs/DVDs. Também estão presentes em celulares, leitores MP3 e MP4, câmeras digitais, consoles, impressoras, televisões e cafeteiras. Em portáteis como cartões de memória, pen drives, consoles portáteis, controles remotos, brinquedos e virtualmente quaisquer equipamentos eletrônicos da atualidade, incluindo eletrodomésticos como fornos de microondas, geladeiras ou lavadoras.[3]
Open firmware
É uma variação de firmware criada originalmente em compatibilidade com a norma IEEE 1275-1994. Sua principal característica é ser compilada em FCode, o que lhe proporciona independência de arquitetura.[3]
IMAGEM ROM
Uma Imagem ROM (Read only memory, em português "Memória apenas para leitura") é uma cópia em arquivo de um chip de memória ROM, muitas vezes um cartucho de Video-game, o firmware de um sistema embarcado ou de uma máquina de Arcade.
O termo Imagem ROM é utilizado também para outros tipos de memória de não voláteis tais como PROMs, EPROMs, EEPROMs, e Memórias Flash. Muitas vezes, é utilizado incorretamente para imagens de CDs ou DVDs ou mesmo de fita cassete. Os termos corretos para estes casos são Imagem de disco e Imagem de fita, respectivamente.
ROMs ou jogos para emuladores e consoles são softwares como quaisquer outros. Portanto, seu uso indevido está sujeito aos rigores da lei.
O Unified Extensible Firmware Interface (UEFI)
O Unified Extensible Firmware Interface (UEFI), em português Interface Unificada de Firmware Extensível, é uma especificação que define uma interface de software entre o sistema operacional e o firmware da plataforma. UEFI pretende substituir a interface de firmware do Sistema de Entrada/Saída Básico (BIOS), presente em todos os computadores pessoais compatíveis com o IBM PC. Na prática, a maioria das imagens UEFI fornecem suporte legado para os serviços do BIOS. UEFI pode suportar diagnósticos remotos e reparação de computadores, mesmo sem outro sistema operacional instalado.
A especificação original EFI (Extensible Firmware Interface) foi desenvolvida pela Intel. Algumas de suas práticas e formatos de dados espelham aqueles do Windows. Em 2005, a UEFI tornou a EFI 1.10 (versão final do EFI) obsoleta. A especificação da UEFI é gerenciada pelo Unified EFI Forum.
História
A motivação original para o EFI veio durante o início do desenvolvimento do primeiro sistema Intel-HP Itanium em meados de 1990. As limitações do PC BIOS (modo 16-bits, espaço de endereçamento de 1MB, dependências de hardware PC AT, etc.) foram vistas como claramente inaceitáveis para a grande plataforma de servidores visada como alvo. Os esforços iniciais para resolver esses problemas foram inicialmente chamados Intel Boot Initiative e foi depois renomeado para Extensible Firmware Interface (EFI).[1]
-
A especificação EFI 1.02 foi lançada pela Intel em 12 de dezembro de 2000.
-
A especificação EFI 1.10 foi lançada no dia 1 de dezembro de 2002. Ela inclui o modelo de driver como também várias pequenas melhorias para a 1.02.
Em julho de 2005, a Intel cessou o desenvolvimento da especificação EFI quando esta chegou à versão 1.10, e contribuiu para o Unified EFI Forum, que desenvolveu a especificação com o nome Unified Extensible Firmware Interface (UEFI). A especificação EFI original é de propriedade da Intel, que fornece exclusivamente licenças para produtos EFI, mas a especificação UEFI é de propriedade do Fórum.
A versão 2.1 da especificação UEFI foi lançada em 7 de janeiro de 2007. Foi adicionado criptografia, autenticação de rede e a Arquitetura de Interface de Usuário (Infraestrutura de Interface Humana no UEFI). A última especificação UEFI, a versão 2.7, foi aprovada em maio de 2017.[2]
Vantagens
A interface definida pela especificação EFI inclui tabelas de dados que contêm informações de plataforma e serviços de inicialização e tempo de execução que estão disponíveis para o carregador do sistema operacional e para o sistema operacional. O firmware UEFI oferece várias vantagens técnicas sobre um sistema tradicional de BIOS:[12]
-
Capacidade de usar discos grandes (mais de 2 TB) com uma tabela de partição GUID (GPT)[13][a]
-
Arquitetura independente de CPU[a]
-
Drivers independentes de CPU[a]
-
Ambiente pré-SO flexível, incluindo capacidade de rede
-
Design modular
-
Compatibilidade reversa e futura
Recursos
As interfaces definidas pela EFI incluem tabelas de dados que contem informação sobre a plataforma, e serviços de boot e runtime que ficam disponíveis para o carregador do SO e o próprio SO.
Alguns melhoramentos para BIOS PC, como o ACPI e o SMBIOS, também estão presentes no EFI, já que eles não dependem de uma interface em tempo de execução de 16-bit.
Secure boot
A especificação UEFI 2.3.1 Errata C (ou superior) define um protocolo conhecido como secure boot (em português inicialização segura), que pode tornar o processo de inicialização seguro por meio da prevenção de carregamento de drivers ou carregadores de SO que não são assinados com uma assinatura digital aceitável. Os detalhes mecânicos de como, precisamente estes drivers são assinados não são especificados.[3]
Compatibility Support Module
O Compatibility Support Module (CSM), em português Módulo de Suporte à Compatibilidade, é um componente do firmware UEFI que fornece compatibilidade legada do BIOS por meio da emulação de um ambiente BIOS, permitindo que sistemas operacionais legados e algumas option ROMs que não suportam UEFI ainda sejam usados.[4]
Serviços
O EFI define boot services, que incluem suporte a consoles de texto e gráficos em vários dispositivos, barramentos, serviços de bloco e de arquivos, e runtime services, assim como data, hora e serviços NVRAM.
Drivers de dispositivo
Em adição aos drivers de dispositivos padrões específicos da arquitetura, a especificação EFI provê para um ambiente de drivers de dispositivo independente do processador, chamado EFI Byte Code ou EBC.
Alguns tipos de drivers de dispositivo (não EBC) específicos para a arquitetura podem ter interfaces para uso pelo sistema operacional. Isso permite ao SO confiar ao EFI o suporte básico aos gráficos e à rede enquanto os drivers específicos são carregados.
Gerenciador de boot
Um Gerenciador de boot EFI é também usado para selecionar e carregar o sistema operacional, removendo a necessidade de um mecanismo de boot loader (o boot loader do SO é uma aplicação EFI).
Suporte a Disco
Em adição ao esquema de partição do PC padrão, Master boot record (MBR), o EFI adiciona suporte para uma tabela de partição GUID, que não sofre das mesmas limitações. A especificação EFI não inclui um descrição para um sistema de arquivos; implementações da EFI tipicamente suportam FAT32 como seus sistemas de arquivos[5]
O Shell EFI
A comunidade EFI criou um Shell open source;[6] ao invés de "bootar" diretamente em um SO completo, em algumas implementações, o usuário pode dar boot no shell EFI. O shell é uma aplicação EFI; ele pode residir diretamente dentro da ROM da plataforma, ou num dispositivo para o qual os drivers estão na ROM.
O Shell pode ser usado para executar outras aplicações EFI, como setup, a instalação do SO, utilitários de diagnóstico ou configuração, e atualizações da flash do sistema; ele pode também ser usado para tocar CDs ou DVDs sem ter que iniciar um sistema operacional completo, contanto que uma aplicação EFI com as características apropriadas seja escrita. Os comandos do shell tornam possível copiar ou mover arquivos e pastas entre os sistemas de arquivos suportado. Drivers podem ser carregados e descarregados, e um stack TCP/IP completo pode ser usado de dentro do shell.
O shell EFI suporta encriptação através de arquivos .nsh, que são análogos aos arquivos batch do DOS
Nomes de comandos do shell são frequentemente herdados do interpretador de comandos do DOS ou o shell Unix. O shell pode ser visto como um substituto funcional para o interpretador de comandos do DOS.
Extensões
Extensões ao EFI podem ser carregadas de virtualmente qualquer dispositivo de armazenamento não volátil ligado ao computador. Por exemplo, um OEM pode vender sistemas com uma partição EFI em um HD que adicionariam características adicionais para o firmware EFI padrão armazenado na ROM da placa mãe.
Implementação e adoção
Intel Platform Innovation Framework para EFI
A Intel Platform Innovation Framework para a EFI (com o nome código original “Tiano”) é uma implementação de firmware completamente livre de legado, que inclui suporte para EFI. Também pode suportar um PC BIOS herdado através do compatibility support module(CSM).
Em particular, o Framework inclui todos os passos necessários para iniciar a plataforma após o ligamento; esse trabalho interno do firmware não são definidos como parte da especificação EFI, mas são parte da Platform Initialization Specification.
A Intel não disponibiliza o framework completo para o usuário final; ele está disponível através de vendedores de BIOS independentes (como a American Megatrends (AMI) e Insyde Software) como parte das suas ofertas de firmware.[7]
Uma parte do framework foi disponibilizada com open source para o projeto TianoCore com EFI Developer Kit (EDK). Essa implementação cobre o EFI e alguns códigos de inicialização de hardware, mas não é o firmware completo. Várias licenças foram usadas para o código, incluindo a Licença BSD e a Licença Pública Eclipse.
Plataformas que usam EFI ou Framework
Os primeiros servidores e estações de trabalho da Intel, lançados em 2000, suportavam EFI 1.02.
Os primeiros sistemas Itanium 2 da Hewlett-Packard, lançados em 2002, suportavam EFI 1.10; eles eram capazes de iniciar Windows, Linux, FreeBSD e HP-UX.
Todos os sistemas Itanium 2 lançados com firmware compatível com EFI devem também ser complacentes com todas as especificações DIG64.
Em novembro de 2003, Gateway introduziu o Gateway 610 Media Center, o primeiro computador x86 baseado no Windows a utilizar firmware baseada no Framework, o InsydeH2O da Insyde Software. Ele ainda dependia de uma BIOS implementada como um suporte de compatibilidade para iniciar o Windows.
Em janeiro de 2008, a Apple Computer liberou seus primeiros computadores Macintosh baseados em intel. Estes sistemas usam EFI e o Framework ao invés de Open Firmware, que foi usado nos sistemas Power-PC anteriores.[8] Em 5 de abril de 2006 a Apple liberou Boot Camp, wque produz discos de Windows XP como uma ferramenta de particionamento não destrutível para ajudar os usuários a instalar o Windows XP mais facilmente. Uma atualização de firmware que adicionou suporte a BIOS legada para implementação do EFI também foi liberada. Modelos Macintosh subsequentes foram entregues ja com novo firmware instalado. Agora todos os sistemas machintosh atuais também estão aptos a executar o boot pelos sistemas operacionais de BIOS legada, como o Windows XP.
A grande maioria dos chips de placas-mãe Intel vêm com firmaware baseado neste Framework. Durante o ano de 2005 mais de um milhão de sistemas intel foram entregues com o Framework.[9] Novos produtos Mobile, desktop e Servidores usando o framework começaram a ser entregues em 2006. Por exemplo, todas as placas que usam o chipset da série intel 945 usam o Framework. Contudo, a produção do firmware geralmente não inclui o suporte ao EFI, e está limitado à BIOS legada.[10]
Desde 2005, EFI tem sido implementado também em arquitetura não-PC, como sistemas embarcados baseados em XScale cores.[11]
O EDK inclui um alvo NT32, que aceita o firmware EFI e aplicação EFI rodar dentro de uma aplicação Windows.
Em 2007 HP liberou uma impressora compatível com o firmware EFI.[12]
Sistemas Operacionais
O sistema Linux é capaz de usar o EFI em tempo de boot desde do início de 2000, usando o carregador de boot elilo. O elilo é o único meio de "bootar" o Linux na plataforma IA-64; ele pode ser usado também nas plataformas IA-32. Até dezembro de 2006, não há versão do elilo para modo x64.
HP-UX tem usado EFI como mecanismo de boot nos sistemas IA-64 desde 2002. OpenVMS tem usado em produtos comerciais desde janeiro de 2005.
O Microsoft Windows Server 2003 para IA-64, Windows XP 64-bit Edition, e Windows 2000 Advanced Server Limited Edition, todos para a família Intel Itanium de processadores, suportam EFI, um requisito das plataformas pela especificação DIG64.[13] Os Computadores Apple tinha adotado o EFI para a linha dos Macintosh baseados em Intel. A Microsoft planeja introduzir o suporte ao UEFI para os 64-bit x64 com Windows Server "Longhorn". O EFI tem suporte para x64 nas versões do Windows Vista que poderá ser incluso um service pack.[14] Não será feito um suporte oficial para booting do EFI em computadores 32-bit devido à falta de suporte dos fabricantes e dos vendedores de computadores. A Microsoft liberou um vídeo com Andrew Ritz e Jamie Schwarz que explica o suporte PRE-SO que envolve UEFI no Vista e no Longhorn.[15]
Criticismo
Numerosos ativistas de direitos digitais tem protestado contra a UEFI. Ronald G. Minnich, um coautor de coreboot, e Cory Doctorow, um ativista de direitos digitais, tem criticado a EFI como uma tentativa de remover a possibilidade do usuário verdadeiramente controlar o computador.[16][17] Isto levanta preocupações de segurança e, nomeadamente, torna a criação de uma implementação de software livre impossível. EFI pode ser usado para criar uma "BIOS DRM", deixando assim fornecedores construir computadores que limitam o que o utilizador pode fazer.
Em 26 de março de 2013, o grupo espanhol Hispalinux de desenvolvimento de software livre apresentou uma queixa formal à Comissão Europeia, alegando que os requisitos de Secure Boot da Microsoft em sistemas OEM eram "obstrutivas" e anticompetitivas.[18]
BIOS
O BIOS (um acrônimo de Basic Input/Output System, em português Sistema Básico de Entrada/Saída, e também conhecido como System BIOS, ROM BIOS ou PC BIOS) é um firmware não-volátil usado para realizar a inicialização do hardware durante o processo de inicialização (por meio do botão de inicialização da máquina) e para fornecer serviços de tempo de execução para sistemas operacionais e programas.[1]
O firmware BIOS vem pré-instalado na memória permanente da placa mãe do computador e é o primeiro software a ser executado quando liga-se a máquina. O nome origina-se do Sistema Básico de Entrada/Saída usado no sistema operacional CP/M em 1975.[2][3] Originalmente proprietário à IBM PC, o BIOS passou por engenharia reversa por empresas que buscavam criar sistemas compatíveis. A interface deste sistema original serve como um padrão de facto.
O BIOS, em PCs modernos, inicializa e testa os componentes de hardware do sistema e carrega um carregador de inicialização de um dispositivo de memória em massa, o qual inicializa um sistema operacional. Na era do MS-DOS, o BIOS fornecia uma camada de abstração de hardware para o teclado, monitor e outros dispositivos de entrada/saída (E/S) que padronizaram uma interface para programas aplicativos e para o sistema operacional. Sistemas operacionais mais recentes não usam o BIOS após a carga, acessando, em vez disso, os componentes de hardware diretamente.
A maioria das implementações do BIOS são especificamente projetadas para trabalhar com um computador ou modelo de placa mãe particular, por meio da interface com vários dispositivos que compõem o chipset do sistema complementar. Originalmente, o firmware BIOS era armazenado em um chip ROM na placa mãe do PC.[4]Em sistemas de computador modernos, os conteúdos do BIOS são armazenados em memória flash, desta forma ele pode ser reescrito sem remover o chip da placa mãe. Isto permite fácil atualização do firmware BIOS pelo usuário final, desta forma novos recursos podem ser adicionados ou falhas podem ser corrigidas, mas também cria uma possibilidade para o computador ser infectado com rootkits de BIOS. Além disso, uma atualização de BIOS que falha pode bloquear a placa mãe permanentemente, a menos que o sistema inclua alguma forma de backup para este caso.
A Interface de Firmware Extensível Unificada (UEFI) é um sucessor ao BIOS, objetivando resolver suas deficiências técnicas.[5]
História
O termo BIOS (Basic Input/Output System) foi criado por Gary Kildall[6] e apareceu pela primeira vez no sistema operacional CP/Mem 1975,[2][3][7] descrevendo a parte específica da máquina do CP/M carregado durante o tempo de inicialização que fazia interface direta com o hardware.[3] (Uma máquina CP/M geralmente possuía apenas um gerenciador de inicialização simples em sua ROM.)
Versões do MS-DOS, PC DOS ou DR-DOS contêm um arquivo chamado, variavelmente, de "IO.SYS", "IBMBIO.COM", "IBMBIO.SYS" ou "DRBIOS.SYS". Esse arquivo é conhecido como "BIOS do DOS" (também conhecido como "Sistema de E/S do DOS") e contém a parte específica de hardware de nível mais baixo do sistema operacional. Juntamente com o hardware básico específico, porém "BIOS de Sistema" independente de sistema operacional, que reside na ROM, ele representa o análogo ao "BIOS do CP/M".
Com a introdução das máquinas PS/2, a IBM dividiu o Sistema BIOS em porções de modo real e modo protegido. A parte em modo real era destinada a fornecer compatibilidade retroativa com sistemas operacionais existentes, como o DOS e, portanto, era denominada "CBIOS" (para BIOS de Compatibilidade), enquanto o "ABIOS" (para BIOS Avançado) fornecia novas interfaces especificamente adequadas para sistemas operacionais multitarefa como o OS/2.
Funcionamento
Entre outras funções o papel mais importante do BIOS é o carregamento do sistema operacional. Quando o computador é ligado e o microprocessador tenta executar sua primeira instrução, e ele tem que obtê-la de algum lugar. Não é possível obter essa instrução do sistema operacional, pois esse se localiza no disco rígido, e o microprocessador não pode se comunicar com ele sem que algumas instruções o digam como fazê-lo. É o BIOS o responsável por fornecer essas instruções.
Sequência de funcionamento
Quando o computador é ligado, o BIOS opera na seguinte sequência:
-
Verifica as informações armazenadas em uma minúscula memória RAM, que se localiza em um chip fabricado com tecnologia CMOS. A memória CMOS armazena informações relativas a configuração de hardware, que podem ser alteradas de acordo as mudanças do sistema. Essas informações são usadas pelo BIOS para modificar ou complementar sua programação padrão, conforme necessário.
-
POST (Power-On Self-Test ou Autoteste de Partida), que são os diagnósticos e testes realizados nos componentes físicos (Disco rígido, processador, etc). Os problemas são comunicados ao usuário por uma combinação de sons (bipes) numa determinada sequência e se possível, exibidos na tela. O manual do fabricante permite a identificação do problema descrevendo a mensagem que cada sequência de sons representa.
-
Ativação de outros BIOS possivelmente presentes em dispositivos instalados no computador (ex. discos SCSI e placas de vídeo).
-
Descompactação para a memória principal. Os dados, armazenados numa forma compactada, são transferidos para a memória, e só aí descompactados. Isso é feito para evitar a perda de tempo na transferência dos dados.
-
Leitura dos dispositivos de armazenamento, cujos detalhes e ordem de inicialização são armazenados na CMOS. Se há um sistema operacional instalado no dispositivo, em seu primeiro sector (o Master Boot Record) estão as informações necessárias para o BIOS encontrá-la (este sector não deve exceder 512 bytes).
Existem pequenos trechos de softwares chamados de Manipuladores de Interrupção que atuam como tradutores entre os componentes de hardware e o sistema operacional. Um exemplo dessa tradução é quando é pressionada uma tecla no teclado, o evento associado ao sinal é enviado para o manipulador de interrupção do teclado que é enviado a CPU que trata e envia esse evento para o sistema operacional. Os drivers de dispositivos são outros trechos de software que identificam e atuam como interface entre os componentes básicos de hardware como o teclado, mouse, disco rígido.
Inicialização do Computador
Ao ligar o computador, o primeiro software que você vê a ser lido é o do BIOS. Durante a seqüência de inicialização (boot), o BIOS faz uma grande quantidade de operações para deixar o computador pronto a ser usado. Depois de verificar a configuração na CMOS e carregar os manipuladores de interrupção, o BIOS determina se a placa gráfica está operacional. Em seguida, o BIOS verifica se trata de uma primeira inicialização (cold boot) ou de uma reinicialização (reboot).
Esta verifica as portas PS/2 ou portas USB à procura de um teclado ou um rato (mouse). Procura igualmente por um barramento PCI (Peripheral Component Interconnect) e, caso encontre algum, verifica todas as placas PCI instaladas. Se o BIOS encontrar algum erro durante o início (POST), haverá uma notificação ao utilizador em forma de bipes e mensagens.
Após tudo isto são apresentados detalhes sobre o sistema:
-
Processador
-
Unidades (drives) de disco flexível e disco rígido
-
Memória
-
Versão e data do BIOS
Recursos
Na época do MS-DOS o BIOS atendia praticamente a todas as chamadas de entrada e saída E/S ou I/O (Input/Output) da máquina, atualmente a conexão é feita através da instalação de drivers e é por meio desses drivers que os sistemas operacionais tem contato direto com os hardwares.
Na maioria dos BIOS é possível especificar em qual ordem os dispositivos de armazenamento devem ser carregados. Desta forma é possível, por exemplo, carregar uma distribuição do sistema operacional Linux que funciona diretamente do CD antes do sistema operacional instalado no HD (especificando que o CD deve ser verificado antes do HD).
Alguns BIOS também permitem a escolha entre diversos sistemas operacionais instalados, mas isto geralmente é feito com um software de terceiros (boot loader).
Atualização ou Upgrade
Na maioria das placas mãe modernas o BIOS pode ser atualizado, e os fabricantes disponibilizam arquivos para essa finalidade. A atualização pode resolver problemas de funcionamento de periféricos, ou mesmo erros da versão anterior do BIOS. A atualização altera três programas que estão dentro da memória ROM (BIOS, POST, Setup) e é uma operação de risco e requer muito cuidado para não haver danos na placa-mãe.
Há vários problemas que podem acontecer nas atualizações, alguns deles são: arquivos corrompidos, falta de informações para a solicitação do software correto, ou ainda a falta de energia elétrica. Se ocorrer algum problema o sistema poderá não iniciar, deixando a placa-mãe muitas vezes inoperante.
A atualização ou o upgrade do chip somente deve ser feito quando for realmente necessário.
Os principais fabricantes deste firmware são: American Megatrends (AMI), Award, General Software, Insyde Software, e Phoenix Technologies.
As BIOS geralmentes são de código fechado e isso pode causar alguns problemas para quem se preocupa com a segurança do computador ou quer trocar sua placa wifi para outra de marca diferente (que geralmente a BIOS bloqueia). Para isso, existe o projeto libreboot,[8] que permite a substituição de uma BIOS privativa por uma implementação de uma BIOS livre para alguns servidores, desktops e notebooks.
CMOS
BIOS de memória não-volátil, mais conhecido como ROM-CMOS, refere-se à memória na placa-mãe de um computador pessoal que contém o sistema BIOSBasic Input Output System, responsável pelas configurações básicas de entrada e saída, e às vezes, o código usado para inicializar o computador e carregar o sistema operacional. A memória não-volátil, historicamente, era denominada CMOS-ROM ou apenas CMOS porque tradicionalmente usava um chip de memória CMOS de baixo consumo (o Motorola MC146818 ou um de seus clones de alta capacidade), o qual era alimentado por uma pequena bateria quando a energia do sistema era desligada.
O termo permanece em uso corrente neste contexto, embora seja considerado equivocado. O BIOS não-volátil em computadores modernos pode ser armazenado em chips EEPROM ou de memória flash e não mais em CMOS. Nestes casos, a bateria de backup é usada para manter o chip do RTCsincronizado. A NVRAM normalmente possui uma capacidade de armazenamento de 512 bytes, a qual é suficiente para todas as configurações do BIOS.
Erros de verificação do CMOS
Quando inicializamos o computador ele executa o POST (Power On Self Test), que é um teste rápido que confere se o que está configurado no BIOS está fisicamente conectado ao computador.
Erros de verificação do CMOS ocorrem tipicamente se o programa POST do computador:
-
Encontrar um dispositivo que não está gravado no CMOS.
-
Não encontrar um dispositivo que está gravado no CMOS.
-
Encontrar um dispositivo que possua configurações diferentes daquelas que foram gravadas no CMOS.
-
Detectar um erro de soma do CMOS (checksum error).
Bateria do CMOS
Bateria-moeda tipo CR2032, a mais comum bateria de CMOS.
A memória e o relógio de tempo real são alimentados geralmente por uma bateria-moeda CR2032 de lítio. Estas baterias duram de dois a dez anos, dependendo do tipo de placa-mãe, temperatura ambiente e do tempo que o sistema ficou desligado, enquanto outros tipos comuns de baterias podem durar períodos significativamente maiores ou menores, tais como a CR2016, capaz de durar cerca de 40% a mais. Temperaturas mais altas e períodos maiores com o computador desligado diminuem a vida útil da bateria.
Ao substituir a bateria, a hora e data do sistema e as configurações do BIOS CMOS podem voltar aos seus valores-padrão. Isto pode ser evitado substituindo-se a bateria após o computador ter sido desligado por software (ou seja, sem desligar no botão de força), mas ainda conectado na tomada. Em placas-mãe ATX, isso irá fornecer 5V de energia stand-by mesmo com o computador aparentemente "desligado" e manterá a memória CMOS energizada.
Resetando as configurações do CMOS
Para acessar o BIOS Setup quando a máquina deixa de funcionar, ocasionalmente é necessário tomar uma atitude drástica. Em computadores antigos, com RAM alimentada por bateria, remover a bateria e dar um curto-circuito nos terminais da mesma durante alguns segundos resolvia o problema; em máquinas mais modernas, isso apenas reinicializa o RTC. Algumas placas-mães oferecem um jumper de reset de CMOS. Em outros casos, o chip EEPROM tem de ser dessoldado e os dados nele contidos têm de ser editados manualmente usando um programador.
Às vezes, basta aterrar a linha CLK ou DTA do barramento I²C da EEPROM no momento certo durante o boot; todavia, isso exige conhecimento preciso de soldagem de componentes em montagem superficial. Se a máquina permite fazer o boot mas não que se entre no BIOS Setup, pode ser tentado "danificar" deliberadamente a verificação de soma do CMOS, fazendo-se escritas diretas na área protegida da ROM CMOS através de um utilitário como o debug.exe, o que corromperá os dados. No próximo boot, o computador geralmente assume os valores-padrão de fábrica.
ESCD
ESCD ou Extended System Configuration Data é parte integrante do BIOS de memória não-volátil (mais conhecido como RAM-CMOS) na placa-mãe de um computador pessoal, onde é armazenada a informação sobre os dispositivos ISA "Ligar e Usar". É usado pelo BIOS para alocar recursos para dispositivos tais como placas de expansão.
O BIOS também atualiza o ESCD toda vez que a configuração do hardware muda, depois de decidir como realocar os recursos como IRQs e extensão dos mapas de memória. Depois do ESCD ter sido atualizado, a decisão não precisa ser tomada novamente, o que resulta numa inicialização mais rápida e sem conflitos até a próxima mudança na configuração do hardware.
Um ISA Configuration Utility (ICU) pode ser usado para atualizar o ESCD através duma interface BIOS PnP. O Gerenciador de Dispositivos do sistema operacional Microsoft Windows é um exemplo deste tipo de utilitário.
Dispositivo lógico programável
Um dispositivo lógico programável (Programmable logic device - PLD) é um componente electrónico utilizado para construir circuitos digitais.
Ao contrário de uma porta lógica, que tem uma função fixa, um PLD tem uma função indefinida quando do seu fabrico. Antes de se utilizar um PLD num circuito, este deve ser programado.
Usando a ROM como um PLD
Antes das PLD's serem inventadas, as memórias ROM foram utilizadas para várias funções lógicas combinatórias arbitrárias com um certo número de entradas. Consideramos uma ROM com m entradas (Linhas de endereço) e n saídas (Linhas de Dados). Quando usadas como memória, as ROM contêm {\displaystyle 2^{n}} palavras de n-Bits cada. Agora imagine que as entradas são ligadas não a um endereço M-Bits mas sim a M-sinais lógicos independentes. Teoricamente irão existir {\displaystyle 2^{m}} funções boleanas possíveis destes m sinais, mas a estrutura da ROM permite apenas n destas funções nos pinos de saída. A ROM torna-se equivalente a n de circuitos lógicos independentes, cada qual gerando um função das m entradas.
A vantagem em usar ROMs desta forma é que qualquer função concebível com m entradas pode aparecer em qualquer uma das n saídas, tornando o dispositivo lógico disponível para aplicações mais abrangentes. Também as PROMs (Rom programavel), EPROMs (PROM apagável)e as EEPROMs (PROM apagável eléctricamente) podem ser programadas utilizando um programador PROM comum sem requisitos especializados de Hardware e Software.
No entanto há algumas desvantagens:
-
Normalmente são mais lentas que os circuitos lógicos dedicados;
-
Não dão uma cobertura segura para transmissões lógicas assíncronas;
-
Consomem mais energia e devido a pequena fracção utilizada da sua capacidade levam uma ineficiência do espaço em uso.
Por si só não podem ser utilizadas para lógica sequencial, porque não contém flip-flops. Um registo TTL externo foi utilizado para projectos sequenciais tais como máquinas de estados.
EPROMs comuns, por exemplo 2716, continuam a ser utilizadas algumas vezes desta forma como passatempo de técnicos de circuitos electrónicos. Esta utilização algumas vezes é chamada de "PAL dos pobres".
Primórdios da lógica programável
Em 1970, a Texas Instruments desenvolveu um circuito integrado programável por máscara baseado na memória associativa da IBM. Este componente, o TMS2000 era programado alterando-se a camada de metal durante a fabricação. O TMS2000 tinha até 17 entradas e 18 saídas com 8 flip-flops JK como memória. A Texas criou o termo Programmable Logic Array (PLA) para este dispositivo.
Em 1973, a National Semiconductor introduziu um dispositivo PLA programável por máscara (DM7575) com 14 entradas e 8 saídas sem registradores de memória. Foi mais popular que o da Texas, mas o custo de fazer a máscara de metal limitou seu uso. Este dispositivo foi significativo porque era a base para o array lógico programável em campo (field programmable logic array) produzido pela Signetics em 1975, o 82S100. (A Intersil na realidade adiantou-se à Signetics mas o baixo aproveitamento arruinou seu dispositivo).
Em 1971, a General Electric (GE) estava desenvolvendo um dispositivo lógico programável baseado na nova tecnologia PROM . Este dispositivo experimental era melhor em relação ao ROM da IBM por permitir lógica multiníveis. A Intel tinha acabado de introduzir a PROM apagável por ultravioleta com gate flutuante e os pesquisadores da GE incorporaram esta tecnologia. O dispositivo da GE foi o primeiro PLD regravável, precedendo a EPLD da Altera por mais de uma década. A GE obteve muitas das primeiras patentes em dispositivos lógicos programáveis.
Em 1974 a GE fez um acordo com a Monolithic Memories para desenvolver um dispositivo lógico programável por máscara incorporando as inovações da GE. O dispositivo foi chamado 'Programmable Associative Logic Array' or PALA. O MMI5760 foi finalizado em 1976 e podia implementar circuitos multiníveis ou sequenciais de mais de 100 portas lógicas. O dispositivo era apoiado por ambiente de projeto da GE onde as equações booleanas eram convertidas em padrões para a máscara do dispositivo. Este componente nunca chegou a ser comercializado.
PAL - (Matriz lógica programável)
A MMI introduziu um dispositivo em 1978. A arquitetura era mais simples que o FPLA Signetics porque omitia a matriz programável OR. Isto tornava os componentes mais rápidos, menores e mais baratos. Estavam disponíveis em encapsulamento DIP de 20 pinos 300mil enquanto que as FPLA vinham em encapsulamentos de 28 pinos 600mil. O manual da PAL desmistifica o processo de construção. O software de design PALSM converte equações booleanas de engenharia em padrões fusiveis necessários para programar o componente. Os componentes PAL rapidamente foram produzidos por National Semiconductors, Texas Instruments e AMD. Após a MMI ter êxito com a PALs de 20 pinos, a AMD introduziu a PAL de 24 pinos 22V10 com funcionalidades adicionais. Após comprar MMI EM 1987, a AMD consolidou a operação com Vantis, e este negócio foi comprado por Lattice Semiconductor em 1989.
GALs (generic array logic)
Uma invasão das PAL foi a GAL inventada pela Lattice semiconductor em 1985. Este componente tem as mesmas propriedades lógicas das PAL mas podem ser apagadas e reprogramadas. A GAL é muito útil no estágio de prototipagem de um projecto, quando alguns erros lógicos podem ser corridos pela reprogramação. As GAL podem ser programadas e reprogramadas usando um programador PAL ou usando uma técnica de um circuito embutido em alguns chips.
Um componente similar, o PEEL (programmable electrically erasable logic), foi produzido pela ICT (International CMOS Technology)
CPLDs
As PALs e GALs estão disponíveis somente em tamanhos pequenos, equivalentes a algumas centenas de portas lógicas. Para circuitos lógicos maiores pode-se usar Complex PLD ou CPLDs. Este contém o equivalente a muitas PALs ligadas por interconexão programadas, tudo num circuito integrado. Os CPLDs podem substituir milhares ou até centenas de milhares portas lógicas. Algumas CPLDs são programadas usando o programador PAL, mas este método torna-se inconveniente para dispositivos com centenas de pinos. O segundo método de programação é soldar o componente à sua placa de circuito impresso, e depois ligar um cabo de série de dados ao PC.
O CPLD contém um circuito que descodifica os dados e configura-o para realizar a função lógica específica. Cada fabricante tem um nome proprietário para este sistema de programação. Por exemplo, a Lattice Semicondutor chama-lhe "programação in-system". No entanto este sistema proprietário começa a abrir caminho para uma normalização através da Joint Test Action Group (JTAG).
FPGA (field programmable gate array)
Enqunto as PAL's se foram desenvolvendo para GAL's e CPLD's, uma linha de desenvolvimento separado ocorreu. Este tipo de componente é baseado na tecnologia gate array (porta matriz) e é chamado de field programmable gate array (FPGA). Os primeiros exemplos de FPGA's foram a matriz 82s100 e a sequela 82s105 produzido pela Signetics nos finais de 1970. O 82s100 foi uma matriz de termos AND. O 82s105 também tinha funções flip-flop.
O FPGA usa uma rede de portas lógicas, semelhante a uma matriz gate ordinário, mas cuja programação é feita pelo cliente e não pelo fabricante. O termo "campo programavel" pode ser estranho para alguns, mas "campo" é apenas um termo da engenharia utilizada para indicar o mundo de fora da fabrica, onde vivem os clientes.
FPGA's são normalmente programadas depois de terem sido soldadas a placa de circuito, de forma semelhante aos CPLD's maiores. Nos FPGA's grandes a configuração é volatil, e tem que ser recarregada no componente quando lhe é aplicada energia eléctrica ou diferentes funcionalidades são requeridas. A configuração é normalmente guardada numa configuração PROM EEPROM são programáveis embutidamente (tipicamente por JTAG).
FPGA's e CPLD's oferecem boas escolhas para tarefas particulares. Algumas vezes a decisão é mais económica do que técnica, ou pode depender da experiência ou preferência pessoal do engenheiro.
Outros tipos de PLDs[editar | editar código-fonte]
Atualmente há muito interesse nos sistemas reconfiguráveis. Há circuitos microprocessadores que contêm algumas funções predefinidas e outras e outras funções que podem ser alteradas pelo código que corre no processador. Projectar sistemas autoconfiguráveis exige uma aprendizagem por parte dos engenheiros de novos métodos, e provavelmente requererá o desenvolvimento de novas ferramentas de software. As PLDs vendidas actualmente contêm um microprocessador com uma função fixa, (chamada core) envolvida por lógica programável. Estes componentes permitem ao projetista concentrar-se em novas funcionalidades do seu projeto, sem se preocupar como funciona o microprocessador.
Como a PLD guarda a configuração[editar | editar código-fonte]
Um PLD é uma combinação de dispositivos lógicos e de memória. A memória é usada para guardar o padrão que é dado ao chip durante a programação. Muitos dos métodos para armazenar dados no circuito integrado foram adaptados para serem usados em PLDs. Isto inclui:
-
Antifusíveis de Silício
-
SRAM
-
Células EPROM, EEPROM
-
Memória Flash
Antifusíveis de Silicio são elementos de armazenamento na PAL, o 1º tipo de PLD. Estas conexões são criadas aplicando uma tensão eléctricas ao longo da área de silício modificada,dentro do chip. São Chamados antifusíveis porque trabalham de forma contrária aos fusíveis normais que começam a funcionar até serem quebrados pela corrente eléctrica.
SRAM ou Static RAM é um tipo de memória volátil ou seja o seu conteúdo perde-se quando se desliga a energia electríca. PLDs baseadas em SRAM tem que ser programadas cada vez que a energia é ligada isto normalmente é feito por outra parte do circuito. Uma célula EPROM é um transistor MOS (semicondutor de óxido metálico) que pode ser comutada por uma carga eléctrica permanente aplicada no seu eléctrodo 'gate'. Isto é feito por um programador PAL expondo o chip a fortes doses de raios ultravioleta por um dispositivo chamado apagador EPROM. Uma memória FLASH é não-volátil, retendo a informação mesmo que a energia eléctrica seja desligada. Pode ser apagada e reprogramada sempre que quisermos.Isto torna-se útil para memória PLD. Em 2005, a memória das CPLD'S eram electricamente programável e apagáveis e não voláteis. Pelo fato de serem muito pequenas não justificam a configuração interna das células SRAM. Cada vez que arrancam, as células EPROM são mais caras devido ao seu invólucro de cerâmica com uma janela de quartzo.
Linguagens de programação[editar | editar código-fonte]
Muitos dispositivos programáveis PAL,aceitam na entrada um formato de ficheiro comum, normalmente conhecido por "ficheiro JEDEC". Para assistir na criação desde ficheiros,foram criados programas de computador, especiais, chamados compiladores lógicos, Estes são análogos aos computadores de Software. as linguagens utilizadas como código fonte para compiladores lógicos, são chamados linguagens de descrição de hardware ou HDLs.
PALASM e ABEL são muito usados para componentes pouco complexos enquanto verilog e VHDL são linguagens populares para PLDs mais complexos.
Sendo mais limitado o ABEL é ainda usado por razões históricas, mas para novos projetos, mesmo de baixa complexidade, a VHDL é mais popular.
Linguagem de descrição de hardware
Em eletrônica, uma linguagem de descrição de hardware ou LDH é qualquer linguagem de uma classe de linguagens de computador, linguagem de especificação ou linguagem de modelagem para uma descrição formal e design de circuitos eletrônicos, e mais comumente, a lógica digital. Pode descrever o funcionamento do circuito, a sua concepção e organização, e ainda testá-lo para verificar seu funcionamento por meio de simulação. LDHs são padrões de expressões baseados em texto, da estrutura espacial, temporal e comportamental dos sistemas eletrônicos.
Como outras linguagens de programação, LDHs incluem anotações explícitas para expressar a simultaneidade bem como sintaxe e semântica próprias. No entanto, em contraste com a maioria dos softwares de linguagem de programação, LDHs também incluem uma noção implícita de tempo, como um atributo primário de hardware. Linguagem cuja única característica é a de expressar a conectividade do circuito entre uma hierarquia de blocos que estão adequadamente classificadas como uma linguagem netlist utilizada no computer-aided design (CAD).
LDHs são usados para escrever especificações executáveis de algum pedaço de hardware. Um programa de simulação, concebido para implementar a semântica subjacente das declarações de linguagem, juntamente com o progresso da simulação de time, fornece o designer de hardware com a capacidade de modelar uma peça de hardware antes de ser criado fisicamente. É isso que dá executabilidade na LDH a ilusão de serem linguagens de programação, quando eles são mais precisamente, classificados como linguagens de especificação ou linguagens de modelagem.
Simuladores capaz de suportar eventos discretos (digital) e de time contínuo (analógico) na modelagem existente, e LDHs direcionados para cada uma que esta disponível. É certamente possível representar a semântica hardware utilizando linguagens de programação tradicionais, como C + +, embora a função de tais programas devem ser aumentados com bibliotecas de classe extensa e de difícil manejo. No entanto, linguagens de programação de software não incluem qualquer capacidade de expressar explicitamente time, e é por isso que eles não funcionam como uma linguagem de descrição de hardware.
Antes da introdução recente de SystemVerilog, C + + integrado com um simulador de lógica era uma das poucas maneiras de usar OOP na verificação de hardware. SystemVerilog é uma LDHs importante para oferecer orientação a objetos e garbage collection. Usando o subconjunto próprio de praticamente qualquer linguagem (descrição de hardware ou software de programação), um programa chamado de sintetizador (ou ferramenta de síntese) pode-se inferir operações lógicas de hardware a partir das declarações de linguagem e produzir um netlist equivalente de hardware genérico primitivo para implementar o comportamento especificado.
Sintetizadores geralmente ignoram a expressão de qualquer timing construído no texto. Sintetizadores de lógica digital, por exemplo, geralmente usa a banda do time como caminho para o time do circuito, ignorando quaisquer construções de timing. A capacidade de ter um subconjunto sintetizado da linguagem não quer dizer q seja uma linguagem de descrição de hardware.
História
As primeiras linguagens de descrição de hardware foram ISP (Processador de Conjunto de Instruções), [2] desenvolvido na Carnegie Mellon University, e KARL, desenvolvido na Universidade de Kaiserslautern, ambos por volta de 1977. ISP, entretanto, foi mais como uma linguagem de programação de software usado para descrever as relações entre as entradas e as saídas do projeto. Portanto, ela poderia ser usada para simular o design, mas não para sintetizá-lo.
KARL a inclusão de características de design de linguagem cálculo apoio VLSI floorplanning chip e hardware design estruturado, que foi também a base da ABL KARL da linguagem gráfica interativa irmã, implementado no início de 1980 como o editor de design gráfico VLSI abled, pelas telecomunicações centro de pesquisa CSELT em Torino, Itália. Em meados dos anos 1980, um quadro design VLSI foi implementado em torno KARL ABL e por um consórcio internacional financiado pela Comissão da União Europeia (capítulo em [3]). Em 1983 Data-I / O introduziram ABEL. Foi alvo para descrever dispositivos lógicos programáveis e foi basicamente usado para projetar máquinas de estado finito.
O primeiro LDH moderno, Verilog, foi apresentado pelo Gateway Design Automation em 1985. Cadence Design Systems mais tarde adquiriu os direitos para Verilog-XL, o LDH-simulador que se tornaria o padrão de-facto (de simuladores de Verilog) para a próxima década. Em 1987, um pedido do Departamento de Defesa dos EUA, levou ao desenvolvimento de VHDL (Linguagem de Descrição de Hardware VHSIC, onde VHSIC é Very High Speed Integrated Circuit).
VHDL foi baseada na linguagem de programação Ada. Inicialmente, Verilog e VHDL foram usadas para documentar e simular projetos de circuitos já capturado e descrito de outra forma (como um arquivo de esquema.) LDH-simulação habilitam engenheiros a trabalhar em um nível maior de abstração do que a simulação no nível de esquema, e assim aumentou a capacidade de design de centenas de transistores para milhares [ carece de fontes? ].
A introdução da lógica de síntese para LDHs empurrou a LDHs do fundo para o primeiro plano de design digital. Ferramentas de síntese compilada LDH-source files (escrito em um formato limitado chamado RTL) em uma descrição netlist manufacturable gate / transistor-level. Gravação de arquivos RTL sintetizados requer prática e disciplina por parte do designer; comparado a um esquema tradicional layout, sintetizado-RTL netlists eram quase sempre maior em área e mais lento em desempenho [ carece de fontes? ].
O design do circuito feito por um engenheiro qualificado, utilizando mão de obra intensiva schematic-capture/hand-layout, quase sempre superam o seu equivalente logicamente sintetizado, mas vantagem na produtividade da síntese rapidamente deslocado a captura digital esquemática exatamente nas áreas que eram problemáticas para síntese-RTL-: extremamente alta velocidade, baixo consumo de energia, ou circuitos assíncronos. Em resumo, a síntese lógica impulsiona a tecnologia LDH em um papel central para o desenho digital.
Dentro de alguns anos, tanto VHDL e Verilog emergiu como o LDHs dominante na indústria de eletrônicos, enquanto LDHs mais velhos e menos capazes gradualmente desapareceu de uso. Mas VHDL e Verilog compartilham muitas das mesmas limitações: nem HDL é adequado para analógico / circuito de sinal misto de simulação. Não possui construções de linguagem para descrever estruturas lógica gerada recursivamente. LDHs especializados (como Confluence) foram introduzidas com o objetivo explícito de fixação de um limite Verilog / VHDL específicos, embora nenhum deles nunca foram destinados a substituir VHDL / Verilog.
Ao longo dos anos, muito esforço foi canalizado para melhorar LDHs. A mais recente iteração do Verilog, formalmente conhecido como IEEE 1800-2005 SystemVerilog, introduz muitos novos recursos (classes, variáveis aleatórias e propriedades / afirmações) para abordar a crescente necessidade de melhor randomização testbench, hierarquia, design e reutilização. A futura revisão do VHDL também está em desenvolvimento, e é esperado para coincidir com melhorias SystemVerilog.
Design utilizando LDH
Ganhos de eficiências são realizados utilizando a LDH isso significa que a maioria do design de circuito digital moderno gira em torno dele. As maiorias dos projetos começam como um conjunto de requisitos ou um diagrama de alto nível arquitetônico. Estruturas de controle e decisão são muitas vezes protótipo em aplicações de fluxograma, ou inserido em um editor do diagrama de estado.
O processo de escrever a descrição do LDH é altamente dependente da natureza do circuito e da preferência do estilo de codificação do designer. O LDH é apenas a captura da "linguagem", muitas vezes começando com uma descrição de alto nível, tais como algoritmos MATLAB ou C + + modelo matemático. Designers costumam usar linguagens de script (como Perl) para gerar automaticamente estruturas de circuito repetitivo na linguagem LDH.
Editores de texto especiais oferecem recursos para o recuo automático, sintaxe dependentes de coloração, e baseado em macro expansão da entidade/arquitetura. /sinal de declaração. O código de LDH, em seguida, passa por uma revisão de código ou de auditoria. Em preparação para a síntese, a descrição LDH está sujeita a um conjunto de peças automatizadas. Os relatórios do verificadores desviam das diretrizes do código padronizado, identificar potenciais construções de códigos ambíguos antes que possam causar má interpretação, e verificar se há erros de codificação de lógica comum, tais como portas pendentes ou saídas de curto-circuito.
Este processo ajuda na resolução de erros antes que o código seja sintetizado. No jargão do setor, design LDH geralmente termina na fase de síntese. Uma vez que a ferramenta de síntese mapeou a descrição da LDH em uma porta netlist, este netlist é passado de netlist off para a fase de back-end. Dependendo da tecnologia física (FPGA, ASIC gate array, ASIC células standard), LDHs podem ou não desempenhar um papel significativo no fluxo de back-end. Em geral, como o fluxo de projeto progride para uma forma física de realização, o banco de dados de design se torna progressivamente mais carregado de tecnologia de informações específicas, que não podem ser armazenados em uma descrição LDH genérica. Finalmente, um circuito integrado é fabricado ou programado para o uso.
Simulação e depuração do código LDH
Essencial para a concepção de LDH é a capacidade de simular programas de LDH. Simulação permite uma descrição de um projeto (chamado de modelo) para passar uma verificação do projeto, um marco importante que válida à função pretendida pelo design (especificação) contra a implementação do código na descrição do LDH. Também as licenças de exploração de arquitetura.
O engenheiro pode experimentar com opções de design, escrevendo diversas variações de um projeto base, em seguida, comparando seu comportamento em simulação. Assim, a simulação é fundamental para o sucesso de design de LDH. Para simular um modelo de LDH, um engenheiro escreve um ambiente de simulação de alto nível (chamado de testbench). No mínimo, um testbench contém uma instanciação do modelo (chamado o dispositivo em teste ou DUT), pino / declarações sinal para o modelo I / O, e uma forma de onda de time.
O código testbench é orientado a eventos: o engenheiro escreve declarações de LDH para implementar a (testbench gerados) sinal-reset, para operações de interface modelo (como um host bus - leitura / escrita), e para monitorar a saída do DUT. Um simulador de LDH - o programa que executa o testbench - mantém o time do simulador, que é a referência principal para todos os eventos na simulação testbench. Eventos ocorrem apenas nos instantes ditados pelo testbench de LDH (como um reset-toggle codificado no testbench), ou em reação (pelo modelo) a estímulos e eventos desencadeantes.
Simuladores de LDH modernos têm um full-featured interface gráfica completa, com um conjunto de ferramentas de depuração. Estas permitem que o usuário pare e reinicie a simulação a qualquer momento, inserindo um simulador de breakpoints (independente do código LDH), e monitora ou modifica qualquer elemento na hierarquia do modelo LDH. Simuladores modernos também podem vincular o meio ambiente para o usuário de LDH – bibliotecas compiladas, através de um definido PLI / VHPIinterface. Vinculação é dependente do sistema (Win32 / Linux / SPARC), como o simulador de LDH e bibliotecas do usuário são compiladas e ligadas fora do ambiente de LDH.
Verificação do projeto muitas vezes é a parte mais demorada do processo de design, devido à falta de conexão entre um dispositivo de especificação funcional, a interpretação do designer da especificação, e a imprecisão [carece de fontes? ] da linguagem LDH. A maioria do ciclo de ensaio / debug inicial é realizada no ambiente de simulador de LDH, como a fase inicial do projeto está sujeito a mudanças frequentes e importantes do circuito. Uma descrição de LDH também pode ser um protótipo e testado em hardware - dispositivos lógicos programáveis são muitas vezes utilizados para este fim. Protótipo de hardware é relativamente mais caro do que a simulação LDH, mas oferece uma visão real do mundo do design. Prototipagem é a melhor maneira de verificar a interface contra outros dispositivos de hardware e protótipos de hardware. Mesmo aqueles em execução em FPGAs lenta oferecem tempos de simulação muito mais rápido do que a simulação LDH pura.
Verificação de design com LDH
agua Historicamente, verificação de design foi fatigante, laços repetitivos de escrita e execução de testes de simulação contra o projeto em teste. Como designs de chips cresceram de forma complexa, a tarefa de verificação do projeto tem crescido ao ponto em que agora domina o agendamento de uma equipe de design. Procurando maneiras de melhorar a produtividade de design, o EDA indústria que desenvolveu a propriedade Language Specification. Nos termos da verificação formal, uma propriedade é uma afirmação factual sobre o comportamento esperado ou assumido de outro objeto.
O ideal, para uma descrição LDH, dada uma propriedade ou propriedades podem ser provadas verdadeiras ou falsas usando métodos matemáticos formais. Em termos práticos, muitas propriedades não podem ser provadas porque ocupam um espaço de solução ilimitada. No entanto, se fornecido um conjunto de premissas operacionais ou restrições, um verificador de propriedade pode provar (ou refutar) mais propriedades, sobre um estreito espaço de solução.
As afirmações não fazem atividade no circuito modelo, mas capturam e documentam a "intenção do designer" no código LDH. Em um ambiente de simulação, o simulador avalia todas as afirmações especificadas, informando a localização e a gravidade de eventuais violações. Em um ambiente de síntese, a ferramenta de síntese normalmente opera com a política de travar síntese sobre qualquer violação. Afirmação de verificação baseada está ainda no começo, mas deverá tornar-se parte integrante do conjunto de ferramentas de design de LDH.
LDH e linguagens de programação
A LDH é análoga a um software de linguagem de programação, mas com grandes diferenças. Muitas linguagens de programação são inerentemente processuais (single-threaded), com apoio sintático e semântico limitada para lidar com a concorrência. LDHs, por outro lado, se assemelham a programação concorrente, linguagem na sua capacidade de modelar vários processos paralelos (como flipflops, somadores, etc.) que automaticamente execute independentemente um do outro.
Qualquer alteração para introduzir o processo automaticamente é disparada uma atualização na pilha do simulador de processo. Ambas as linguagens de programação e LDHs são processados por um compilador (normalmente chamado de um sintetizador no caso LDH), mas com objetivos diferentes. Para LDHs, 'compilador' refere-se à síntese, um processo de transformação da listagem de código LDH em uma porta netlist fisicamente realizável. A saída netlist pode tomar qualquer das muitas formas: uma "simulação" netlist com porta de atraso de informação, um "handoff" netlist para pós-síntese local e rota, ou um formato genérico padrão da indústria EDIF (para posterior conversão em um JEDEC - formato de arquivo). Por outro lado, um compilador de software converte a listagem do código-fonte em um microprocessador específico código-objeto, para execução no microprocessador alvo.
Como LDHs e linguagens de programação emprestando conceitos e características um para o outro, o limite entre eles está se tornando menos distinto. No entanto, LDHs pura são inadequados para o desenvolvimento de aplicações de propósitos gerais propósito, assim como linguagens de programação de propósito geral são indesejáveis para o hardware de modelagem.
No entanto, como sistemas eletrônicos crescem cada vez mais complexos, e sistemas reconfiguráveis tornado cada vez mais mainstream, há um crescente desejo na indústria para uma única linguagem que execute algumas tarefas de ambos os projetos de hardware e software de programação. SystemC é um exemplo desse tipo de embutido, o hardware do sistema pode ser modelado como blocos não detalhados de arquitetura (blackboxes com entradas de sinal modelado e drivers de saída). O aplicativo de destino é escrito em C / C + + e compilados nativamente para o sistema host-desenvolvimento (em oposição à segmentação do CPU embutida, o que exige host de simulação do CPU incorporado).
O alto nível de abstração de modelos SystemC é bem adequado para o início da exploração da arquitetura, como modificações arquitetônicas pode ser facilmente avaliada com pouca preocupação com questões de nível de sinal-implementação. No entanto, o modelo de segmentação usado em SystemC e sua dependência de memória compartilhada significam que ele não controla a execução paralela ou modelos de nível mais baixo também.
Em uma tentativa de reduzir a complexidade do projeto em LDHs, que foram comparados com o equivalente de linguagens assembly, há movimentos para elevar o nível de abstração do design. Empresas como a Cadence, Synopsys e Design Solutions está promovendo agilidade SystemC como uma maneira de combinar linguagens de alto nível com os modelos de concorrência para permitir ciclos mais rápidos de projeto para FPGAs do que é possível utilizando LDHs tradicionais.
Abordagens baseadas em padrão C ou C + + (com bibliotecas ou outras extensões permitindo programação paralela) são encontrados na C Catapult ferramentas da Mentor Graphics, o Impulse C ferramentas de Tecnologias Impulse acelerada, e open-source ROCCC 2,0 ferramentas de Jacquard Computing inc. Annapolis Micro Systems, Inc. 's Suite Design CoreFire e National Instruments LabVIEW FPGA fornecer uma interface gráfica de fluxo de dados para abordagem de alto nível de entrada de design.
Linguagens como SystemVerilog, SystemVHDL e Handel-C procuram atingir o mesmo objetivo, mas visam fazer com que os mais produtivos engenheiros de hardware existentes contra os engenheiros de software fazendo FPGAs mais acessíveis. Não há mais informações sobre C para LDH e Fluxo de LDH em seus respectivos artigos.
