Aula 5.4 - Projeto de circuito combinacional, implementando um semáforo em Verilog HDL
Na primeira aula dessa série de aulas você aprendeu toda a base para compreender códigos em Verilog HDL e rodar os códigos, se ainda não leu clique aqui e confira.
Agora vamos fazer um projeto de circuito combinacional, este projeto é muito simples. No cruzamento de 3 ruas A, B e C deseja-se instalar um sistema automático para os semáforos com as seguintes características:
- Quando o semáforo 1 abrir para a rua A, os outros dois devem fechar;
- Analogamente, para o semáforo 2 e 3.
- O motorista que está na rua A tem prioridade em relação ao que está na rua B;
- O motorista da rua B tem prioridade em relação ao da rua C;
- O motorista da rua C tem prioridade em relação ao da rua A;
- Quando houver carros nas três ruas, a rua A é preferencial;
- Quando não houver nenhum carro nas ruas, deve-se abrir abrir o sinal para a rua A.
Com essas informações, vamos impor regras e convenções.
Entradas: A, B e C.
Existe carro = 1.
Não tem carro = 0.
Saídas:
G1, G2 e G3, são respectivamente sinais verde (green) para A, B e C.
R1, R2 e R3, são respectivamente sinais vermelho (red) para A, B e C.
Sinal aceso = 1.
Sinal apagado = 0.
Agora podemos montar a tabela verdade para nosso projeto:
G1 = (A and B) or ((not B) and (not C))
G2 = (not A) and B
G3 = (not B) and C
R1 = ((not A) and B) or ((not B) and C)
R2 = A or (not B)
R3 = B or (not C)
Agora é só montar nosso código em Verilog. Note que o sinal R1, R2 e R3 vai ser sempre a negação de G1, G2 e G3 respectivamente, por conta disso no código abaixo resolvemos barrar G1, G2 e G3 para R1, R2 e R3 em vez de usar as expressões acima.
module semafaro(A,B,C,G1,G2,G3,R1,R2,R3);
input A,B,C;
output G1,G2,G3,R1,R2,R3;
assign G1 = ((~B) & (~C)| (A & B));
assign R1 = ~(G1);
assign G2 = (~A)& B;
assign R2 = ~(G2);
assign G3 = (~B)&C;
assign R3 = ~(G3);
endmodule
Próxima aula, clique aqui.
COMENTÁRIOS