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
- Faça uma branch
- Implemente local no seu PC
- 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 nomeFlipFlop.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
- Implemente o binary-digit
- 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
.