LABORG Parte 1 – Introdução à Simulação em VHDL Ney Laert Vilar Calazans 24/agosto/2009 Introdução • VHDL: Uma linguagem para descrever sistemas digitais • Outras linguagens de descrição de hardware – SystemC, VERILOG, Handel-C, SDL, ISP, Esterel, … (existem dezenas) • Originalmente especificar hardware; hoje simulação e síntese! • Origem – Linguagem para descrever hardware, no contexto do programa americano “Very High Speed Integrated Circuits” (VHSIC), iniciado em 1980. – VHDL VHSIC Hardware Description Language – Padrão IEEE em 1987 (Institute of Electrical and Electronics Engineers), revisado em 1993, 2000, 2002 e 2004 – Linguagem utilizada mundialmente por empresas de CAD (simulação, síntese, propriedade intelectual). Verilog muito usada nos EUA. Ney Calazans 2 Benefícios / Desvantagens • Benefícios (em relação a diagramas de esquemáticos) – Especificação do sistema digital: • Projetos independentes da tecnologia (implementação física é postergada) • Ferramentas de CAD compatíveis entre si • Flexibilidade: re-utilização, escolha de ferramentas e fornecedores • Facilidade de atualização dos projetos • Permite explorar, em um nível mais alto de abstração, diferentes alternativas de implementação • Permite, através de simulação, verificar o comportamento do sistema digital – Nível físico: • Reduz tempo de projeto (favorece níveis abstratos de projeto) • Reduz custo do projeto • Elimina erros de baixo nível (se usado como base de ferramentas automatizadas) • Conseqüência: reduz “time-to-market” (tempo de chegada de um produto ao mercado) • Desvantagens (em relação a diagramas de esquemáticos) – Hardware gerado pode ser menos otimizado – Controlabilidade / Observabilidade de projeto reduzidas Ney Calazans 3 VHDL é uma linguagem de programação? • • Resposta curta: Não, é uma linguagem de descrição de hardware! Código é executado em um simulador – • Projeto do usuário – • Não se enxerga o “compilador” de VHDL, não há um “código executável” visível Especificado tipicamente no nível de abstração de transferência em ter registradores (em inglês, Register – Transfer Level ou RTL), mas não apenas neste nível! Testbench: uma descrição em VHDL ou outra linguagem do procedimento de teste de um circuito – – – Especificação comportamental do ambiente externo ao projeto (estímulos externos) Interage com o projeto Não precisa ser descrito em VHDL (o projeto VHDL pode ser validado em ambiente C/C++!!) Estrutura Geral de um Testbench Geração de estímulos e Captura de saídas Circuito (RTL) Comparação Resultados Ney Calazans Resultados esperados 4 Sumário de Descrição de Hardware (1/2) • INTERFACE EXTERNA: entity – Especifica somente a interface entre o hardware e o ambiente – Não contém definição do comportamento ou da estrutura internos Esquemático: A B Tabela Verdade Sum Carry Código VHDL da entidade: A B Sum Carry 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 entity halfadd is port (A, B: in std_logic; Sum, Carry: out std_logic); end halfadd; Ney Calazans 5 Sumário de Descrição de Hardware (2/2) • COMPORTAMENTO : architecture – Especifica o comportamento e/ou a estrutura internos da entity – Deve ser associada a uma entity específica – Uma entity pode ter associada a si várias architecture (representando diferentes formas de implementar um mesmo módulo) Código VHDL da entidade: architecture comp of halfadd is begin Sum <= A xor B; Carry <= A and B; end comp; Ney Calazans 6 Descrição Completa do Somador library IEEE; use IEEE.Std_Logic_1164.all; entity halfadd is port (A, B: in std_logic; Sum, Carry: out std_logic); end halfadd; Esta biblioteca e pacote definem o tipo std_logic (que não é parte da linguagem VHDL!) architecture comp of halfadd is begin Sum <= A xor B; Carry <= A and B; end comp; Ney Calazans 7 Validação por Simulação • Uma forma simples de testar o projeto: testbenches – Na sua forma mais simples, um testbench contém um processo gerador de teste e uma instância do projeto – O testbench não contém portas de entrada/saída, é um sistema fechado ou autônomo. TESTBENCH Y A A Y Z B B Z GERADOR DE TESTE Ney Calazans PROJETO 8 Exemplo de Testbench para o Somador library ieee; use ieee.std_logic_1164.all; entity halfadd_tb is end halfadd_tb; Testador não tem pinos externos (ports in ou out) architecture TB_ARCHITECTURE of halfadd_tb is signal aa,bb,soma,vaium : std_logic; begin Nome do projeto (entidade) UUT : entity work.halfadd port map ( A => aa, B => bb, Sum => soma, Carry => vaium ); Instanciação do projeto, conectando pinos do projeto a fios do testador aa <= '0', '1' after 10 ns, '0' after 20 ns, '1' after 30 ns; bb <= '0', '1' after 20 ns; end TB_ARCHITECTURE; Ney Calazans Geração dos estímulos, dizendo como fios do testador se comportam 9 Usando o Simulador Active-HDL • Abrir o Active-HDL – Executar o comando Create New Workspace – Definir o nome do Workspace Ney Calazans 10 Usando o Simulador Active-HDL • Criar projeto vazio (Empty) • Dar Next na próxima janela (seleção de VHDL) • Definir o nome do Projeto dentro do Workspace Ney Calazans 11 Usando o Simulador Active-HDL • O próximo passo é colocar o VHDL no projeto: • Escolher a opção de menu File New VHDL source • Apenas selecionar um nome para o VHDL, usando no restante das janelas o botão Next. Uma janela é aberta com um template. Desta vez, selecionar todo o texto do template e o apagá-lo. • Agora, inserir o código das lâminas anteriores (Descrição do Somador e Descrição VHDL do Testbench) Ney Calazans 12 Usando o Simulador Active-HDL Compilar até não haver mais erros de sintaxe Ney Calazans 13 Usando o Simulador Active-HDL • Uma vez concluído o processo de compilação sem erros, inicializar a simulação: Ney Calazans 14 0. Certifique-se de escolher a aba Structure do Projeto 1. Abrir a hierarquia para visualizar o módulo que está sendo testado 2. Abrir uma janela de formas de onda 3. Definir o tempo de simulação: 40 ns 4. Selecionar e arrastar os sinais que se deseja verificar o comportamento desta janela para a janela de formas de onda Ney Calazans 15 Usando o Simulador Active-HDL Botão para disparar a execução Estes valores correspondem ao valor dos sinais no instante onde está o cursor vermelho!! Botões de Zoom da janela de simulação • O comportamento é o esperado? Explicar. Ney Calazans 16 Sinais de 1 Bit e Barramentos • std_logic fio e std_logic_vector vários fios (barramento) • Escrever um novo código utilizando sinais não de 1 bit mas de 4 bits std_logic_vector(3 downto 0). O efeito é transformar o meio somador de 1 bit em um somador de 4 bits • A entidade deve ser: entity soma is port (A, B: in std_logic_vector(3 downto 0); Soma: out std_logic_vector(3 downto 0) ); end soma; • O corpo da arquitetura deverá conter apenas “soma <= a + b;” • Incluir o uso da: use IEEE.std_logic_unsigned.all; (Porquê?) • Escrever o test bench correspondente e mostrar ao professor a simulação Ney Calazans 17 Dicas para uso do Simulador • Na versão atual do simulador, não se pode ter mais de um projeto (design) no mesmo workspace. Assim, o procedimento de criação do novo projeto pressupõe repetir a ação das transparências 10-12. • Se a licença do simulador permitir, pode-se ter: • File New Design Empty, com nome soma. No browser do simulador ter-se-á: Workspace criado no início da aula Projeto inicial Novo projeto Ney Calazans 18 Geração de Estímulos e Resultado Esperado • 4 bits podem ser representados como um único dígito em hexadecimal. No testbench pode-se escrever: – aa <= x"4", x"5" after 10 ns, x"A" after 20 ns, x"B" after 30 ns; – bb <= x"8", x"3" after 20 ns; – Ao simular este circuito, na simulação aparece algo como: (testar outros valores no seu testbench) • O comportamento é o esperado? Explicar. Ney Calazans 19 TRABALHO A FAZER • Implemente o circuito de seis portas lógicas abaixo em VHDL; • Crie um projeto com o simulador Active-HDL que contenha o par entidade-arquitetura correspondente a este circuito; • Crie um arquivo que instancie este circuito, que gere estímulos para todas suas 4 entradas e os aplique à instância, isto é, crie um testbench para o circuito. • Simule o testbench e descreva como o circuito funciona. Ney Calazans 20 A ENTREGAR • Os três projetos Active-HDL (somador de 1 bit, somador de 4 bits, diagrama de esquemáticos de portas lógicas) completos, contendo, para cada circuito: – – – – VHDL do circuito proposto; O testbench implementado; Instâncias de formas de onda geradas, explicando a operação do circuito; Um texto descrevendo como o circuito funciona. – Data Final de Entrega: 14/09/2009, até o fim do dia, por e-mail (Acréscimos do trabalho estão disponíveis na aula seguinte) Ney Calazans 21