VHDL Linguagem de Descrição e Síntese de Circuitos Digitais Sistemas Digitais

Preview:

Citation preview

VHDLLinguagem de Descrição e

Síntese de Circuitos Digitais

Sistemas Digitais

O Comando Generic

Vetores Definidos Pelo Usuário Vetores predefinidos são unidimensionais As vezes necessita-se de vetores com dimensões maiores Exemplo: memórias São necessárias duas dimensões para especificar uma memória Número de posições e número de bits Descrição de uma memória de 2kbytes de 8 bits

Vetores Definidos Pelo Usuário Vetores predefinidos são unidimensionais As vezes necessita-se de vetores com dimensões maiores Exemplo: memórias São necessárias duas dimensões para especificar uma memória Número de posições e número de bits Descrição de uma memória de 2kbytes de 8 bits

Operadores de Deslocamento

Operadores de Deslocamento

sll

srl

sla

sra

rll

rrl

Multiplicação por 2

Divisão por 2

Atribuição de Sinais

Atraso InercialTempo mínimo que um pulso deve durar para que seja aceito por um circuito.

Atraso de TransmissãoAtraso no transporte de um sinal. Isto é modelado em VHDL como segue:

Comandos SequenciaisComandos sequenciais ficam contidos em regiões específicas de código como processos ou subprogramas.

Uma vez iniciada a execução de comandos em região de código sequencial, os comandos são avaliados na sequência em que são apresentados no código.

Veremos a aplicação dos comandos sequenciais IF, CASE e WAIT.

Veremos também o modo de operação de um processo e a lista de sensibilidade, além da atribuição de valores a sinais nas regiões de código sequencial.

Comandos SequenciaisLista de Sensibilidade em Processos

Um processo define uma área contendo comandos sequenciais.

A palavra reservada PROCESS identifica o comando.

O processo é um comando concorrente.

Um processo é composto de duas regiões: parte de declaração, e parte de comandos sequenciais.

A primeira região é o local para declaração de tipos e subtipos, constantes, variáveis, entre outros.

A declaração de sinais não é permitida.

A segunda região encontra-se entre as palavras reservadas BEGIN e END.

Comandos SequenciaisLista de Sensibilidade em Processos

Ela contém comandos sequenciais que representam o comportamento de uma parte ou de toda a descrição.

A palavra reservada PROCESS pode ser antecedida de um rótulo qualquer, e ser seguida de uma lista de sensibilidade.

A lista define para quais sinais que o conjunto de comandos contidos no processo sensível.

Isto é, a ocorrência de uma mudança no valor de um dos sinais da lista fará com que o processo seja executado.

Comandos SequenciaisLista de Sensibilidade em Processos

Comandos Sequenciais

Execução Conjunta abc: PROCESSBEGIN comando 1 comando 2 . . . comando nEND PROCESS abc;

. . . comandoabc: PROCESSComandoxyz: PROCESScomando . . .

xyz: PROCESSBEGIN comando 1 comando 2 . . . comando mEND PROCESS xyz;

Execução Sequencial

Execução Sequencial

Comandos SequenciaisExemplo:

1 | ENTITY sens_tes IS2 | PORT( a, b : IN BIT;3 | sa, sb : OUT BIT);4 | END sens_tes;5 |6 | ARCHITECTURE teste OF sens_tes IS7 | BEGIN8| abc: PROCESS (a) -- executado na alteração do valor de “a”9| BEGIN10| sa <= a;11| sb<=b;12| END PROCESS abc;13 | END teste;

A linha 10 descreve uma parte combinacionalA linha 11 descreve um elemento de armazenamento de valor sensível à variação da entrada “a”O circuito é não sintetizável, pois o elemento de memória descrito é ativo tanto na borda de subida quanto de descida de “a”, não havendo uma correspondência com circuitos reais.As ferramentas de síntese não inferem a necessidade de um elemento de memória devido à ausência de um sinal na lista de sensibilidade. Uma mensagem de advertência pode ser gerado.

Comandos Sequenciais

Comandos Sequenciais

Comandos Sequenciais

Comandos Sequenciais

Comandos SequenciaisO Comando WAIT

Suspende a execução de um processo. A suspensão pode ser condicionada a três clausulas, ou a uma combinação delas:

WAIT ON: fornece um mecanismo equivalente à lista de sensibilidade em um processo. Neste caso, após o comando WAIT ON, o processo fica suspenso até a alteração de valor em um dos sinais da lista.

WAIT UNTIL: o processo é suspenso enquanto a expressão booleana contida no comando não for satisfeita

WAIT FOR: o processo é suspenso por um período de tempo, reiniciando no comando seguinte, após o período de tempo definido.

Comandos SequenciaisO Comando WAIT

WAIT ON lista_de_sensibilidade;WAIT UNTIL expressão_booleana;WAIT FOR expressão_de_tempo;WAIT ON lista _de_sensibilidade UNTIL

condição_booleana FOR expressão_de _tempo;

WAIT ON sig_a, sig_b; -- Lista de sensibilidadeWAIT UNTIL sig_c = ‘1’; -- Condição booleanaWAIT FOR 100 ns; -- Expressão de tempoWAIT ON sig_d=‘0’ FOR 50 ns; -- Condição booleana por período de tempo

Estratégias de Descrição de Circuitos Síncronos

Estratégias de Descrição de Circuitos Síncronos

Registrador Sensível a Nível com Reset e Set Assíncronos

Estratégias de Descrição de Circuitos Síncronos

reset síncronoprocess(clk)begin

if clk’event and clk = ‘1’ thenif rst = ‘1’ then...else...end if;

end if;end process;

reset assíncronoprocess(clk,rst)begin

if rst = ‘1’ then...

elsif clk’event and clk = ‘1’ then...

