Lab Combinacionais
Lab Combinacionais
Lab Combinacionais
Objetivos: são dois os objetivos deste laboratório: (i) verificar o comportamento temporal
do multiplexador; e (ii) verificar a corretude dos modelos do multiplexador, do demultiplexador
e do decodificador através de asserts e com diagramas de tempo.
O trabalho pode ser efetuado em duplas.
Na Seção 13.2.10 estão as questões que devem ser respondidas nesta aula e entregues ao professor.
No laboratório sobre descrição estrutural empregamos modelos funcionais para portas lógicas,
e com aqueles construímos modelos para circuitos combinacionais pela composição de várias
portas lógicas. Aqueles modelos são chamados de funcionais porque representam somente o
aspecto “função lógica” dos circuitos, e não contêm informações de tempo.
Neste laboratório enriqueceremos os modelos funcionais com informação de tempo, criando mo-
delos mais sofisticados e realistas para o comportamento daqueles circuitos.
Modelos temporais incorporam a informação de tempo de propagação dos componentes e permi-
tem simulações mais detalhadas dos circuitos. Evidentemente, simulações mais detalhadas são
mais custosas em termos de tempo de programação e de simulação.
Os modelos que usaremos nesta aula permitem a visualização do comportamento dos circuitos
combinacionais ao longo do tempo, e a medição do tempo de propagação através de circuitos
relativamente simples. Em breve estudaremos a propagação de sinais em somadores e nestes
circuitos os problemas são um tanto mais severos do que o que veremos hoje. Cada coisa a
seu tempo.
Reveja a Seção 5.3.2. Reveja a Seção 9.3 das notas de aula (vhdl.pdf).
204
UFPR, BCC, ci1210–ere–2–2021 205
Etapa 5 Copie para sua área de trabalho o arquivo com o código VHDL:
(a) wget http://www.inf.ufpr.br/roberto/ci210/vhdl/l_combinacionais.tgz
(b) expanda-o com: tar xzf l_combinacionais.tgz
o diretório combinacionais será criado;
(c) mude para aquele diretório: cd combinacionais
O arquivo packageWires.vhd contém definições dos tempos de propagação das portas lógicas e
abreviaturas para nomes de sinais. Este arquivo também contém as definições de temporização
das portas lógicas.
O arquivo aux.vhd contém os modelos das portas lógicas not, and, or e xor, que são os compo-
nentes básicos para este laboratório. Este arquivo não deve ser editado.
O arquivo combin.vhd contém um modelo para um multiplexador de duas entradas, mux-2.
Este modelo serve de base para os modelos dos componentes mux-4, mux-8, demux-2, demux-4,
demux-8, decod-2, decod-4 e decod-8, definidos na Seção 4.3, Circuitos Combinacionais Básicos,
em combin.pdf.
Reveja a Seção 5.3.2. Veja a Seção 9.3.4 de vhdl.pdf para a descrição do modelo temporizado
do mux-2.
Ao invés de reescrever os modelos dos mux-N, utilize as arquiteturas dos modelos do laboratório
anterior sem esquecer de que as declarações das portas lógicas devem incluir a especificação do
tempo de propagação e de contaminação.
Das mensagens de erro Em caso de erro de compilação ser detectado por ghdl, o
script run.sh aborta a compilação, e exibe as mensagens de erro emitidas pelo compi-
lador. Estas mensagens são a melhor indicação que o compilador é capaz de emitir para
ajudá-lo a encontrar o erro, e portanto as mensagens de erro devem ser lidas. Os
programadores do ghdl dispenderam um esforço considerável para emitir mensagens de
erro (relativamente) úteis. Não desperdice a preciosa ajuda que lhe é oferecida.
Se a tela do gtkwave mostra os diagramas em tamanho inadequado, mova o arquivo
gtkwaverc para o seu $HOME, como um arquivo escondido ($HOME/.gtkwaverc) e edite
UFPR, BCC, ci1210–ere–2–2021 206
as duas últimas definições – os números podem ser alterados para melhorar a legibilidade.
O gtkwave deve ser reinicializado para que as definições tenham efeito.
O arquivo v_mux.sav contém definições para o gtkwave tais como a escala de tempo e sinais a
serem exibidos na tela para a verificação dos modelos mux-2, mux-4 e mux-8.
O arquivo tb_mux.vhd contém o programa de testes (testbench, ou TB) para verificar a corretude
dos seus modelos. A entidade tb_mux é vazia porque o programa de testes é autocontido e não
tem interfaces com nenhum outro circuito.
São usados três conjuntos de vetores de teste, um para cada largura de circuito. A seguir
descrevemos os vetores de teste para circuitos de largura dois. Aqueles para largura quatro e
oito são similares.
A arquitetura do TB declara os componentes que serão testados e um record que será usado
para excitar os modelos. O registro test_record_2 possui três campos e os valores destes campos
devem ser atribuídos por você de forma a gerar todas (todas?) as combinações de entradas
necessárias para garantir a corretude do seu modelo. O vetor de testes test_array_2 contém os
oito elementos necessários para excitar e verificar o mux-2, na primeira tarefa deste laboratório.
No test_record_2, os campos s e mx são de tipo bit (’0’) e o campo a é um vetor de bits codificado
em binário (b"10" – o prefixo b indica binário).
O campo mx é o bit com a saída esperada para um multiplexador quando os valores definidos
em s e a são aplicados às entradas.
−− d e f i n i ç ã o do v e t o r de t e s t e s p a r a MUX−2
type t e s t _ r e c o r d _ 2 i s r e c o r d
a : reg2 ; −− e n t r a d a p a r a m u l t i p l e x a d o r e s
s : bit ; −− e n t r a d a de s e l e ç ã o
mx : b i t ; −− s a í da e s p e r a d a do MUX
end r e c o r d ;
type t e s t _ a r r a y _ 2 i s a r r a y ( p o s i t i v e range <>) o f t e s t _ r e c o r d _ 2 ;
−− v e t o r de t e s t e s
constant t e s t _ v e c t o r s _ 2 : t e s t _ a r r a y _ 2 := (
−−s , a, mx
( ’ 0 ’ , b " 00 " , ’ 0 ’ ) , −− t r a n s c r i ç ã o da t a b e l a v e r d a d e do mux−2
( ’ 0 ’ , b " 01 " , ’ 1 ’ ) , −− s e a s ã o e n t r a d a s , mx é a s a í da
( ’ 0 ’ , b " 10 " , ’ 0 ’ ) ,
( ’ 0 ’ , b " 11 " , ’ 1 ’ ) ,
( ’ 1 ’ , b " 00 " , ’ 0 ’ ) ,
( ’ 1 ’ , b " 01 " , ’ 0 ’ ) ,
( ’ 1 ’ , b " 10 " , ’ 1 ’ ) ,
( ’ 1 ’ , b " 11 " , ’ 1 ’ ) ,
−−
( ’ 0 ’ , b " 11 " , ’ 1 ’ ) , −− n ã o a l t e r a r e s t e s t r ê s ú l t i m o s
( ’ 0 ’ , b " 11 " , ’ 1 ’ ) ,
( ’ 0 ’ , b " 11 " , ’ 1 ’ )
);
−− t r o q u e a c o n s t a n t e p a r a FALSE p a r a t e s t a r s e u s m o d e l o s
constant TST_MUX_2 : b o o l e a n := t r u e ;
UFPR, BCC, ci1210–ere–2–2021 207
A sequência de valores de entrada para os testes dos modelos é gerada pelo processo U_testValues,
com o laço for ... loop. A variável de iteração itera no espaço definido pelo número de elementos
do vetor de testes ( test_vectors ’range) – o atributo ’range representa a faixa de valores do índice
do vetor. Se mais elementos forem acrescentados ao vetor, o laço executará mais iterações.
O i -ésimo elemento do vetor é atribuído à variável v e todos os campos do vetor são então
atribuídos aos sinais que excitam os modelos. Lembre que o processo U_testValues executa
concorrentemente com o seu(s) modelo(s) e quando os sinais de teste são atribuídos no laço,
estes provocam alterações nos sinais dos modelos.
O assert no Programa 13.52 verifica se a saída observada no multiplexador é igual à saída
esperada. Se os valores forem iguais, o comportamento é o esperado, e portanto correto com
relação aos vetores de teste que você escreveu.
Se você escolher valores de teste inadequados, ou errados, pode ser difícil diagnosticar problemas
no seu modelo.
O pulso transitório – indesejado porque viola a especificação funcional do mux-2 – ocorre no lado
direito da Figura 13.16. Meça a duração deste pulso com os cursores do gtkwave, e procure em
packageWires.vhd os tempos de propagação similares à duração do pulso. Por que ele ocorre?
Etapa 8 Conserte seu modelo do mux-2 para remover o pulso indesejado – o tal de glitch – e
refaça os testes para garantir que a sua solução é mesmo correta.
Etapa 9 Uma vez que o funcionamento do mux-2 seja aquele especificado, você deve, lembrando
das árvores projetadas em combin.pdf,
(1) escrever5 o modelo para o mux-4. Para tanto edite o arquivo combin.vhd;
(2) repetir para o mux-8;
(3) repetir para o multiplexador de 8 entradas com um vetor de bits ao invés de oito escalares;
(4) acrescentar mais elementos aos respectivos vetores de teste em tb_mux.vhd; e
(5) verificar a corretude de seus modelos6 .
Quantos vetores são necessários para testar exaustivamente um mux-4? São duas entradas de
seleção e quatro entradas de dados, logo são necessários 22 × 24 testes. Use o material biológico
que se encontra entre suas orelhas e veja se é mesmo necessário executar todos os 64 testes, ou
se algo pode ser aproveitado dos testes do mux-2. Reveja a Seção–5.3.2.
Você quer mesmo escrever 23 × 28 = 211 vetores de teste para o mux-8? Como você convenceria
o advogado do seu cliente de que um conjunto menor de testes é o suficiente para garantir a
corretude do seu modelo?
Copie seus vetores de teste do laboratório passado (Seção 13.1), e se for o caso, acrescente novos
elementos ao vetor.
5
Você pode se lembrar do que fez no laboratório passado. Eu sei, o filme é uma b∗st∗.
6
Para aqueles que tem memória de invertebrado: basta dizer “./run_mux.sh”, ler eventuais mensagens de erro,
resolver os problemas e então dizer “./run_mux.sh 1 &”.
UFPR, BCC, ci1210–ere–2–2021 209
Você é quem escreve os vetores de teste e portanto sua tarefa é ajustar os campos dm
(saída esperada dos demuxN) e dc (saída esperada dos decodN). Se os valores que você
atribuir àqueles campos forem incorretos para as entradas, então os asserts indicarão
falso-positivos para erros inexistentes.
Etapa 11 Caso necessário, aplique sua solução para o problema hamletiano do mux-2 aos
modelos do demux-2 e decod-2. Reveja a Seção–5.3.2.
EOF
7
Reveja a nota de rodapé número 6.
UFPR, BCC, ci1210–ere–2–2021 210
13.2.10 Questionário
Nome:
Nome:
Etapa 13 Repita para o tempo de contaminação dos nove circuitos. Mostre suas contas.
Etapa 15 Confirme, com base nos diagramas de tempo, se os tempos medidos são similares
aos que você estimou. Justifique as diferenças nas suas estimativas.
Veja a Seção 13.3.4 de vhdl.pdf para responder às próximas perguntas. Copie o ‘miolo’ dos
seus modelos na folha de respostas.
Etapa 16 Implemente um mux-8 com o comando when−else e verifique seu modelo. Acrescente
o novo modelo ao arquivo combin.vhd após a definição da arquitetura do mux-8 – VHDL usa a
última arquitetura que encontra após a definição da entidade.
Etapa 17 Implemente um mux-8 com o comando with−select e verifique seu modelo. Acrescente
o novo modelo ao arquivo combin.vhd após a definição da última arquitetura do mux-8.