# 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.

## Linguagens
### Projeto de circuitos analógicos

| Abreviatura | Nome | Uso |
| AHDL | Linguagem de descrição de hardware analógico | Uma linguagem de descrição de hardware analógico aberta |
| SpectreHDL | SpectreHDL | Uma linguagem proprietária de descrição de hardware analógico |
| Verilog-AMS | Exemplo | Um padrão aberto para estender Verilog analógicos e mistos de simulação analógico / digital |
| HDL-A$^{TM}$ | HDL-A | Uma linguagem proprietária de descrição de hardware analógico |

### Design de circuito digital

| Abreviação | Nome | Observação |
| ABEL | Advanced Boolean Expression Language | |
| AHDL | LDH Altera | uma linguagem proprietária da Altera |
| AHPL | Uma linguagem de programação de hardware | |
| Bluespec | | alto nível de LDH originalmente baseada em Haskell, agora com SystemVerilog |
| C-to-Verilog | | Conversor de C para Verilog |
| Confluence | | uma LDH funcional |
| CoWareC | | um LDH C baseado no CoWare. agora descontinuado em favor do SystemC |
| CUPL | | uma linguagem proprietária da Logical Devices, Inc. |
| ELLA | | não utilizada mais) |
| Handel-C | | uma linguagem de design C-like |
| HJJ | Hardware Join Java | baseado emJoin Java |
| HML | | baseado em SML |
| Hydra | | baseado em Haskell |
| Impulse C | outra C-like LDH |
| ParC | Parallel C++ | C + + estendida com HDL estilo threading e comunicação para a tarefa de programação paralela |
| JHDL | | baseado em Java |
| Lava | | baseado em Haskell |
| Lola | | uma linguagem simples utilizada para o ensino |
| M | | ALDH da Mentor Graphics |
| MyHDL | | baseado em Python |
| PALASM | | para dispositivos Programmable Array Logic (PAL) |
| ROCCC 2.0 | Riverside Optimizing Compiler for Configurable Computing | C livre e open-source para a ferramenta de LDH |
| RHDL | | baseado na Ruby programming language |
| Ruby (hardware description language) | | |
| SystemC | | uma classe padrão de C + + bibliotecas de alto nível comportamental e modelagem de transações de hardware digital em um alto nível de abstração, ou seja, em nível de sistema |
| SystemVerilog | | um superconjunto de Verilog, com melhorias para atender ao nível do sistema design e verificação |
| SystemTCL | | SDL baseada em Tcl. |
| Verilog | | LDH mais amplamente utilizada e bem suportada |
| VHDL | VHSIC HDL | LDH mais amplamente utilizada e bem suportada |