Você está na página 1de 8

ENGC40 – Eletrônica Digital

Prof. Wagner Luiz Alves de Oliveira

Revisão sobre FSMs e Verilog, auxiliar para a avaliação de 19/06/2018

1. Sobre FSMs, assinale Verdadeiro ou Falso:


( ) Uma FSM é uma combinação de circuitos sequenciais e combinacionais que modela um
comportamento composto de um número finito de estados, transições entre estados e
ações.
( ) A tabela de estados e o diagrama de estados são auxiliares dispensáveis no projeto de
uma FSM.
( ) Máquinas de Mealy têm saídas que dependem unicamente do estado atual da máquina,
enquanto máquinas de Moore têm saídas que dependem do estado atual da máquina e
de suas entradas.
( ) A codificação de estados é a alocação de códigos binários aos estados – exemplos de
codificação incluem código binário, código gray e código one-hot.
( ) Na codificação one-hot, o número de bits no código é igual ao número de estados.

2. Dada a tabela de estados abaixo, faça o diagrama de estados correspondente como uma
FSM de Mealy. Considere A = 1 e B = 0 como estado inicial.

Estado Atual Entradas Estado Saídas


A B x y AF BF k m
0 0 0 0 1 1 0 0
0 0 0 1 0 0 0 0
0 0 1 0 0 0 0 1
0 0 1 1 0 0 0 1
0 1 0 0 0 1 0 1
0 1 0 1 0 0 0 0
0 1 1 0 0 1 0 1
0 1 1 1 0 1 0 0
1 0 0 0 1 0 0 1
1 0 0 1 1 0 1 0
1 0 1 0 1 0 0 1
1 0 1 1 0 1 0 0
1 1 0 0 1 1 1 0
1 1 0 1 1 0 1 0
1 1 1 0 1 1 0 1
1 1 1 1 1 1 0 1

3. Assinale quais das seguintes afirmações são boas práticas de codificação em Verilog:
( ) Identação do código.
( ) Uso de parâmetros.
( ) Escrita de atribuições default dentro de blocos always @ (*).
( ) Uso de atribuições bloqueantes com não-bloqueantes num mesmo bloco procedural.
( ) Implementação de lógica sequencial com reset assíncrono.

4. Quais são as características que diferem os 3 estilos de implementação em Verilog?


5. Cite ao menos 1 erro em cada um dos trechos de código a seguir.

6. Escreva blocos always para os seguintes circuitos:

a) b)

c) d)

7. Sobre Verilog, coloque Verdadeiro ou Falso:


( ) A linguagem Verilog fornece uma camada de abstração para o backend.
( ) Valores somente podem ser atribuídos a um dado do tipo reg dentro de um bloco
procedural.
( ) Dados da classe NET representam conexões físicas entre blocos.
( ) Dados da classe REGISTER relacionam-se com circuitos sequenciais para armazenamento.
( ) Atribuições não-bloqueantes são utilizadas em blocos combinacionais.
( ) Parâmetros correspondem a restrições usadas pelo simulador ou pelas ferramentas de
síntese.
( ) Blocos always podem ser utilizados tanto para representar lógica sequencial como lógica
combinacional.
( ) Atribuições bloqueantes são utilizadas em blocos sequenciais.
( ) Blocos procedurais initial são sintetizáveis.

8. Cite 3 construtores não sintetizáveis em Verilog.

9. Usando um waveform, exemplifique porque deve-se ter cuidado com reset assíncrono.

10. A figura abaixo mostra a interseção de uma via preferencial com outra secundária. Vários
sensores de detecção de veículos estão colocados ao longo das mãos de direção C e D (via
principal) e A e B (via secundária). A saída de tais sensores será nível lógico BAIXO quando
nenhum veículo for detectado, e será nível lógico ALTO em caso de detecção. O sinal de
tráfego no cruzamento deve ser controlado como se segue:

