Laboratório: Máquinas de Estado

Laboratório: Máquinas de Estado

Este laboratório propõe o desenvolvimento de um controlador para uma máquina de café. O objetivo principal é projetar uma Máquina de Estados de Moore e avaliar o seu funcionamento, o que envolve a utilização de registradores para a construção de circuitos combinacionais.

Ver histórico de mudanças

Changelog

Versão Data Descrição
v2025.1 07/mar/2025 Versão inicial

Disciplina

Este laboratório faz parte da disciplina MC613 - Laboratório de Circuitos Digitais. Ver oferecimento mais recente.

Entrega

  • A entrega deverá estar em único arquivo .ZIP contendo todos e apenas os arquivos listados abaixo.
  • O nome do arquivo ZIP deve ser RA<RA>.zip, onde <RA> é o RA do componente do grupo que fará a entrega. Por exemplo, RA123456.zip é a entrega do grupo do aluno com o RA 123456.
  • Os nomes dos arquivos dentro do ZIP devem ser seguidos.
  • Se mais do que um arquivo for recebido para a mesma entrega, apenas o último recebido dentro do prazo será considerado.
  • O cumprimento ou não dessas instruções fará parte dos critérios de avaliação.

Arquivos que fazem parte da entrega:

  • fsm_diagrama.pdf: Diagrama de blocos para a entidade da máquina de estados.
  • fsm.vhd: Descrição em VHDL da entidade da máquina de estados.
  • fsm_tb.vhd: Testbench da unidade da máquina de estados.
  • fsm_board.vhd: Descrição em VHDL da entidade de interface de comunicação entre a máquina de estados e as conexões na placa DE1-SoC.
  • *.vhd: Descrição em VHDL de quaisquer módulos auxiliares pra construção da FSM e da FSM Board.

Link para entrega: https://ic.unicamp.br/~isaias/mc613/entrega.

Máquina de Estados

Uma máquina de venda de café vende um café por R$ 2,50. A máquina permite o pagamento em moedas de 50 centavos e 1 real e notas de 2 reais, apenas. Para comprar o café, o usuário deve inserir na máquina notas e moedas até atingir o valor do café. Assim que o valor total inserido for igual ou superior ao valor do café, a máquina prepara e libera o café. Além disso, caso o valor seja superior ao valor do café, a máquina devolve para o usuário um troco correspondente à diferença.

Seu trabalho é modelar e desenvolver o hardware de uma Máquina de Estados de Moore para fazer a função da máquina de venda de café. A máquina de café é equipada com sensores que identificam quando cada tipo de moeda ou nota é inserido, emitindo um sinal de em nível lógico alto. Além disso, ela possui atuadores que podem liberar cada tipo de nota ou moeda como troco, também ativos em nível lógico alto. Você pode assumir que é impossível que mais de um sensor de entrada esteja ativo a cada tempo, e que os sinais estarão ativos apenas pelo período de um clock. Você também pode assumir que os atuadores conseguem liberar mais do que uma nota ou moeda ao mesmo tempo. A máquina também possui um atuador que comanda a preparação do café. Você pode assumir que o atuador estar ativo (em nível lógico alto) pelo período de um clock é o suficiente para preparar o café. Você deve modelar os estados e as transições necessárias, bem como as saídas para cada estado, de forma a cumprir o objetivo da máquina.

As entradas e saídas são:

Nome Largura Descrição
Entradas
clk 1 bit Sinal de clock.
rst 1 bit Reset síncrono, ativo em nível lógico alto.
r50 1 bit Moeda de 50 centavos recebida.
r100 1 bit Moeda de 1 real recebida.
r200 1 bit Nota de 2 reais recebida.
Saídas
cafe 1 bit Comanda o início da preparação do café.
t50 1 bit Moeda de 50 centavos como troco.
t100 1 bit Moeda de 1 real como troco.
t200 1 bit Nota de 2 reais como troco.
state ? bit* Indica o estado atual da máquina.*

* A saída state pode ter quantos bits forem necessários para codificar o estado.

Dica: Modele um estado para cada possível valor já inserido na máquina.

Atividades do laboratório

Parte I - Diagrama de Estados

Desenhe um diagrama de estados representando uma Máquina de Moore que execute a função explicitada no enunciado. Demonstre no seu diagrama os estados necessários, as transições e as saídas para cada estado. Salve seu diagrama em um arquivo PDF. Você pode entregar o diagrama desenhado à mão ou utilizando alguma ferramenta, como https://madebyevan.com/fsm/.

Parte II - Desenvolvimento em VHDL

Crie um arquivo VHDL vazio chamado fsm.vhd para modelar a sua máquina de estados. Dentro do arquivo, utilize o template pronto do Quartus em Edit -> Insert Template… procurando por “Four-State Moore State Machine” em VHDL -> Full Designs > State Machines. Modifique o template de modo a representar a sua máquina de estados. A entidade VHDL deve se chamar FSM e descrever o hardware especificado no enunciado, conforme o diagrama de estados desenvolvido. Sua entidade deverá ter as entradas e saídas mencionadas, sem adicionar ou remover nenhuma porta, utilizando exatamente os nomes informados. Entradas ou saídas de um único bit deverão ser do tipo std_logic, e entradas ou saídas de múltiplos bits do tipo std_logic_vector. Entradas deverão ser declaradas como in e saídas como out.

O código deve ser legítimo e de sua autoria, utilizando-se apenas de bibliotecas e pacotes disponíveis no software por padrão. Caso decida instanciar módulos auxiliares dentro da máquina, crie cada módulo como uma entidade separada e salve em um arquivo com o nome da entidade. Caso decida utilizar pacotes auxiliares, crie o pacote em um arquivo separado e salve com o nome do pacote.

Parte III - Teste por Simulação

Desenvolva uma simulação para testar o funcionamento da Máquina de Estados. A simulação deve ser um testbench, descrito em uma entidade VHDL fsm_tb, que inclua casos de teste suficientes para que você se convença que o seu código da máquina de estados está correto e funcional. Salve a entidade de teste no arquivo fsm_tb.vhd.

Parte IV - Teste na placa DE1-SoC

Desenvolva uma interface de comunicação entre a sua máquina de estados e as conexões na placa DE1-SoC. A interface deve permitir controlar o valor dos sinais de entrada, e mostrar os valores das saídas e o estado atual da máquina. Salve sua entidade de interface como fsm_board.vhd.

Dica: utilize pushbuttons (KEY[*]) para os sinais de clock e entradas de notas e moedas e algum switch (SW[*]) para reset. Mostre uma representação numérica do estado atual, na forma do valor inserido até o momento, nos visores de 7 segmentos (HEX%[*]). Exiba as saídas em leds (LEDR[*]).