Upload
internet
View
183
Download
10
Embed Size (px)
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 !!!