• O sinal leste-oeste (L-O) estará verde sempre que existirem veículos em ambas as vias
de direção C e D;
• O sinal leste-oeste (L-O) estará verde sempre que existirem veículos ou em C ou em D,
estando as outras duas vias, A e B, sem nenhum veículo detectado.
• O sinal norte-sul (N-S) estará verde sempre que existirem veículos em A e em B,
estando C e D vazias.
• O sinal norte-sul (N-S) estará verde quando ou A ou B estiverem ocupadas, enquanto C
e D estiverem vazias.
• O sinal leste-oeste (L-O) estará verde quando nenhum veículo tiver sido detectado
pelos sensores.

Usando as saídas dos sensores A, B, C, e D como entradas, projete um circuito lógico em


Verilog para controlar os sinais. Deve haver duas saídas, N_S e L_O, que vão para o nível
lógico ALTO quando a luz correspondente for a verde.

11. Deseja-se construir um dado eletrônico, conforme figura abaixo. A entrada B é utilizada
para "lançar" o dado. Quando B = 1, o dado está sendo "lançado" e os 7 LEDs {a, b, c, d,
e, f, g} devem ficar apagados. Quando B = 0, o valor do dado obtido é exposto através dos
7 LEDs. Faça a síntese da FSM representante do módulo XISTO em Verilog.
12. O código de Hamming é um código de detecção, isto é, permite não apenas detectar erro
de um bit, mas também a localização do bit errado. Parte-se da observação de que, dados
dois bits A e B, a operação ou exclusivo C = A ⊕ B calcula o bit paridade (no caso, par) dos
bits dados.

Calculando o código de Hamming para correção de 1 bit em uma palavra de 8 bits:

Considere uma palavra de 8 bits: m8m7m6m5m4m3m2m1

A esse dado de 8 bits vamos acrescentar 4 bits adicionais, formando o código de Hamming
de 12 bits, o qual é numerado da seguinte forma:

x12 x11 x10 x9 x8 x7 x6 x5 x4 x3 x2 x1

onde:

x10 = m8
x8 = m7
x7 = m6
x6 = m5
x4 = m4
x3 = m3
x2 = m2
x1 = m1

e os 4 bits adicionais x12, x11, x9 e x5 são assim calculados:

x12 = x10 ⊕ x8 ⊕ x6 ⊕ x4 ⊕ x2
x11 = x10 ⊕ x7 ⊕ x6 ⊕ x3 ⊕ x2
x9 = x8 ⊕ x7 ⊕ x6 ⊕ x1
x5 = x4 ⊕ x3 ⊕ x2 ⊕ x1

Agora suponha que esses 12 bits são lidos como sendo:

y12 y11 y10 y9 y8 y7 y6 y5 y4 y3 y2 y1

Se não houver erro, então cada yi é igual ao seu respectivo xi.

Se houver erro em um bit apenas, é possível detectar tal erro e corrigi-lo. Para isso
fazemos o seguinte cálculo de 4 bits, denominados k1, k2, k3 e k4:

k1 = y12 ⊕ y10 ⊕ y8 ⊕ y6 ⊕ y4 ⊕ y2
k2 = y11 ⊕ y10 ⊕ y7 ⊕ y6 ⊕ y3 ⊕ y2
k3 = y9 ⊕ y8 ⊕ y7 ⊕ y6 ⊕ y1
k4 = y5 ⊕ y4 ⊕ y3 ⊕ y2 ⊕ y1

Se k1 = k2 = k3 = k4 = 0, então não há erro. Senão, o número binário codificado por tais bits
determinará a posição do bit errado. Isto é, se k4k3k2k1 = 0111, então o bit y7 está errado.

