Você está na página 1de 3

Trabalho Prático 3 – Fundamento de Sistemas Digitais

Entrega do TP3 06/11/23 – 23:59

1 Orientações Gerais
Este trabalho consiste nas seguintes tarefas:
• [3,0 pontos] Projetar, desenhar e explicar a máquina de estados (FSM) que controla o circuito proposto; i.e.,
apresentar de forma textual a descrição da FSM, com desenho e explicação do funcionamento do circuito.
• [5,0 pontos] Descrever o circuito proposto em VHDL (i.e., entidade, FSM, registradores, ...). O material de apoio ao
trabalho disponibiliza um arquivo base tp3.vhd. Os pontos são divididos da seguinte maneira:
• [2,0 pontos] Apresentar no relatório 1 cenário de operação contendo: (i) programação de padrão; (ii) detecção deste
padrão; (iii) reprogramação e detecção de novo padrão programado. Apresentar e explicar os vetores de teste e as
formas de onda.
Entregar: um arquivo em formato ZIP contendo 5 (cinco) arquivos:
1. Descrição VHDL do circuito proposto (tp3.vhd);
2. tb.vhd com alteração em relação ao arquivo fornecido;
3. Script de simulação sim.do (fornecido);
4. Arquivo wave.do (fornecido);
5. Relatório em formato PDF.

2 Descrição do módulo a ser implementado


O grupo deve implementar o módulo traffic_filter, que detecta padrões em um fluxo de entrada de dados serial. Estes
padrões correspondem a “ataques” que devem ser notificados, podendo o usuário bloquear a saída de dados em caso
de detecção do ataque.

Em modo normal de operação, após o reset, o traffic_filter fica no estado de espera (WAITING) transferindo o fluxo serial
de dados de entrada (din) para a saída (dout). Em caso de ataque, a saída alarm é ativada (nível lógico 1) e fluxo de dados
de saída pode ser desabilitado (dout=0). Cada ciclo de ck corresponde a um bit do fluxo de dados din; desta forma, a cada
ck, um bit de din entra no registrador de deslocamento de 8 bits regDin, formando uma palavra da dados de 8 bits.
O sinal prog (3 bits) contém os comandos que o circuito deve fazer. A primeira ação do usuário é programar o padrão a
ser detectado no fluxo de dados, colocando prog=1, regPatpattern e valid1. A partir deste momento, o valor em
regDin passa a ser comparado com regPat, e esta comparação define o sinal match. O sinal valid é responsável por
permitir a comparação com regPat, pois informa que o padrão já foi carregado.

1/3
Após programar o padrão, o usuário pode selecionar prog=2, indo para o estado de trabalhando (WORKING). Neste
estado, o registrador alarmI (conectado à saída alarm) armazena o valor da comparação match. A saída alarm é igual a
alarmI, e caso esta receba ‘1’, a saída dout é desabilitada. Acontecendo alarme (match=1) podem ocorrer três situações:
1. No estado WORKING, ao detectar um ataque o circuito vai para o estado perigo (RISK). Neste estado, o alarme
permanece ativo por 4 ciclos de ck, zerando o alarmI após este intervalo, e retorna para o estado WORKING.
2. Estando no estado WORKING ou RISK, o usuário pode bloquear o tráfego selecionado prog=3, fazendo que o
circuito vá para o estado de bloqueado (BLOCKED). O usuário sai do estado BLOCKED, voltando para WORKING,
se for selecionado prog=4.
3. Estando no estado de WORKING ou BLOCKED, o usuário pode reiniciar o sistema selecionando prog=5; os
registradores alarmI e valid são zerados e o circuito vai para o estado WAITING. Neste caso, é necessário entrar
com um novo padrão.

prog Ação
0 Nenhuma ação é realizada
No estado WAITING, armazena o padrão no registrador regPat e habilita a comparação com este padrão
1
colocando valid  1
Caso valid = ’1’, sai do estado WAITING e vai para WORKING, permitindo reconhecer o padrão programado
2
em regPat
Bloqueia o tráfego de dados ativando alarmI e indo para o estado BLOCKED. A FSM deve estar nos estados
3
WORKING ou RISK
4 Zera alarmI, fazendo a FSM voltar para ao estado WORKING. A FSM deve estar no estado BLOCKED
Zera os registradores alarmI e valid, fazendo a FSM voltar para o estado WAITING. A FSM deve estar nos
5
estados WORKING ou BLOCKED

3 Configuração do TestBench
Para criar um cenário de teste, o grupo deve modificar o padrão de teste no test bench, onde: t indica o tempo em
períodos de ck, prog indica o modo de configuração, e padrão o valor do padrão a ser armazenado, como mostrado
abaixo:
type padroes is array(natural range <>) of test_record;
constant padrao_de_teste: padrões :=
(
(t => 5, prog => "001", padrao => x"29"), -- Programa padrão
(t => 10, prog => "010", padrao => x"FF"), -- Ativa comparação
(t => 30, prog => "011", padrao => x"FF"), -- Bloqueia
(t => 40, prog => "100", padrao => x"FF"), -- Reinicia a comparação
(t => 50, prog => "101", padrao => x"FF") -- reinicializa
);

A sequência din é gerada de forma pseudoaleatória; a sequência pode ser alterada conforme a semente de geração (seed):
constant seed: std_logic_vector(GP-1 downto 0) := "1101101110110110010";
Como os valores gerados são pseudoaleatórios, observe os valores gerados na forma de onda para escolher os padrões a
serem comparados. Note também que o regDin leva 8 ciclos para ser preenchido (período em que está em vermelho)

2/3
4 Exemplo de Simulação
O cenário abaixo deve funcionar no circuito implementado pelo grupo, contudo, é necessário fazer no relatório um
cenário diferente deste exemplo de simulação.

3 4 5
2 6
1

Eventos destacados:
1. No estado WAITING, recebe prog = 1, programando regPat com o valor 29 (hexadecimal). Observe que valid só
voltam a zerar com o comando prog = 5;
2. Recebe prog = 2, sai do estado WAITING e vai para o estado WORKING, procurando por um ataque;
3. No estado WORKING, ocorre um match com o padrão (valor 29); a FSM vai para o estado RISK por 4 ciclos de ck
(sinal cont), com o tráfego de saída bloqueado (dout=’0’) e o alarme ativado (alarm=’1’). Em seguida, volta para
o estado WORKING;
4. No estado WORKING, o usuário decide bloquear o tráfego com o comando prog=3. O circuito vai para o estado
BLOCKED, o alarme é ativado (alarm=’1’) e o tráfego é bloqueado (dout=’0’)
5. Recebe prog=4, sai do estado BLOCKED e reinicia a comparação com o tráfego de entrada no estado WORKING;
6. Circuito volta ao estado WAITING, deixando passar o tráfego de entrada e zerando valid. Requer uma nova
programação de padrão.

3/3

Você também pode gostar