1
5ª Prática (Parte 1)– Criação de Máquina de Estados Finitos
(MEFs)
no ambiente Quartus II 13.0sp1
1. Se familiarizar com a ferramenta de criação de
MEFs do Quartus II;
2. Habilidade para usar o Quartus II para
resolver problemas;
3. Adquirir conceitos práticos sobre MEFs.
Situação Problema
Deseja-se identificar o recebimento de duas letras distintas, segundo a tabela
ASCII, por uma entrada serial. O protocolo adotado será: Start bit em nível alto, um Byte
e um Stop bit em nível alto, respectivamente.
As letras escolhidas foram I e F, que são representadas na Tabela ASCII por 49h
e 46h, respectivamente. Desenvolva uma Máquina de Estados Finitos que identifique
estes caracteres segundo este protocolo.
Dica: Converta os códigos hexadecimais em binários e divida-os em nibbles
(grupos de 4 bits), use um Detector de Sequências.
OBJETIVO:
2
Figura 1 - Preview da MEF utilizada
Criando uma nova máquina de estados
Vá em File > New File (Ctrl + N) > State Machine File > OK
Figura 2 - Opção de arquivo para Máquina de Estados Finitos
Salve o arquivo criado na Área de Trabalho com nome de “MEF_Pratica”
acessando File > Save.
3
A seguir, clique no ícone STATE MACHINE WIZARD na barra superior de
ferramentas da janela de edição que foi criada.
Figura 3 - Icone da ferramenta State Machine Wizard
Selecione a opção “Edit an existing state machine design”
A seguinte tela irá surgir, na aba General pode-se alterar a máquina criada para
modo síncrono e assíncrono, bem como o reset da máquina, que pode ocorrer em nível
alto ou baixo. Neste caso, nenhuma opção foi alterada nesta aba.
Figura 4 - Aba General da ferramenta State Machine Wizard
Na aba Inputs selecione a célula <New> e aperte Enter, a célula ficará editável,
digite Entrada1.
4
Figura 5 - Aba Inputs da ferramenta State Machine Wizard
Repita o procedimento na aba Outputs e crie duas saídas chamadas Saida1 e
Saida2, configurando também a opção “Output State” para “Next clock cycle”
Note que nesta etapa você pode criar uma máquina que atualize sua saída no
ciclo de clock atual ou no próximo ciclo de clock, permitindo a configuração de máquinas
de estado finito no modelo Mealey ou Moore respectivamente.
Figura 6 - Aba Outputs da ferramenta State Machine Wizard
Na aba States, crie os onze estados, como por exemplo da letra A até a letra L.
Observe que na coluna “Reset” aparece uma correspondência escrito “Yes”, isto
significa que o estado da linha correspondente corresponde ao estado inicial do
programa.
5
Figura 7 - Aba States da ferramenta State Machine Wizard
Na aba Transitions, crie transições de estados conforme as indicadas na Figura
1. Note que tanto em Source State quanto em Destination State pode-se selecionar
estados criados anteriormente na aba States.
Note que, caso esta etapa se torne demorada, pode-se dar um OK na ferramenta
State Machine Wizard e usar a ferramenta Transition Tool. Para retornar à edição pelo
assistente, clique novamente na ferramenta State Machine Wizard.
Figura 8 - Ferramenta Transition Tool
A coluna Transition (In Verilog or VHDL’OTHERS’) representa as condições
necessárias para que a transição de estados descrita naquela linha seja verdadeira.
Nível alto pode ser descrito pelo nome da entrada, e nível baixo por ser descrito pelo
nome da entrada precedido por ~.
Tabela 1 – Uso das entradas no campo de Transições.
Nível Alto Entrada1
Nível Baixo ~Entrada1
6
Figura 9 - Aba Transitions da ferramenta State Machine Wizard
Note que, caso esta etapa se torne demorada, pode-se dar um OK na ferramenta
State Machine Wizard e clicar duas vezes sobre o arco que representa transição de um
estado a outro. Para retornar à edição pelo assistente, clique novamente na ferramenta
State Machine Wizard.
Figura 10 - Exemplo dos Estados e Arcos de Transição
7
Figura 11 - Inserção manual da Transição
Na aba Actions pode-se atribuir o valor das saídas, 0 ou 1, em cada estado.
8
Figura 12 - Aba Actions da ferramenta State Machine Wizard
Feito isto, clique em OK e note que a o grafo de estados já foi criado.
Figura 13 - Diagrama da MEF finalizada
9
Figura 14 - Diagrama de estados gerado pelo State Machine Wizard
Salve novamente o arquivo em File > Save.
10
5ª Prática (parte 2) – Implementação da Máquina de Estados
Finitos (MEF) em um projeto existente
1. Se familiarizar com a ferramenta de criação de
máquinas de estado finito do Quartus II;
2. Habilidade para usar o Quartus II para
resolver problemas;
3. Adquirir conceitos básicos do Máquinas de Estado
Finito.
Criando um arquivo compilável
Para implementação de uma MEF desenvolvida no Quartus II em um FPGA,
deve-se converter esta para uma linguagem HDL ou para um Símbolo utilizável. Isto
ocorre devido ao fato do software Quartus II compilar apenas arquivos HDL, como
Verilog, VHDL ou System Verilog, ou Diagrama de Blocos/Arquivo Esquemático.
Desta maneira, abra o arquivo “MEF_Pratica.smf” e clique em Generate HDL File
localizado na barra de ferramentas superior. Você também pode clicar com o botão
direito dentro da janela de edição e selecionar a opção Generate HDL File ou Generate
Other Files.
Figura 15 - Gerando arquivos compiláveis
OBJETIVO:
11
Escolha a linguagem desejada na tela que surgir, neste caso VHDL.
Figura 16 - Opções para geração de arquivos HDL
O código em VHDL aparecerá na Tela, salve-o com o nome de
“MEF_Pratica.vhdl” na Área de Trabalho.
Figura 17 - Parte do arquivo VHDL gerado
Com o código gerado em VHDL gerado, você poderá inclui-lo em seu projeto do
Quartus II e fazer as devidas simulações.
12
Incluindo o arquivo gerado no projeto
Abra seu projeto em File > Open Project.
No grupo Project Navigator, navegue até Files e clique com o botão direito no
item Files
Figura 18 - Adicionando arquivos pela Janela de Navegação do Projeto
Clique em “...” ao lado de Add e encontre o arquivo VHDL “MEF_Pratica.vhdl”,
clique em Add e em seguida OK.
Figura 19 - Janela de gerenciamente de arquivos do projeto
No grupo Files localize o arquivo que foi adicionado e clicando com o botão
direito defina este como entidade de nível mais alto na hierarquia.
Figura 20 - Definindo o arquivo como Top-level entity
13
Clique em Start Analysis & Synthesis, ou navegue até Processing > Start > Start
Analysis & Synthesis.
Figura 21 - Ícone Start Analysis & Synthesis
Se todos passos até aqui foram feitos de forma adequada, o compilador não
deve gerar nenhum erro.
Compile o arquivo em seguida clicando em Compile.
Inserindo estímulos no arquivo VHDL gerado
Crie um novo arquivo em File > New, selecione University Program VWF
Figura 22 - Opção de arquivo para simulação de estímulos
14
Vá em Edit > Insert > Insert Node or Bus, logo após isso, clique em Node
Finder…
Figura 23 - Inserindo Nós ou Barramentos
Clique em “List”, depois em “>>” e então em “OK” duas vezes.
Figura 24 - Localizando nós e barramentos
Todas entradas e saídas devem aparecer do lado esquerdo da tela.
Para máquinas maiores, pode-se utilizar um bus indicando o estado atual, para
isso vá novamente em Edit > Insert > Insert Node or Bus, digite fstate no campo name
e dê OK. Note que este nome se refere ao type mencionado em VHDL.
15
Figura 25 - Inserindo o indicador de estado atual
Para começar a inserir estímulos nos sinais, clique no sinal clock e depois no
botão “Overwrite Clock”. Preencha o valor do período com 20.0 ns e duty cycle em 50%.
Figura 26 - Entradas e saídas inseridas
Selecionando um pedaço do sinal da Entrada1 no diagrama temporal, altere o
seu valor para nível alto clicando em Forcing High (1).
Figura 27 - Ícone Forcing High (1) na barra de tarefas
Figura 28 - Inserindo estímulo na Entrada 1
16
Clique em Run Functional Simulation ou vá até Simulation > Run Functional
Simulation
Figura 29 - Ícone de Run Functional Simulation
Salve a simulação com o nome de “MEF_Pratica.vwf”
Uma janela será aberta e após algum tempo o resultado será apresentado em
uma nova janela contendo o diagrama temporal com o valor da Saida1 atualizado.
Clicando na ferramenta Zoom Tool pode-se observar mais detalhadamente a
atualização da saída em relação à entrada e ao clock.
Analise o funcionamento de sua MEF.
Bibliografia:
Top Related