Questão: Usando código Verilog, faça um circuito ECC (Error Correcting Code) de
detecção simples, correção simples, usando código de Hamming, considerando palavras
de memória de 8 bits. Uma das entradas do circuito deverá ser R/W: caso R/W = R, o
circuito deverá detectar e corrigir um eventual erro na palavra de entrada, gerando a
palavra correta na saída; caso R/W = W, o circuito deverá gerar na saída o código de
Hamming da palavra de entrada.
13. Considere a figura abaixo. A bomba d'água B1 leva água de um riacho até o tanque
inferior, e a bomba B2 leva água do tanque inferior para o superior. A bomba B1 deve
ligar com o objetivo de encher o tanque inferior, sendo desligada quando a água atingir o
nível máximo (S2), e assim permanecendo (desligada) até que a água fique abaixo do nível
de mínimo (S1). A bomba B2 funciona da mesma forma, baseada nos níveis S3 e S4, mas
não poderá funcionar caso o nível do tanque inferior esteja abaixo de S1. Se qualquer
combinação que os sensores enviarem for impossível de ocorrer na prática, as duas
bombas devem ser imediatamente desligadas, independente de qualquer outra situação.
Faça a síntese da FSM correspondente em Verilog, fazendo as convenções necessárias.

Dica: faça reuso do exemplo do tanque, dado em aula (material sobre FSMs).

14. Dado o diagrama de estados seguinte, referente a uma máquina de refrigerantes que
libera a latinha após a inserção de três moedas de R$ 1,00 (com possibilidade de
desistência), obtenha o circuito correspondente em Verilog. Faça as convenções
necessárias.
15. O circuito abaixo permite a realização de somatórios, a partir de dados provenientes de
uma Memória Externa:

a) Faça a representação gráfica (diagrama de blocos) e implemente um módulo em Verilog


estrutural, denominado TOP.

Externamente, TOP faz interface com dois blocos: uma Memória Externa e um
Controlador. O Controlador deverá enviar sinais de controle Clock e Reset para TOP,
recebendo deste o sinal Ready (explicado adiante). A Memória Externa é uma SRAM, com
profundidade de 32 endereços e largura de 16 bits, portas de entrada DataIN, Address,
ReadEnable e WriteEnable, e porta de saída DataOut.

Internamente, TOP deverá instanciar os módulos denominados Acumulador e FSM,


conforme especificados a seguir.

Obs.: Controlador é um módulo externo, o qual não é de interesse para o problema aqui
tratado, exceto pelos sinais de interfaceamento.

b) Baseando-se no circuito da figura acima (utilize os mesmos sinais de controle e adapte os


barramentos de dados), faça um módulo em Verilog denominado Acumulador, para a
realização de somas em 16 bits.

c) Faça um módulo em Verilog denominado FSM, o qual envie sinais de controle para uma
instância do módulo Acumulador e para a Memória Externa.

Tal FSM deverá fazer o somatório de 4 conjuntos de endereços contínuos: 0 a 6; 8 a 14; 16


a 22; e 24 a 30. Ao final da soma de cada 7 números, o resultado obtido deverá ser
gravado no endereço imediatamente seguinte. Ao final da operação sobre os 4 conjuntos,
um sinal de Ready deverá ser ativado por pelo menos 1 pulso de clock, de forma a avisar
para um circuito externo sobre o término da operação. Após tal ciclo, a FSM deverá iniciar
as operações novamente.

Em relação aos sinais de controle para a Memória Externa, após a habilitação da


operação (leitura ou escrita), a memória consumirá 1 pulso de clock para realização da
mesma – no caso de leitura, a porta de saída irá para alta impedância tão logo o sinal de
ativação seja retirado.

d) Faça um testbench para validar o módulo TOP.


16. Deseja-se construir um circuito para cálculo de módulo 4. Este circuito deverá receber
uma sequência binária (de qualquer tamanho) e gerar, a cada bit recebido, o resultado do
resto da divisão da sequência já recebida por 4. Considere que o primeiro bit da sequência
binária recebido corresponde ao bit mais significativo. Faça o diagrama de estados
(máquina de estados) com todas as convenções bem claras e implemente tal FSM em
Verilog.

17. Faça em Verilog um módulo para calcular a expressão matricial C = A x B, onde A é uma
matriz 2x3 e B é uma matriz 3x2, usando no máximo 3 multiplicadores. Considere que
este módulo obtém e grava dados numa memória SRAM, a qual tem como portas de
entrada DataIN, Address, ReadEnable, WriteEnable e Clock e, como porta de saída,
DataOut. Após a habilitação da operação (leitura ou escrita), a memória consumirá 1
pulso de clock para realização da mesma – no caso de leitura, a porta de saída irá para
alta impedância tão logo o sinal de ativação correspondente seja retirado. Deixe indicado
o esboço da arquitetura de tal circuito, com convenções utilizadas.

