• Labs

Lab 8: Lógica Sequencial

Antes de começar

Toda vez que um novo projeto começar será necessário realizar algumas configurações no repositório do grupo, vocês devem seguir para o documento: Util/Começando novo Projeto e depois voltar para esse lab.

  • Não seguir sem realizar a etapa anterior.

Nesse lab iremos implementar um flip-flop do tipo D e um binary digit.

Estudo prévio necessário para realizar esse lab:

Leitura
Lógica Sequencial
VHDL/Sequencial

Implementando um FF tipo D

Note

  • Fazer individual
  • Discutir no grupo!

Execute

  1. Faça uma branch
  2. Implemente local no seu PC
  3. Só um integrante do grupo deve enviar para a main via PR ao final

Tip 1

  • Esse já é um dos módulos da entrega do projeto!

Warning

Antes de seguir você deve fazer uma leitura rápida do material de lógica sequencial em VHDL VHDL -> Sequencial

Vamos agora implementar um FF tipo D em VHDL, para isso iremos modificar o arquivo d_logSeq/src/flipflopd.vhd que declara a entidade de um Flip Flop do tipo D.

Reset e Preset

Warning

Antes de continuar, você deve ter feito a leitura prévia sobre Lógica Sequencial em VHDL, só continue após ter realizado a leitura:

No site da disciplina: ➡️ VHDL ➡️ Sequencial

Flip Flops possuem normalmente dois outros sinais de controle: Clear e Preset, usados respectivamente para forçar '0' ou '1' em sua saída. Vamos modificar o código anterior para suportar essas duas outras funcionalidades. Nesse caso possuímos duas opções:

  • Set/Clear : síncrono
  • Set/Clear : assíncrono

O modo síncrono seria que o set e o clear só podem ser executado na subida do clock e no assíncrono em qualquer momento que o sinal se set e clear forem alterados o FF irá responder imediatamente. Nesse caso, iremos implementar o FF com set e reset assíncrono, para isso utilize a seguinte estrutura a seguir que já implementa o sinal de clear

Iremos modificar o código localizado em d_logSeq/src/flipflopd.vhd que possui a implementação parcial de um FF tipo D, mas não tem o preset

process(clock, clear)
begin
  if (clear = '1') then
    Q <= '0';
  elsif(rising_edge(clock)) then
    Q <= D;
  end if;
end process;

Tarefa: FF completo

  • d_logSeq/src/flipflopd.vhd
  • Implemente o preset (o clear já está feito)

Agora você pode executar o script de teste do projeto e verificar se a implementação está correta.

Tarefa: waveform

  • execute
    $ WAVES=1 pytest -k flipflopd
    
  • analise a forma de onda do teste do FF no GTKWave

Tip 2

  • Discuta no grupo a forma de onda
  • Chame um professor para conversar sobre o entendimento de vocês

Tarefa: RTL

  • Gere o RTL (via quartus) analise o resultado do FF.
  • Salve a forma de onda na pasta src/ do projeto com o nome FlipFlop.png.

Agora somente um integrante do grupo deve fazer o envio para a master via PR.

Checkpoint

Ao final dessa etapa você deve ser capaz de:

  • Saber o que é um process em VHDL e o impacto da lista de sensibilidade
  • Saber o que é um FlipFlop tipo D
  • Explicar a forma de onda do FlipFlopD gerada no GTKWave
  • Explicar o RTL do FlipFlopD criado pelo Quartus

Implementando o binary-digit

Com o FFD implementando, vocês são capazes de implementar o binary-digit, que possui internamente um FF tipo D:

Para isso vocês terão que modificar o arquivo: d_logSeq/src/binarydigit.vhd e utilizando port map criar o componente binarydigit.

Tarefa

  1. Implemente o binary-digit
  2. Teste

Warning

Assim como no FFD cada um do grupo vai ter uma implementação do binary-digit e só um deve enviar o PR para a main.