Verilog

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa
Question book.svg
Este artigo não cita fontes confiáveis e independentes. (desde janeiro de 2013). Por favor, adicione referências e insira-as corretamente no texto ou no rodapé. Conteúdo sem fontes poderá ser removido.
Encontre fontes: Google (notícias, livros e acadêmico)
Ambox rewrite.svg
Esta página precisa ser reciclada de acordo com o livro de estilo (desde Fevereiro de 2008).
Sinta-se livre para editá-la para que esta possa atingir um nível de qualidade superior.
Ambox grammar.svg
Esta página ou secção precisa de correção ortográfico-gramatical.
Pode conter incorreções textuais, podendo ainda necessitar de melhoria em termos de vocabulário ou coesão, para atingir um nível de qualidade superior conforme o livro de estilo da Wikipédia. Se tem conhecimentos linguísticos, sinta-se à vontade para ajudar.

Verilog, cuja padronização atual é a IEEE 1364-2005, é uma linguagem de descrição de hardware (Hardware Description Language - HDL) usada para modelar sistemas eletrônicos. Essa ferramenta suporta o projeto, verificação e implementação de projetos analógicos, digitais e híbridos em vários níveis de abstração. Com placas especiais é possível descarregar o código gerado nessa linguagem em matrizes de portas denominadas FPGA's (field programmable gate array ou matriz de portas programáveis). Essas placas são constituídas por milhares de transistores e fazem basicamente o mesmo que vários circuitos integrados, com a diferença de que a matriz é reprogramável.

História[editar | editar código-fonte]

Início[editar | editar código-fonte]

Verilog foi uma das primeiras linguagens para descrição de hardware (HDL) a ser inventada. Criada por Prabhu Goel e Phil Moorby, durante o inverno de 1983/1984, para a Automated Integrated Design Systems (mais tarde Gateway Design Automation, em 1985). A empresa Gateway Design Automation foi comprada pela Cadence Design Systems em 1990, que passou a ser a detentora dos direitos sobre as linguagens Verilog e Verilog-XL, que se tornaria um padrão na década seguinte. Originalmente, a linguagem tinha por objetivo descrever e permitir simulações; mais tarde, também lhe foi acrescentada a síntese de circuitos.

Verilog-95[editar | editar código-fonte]

Diante do crescente sucesso da linguagem VHDL na época, a empresa Cadence decidiu tornar a linguagem aberta para padronização, transferindo-a para domínio público subordinada à Open Verilog International (OVI) (atualmente Accellera). Mais tarde submetida ao IEEE, tornou-se padrão segundo o IEEE Standard 1364-1995, comumente chamado de Verilog-95.

Ao mesmo tempo, a empresa Cadence iniciou a criação de Verilog-A para estender a padronização para o seu simulador analógico Spectre. Verilog-A não tornaria um subconjunto de Verilog-AMS incorporada pelo Verilog-95.

Verilog 2001[editar | editar código-fonte]

Extensões ao Verilog-95 foram submetidas ao IEEE para cobrir deficiências que os usuários encontraram no padrão original. Essas extensões se tornaram o padrão IEEE Standard 1364-2001, também conhecido como Verilog-2001.

Verilog-2001 foi um importante avanço em relação ao Verilog-95. Primeiro, por adicionar suporte explícito (complemento de 2) às redes e variáveis com sinais. Anteriormente, operações com sinais precisavam usar manipulações ao nível de bits (por exemplo, para lidar com o “vai-um” de uma simples adição de 8-bits requeria-se uma descrição explícita em álgebra de Boole para se determinar o valor correto). A mesma função em Verilog-2001 podia ser descrita de forma sucinta mediante uso de operadores nativos: +, -, /, *, >>>. Um mecanismo semelhante ao generate/endgenerate do VHDL, permitia ao Verilog-2001 controlar instâncias e comandos para instanciações através de operadores comuns de decisão(case/if/else), podendo até mesmo instanciar arranjos de instâncias, com controle sobre a conectividade individual de cada uma. Entradas e saídas com arquivos foram aprimoradas para diversas novas tarefas. Além disso, foram introduzidas algumas alterações à sintaxe para aperfeiçoar a legibilidade de código (como por exemplo always @*, chamadas de parâmetros e definições de assinaturas semelhantes ao estilo da linguagem C para funções/tarefas/módulos).