18. A cidade de Curitiba possui um sistema de ônibus urbano bem construído. Em avenidas
amplas, há corredores de ônibus que usam estações-tubo. O usuário entra na estação e
aguarda o ônibus, em frente a portas de acesso. Ao estacionar, o motorista aciona um
comando que executa duas etapas, em ordem: 1) bloqueia a ação do acelerador e desce
as rampas de acesso, as quais se encaixam nos vãos da estação-tubo; e 2) abre as portas
do ônibus. Por questões de segurança, tal comando somente é aceito quando o ônibus
está totalmente parado. Ao sair, o motorista desativa o comando, o que executa as
seguintes etapas, em ordem: 1) fechas as portas; 2) recolhe as rampas; e 3) desabilita o
bloqueio da ação do acelerador. O diagrama abaixo representa a FSM desse circuito.
Obtenha o circuito correspondente em Verilog.

Comando Acelerador / Plataformas Portas


Bloqueio
00 / 000 1X / 111
01 / 111

Ônibus 10 / 101 Plataformas XX / 111 Portas


Parado Abaixadas Abertas

X0 / 000 X1 / 000 00 / 101

Ônibus XX / 000 Plataformas XX / 001 Portas


Movimento Suspensas Fechadas

X1 / 000
19. Considere um robô que deve acompanhar um muro. A figura abaixo ilustra o problema.
Na parte a) da figura, o mundo do robô é uma matriz de células, na qual cada
componente é livre (células brancas) ou ocupado por um muro (células escuras). O robô,
mostrado como um triângulo, é colocado em qualquer célula livre, respeitando uma das
direções paralelas ao gradeado da matriz (horizontal ou vertical), com sua frente voltada
para qualquer um dos 4 sentidos possíveis (para cima, para baixo, para a direita ou para a
esquerda).

a) Campo de testes do robô. b) Comportamento exigido: dobrar o muro.

O robô possui 2 sensores binários: head (sensor situado na frente do robô, que retorna 1
quando a célula situada à frente do robô está ocupada por um muro – caso contrário,
retorna 0) e left (sensor situado na lateral esquerda do robô, que retorna 1 quando a
célula do lado esquerdo do robô é ocupada por um muro - caso contrário, retorna 0).

Em relação à movimentação, o robô é capaz de fazer apenas 2 tipos de movimento:


avançar para uma célula livre à sua frente ou rotacionar 90º para a esquerda, mantendo-
se na mesma célula em que se encontra. Cada movimento consome 1 pulso de clock.

Ao ligar o robô, 4 casos são possíveis, os quais deverão ser tratados como segue:

Caso 1: robô em uma área livre (ambos sensores retornando 0). Neste caso, o robô
deverá avançar até o encontro de um muro e acompanhá-lo, dando-lhe o lado
esquerdo;
Caso 2: robô com muro à frente e do lado esquerdo (ambos sensores retornando 1).
Neste caso, o robô deverá rotacionar até encontrar um muro à sua esquerda
que possa ser acompanhado;
Caso 3: robô com muro somente à frente (head = 1, left = 0). Mesmo comportamento
do caso 2;
Caso 4: robô com muro somente à esquerda (head = 0, left = 1). Neste caso, o robô
deverá acompanhar o muro.

Em qualquer dos casos citados, o robô deverá acompanhar o muro até que um novo muro
seja encontrado ou até que o muro dobre à esquerda, como na parte b) da figura, fazendo
com que o robô também dobre à esquerda e prossiga. Como regra prioritária, após cada
rotação, se houver um muro à esquerda do robô, este deverá ser acompanhado.

Faça o Diagrama de Estados da FSM correspondente ao problema exposto e implemente


tal FSM em Verilog.

20. Você será aprovado(a)?

21. Tem certeza?

Você também pode gostar