end if;end process;

Estratégias de Descrição de Circuitos Síncronos

Estratégias de Descrição de Circuitos Síncronos

Estratégias de Descrição de Circuitos Síncronos

Estratégias de Descrição de Circuitos Síncronos

Estratégias de Descrição de Circuitos Síncronos

Estratégias de Descrição de Circuitos Síncronos

Estratégias de Descrição de Circuitos Síncronos

Estratégias de Descrição de Circuitos Síncronos

Estratégias de Descrição de Circuitos Síncronos

Arquiteturas Multiprocesso

Arquiteturas Multiprocesso

Arquiteturas MultiprocessoProcesso Simplificado

Drivers e Atribuição de Sinais

Drivers e Atribuição de Sinais

Drivers e Atribuição de Sinais

Drivers e Atribuição de Sinais

Sinais com mais de um Driver

Sinais com mais de um Driver

Sinais com mais de um Driver

Sinais com mais de um DriverResolution Function

Valores esperados, porém não são resolvidos!

Sinais com mais de um DriverResolution Function

Especificação da Estrutura do Sistema

Especificação da Estrutura do Sistema

Especificação da Estrutura do Sistema

Especificação da Estrutura do Sistema

Especificação da Estrutura do Sistema

Especificação da Estrutura do Sistema

Especificação da Estrutura do SistemaInstanciação Direta

Especificação da Estrutura do SistemaInstanciação Direta

Especificação da Estrutura do SistemaInstanciação Direta

Especificação da Estrutura do SistemaComponentes

Especificação da Estrutura do SistemaComponentes

Especificação da Estrutura do SistemaComponentes

Especificação da Estrutura do SistemaComponentes

Algumas Práticas que Devem ser Evitadas

Maus exemplos:process (a,b)begin

if (a = ‘1’) thenq <= b;

end if;end process;

process(c)begin

case c iswhen ‘0’ => q <= ‘1’; z <= ‘0’;when others => q <= ‘0’;

end case;end process;

• Exemplo1 falta else• Exemplo2 falta atribuição de z

quando c é diferente de ‘0’.

• Para evitar:• atribua valores default as saídas• process(inputs,state)• begin

– outpus <= ‘0’;– case (state)– ...– end case;

• end process;

Teste x Verificação• Verificação

– usado para verificar se o projeto está de acordo com o desejado– objetivo é verificar a funcionalidade– a ferramenta mais utilizada é o simulador

• Teste– usado para verificar a fabricação do dispositivo– objetivo não é verificar a funcionalidade– objetivo é exercitar os nós físicos do sistema

• nós devem ir de 0 para 1 ou de 1 para 0– usa padrões específicos para exercitar estes nós

• estes padrões são gerados por ferramenta de ATPG (automatic test pattern generation )

Test Bench

UUT

testbench

geração de estímulos

avaliação de respostas

referencial

Test Bench

Test Bench

Test Bench

Test Bench

Test Bench

Test BenchExemplo:

Geração de estímulos

• Origem dos estímulos:– formas de onda– de arquivos– de tabelas– aleatória– mista

Estímulos Tipo Forma de Ondaprocessbegin

s <= ‘0’ ; wait for 20 ns;s <= ‘1’ ; wait for 10 ns;s <= ‘0’ ; wait for 10 ns;s <= ‘1’ ; wait for 20 ns;s <= ‘0’ ; wait for 50 ns;s <= ‘1’ ; wait for 10 ns;s <= ‘0’ ; wait for 20 ns;s <= ‘1’ ; wait for 10 ns;s <= ‘0’ ; wait for 20 ns;s <= ‘1’ ; wait for 40 ns;s <= ‘0’ ; wait for 20 ns;

end process;

Estímulos de Arquivos procedure ReadFile() is variable lineAux : line;

file PatternFile : TEXT open READ_MODE is “inputPattern.txt";begin

for i in 0 to nPolig-1 loop readline(PatternFile , lineAux); read(lineAux,value);

...end loop;

end procedure;

Vantagem: simples implementação para padrões simples

Desvantagem: •difícil de implementar para padrões complexos•aumenta tempo de simulação devido as chamadas de sistema

Estímulos de Tabelatype vector is record

LD : std_logic;LL : std_logic;RST : std_logic;D : std_logic_vector(7 downto 0);P : std_logic;

end record;type vectorArrayType is array (0 to TABLE_SIZE) of vector;constant vectorTable : vectorArrayType := (-- LD LL RST D P( ‘0’, ‘0’, ‘0’, “xxxxxxxx” ‘0’),( ‘0’, ‘0’, ‘1’, “xxxxxxxx” ‘0’),( ‘0’, ‘0’, ‘1’, “xxxxxxxx” ‘0’),( ‘1’, ‘0’, ‘0’, “00000101” ‘0’),( ‘0’, ‘1’, ‘0’, “11010100” ‘0’),( ‘0’, ‘0’, ‘0’, “xxxxxxxx” ‘1’),( ‘0’, ‘0’, ‘0’, “xxxxxxxx” ‘1’),...);

Vantagem: menor tempo de simulação que estímulo de arquivo

Desvantagem:

•aumenta tempo de compilação

•consome memória para muitos padrões

Test Bench - Verificação

Test Bench - VerificaçãoExemplo:

Práticas Básicas• Convenções de nomes (sinais, entidades, arquivos, etc)• Incluir headers nos fontes

– descrição (func, autor, versão, etc)– formato e temp. de entrada e saída– histórico

• Comentários (inglês)• Indentação• Instanciação (associação por nomes)• Uma linha por comando/declaração• Usar tipos baseados nos tipos padrões IEEE

– std_logic, std_ulogic• Não usar valores fixos na descrição

– use generic ou constant

DISCIPLINA !!!

Recommended