Verilog-2001 tornou-se a versão dominante de Verilog com suporte da maioria dos pacotes de software comerciais para a automação de projetos eletrônicos EDA.

Verilog 2005[editar | editar código-fonte]

Verilog 2005 (IEEE Standard 1364-2005) veio a ser uma atualização do padrão anterior, incluindo pequenas correções, esclarencendo especificações, e introduzindo novas características à linguagem (como a palavra-chave “uwire”).

Em separado, uma parte do padrão Verilog Verilog-AMS, procurou integrar o modelamento de sinais analógicos e híbridos à linguagem tradicional.

SystemVerilog[editar | editar código-fonte]

SystemVerilog é um superconjunto de Verilog-2005, com novas características e capacidades para auxiliar o projeto e a sua verificação.

O advento de outras linguagens orientadas para verificação como OpenVera e Verisity estimularam o desenvolvimento de Superlog pela empresa Co-Design Automation Inc, mais tarde adquirida pela Synopsys. As contribuições de Superlog and Vera doadas pela Accellera, posteriormente seriam incorporadas ao padrão IEEE Standard P1800-2005: SystemVerilog.

A partir de 2009, SystemVerilog e a linguagem Verilog fundiram-se no padrão SystemVerilog 2009 (IEEE Standard 1800-2009).

Sintaxe[editar | editar código-fonte]

Os autores dessa linguagem definiram sua sintaxe bem familiar à sintaxe da linguagem de programação C. Estruturas de controle de fluxo como "if" , "while" são facilmente encontradas em qualquer código Verilog. A diferença básica entre o Verilog e a linguagem C se encontra na estruturação do código. A Verilog é estruturada em blocos “begin/end”, se caracterizando em uma linguagem modular e a linguagem C segue o paradigma procedural.

Paralelismo temporal[editar | editar código-fonte]

A linguagem Verilog, as vezes chamada de Verilog HDL, difere das outras pela maneira como é executada. Ela não segue os padrões lineares que as demais linguagens usam. Um projeto Verilog consiste na separação hierárquica de módulos que contém conexões e registradores. Processos seqüenciais e paralelos definem o comportamento dos módulos. Processos seqüenciais são executados dentro de blocos "begin/end". Os demais processos são executados de forma paralela, englobando assim os blocos “begin/end”, ou seja, o interior de um bloco “begin/end” é seqüencial mas dois blocos são paralelos [8]. Este tipo de paralelismo é amplamente explorado em hardware e com a chegada de processadores com vários núcleos ao mercado abre novos campos de pesquisa.

Compilação[editar | editar código-fonte]

Como verilog é uma linguagem de descrição de hardware sua simulação por softwares não é muito apropriada mas fundamental para testes e ajustes no código. Um compilador que se destaca muito no mercado é o Icarus Verilog. A simulação do verilog acontece de forma parecida com Java. Primeiro o código é compilado e depois interpretado. A fase de compilação é dividida em cinco partes: 1. Pré-processamento: Faz a inclusão de arquivo (“include”) e substituição de macros. 2. Parser: Checa a sintaxe e semântica do código. 3. Elaboração: É analisada e gerado dezenas de listas da hierarquia dos módulos no código. 4. Otimização: A lista de hierarquia é analisada e algumas mudanças são feitas para aumentar a eficiência da simulação. 5. Geração do código: Toda à informação do circuito é armazenada e cinco formatos são disponíveis para geração. O padrão é o formato VVP.

VVP (Verilog Virtual Processor)[editar | editar código-fonte]

O VVP é um interpretador do código assembly gerado pelo Icarus Verilog . Esse interpretador usa a lista hierárquica de módulos do código para dirigir a simulação em função do tempo. Em hardware é comum o controle dos dados por batidas de tempo (clock). A linguagem verilog define esse controle de forma que cada bloco seja executado x milissegundos após o outro. Somente na fase de interpretação que esse controle faz sentido uma vez que o sinal de entrada de uma porta pode não ser confiável antes dos x milissegundos.

Referências[editar | editar código-fonte]