Desenvolva o projeto RTL (até a etapa de desenho da FSM) do sistema de semáforos conforme descrição a seguir:
Considere as lâmpadas de dois semáforos numa intersecção de uma via principal com uma outra menos movimentada: verde1, amarelo1, vermelho1 para o semáforo da via principal e verde2, amarelo2, vermelho2 para o semáforo da via secundária. O semáforo da via principal deve ficar sempre em verde até que apareça um veículo na via secundária. A presença deste veículo é detectada por um sinal z=1. Para garantir ausência de colisão o semáforo da via secundária deve estar em vermelho enquanto o outro estiver em verde ou amarelo. Após a detecção de um veículo na via secundária, o semáforo da via principal deve continuar em verde por mais 8 segundos e então passar para amarelo e vermelho. 0 semáforo da via secundária deve ficar verde no momento em que o outro estiver vermelho. O verde da via secundária deve durar 8 segundos. Após este tempo ele se tornará amarelo e então vermelho. Os dois amarelos devem durar 2 segundos. Assuma a existência de um relógio de período 1 ms .
Você deve seguir e mostrar todos os passos do projeto RTL até obter a FSM do bloco de controle assumindo o projeto de um sistema síncrono conforme estudado no capítulo 5 do livro.

Passo 1

O enunciado pede o projeto RTL de um controlador síncrono para dois semáforos (via principal e secundária).
Conteúdo: projeto de FSM (máquina de estados finitos) síncrona com clock de 1;ms, geração de temporizações de 8;s e 2;s, lógica de transição condicionada ao sinal de presença z.

Passo 2

Definimos a interface do bloco de controle:
Entradas:
- \mathit{clk} (clock de 1;ms)
- \mathit{rst} (reset síncrono)
- z (presença de veículo na via secundária, ativo em nível alto)
Saídas (um bit cada):
- \mathit{green1},\;\mathit{yellow1},\;\mathit{red1} para via principal
- \mathit{green2},\;\mathit{yellow2},\;\mathit{red2} para via secundária
Internamente vamos precisar de um contador de tempo capaz de contar até 8000 (para 8 s) e até 2000 (para 2 s), ou seja, um registrador de pelo menos 13 bits.

Passo 3

Analisando o comportamento, definimos cinco estados da FSM de controle:
S0: via principal verde indefinidamente (até z=1)
S1: via principal continua verde por mais 8,s (extensão)
S2: via principal amarelo por 2,s
S3: via principal vermelho e via secundária verde por 8,s
S4: via secundária amarelo por 2,s
Em cada estado, geramos as saídas correspondentes às cores dos semáforos e habilitamos o contador até estourar no valor desejado.

Passo 4

Diagrama de estados (FSM):
  +-------------------------------------------------+  
  |                     z=0                         |  
  |               +----------------+                |  
  |               |     S0 (G1)    |<---------------+  
  |               | green1=1, red2=1|  loop until z  |  
  |               +----------------+                |  
  |                         | z=1                   |  
  |                         v                       |  
  |               +----------------+                |  
  |               |  S1 (G1 ext)   |                |  
  |               | green1=1, red2=1|                |  
  |               +----------------+                |  
  |                   | cnt=8000 →                        |  
  |                   v                                 |  
  |               +----------------+                |  
  |               |  S2 (Y1)       |                |  
  |               | yellow1=1, red2=1|              |  
  |               +----------------+                |  
  |                   | cnt=2000 →                    |  
  |                   v                              |  
  |               +----------------+                |  
  |               |  S3 (G2)       |                |  
  |               | red1=1, green2=1|              |  
  |               +----------------+                |  
  |                   | cnt=8000 →                    |  
  |                   v                              |  
  |               +----------------+                |  
  |               |  S4 (Y2)       |                |  
  |               | red1=1, yellow2=1|             |  
  |               +----------------+                |  
  |                   | cnt=2000 →                    |  
  +-------------------v-----------------------------+  
                    retorna a S0

Passo 5

Codificação binária dos estados (3 bits):
\begin{array}{ll} \text{Estado} & \text{Código} \\\ \hline \mathrm{S0\,(G1)} & 000 \\\ \mathrm{S1\,(G1\\ ext)} & 001 \\\ \mathrm{S2\,(Y1)} & 010 \\\ \mathrm{S3\,(G2)} & 011 \\\ \mathrm{S4\,(Y2)} & 100 \\\ \end{array}

Resposta

Estados e transições da FSM de controle:
\begin{tikzpicture}[node distance=2.5cm,->,>=stealth] \tikzstyle{estado}=[draw,rectangle,rounded corners,align=center] \node[estado] (S0) {S0: G1 indefinido\\(green1=1, red2=1)\z=0→S0\z=1→S1}; \node[estado,right of=S0] (S1) {S1: G1 ext \\(8s)\green1=1, red2=1\cnt=8000→S2}; \node[estado,right of=S1] (S2) {S2: Y1 (2s)\yellow1=1, red2=1\cnt=2000→S3}; \node[estado,below of=S1] (S3) {S3: G2 (8s)\red1=1, green2=1\cnt=8000→S4}; \node[estado,right of=S3] (S4) {S4: Y2 (2s)\red1=1, yellow2=1\cnt=2000→S0}; \draw (S0) edge (S1) (S1) edge (S2) (S2) edge (S3) (S3) edge (S4) (S4) edge (S0); \end{tikzpicture}
Tabela de codificação (estado → bits Q 2:0):
\begin{array}{c|c} \text{Estado} & (Q_2\,Q_1\,Q_0) \\\ \hline \mathrm{S0} & 000\\\ \mathrm{S1} & 001\\\ \mathrm{S2} & 010\\\ \mathrm{S3} & 011\\\ \mathrm{S4} & 100 \end{array})

Exercícios relacionados