ELD129003-Engtelecom (Diário) - Prof. Marcos Moecke: mudanças entre as edições

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Moecke (discussão | contribs)
Moecke (discussão | contribs)
 
(37 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 2: Linha 2:
===Unidade 1 - Aula inicial, Introdução a disciplina===
===Unidade 1 - Aula inicial, Introdução a disciplina===
* 1 ENCONTRO
* 1 ENCONTRO
{{collapse top | Unidade 1 - Aula inicial, Introdução a disciplina}}
{{collapse top | expand=true | Unidade 1 - Aula inicial, Introdução a disciplina}}


;Encontro 1 (18 mar.):
;Encontro 1 (12 ago.):
* A '''[[ELD2-EngTelecom (Página) | página da UC]]''' contém os materiais que não alteram entre semestre.
* A '''[[ELD2-EngTelecom (Página) | página da UC]]''' contém os materiais que não alteram entre semestre.
* Relação com as outras UCs do '''Eixo Sistemas Computacionais (Marrom)'''. Ver [https://docente.ifsc.edu.br/moecke/ppc-engtelecom/PPC2023/ grafo do curriculo]
* Relação com as outras UCs do '''Eixo Sistemas Computacionais (Marrom)'''. Ver [https://docente.ifsc.edu.br/moecke/ppc-engtelecom/PPC2023/ grafo do curriculo]
Linha 28: Linha 28:


===Unidade REV - PRIMEIRO CONTATO COM VHDL ===
===Unidade REV - PRIMEIRO CONTATO COM VHDL ===
* 4 ENCONTROS
 
* 5 ENCONTROS
{{collapse top | expand=true | Unidade REV - PRIMEIRO CONTATO COM VHDL}}
{{collapse top | expand=true | Unidade REV - PRIMEIRO CONTATO COM VHDL}}
<!--
;Nivelamento 1:
;Nivelamento 1:
* [https://wiki.sj.ifsc.edu.br/images/7/75/Introdu%C3%A7%C3%A3o_a_linguagem_de_descri%C3%A7%C3%A3o_de_hardware.pdf Introdução a linguagem de descrição de hardware (DHL)]
* [https://wiki.sj.ifsc.edu.br/images/7/75/Introdu%C3%A7%C3%A3o_a_linguagem_de_descri%C3%A7%C3%A3o_de_hardware.pdf Introdução a linguagem de descrição de hardware (DHL)]
Linha 89: Linha 91:
*[[Como arquivar um projeto]]
*[[Como arquivar um projeto]]
*[[Simulação Funcional usando o ModelSim]];
*[[Simulação Funcional usando o ModelSim]];
====REVISÃO ATUAL====
 
;Nivelamento 4 - Circuitos aritméticos:
;Nivelamento 4 - Circuitos aritméticos:
*Circuitos aritméticos: somadores, incrementador, decrementador, complemento de dois, multiplicador, comparadores  
*Circuitos aritméticos: somadores, incrementador, decrementador, complemento de dois, multiplicador, comparadores  
Linha 371: Linha 373:
   
   
</syntaxhighlight>
</syntaxhighlight>
:: Ver pag. 73 a 78 de <ref name="PEDRONI2010b"/>
:Ver pag. 73 a 78 de <ref name="PEDRONI2010b"> PEDRONI, V. A. '''Circuit design and simulation with VHDL'''. 2nd. ed. New Delhi: PHI Learning Private, 2015.</ref>


[[Arquivo:SumaryOfNumeric_std.gif]]
[[Arquivo:SumaryOfNumeric_std.gif]]
Linha 389: Linha 391:
|background colour=#F5FFFA}}
|background colour=#F5FFFA}}
</center>
</center>
<!--
 
;Nivelamento 5 - Instruções WHEN_ELSE, WITH_SELECT, CONFIGURATION:
;Nivelamento 5 - Instruções WHEN_ELSE, WITH_SELECT, CONFIGURATION:


Linha 652: Linha 654:


===Unidade 2 - Dispositivos Lógicos Programáveis ===
===Unidade 2 - Dispositivos Lógicos Programáveis ===
* 3 ENCONTROS
 
{{collapse top | Unidade 2 - Dispositivos Lógicos Programáveis}}
* 5 ENCONTROS
{{collapse top | expand=true | Unidade 2 - Dispositivos Lógicos Programáveis}}
<!--
;Encontro 2 (20 mar.):
;Encontro 2 (20 mar.):


Linha 833: Linha 837:
;Encontro 6 (3 abr.):
;Encontro 6 (3 abr.):
* [https://wiki.sj.ifsc.edu.br/index.php/ELD129003-Engtelecom_(Di%C3%A1rio)_-_Prof._Marcos_Moecke#AE1_-_Conhecendo_os_dispositivos_l.C3.B3gicos_program.C3.A1veis AE1 - Conhecendo os dispositivos lógicos programáveis] - Passo 1 a 4
* [https://wiki.sj.ifsc.edu.br/index.php/ELD129003-Engtelecom_(Di%C3%A1rio)_-_Prof._Marcos_Moecke#AE1_-_Conhecendo_os_dispositivos_l.C3.B3gicos_program.C3.A1veis AE1 - Conhecendo os dispositivos lógicos programáveis] - Passo 1 a 4
-->
{{collapse bottom}}
{{collapse bottom}}


===Unidade 3 - Circuitos sequenciais (Implementação com HDL) ===
===Unidade 3 - Circuitos sequenciais (Implementação com HDL) ===
* 8 ENCONTROS
* 18 ENCONTROS
{{collapse top | expand=true | Unidade 3 - Circuitos sequenciais (Implementação com HDL)}}
{{collapse top | expand=true | Unidade 3 - Circuitos sequenciais (Implementação com HDL)}}
 
<!--
;Encontro 6 (3 abr.):
;Encontro 6 (3 abr.):
*Flip-Flop e circuitos sequenciais.
*Flip-Flop e circuitos sequenciais.
Linha 1 004: Linha 1 009:
Um dos aspectos de projeto mais difíceis de um circuito sequencial é satisfazer as restrições (constraints) de tempo (ex.: Tsetup e Thold). No MÉTODO SÍNCRONO, todos os DFFs utilizam em um único clock.  Assim apenas é necessário lidar com a restrição de tempo de um elemento de memória.
Um dos aspectos de projeto mais difíceis de um circuito sequencial é satisfazer as restrições (constraints) de tempo (ex.: Tsetup e Thold). No MÉTODO SÍNCRONO, todos os DFFs utilizam em um único clock.  Assim apenas é necessário lidar com a restrição de tempo de um elemento de memória.
;Circuito Sequencial Síncrono - Diagrama Conceitual:
;Circuito Sequencial Síncrono - Diagrama Conceitual:
{{fig|5.21|Diagrama conceitual de circuitos síncronos | Concept_RT.png | 600 px | RTL Hardware Desing, P. Chu }}
{{fig|5.21|Diagrama conceitual de circuitos síncronos | Concept_RT.png | 600 px | <ref name="CHU2006"> CHU, P. P. '''RTL Hardware Design Using VHDL: Coding for Efficiency, Portability, and Scalability'''. 1a ed. [S.l]:Wiley-IEEE Press, 2006. 694p. ISBN 9780471720928.</ref> }}


*'''External Input''': Entradas externas fornecem os sinais que afetam a transição entre estados.
*'''External Input''': Entradas externas fornecem os sinais que afetam a transição entre estados.
Linha 1 224: Linha 1 229:




;Encontro 14 (24 abr.):
;Encontro 12 (24 abr.):
*Temporizações de um Flip-Flop.
*Temporizações de um Flip-Flop.
:*atraso do clock para saída (Tcq)
:*atraso do clock para saída (Tcq)
:*tempo de setup (T_{setup}) e tempo de hold (T_{hold})
:*tempo de setup (T_{setup}) e tempo de hold (T_{hold})
{{fig|5.22|Temporizações de um Flip Flop | FF_timing.png | 600 px | RTL Hardware Desing, P. Chu }}
{{fig|5.22|Temporizações de um Flip Flop | FF_timing.png | 600 px | <ref name="CHU2006"/> }}
'''Nota:''' a violação do tempo de setup ou hold leva ao estado de meta-estabilidade, na qual a saída fica temporariamente em um valor indefenido.
'''Nota:''' a violação do tempo de setup ou hold leva ao estado de meta-estabilidade, na qual a saída fica temporariamente em um valor indefenido.
*Os circuitos devem ser projetos para serem globalmente síncronos.
*Os circuitos devem ser projetos para serem globalmente síncronos.


*Violação do tempo de Setup do FF e frequência máxima do circuito (Fmax).
*Violação do tempo de Setup do FF e frequência máxima do circuito (Fmax).
{{fig|5.23|Modelo de Circuito Sequencial | SequencialCktModel.png | 800 px | RTL Hardware Desing, P. Chu }}
{{fig|5.23|Modelo de Circuito Sequencial | SequencialCktModel.png | 800 px | <ref name="CHU2006"/> }}


{{fig|5.24|Tempo de Setup e Fmax | SetupxFmax.png | 1000 px | RTL Hardware Desing, P. Chu }}
{{fig|5.24|Tempo de Setup e Fmax | SetupxFmax.png | 1000 px | <ref name="CHU2006"/> }}


{{fig|5.25|Equações do Tempo de Setup e Fmax (1/Tc(min)) | EquationSetupxFmax.png | 600 px | RTL Hardware Desing, P. Chu }}
{{fig|5.25|Equações do Tempo de Setup e Fmax (1/Tc(min)) | EquationSetupxFmax.png | 600 px | <ref name="CHU2006"/> }}


{{fig|5.26|Equações do Tempo de Hold | EquationHold.png | 600 px | RTL Hardware Desing, P. Chu }}
{{fig|5.26|Equações do Tempo de Hold | EquationHold.png | 600 px | <ref name="CHU2006"/> }}


{{fig|5.27|Atraso da saída | EquationOutputDelay.png | 600 px | RTL Hardware Desing, P. Chu }}
{{fig|5.27|Atraso da saída | EquationOutputDelay.png | 600 px | <ref name="CHU2006"/> }}


;Para o próximo encontro:
;Para o próximo encontro:
Linha 1 253: Linha 1 258:




;Encontro 15 (29 abr.):
;Encontro 13 (29 abr.):
Instruções do tipo '''LOOP''': LOOP incondicional, '''FOR-LOOP''', '''WHILE-LOOP''', '''NEXT''', '''EXIT'''  
Instruções do tipo '''LOOP''': LOOP incondicional, '''FOR-LOOP''', '''WHILE-LOOP''', '''NEXT''', '''EXIT'''  


Linha 1 357: Linha 1 362:
*Ver pag. 161 a 164 de <ref name="PEDRONI2010b"/>
*Ver pag. 161 a 164 de <ref name="PEDRONI2010b"/>


;Encontro 16 (6 mai.):
;Encontro 14 (6 mai.):
*Implemente o contador de sequencia arbitraria (implementado com when else) (ver Listing 8.11 - Arbitrar-sequence counter).
*Implemente o contador de sequencia arbitraria (implementado com when else) (ver Listing 8.11 - Arbitrar-sequence counter).
*Implemente o contador com opções de clear sincrono, load, e parada (ver Listing 8.13 - Featured binary counter).
*Implemente o contador com opções de clear sincrono, load, e parada (ver Listing 8.13 - Featured binary counter).
*Implemente o contador de modulo m (onde m é uma entrada) (ver Listing 8.15 e 8.16 - Programmable mod-m counter).
*Implemente o contador de modulo m (onde m é uma entrada) (ver Listing 8.15 e 8.16 - Programmable mod-m counter).


;Encontro 17 (8 mai.):
;Encontro 15 (8 mai.):
* Projetar um divisor de clock que dado um clock de entrada de fclk Hz, produza na saída um sinal de clock de f/N onde N é um número inteiro ('''div_clk''')
* Projetar um divisor de clock que dado um clock de entrada de fclk Hz, produza na saída um sinal de clock de f/N onde N é um número inteiro ('''div_clk''')
<syntaxhighlight lang=vhdl>
<syntaxhighlight lang=vhdl>
Linha 1 407: Linha 1 412:
:*Contador de segundos e minutos síncrono (ver Listing 9.6)
:*Contador de segundos e minutos síncrono (ver Listing 9.6)


;Encontro 18 (13 mai.):
;Encontro 16 (13 mai.):
*Fazer a compilação completa, simular e fazer o timing analysis dos seguintes circuitos:
*Fazer a compilação completa, simular e fazer o timing analysis dos seguintes circuitos:
:*Contador de segundos e minutos com clock derivado (ver Listing 9.5)
:*Contador de segundos e minutos com clock derivado (ver Listing 9.5)
{{fig|3.17|Contador de segundos e minutos - clock derivado| contaSSMMclk.png| 600 px | RTL Hardware Desing, P. Chu. }}
{{fig|3.17|Contador de segundos e minutos - clock derivado| contaSSMMclk.png| 600 px | <ref name="CHU2006"/> }}


:*Contador de segundos e minutos síncrono (ver Listing 9.6)
:*Contador de segundos e minutos síncrono (ver Listing 9.6)
{{fig|3.18|Contador de segundos e minutos - clock síncrono | contaSSMMsync.png| 600 px | RTL Hardware Desing, P. Chu. }}
{{fig|3.18|Contador de segundos e minutos - clock síncrono | contaSSMMsync.png| 600 px | <ref name="CHU2006"/>}}




;Encontro 19 (15 mai.):
;Encontro 17(15 mai.):
Comparar o desempenho Fmax, número de elementos lógicos, número de registradores, número de pinos dos seguintes contadores, considerando uma saída de N_bits.
Comparar o desempenho Fmax, número de elementos lógicos, número de registradores, número de pinos dos seguintes contadores, considerando uma saída de N_bits.
*Contador binario sequencial  
*Contador binario sequencial  
   b_next <= b_reg+1;  
   b_next <= b_reg+1;  


*Contador Gray (só troca um bit por vez) [https://drive.google.com/file/d/1GTkw-JvBRljvfJJNOA_cGmZzWkKDhp8M/view?usp=drive_link Listagem 9.7 do livro do P. Chu]
*Contador Gray (só troca um bit por vez) [https://drive.google.com/file/d/1GTkw-JvBRljvfJJNOA_cGmZzWkKDhp8M/view?usp=drive_link L9.7 de  <ref name="CHU2006"/>]
:: ver [[Código Gray]]
:: ver [[Código Gray]]
   b <= g_reg xor ('0' & b(WIDTH-1 downto 1));
   b <= g_reg xor ('0' & b(WIDTH-1 downto 1));
Linha 1 427: Linha 1 432:
   g_next <= b1 xor ('0' & b1(WIDTH-1 downto 1));
   g_next <= b1 xor ('0' & b1(WIDTH-1 downto 1));


*Contador em anel (desloca um padrão inicial) [https://drive.google.com/file/d/1KEswDlpNqbgROcsr4MMh4BCr2tmDB3-k/view?usp=drive_link Listagem 9.8 e 9.9 do livro do P. Chu]
*Contador em anel (desloca um padrão inicial) [https://drive.google.com/file/d/1KEswDlpNqbgROcsr4MMh4BCr2tmDB3-k/view?usp=drive_link L9.8 e 9.9 de  <ref name="CHU2006"/>]
   r_next <= r_reg(0) & r_reg(WIDTH-1 downto 1);
   r_next <= r_reg(0) & r_reg(WIDTH-1 downto 1);


*Contador Johnson (uso de um inversor na realimentação do contador em anel)
*Contador Johnson (uso de um inversor na realimentação do contador em anel)
   r_next <= (not r_reg(0)) & r_reg(WIDTH-1 downto 1);  
   r_next <= (not r_reg(0)) & r_reg(WIDTH-1 downto 1);  
*Contador LFSR (Linear Feedback Shift Register) [https://drive.google.com/file/d/1wjypyztGMxiUxsPNwZ8j-PQkTMwoyFu3/view?usp=drive_link Listagem 9.10 e 9.11 do livro do P. Chu]
*Contador LFSR (Linear Feedback Shift Register) [https://drive.google.com/file/d/1wjypyztGMxiUxsPNwZ8j-PQkTMwoyFu3/view?usp=drive_link L9.10 e 9.11 de  <ref name="CHU2006"/>]
   fb <= r_reg(1) xor r_reg(0);
   fb <= r_reg(1) xor r_reg(0);
   r_next <= fb & r_reg(3 downto 1);
   r_next <= fb & r_reg(3 downto 1);
Linha 1 440: Linha 1 445:
* Consultar [https://users.ece.cmu.edu/~koopman/lfsr/] ou a página 5 de [https://docs.amd.com/v/u/en-US/xapp052] para obter os termos que são usados na realimentação.
* Consultar [https://users.ece.cmu.edu/~koopman/lfsr/] ou a página 5 de [https://docs.amd.com/v/u/en-US/xapp052] para obter os termos que são usados na realimentação.


;Encontro 20 (20 mai.):
;Encontro 18(20 mai.):
*'''Circuito de PWM''' (''Pulse Width Modulation'' - Modulação por largura de pulso) [https://drive.google.com/file/d/1FLvKLrSAZs9HQkz-QxkB3rsDHyGryf1-/view?usp=drive_link Listagem 9.14 do livro do P. Chu].  
*'''Circuito de PWM''' (''Pulse Width Modulation'' - Modulação por largura de pulso) [https://drive.google.com/file/d/1FLvKLrSAZs9HQkz-QxkB3rsDHyGryf1-/view?usp=drive_link L9.14 de  <ref name="CHU2006"/>].  
:*Em algumas aplicações ao invés de usar diretamente a contagem, se usa o estado do contador para geram sinais de saída. Um exemplo é um circuito de modulação por largura de pulso (PWM), que gera um pulso de saída com um ciclo de trabalho ajustável.  
:*Em algumas aplicações ao invés de usar diretamente a contagem, se usa o estado do contador para geram sinais de saída. Um exemplo é um circuito de modulação por largura de pulso (PWM), que gera um pulso de saída com um ciclo de trabalho ajustável.  
:*Por exemplo, em um circuito PWM que tem 16 passos, o ciclo de trabalho pode ser ajustado em incrementos de 1/16, ou seja, o ciclo de trabalho pode ser 1/16, 2/16, 3/16, ..., até 16/16. Este circuito pode ser implementado por um contador mod-16 com um circuito de saída especial, que define o valor da saída em alto de acordo com o valor da contagem. O período dos pulsos de saída neste caso sempre será de 16 vezes o período do relógio.   
:*Por exemplo, em um circuito PWM que tem 16 passos, o ciclo de trabalho pode ser ajustado em incrementos de 1/16, ou seja, o ciclo de trabalho pode ser 1/16, 2/16, 3/16, ..., até 16/16. Este circuito pode ser implementado por um contador mod-16 com um circuito de saída especial, que define o valor da saída em alto de acordo com o valor da contagem. O período dos pulsos de saída neste caso sempre será de 16 vezes o período do relógio.   
Linha 1 463: Linha 1 468:
:*'''Versão 1:''' Com underflow no valor mínimo (MIN) e overflow no máximo (MAX).
:*'''Versão 1:''' Com underflow no valor mínimo (MIN) e overflow no máximo (MAX).
:*'''Versão 2:''' Com parada no valor mínimo (MIN), se decrescente e também no máximo (MAX) se crescente.
:*'''Versão 2:''' Com parada no valor mínimo (MIN), se decrescente e também no máximo (MAX) se crescente.
;Encontro 21 (22 mai.):
;Encontro 19 (22 mai.):
*Instrução '''IF GENERATE'''
*Instrução '''IF GENERATE'''


Linha 1 685: Linha 1 690:




;Encontro 22 (27 mai.):
;Encontro 20 (27 mai.):
*Uso de componentes e instanciação de componentes.
*Uso de componentes e instanciação de componentes.
<blockquote style="background: lightblue; border: 3px solid black; padding: 1em;">
<blockquote style="background: lightblue; border: 3px solid black; padding: 1em;">
Linha 1 701: Linha 1 706:
; Declaração do componente:
; Declaração do componente:
Antes de usar um componente em uma arquitetura, ele precisa ser declarado no escopo da arquitetura (a menos que você esteja usando bibliotecas com pacotes, onde a declaração pode ser omitida). A declaração define os sinais de entrada e saída do componente.
Antes de usar um componente em uma arquitetura, ele precisa ser declarado no escopo da arquitetura (a menos que você esteja usando bibliotecas com pacotes, onde a declaração pode ser omitida). A declaração define os sinais de entrada e saída do componente.
component_declaration ::= 
    component identifier [ is ] 
        [ generic_clause ] 
        [ port_clause ] 
    end component [ identifier ] ;


Exemplo de declaração do componente:
Exemplo de declaração do componente:


<syntaxhighlight lang=vhdl>
<syntaxhighlight lang=vhdl>
component MeuComponente
component MeuComponente is
     generic (
     generic (
         WIDTH : natural := 4
         WIDTH : natural := 4
Linha 1 828: Linha 1 839:


     -- Declaração do componente
     -- Declaração do componente
     component MeuComponente
     component MeuComponente is
         port (
         port (
             clk  : in  std_logic;
             clk  : in  std_logic;
Linha 1 919: Linha 1 930:
O '''open''' informa que a saída valid não será usada e evita que o compilador gere erros.
O '''open''' informa que a saída valid não será usada e evita que o compilador gere erros.
{{collapse bottom}}  
{{collapse bottom}}  
Ao fazer as mesmas perguntas para a mesma IA, as respostas podem ser diferentes.  Por isso, todas respostas de IA deve passar por um processo de curadoria por humanos.   
Ao fazer as mesmas perguntas para a mesma IA, as respostas podem ser diferentes.  Por isso, todas respostas de IA deve passar por um processo de curadoria por humanos.  
;Encontro 23 a 27 (29 mai. a 05 jun.): Timer de segundos, com mostrador SSD
   
;Encontro 21 a 23 (29 mai. a 05 jun.): Timer de segundos, com mostrador SSD
*Utilize como componente o contador BCD 00-99 já foi construido em aula anterior ('''contaBCD.vhd'''). Será necessário acrescentar um sinal de enable ao contador, também assegure-se que seja possível configurar a contagem de 00 até NN.  Através do IF GENERATE disponibilize um contador que faça o overflow, e outro que pare ao chegar ao final da contagem. Também inclua uma entrada  ZERAR, e outra de CONTAR, que tem a função dada pelo nome.
*Utilize como componente o contador BCD 00-99 já foi construido em aula anterior ('''contaBCD.vhd'''). Será necessário acrescentar um sinal de enable ao contador, também assegure-se que seja possível configurar a contagem de 00 até NN.  Através do IF GENERATE disponibilize um contador que faça o overflow, e outro que pare ao chegar ao final da contagem. Também inclua uma entrada  ZERAR, e outra de CONTAR, que tem a função dada pelo nome.
*Utilize como componente o divisor de clock para gerar um sinal de enable para o contador a cada segundo ('''div_clk.vhd''').  
*Utilize como componente o divisor de clock para gerar um sinal de enable para o contador a cada segundo ('''div_clk.vhd''').  
Linha 1 968: Linha 1 980:
*Ver funcionamento do [[Display de 7 segmentos]]
*Ver funcionamento do [[Display de 7 segmentos]]


 
-->
<!--
<!--


Linha 2 084: Linha 2 096:


===Unidade 4 - Maquinas de Estado Finitas===
===Unidade 4 - Maquinas de Estado Finitas===
* 5 ENCONTROS
{{collapse top | expand=true | Unidade 4 - Maquinas de Estado Finitas}}
{{collapse top | expand=true | Unidade 4 - Maquinas de Estado Finitas}}
;Encontro 25 (12 jun.)
<!--
;Encontro 26 (12 jun.)
* O que é uma FSM - Finite State Machine
* O que é uma FSM - Finite State Machine
{{fig|4.1|Exemplo de diagrama de estados de uma FSM Fig4.1(a) e implementação em hardware da FSM Fig4.2(a)|Fig11_1_FSM.png|800 px|Figura 11.1 e 11.2 de <ref name="PEDRONI2010b"/>}}
{{fig|4.1|Exemplo de diagrama de estados de uma FSM Fig4.1(a) e implementação em hardware da FSM Fig4.2(a)|Fig11_1_FSM.png|800 px|Figura 11.1 e 11.2 de <ref name="PEDRONI2010b"/>}}
Linha 2 178: Linha 2 192:
:: Ver pag. 277 a 280 de <ref name="PEDRONI2010b"/>
:: Ver pag. 277 a 280 de <ref name="PEDRONI2010b"/>
:: Note que o uso da atribuição manual do '''enum_encoding''' pode faz com que o compilador do Quartus não  reconheça a FSM, mas use logica regular para representar o sistema.
:: Note que o uso da atribuição manual do '''enum_encoding''' pode faz com que o compilador do Quartus não  reconheça a FSM, mas use logica regular para representar o sistema.
 
;Encontro 27  (12 jun.)
;Encontro 26 (17 jun.)
* AE16 - Controlador de Semáforo de duas vias - trabalho remoto na nuvem
:* Controlador semafórico para duas vias
;Encontro 28 (17 jun.)
::*Use o template da FSM para modelar o controlador semafórico da figurar a seguir.
* AE16 - Controlador de Semáforo de duas vias
:*Use o template da FSM para modelar o controlador semafórico da figurar a seguir.


{{fig|4.2|FSM - Controlador semafórico para duas vias  (diagrama de estados)|FSM_Sema2Vias.png|800 px| }}
{{fig|4.2|FSM - Controlador semafórico para duas vias  (diagrama de estados)|FSM_Sema2Vias.png|800 px| }}


;Encontro 27 (24 jun.)
;Encontro 29 (24 jun.)
* Diagrama de blocos de uma FSM completa. Diferença entre saída Moore e saída Mealy.
* Diagrama de blocos de uma FSM completa. Diferença entre saída Moore e saída Mealy.
:No diagrama abaixo, uma FSM (''Finite State Machine'') é modelada através dos seus componentes básicos:  
:No diagrama abaixo, uma FSM (''Finite State Machine'') é modelada através dos seus componentes básicos:  
Linha 2 197: Linha 2 212:


* Modelagem de FSM com Diagrama de Estados e ASM (''Algorithmic State Machine'').  
* Modelagem de FSM com Diagrama de Estados e ASM (''Algorithmic State Machine'').  
{{fig|4.4|Blocos de um diagrama ASM |ASM_Block.png|600 px|Figure 10.4 de RTL Hardware Desing, P. Chu <ref name="CHU2006"/>}}
{{fig|4.4|Blocos de um diagrama ASM |ASM_Block.png|600 px|Figure 10.4 de <ref name="CHU2006" />}}
 


*Exemplo da modelagem de um controlador de memória com modo de leitura '''BURST'''.
*Exemplo da modelagem de um controlador de memória com modo de leitura '''BURST'''.
{{fig|4.5|Diagrama de estados de um controlador de memória|Mem_ctrl_SD.png|400 px|Figure 10.3 de RTL Hardware Desing, P. Chu <ref name="CHU2006"/>}}
{{fig|4.5|Diagrama de estados de um controlador de memória|Mem_ctrl_SD.png|400 px|Figure 10.3 de <ref name="CHU2006"/>}}


{{fig|4.6|ASM de um controlador de memória|Mem_ctrl_ASM.png|400 px|Figure 10.9 de RTL Hardware Desing, P. Chu <ref name="CHU2006"/>}}
{{fig|4.6|ASM de um controlador de memória|Mem_ctrl_ASM.png|400 px|Figure 10.9 <ref name="CHU2006"/>}}
* A partir da descrição da FSM em diagrama de estados ou na forma ASM, é possível implementar essa FSM em VHDL.  No código a seguir, é feita a descrição da FSM usando um código em dois segmentos, no qual o primeiro PROCESS realiza a atualização do Registrador de Estado, e o segundo PROCESS realiza a Lógica do Próximo Estado, Lógicas de Saída Moore e a Lógica de Saída Mealy.
* A partir da descrição da FSM em diagrama de estados ou na forma ASM, é possível implementar essa FSM em VHDL.  No código a seguir, é feita a descrição da FSM usando um código em dois segmentos, no qual o primeiro PROCESS realiza a atualização do Registrador de Estado, e o segundo PROCESS realiza a Lógica do Próximo Estado, Lógicas de Saída Moore e a Lógica de Saída Mealy.


Linha 2 270: Linha 2 284:
end architecture;
end architecture;
</syntaxhighlight>
</syntaxhighlight>
Fonte: adaptado de RTL Hardware Desing, P. Chu.
Fonte: adaptado <ref name="CHU2006"/>.


{{fig|4.7|RTL do controlador de memória|Mem_ctrl_RTL.png|600 px| Quartus Light}}
{{fig|4.7|RTL do controlador de memória|Mem_ctrl_RTL.png|600 px| Quartus Light}}
Linha 2 284: Linha 2 298:
{{fig|4.10|Simulação de escritas, leituras simples e leitura em burst no controlador de memoria |FSM_Mem_SIM.png|1000 px|}}
{{fig|4.10|Simulação de escritas, leituras simples e leitura em burst no controlador de memoria |FSM_Mem_SIM.png|1000 px|}}


;Encontro 28 (26 jun.)
;Encontro 30 (26 jun.)
*Circuito detector de borda
*Circuito detector de borda
{{fig|4.11|Diagram de estados do detector de borda - implementação com saídas Moore|SD_edge_detector_moore.png|200 px| Fonte: RTL Hardware Desing, P. Chu.}}
{{fig|4.11|Diagram de estados do detector de borda - implementação com saídas Moore|SD_edge_detector_moore.png|200 px| Fonte: <ref name="CHU2006"/>}}


<syntaxhighlight lang=vhdl>
<syntaxhighlight lang=vhdl>
Linha 2 341: Linha 2 355:
end moore_arch;
end moore_arch;
</syntaxhighlight>
</syntaxhighlight>
Fonte: RTL Hardware Desing, P. Chu.
Fonte: <ref name="CHU2006"/>.
{{fig|4.12|Simulação do detector de borda - implementação com saídas Moore|FSM_edge_detector_moore.png|1000 px|}}
{{fig|4.12|Simulação do detector de borda - implementação com saídas Moore|FSM_edge_detector_moore.png|1000 px|}}


Ao simular o detector de borda, percebe-se que o primeiro pulso (entre 140 e 180 ps) não foi detectado, pois não durou tempo suficiente para ter o estado atualizado no próximo clock. Isso ocorre pois na saída tipo Moore, as mudanças das saídas só acontecem sincronizadas com o clock.  Note ainda que os pulsos em p1 tem a duração exata de um período de clock.
Ao simular o detector de borda, percebe-se que o primeiro pulso (entre 140 e 180 ps) não foi detectado, pois não durou tempo suficiente para ter o estado atualizado no próximo clock. Isso ocorre pois na saída tipo Moore, as mudanças das saídas só acontecem sincronizadas com o clock.  Note ainda que os pulsos em p1 tem a duração exata de um período de clock.


{{fig|4.13|Diagram de estados do detector de borda - implementação com saídas Mealy|SD_edge_detector_mealy.png|200 px| Fonte: RTL Hardware Desing, P. Chu.}}
{{fig|4.13|Diagram de estados do detector de borda - implementação com saídas Mealy|SD_edge_detector_mealy.png|200 px| Fonte: <ref name="CHU2006"/>}}


<syntaxhighlight lang=vhdl>
<syntaxhighlight lang=vhdl>
Linha 2 395: Linha 2 409:
end mealy_arch;
end mealy_arch;
</syntaxhighlight>
</syntaxhighlight>
Fonte: RTL Hardware Desing, P. Chu.
Fonte: <ref name="CHU2006"/>.
{{fig|4.14|Simulação do detector de borda - implementação com saídas Mealy |FSM_edge_detector_mealy.png|1000 px|}}
{{fig|4.14|Simulação do detector de borda - implementação com saídas Mealy |FSM_edge_detector_mealy.png|1000 px|}}


Linha 2 408: Linha 2 422:




{{fig|4.15|Diagram de estados do detector de borda - implementação com saídas Mealy melhorado|SD_edge_detector_mealy2.png|200 px| Fonte: RTL Hardware Desing, P. Chu.}}
{{fig|4.15|Diagram de estados do detector de borda - implementação com saídas Mealy melhorado|SD_edge_detector_mealy2.png|200 px| Fonte: <ref name="CHU2006"/>}}
 
-->
<!--
<!--
;Encontro reserva
;Encontro reserva
Linha 2 439: Linha 2 453:


===Unidade 5 - Metodologia RT (Register Transfer)===
===Unidade 5 - Metodologia RT (Register Transfer)===
* 7 ENCONTROS
{{collapse top | expand=true | Unidade 5 - Metodologia RT (Register Transfer)}}
{{collapse top | expand=true | Unidade 5 - Metodologia RT (Register Transfer)}}
A fonte principal dessa unidade é o capítulo 11 e 12 do livro "RTL Hardware Desing, P. Chu.". É recomendado que os alunos leiam estes capítulos e usem como fonte de consulta.
<!--
;Encontro 29 (1 jul.)
A fonte principal dessa unidade é o capítulo 11 e 12 do livro "RTL Hardware Design Using VHDL: Coding for Efficiency, Portability, and Scalability, P. P. Chu." <ref name="CHU2006"/> É recomendado que os alunos leiam estes capítulos e usem como fonte de consulta.
;Encontro 31 (1 jul.)
:* Um algoritmo é uma sequência detalhada de ações ou passos para realizar uma tarefa ou resolver um problema. Como a semântica das linguagens de programação tradicionais também se baseia na execução sequencial, um algoritmo pode ser facilmente convertido em um programa utilizando as construções dessas linguagens. O programa, então, é compilado em instruções de máquina e executado em um computador de uso geral.
:* Um algoritmo é uma sequência detalhada de ações ou passos para realizar uma tarefa ou resolver um problema. Como a semântica das linguagens de programação tradicionais também se baseia na execução sequencial, um algoritmo pode ser facilmente convertido em um programa utilizando as construções dessas linguagens. O programa, então, é compilado em instruções de máquina e executado em um computador de uso geral.
*Exemplo de '''algoritmo que soma de 4 números''' e divide o resultado por 8.  
*Exemplo de '''algoritmo que soma de 4 números''' e divide o resultado por 8.  
Linha 2 503: Linha 2 519:


*Visão geral do FSMD
*Visão geral do FSMD
{{fig|4.1|Diagrama de blocos básico de uma FSMD |FSMD_block_diagram.png|800 px| RTL Hardware Desing, P. Chu}}
{{fig|5.1|Diagrama de blocos básico de uma FSMD |FSMD_block_diagram.png|500 px| <ref name="CHU2006"/>}}


====ATUAL====
;Encontro 32 e 33 (3 e 8 jul.) - Multiplicador por adição repetitivas.
;Encontro 30 (3 jul.) - Multiplicador por adição repetitivas.
''Nota: Este exemplo é apresentado no livro <ref name="CHU2006"/> na seção 11.3''
''Nota: Este exemplo é apresentado no livro RTL Hardware Desing, P. Chu na seção 11.3''


Considere um multiplicador como os dois operandos da multiplicação sendo '''a_in''' e '''b_in''', e a saída '''r_out''' onde todos os três sinais são do tipo UNSIGNED. Um algoritmo sequencial simples consiste em somar '''a_in''' repetidamente por'''b_in''' vezes. Por exemplo, 7×5 pode ser calculado como 7 + 7 + 7 + 7 + 7. Embora esse método não seja eficiente, ele é simples, e permite apreender a elaboração do diagrama ASMD e do hardware. Esse algoritmo pode ser representado pelo pseudocódigo:
Considere um multiplicador como os dois operandos da multiplicação sendo '''a_in''' e '''b_in''', e a saída '''r_out''' onde todos os três sinais são do tipo UNSIGNED. Um algoritmo sequencial simples consiste em somar '''a_in''' repetidamente por'''b_in''' vezes. Por exemplo, 7×5 pode ser calculado como 7 + 7 + 7 + 7 + 7. Embora esse método não seja eficiente, ele é simples, e permite apreender a elaboração do diagrama ASMD e do hardware.  
;Pseudocódigo do algoritmo:
Esse algoritmo pode ser representado pelo pseudocódigo:
<pre>
<pre>
if (a_in = 0 or b_in = 0) then  
if (a_in = 0 or b_in = 0) then  
     r = 0
     r_out = 0
else
else
     a = a_in
     a = a_in
Linha 2 520: Linha 2 537:
         r = r + a
         r = r + a
         n = n - 1
         n = n - 1
r_out = r
    r_out = r
</pre>
</pre>
Como o diagrama ASMD não possui uma construção de laço (loop), mas usa uma caixa de decisão com uma condição booleana para escolher um entre dois caminhos de saída possíveis. Portanto é semelhante a uma combinação de '''if''' com instrução '''goto'''. O pseudocódigo revisado fica assim:
Como o diagrama ASMD não possui uma construção de laço (loop), mas usa uma caixa de decisão com uma condição booleana para escolher um entre dois caminhos de saída possíveis. Portanto é semelhante a uma combinação de '''if''' com instrução '''goto'''. O pseudocódigo revisado fica assim:
Linha 2 539: Linha 2 556:
</pre>
</pre>


;ASMD do algoritmo:
Observe na ASMD abaixo que os sinais '''start''' (início) e '''ready''' (pronto) foram adicionados para permitir a operação sequencial do sistema. Imaginando o multiplicador sequencial como parte de um sistema principal, quando ele deseja executar uma operação de multiplicação, primeiro verifica o sinal '''ready'''. Se estiver alto, coloca os dois operandos nas entradas de dados '''a_in''' e '''b_in''' e ativa o sinal '''start'''. Ao detectar o sinal start, o multiplicador sequencial captura os operandos e inicia o processamento. Após a conclusão do cálculo, o sinal ready é ativado para informar ao sistema principal que o resultado está disponível em '''r_out'''.
Observe na ASMD abaixo que os sinais '''start''' (início) e '''ready''' (pronto) foram adicionados para permitir a operação sequencial do sistema. Imaginando o multiplicador sequencial como parte de um sistema principal, quando ele deseja executar uma operação de multiplicação, primeiro verifica o sinal '''ready'''. Se estiver alto, coloca os dois operandos nas entradas de dados '''a_in''' e '''b_in''' e ativa o sinal '''start'''. Ao detectar o sinal start, o multiplicador sequencial captura os operandos e inicia o processamento. Após a conclusão do cálculo, o sinal ready é ativado para informar ao sistema principal que o resultado está disponível em '''r_out'''.


O diagrama ASMD, mostrado na figura abaixo, segue de forma fiel o pseudoalgoritmo. Ele utiliza os registradores de dados '''n''', '''a''' e '''r''' para representar as três variáveis do algoritmo, emprega caixas de decisão para implementar as estruturas condicionais (if) e utiliza operações de transferência entre registradores (operações RT) para executar as instruções sequenciais.
O diagrama ASMD, mostrado na figura abaixo, segue de forma fiel o pseudoalgoritmo. Ele utiliza os registradores de dados '''n''', '''a''' e '''r''' para representar as três variáveis do algoritmo, emprega caixas de decisão para implementar as estruturas condicionais (if) e utiliza operações de transferência entre registradores (operações RT) para executar as instruções sequenciais.


{{fig|5.2|Diagrama ASMD do algoritmo multiplicador L11.1 |ASMD_mult_sum.png|400 px| RTL Hardware Desing, P. Chu}}
{{fig|5.2|Diagrama ASMD do algoritmo multiplicador L11.1 |ASMD_mult_sum.png|400 px| <ref name="CHU2006"/>}}


;FSMD do algoritmo:


{{fig|5.3|FSMD do algoritmo multiplicador L11.1 |FSMD_mult_sum.png|800 px| RTL Hardware Desing, P. Chu}}
;Construção do CONTROL PATH:


*Implemente em VHDL o [https://drive.google.com/file/d/1f7DqWL9390nTGgXUVdd01CaSAJX-UxOC/view?usp=drive_link Listing 11.1 do livro do CHU]
A construção do '''caminho de controle''' (CONTROL PATH) (1 - next state logic), (2 - state reg) e (3 - output logic) é a mesma utilizada com a máquina de estados (FSM). Os sinais dentro da caixa de decisão são as entradas da FSM. No diagrama ASMD, as expressões booleanas utilizam quatro sinais: '''start''' (comando externo) e '''a_is_0''' (8), '''b_is_0'''(9) e '''count_0''' (10) ('''sinais de status''' internos, provenientes do caminho de dados). Eles são ativados quando as condições correspondentes são satisfeitas. Os sinais (8) e (9) são resultado direto da comparação das entradas a_in = 0 e 'b_in = 0. O sinal (10) por utilizar um sinal interno necessita utilizar a entrada do registrador '''n''' (n_next = 0).


*Simulação essa FSMD, verificando o funcionamento da FSM através da simulação no MODELSIM.  Teste com multiplicações menores  (2 x 31 = 62); (31 x 2 = 62) e maiores (9 x 31 = 279) (31 x 9 = 279).
A saída do caminho de controle inclui o sinal externo de status '''ready''' (pronto) e os '''sinais de controle''' que especificam as operações de transferência entre registradores (operações RT) no '''caminho de dados'''. Neste exemplo, foi usada a saída do registrador de estado como sinal de controle ('''idle''', '''ab0''', '''load''', '''op'''), os quais controlam a seleção nos multiplexadores usados na rede de roteamento do caminho de dados.
:*Anote a '''Fmax''' e meça o número de clocks ('''N_clk''') transcorrido entre duas bordas de subida do sinal '''READY'''. Dica use dois cursores para medir o tempo total , e divida pelo período do clock utilizado na simulação.
 
:* Analise se ocorre alguma melhorias em termos de tempo de processamento ('''N_clk/Fmax''') e número de elementos lógicos nas versões L11.1 a L11.3, L11.5 e L11.6.  Também verifique se o resultado está correto em todas as versões.  Verifique também a versão 11.4.
;Construção da DATA PATH:
A construção do caminho de dados pode ser derivada de forma sistemática seguindo diretrizes simples:
:1 - Liste todas as '''operações RT''' possíveis no diagrama ASMD, incluindo as operações RT padrão (default).
:2 - Agrupe as operações RT de acordo com seus registradores de destino.
:3 - Para cada grupo, derive o circuito seguindo o processo:
::(a) Construa o registrador de destino.
::(b) Construa os circuitos combinacionais envolvidos em cada operação RT.
::(c) Adicione circuitos de multiplexação e roteamento se o registrador de destino estiver associado a múltiplas operações RT.
:4 - Adicione os circuitos necessários para gerar os sinais de status.


<!--
No exemplo da multiplicação por adição repetitiva  as operações RT
;Encontro 35 (18 fev.)
*com o registrador r:
*Implementação de um multiplicador por deslocamento de bits e somas sequenciais
:r ← r (no estado idle)
*Implemente em VHDL o [https://drive.google.com/file/d/1f7DqWL9390nTGgXUVdd01CaSAJX-UxOC/view?usp=drive_link Listing 11.7  do livro do CHU]
:r ← 0 (nos estados load e ab0)
{{fig|4.14|Diagrama ASMD do algoritmo multiplicador  L11.7 e 11.8 |ASMD_mult_shift_sum.png|300 px| RTL Hardware Desing, P. Chu}}
:r ← r + a (no estado op)
*Análise de tempo e desempenho do FSMD
*com o registrador n:
:n ← n (no estado idle)
:n ← b-in (nos estados load e ab0)
:n ← n - 1 (no estado op)
*com o registrador a:
:a ← a (nos estados idle e op)
:a ← a-in (nos estados load e ab0)


*Implementação de um multiplicador por somas sucessivas em dataflow (a + a + a + ...)
{{fig|5.3|FSMD do algoritmo multiplicador L11.1 |FSMD_mult_sum.png|600 px| <ref name="CHU2006"/>}}
*Implementação de um multiplicador pelo bloco multiplicador (a x b)


;Encontro 36 a 39 (20, 22, 25, 27 fev.)
;Melhoria da implementação do algoritmo com saída Mealy:
*Realização da [https://wiki.sj.ifsc.edu.br/index.php/ELD129003-Engtelecom_(Di%C3%A1rio)_-_Prof._Marcos_Moecke#AE4_-_Compara%C3%A7%C3%A3o_de_Hardware_projetado_por_FSMD_e_Dataflow AE4 - Comparação de Hardware projetado por FSMD e Dataflow]
Observando o ASMD acima, pode-se perceber que as saídas do estado ab0 e load são as mesmas, e portanto elas poderiam ser inseridas após a decisão '''start = 1''', como saídas Mealy. Essa modificação produz um novo ASMD para o mesmo algoritmo, que apenas tem 2 estados.


;Encontro 40 (6 mar.)
{{fig|5.4|Diagrama ASMD do algoritmo multiplicador L11.6 (saída Mealy) | ASMDMealy_mult_sum.png|400 px| <ref name="CHU2006"/>}}
*Atividade de recuperação para alunos com conceito inferior a 6.   
*Os demais alunos foram dispensados


<!--
*Testar as implementações em VHDL dos  [https://drive.google.com/file/d/1f7DqWL9390nTGgXUVdd01CaSAJX-UxOC/view?usp=drive_link Listing 11.1 a L11.6] de  <ref name="CHU2006"/>.
;Encontro 36 (20 ago.)
*Circuito gerador de pulso (Implementação em lógica regular, em FSM, em FSMD)
{{fig|4.14|Diagrama ASMD do algoritmo do gerador de pulso|ASMD_pulse_generator.png|600 px| RTL Hardware Desing, P. Chu}}
*Circuito para cálculo do máximo divisor comum (gcd)
{{fig|4.15|Diagrama ASMD do algoritmo do GCD|ASMD_gcd.png|600 px| RTL Hardware Desing, P. Chu}}


;Encontro 37 (23 ago.)
;Encontro 34 (10 jul.) - Multiplicador por adição repetitivas.
*Avaliação A2  
*Simulação essa FSMD, verificando o funcionamento da FSM através da simulação no MODELSIM.  Teste com multiplicações por zero  (0 x 31 = 0); (31 x 0 = 0), multiplicações menores  (2 x 31 = 62); (31 x 2 = 62)  e multiplicações maiores (9 x 31 = 279) (31 x 9 = 279).
Implemente o algoritmo original de Euclides usando a metodologia RT.   
:*Anote a '''Fmax''' e meça o número de clocks ('''N_clk''') transcorrido entre duas bordas de subida do sinal '''READY'''. Dica use dois cursores para medir o tempo total , e divida pelo período do clock utilizado na simulação.
 
 
Ver descrição em [https://seriouscomputerist.atariverse.com/media/pdf/book/Art%20of%20Computer%20Programming%20-%20Volume%202%20(Seminumerical%20Algorithms).pdf] .
:* Analise se ocorre alguma melhorias em termos de tempo de processamento ('''N_clk/Fmax''') e número de elementos lógicos nas versões L11.1 a L11.3, L11.5 e L11.6.  Também verifique se o resultado está correto em todas as versões.
- GCD é descrito em 4.5.2. The Greatest Common Divisor), pag 346 do PDF
<center>
- Algorithm E (Original Euclidean algorithm). pag 349 do PDF.
{| class="wikitable" style="text-align:center;"
 
|- style="font-weight:bold;"
- Apresente um relatório com a simulação mostrando como obteve o número de clocks necessários para realizar o cálculo, que inclua uma tabela comparando os algoritmos.   
! style="background-color:#c0c0c0;" | Listing 11.
- Obtenha os dados de numero de elementos lógicos, Tempo de cálculo, e compare com os dois algoritmos do gcd slow e fast.  
! colspan="2" style="background-color:#c0c0c0;" | 1
 
! colspan="2" style="background-color:#c0c0c0;" | 2
Enviar nesta tarefa os arquivos
! colspan="2" style="background-color:#c0c0c0;" | 3
Q1.QAR, Q1-RTL.PNG, Q1-TM.PNG, Q1-SIM.PNG e o relatório  
! colspan="2" style="background-color:#c0c0c0;" | 5
 
! colspan="2" style="background-color:#c0c0c0;" | 6
Os arquivos tb_XXX.do e wave.do devem ser enviados dentro do QAR
|- style="text-align:left;"
 
| style="text-align:center;" | Fmax
Pontuação  
| colspan="2" |
*7 pontos - pelo relatório e projeto com os  resultados dos algoritmos gcd slow e fast.
| colspan="2" |
*3 pontos - pelo relatório e projeto com os  resultados do "Original Euclidean algorithm" em dataflow ou RT metodology
| colspan="2" |
-->
| colspan="2" |
{{collapse bottom}}
| colspan="2" |
<!--
|- style="font-weight:bold; background-color:#c0c0c0;"
;Encontro 38 (27 ago.)
| || Nclk || Top || Nclk || Top || Nclk || Top || Nclk || Top || Nclk || Top
*Avaliação de Recuperação R12. 
|-
:1) Desenvolver um projeto de circuito sequencial  [hierárquico] ou FSM ou FSMD. 
| 0x31
:2) Realizar e registrar todas as etapas de análise e síntese, verificar elementos lógicos, frequência máxima, e eventualmente o tempo de processamento.
|
:3) Obter diagramas RTL, technology map, escrever corretamente os arquivos de script, com o sinal wave formatado adequadamente. 
|
:4) Enviar os arquivos necessários no .qar que permitam reproduzir os resultados obtidos.
|
-->
|
 
|
==Avaliações==
|
Durante o semestre serão realizadas entre 2 avaliações e várias atividades feitas extra classe.
|
 
|
;Data das avaliações:
|
*A1 : Avaliação A1 (peso 35) XX/XX/2025
|
*A2 : Avaliação A2 (peso 40) XX/XX/2025
|-
*AEs : Média ponderada das AEs  (peso 25)  
| 31x0
*R1 e R2 : Recuperação de A1 e A2 :XX/XX/2025  
|
*[[Folha de consulta de VHDL]]
|
 
|
== Atividade relâmpago (AR) ==
|
As atividades relâmpago devem ser entregues no Moodle da disciplina. A não entrega dessas atividades não gera nenhum desconto, apenas geram pontos de BÔNUS que são adicionados aos conceitos das avaliações A1 a AN.
|
<!--
|
===AR1 - Conhecendo os dispositivos lógicos programáveis===
|
;Atividade:
|
Para esse desafio, no PASSO 3 da AE1, selecione o dispositivo EP4CE6E22C7 da família Cyclone IV E.  
|
 
|
Utilizando o circuito que realiza o cálculo da distância de Hamming entre dois sinais, procure melhorar o processo de compilação de modo que consiga reduzir ao máximo o tempo de propagação entre entrada e saída.  
|-
 
| 2x31
*Insira restrições de atraso máximo para o compilador utilizando o Synopsys Design Constraints File
|
*Modifique a técnica utilizada pelo Quartus na otimização em em Optimization Technique por default está selecionado [x] Balanced (Normal flow) .
|
|
|
|
|
|
|
|
|
|-
| 31x2
|
|
|
|
|
|
|
|
|
|
|-
| 9x31
|
|
|
|
|
|
|
|
|
|
|-
| 31x9
|
|
|
|
|
|
|
|
|
|
|}
</center>
 
;Encontro 35 a 37 (15 a 22 jul.) - Revisão de projeto hierárquico.
* Implementar um controlador de semáforo construído com os seguintes componentes:  1 divisor de clock ('''div_clk'''), 1 temporizador de segundos com contagem crescente em BCD ('''timer_bcd'''), 2 conversores de BCD para SSD ('''bcd2ssd'''), uma FSM para semáforo de 2 vias ('''FSM_2vias''').
* Os componentes devem ser declarados como STUB, isto é a '''archicteture''' deve estar vazia.  Isso facilita o entendimento do projeto hierárquico sem a ocorrência de erros internos nos componentes.
* O desenvolvimento dos componentes pode ser postergado para uma segunda etapa do projeto.
* Ao final da atividade os alunos devem enviar a [https://moodle.ifsc.edu.br/mod/assign/view.php?id=296897 AE17 - Controlador de Semáforo de duas vias (simulação de entrega)]
{{fig|5.30|Diagrama de RTL do top level  |RTL_TL.png|800 px| Igor & Ygor 2025}}
 
-->
<!--
;Encontro 35 (18 fev.)
*Implementação de um multiplicador por deslocamento de bits e somas sequenciais
*Implemente em VHDL o [https://drive.google.com/file/d/1f7DqWL9390nTGgXUVdd01CaSAJX-UxOC/view?usp=drive_link Listing 11.7  de  <ref name="CHU2006"/>]
{{fig|4.14|Diagrama ASMD do algoritmo multiplicador  L11.7 e 11.8 |ASMD_mult_shift_sum.png|300 px|  <ref name="CHU2006"/>}}
*Análise de tempo e desempenho do FSMD
 
*Implementação de um multiplicador por somas sucessivas em dataflow (a + a + a + ...)
*Implementação de um multiplicador pelo bloco multiplicador  (a x b)
 
;Encontro 36 a 39 (20, 22, 25, 27 fev.)
*Realização da [https://wiki.sj.ifsc.edu.br/index.php/ELD129003-Engtelecom_(Di%C3%A1rio)_-_Prof._Marcos_Moecke#AE4_-_Compara%C3%A7%C3%A3o_de_Hardware_projetado_por_FSMD_e_Dataflow AE4 - Comparação de Hardware projetado por FSMD e Dataflow]
 
;Encontro 40 (6 mar.)
*Atividade de recuperação para alunos com conceito inferior a 6. 
*Os demais alunos foram dispensados
 
<!--
;Encontro 36 (20 ago.)
*Circuito gerador de pulso (Implementação em lógica regular, em FSM, em FSMD)
{{fig|4.14|Diagrama ASMD do algoritmo do gerador de pulso|ASMD_pulse_generator.png|600 px|  <ref name="CHU2006"/>}}
*Circuito para cálculo do máximo divisor comum (gcd)
{{fig|4.15|Diagrama ASMD do algoritmo do GCD|ASMD_gcd.png|600 px|  <ref name="CHU2006"/>}}
 
;Encontro 37 (23 ago.)
*Avaliação A2  
Implemente o algoritmo original de Euclides usando a metodologia RT.   
 
Ver descrição em [https://seriouscomputerist.atariverse.com/media/pdf/book/Art%20of%20Computer%20Programming%20-%20Volume%202%20(Seminumerical%20Algorithms).pdf] .
- GCD é descrito em 4.5.2. The Greatest Common Divisor), pag 346 do PDF
- Algorithm E (Original Euclidean algorithm). pag 349 do PDF.
 
- Apresente um relatório com a simulação mostrando como obteve o número de clocks necessários para realizar o cálculo, que inclua uma tabela comparando os algoritmos.   
- Obtenha os dados de numero de elementos lógicos, Tempo de cálculo, e compare com os dois algoritmos do gcd slow e fast.  
 
Enviar nesta tarefa os arquivos
Q1.QAR, Q1-RTL.PNG, Q1-TM.PNG, Q1-SIM.PNG e o relatório  
 
Os arquivos tb_XXX.do e wave.do devem ser enviados dentro do QAR
 
Pontuação  
*7 pontos - pelo relatório e projeto com os  resultados dos algoritmos gcd slow e fast.
*3 pontos - pelo relatório e projeto com os  resultados do "Original Euclidean algorithm" em dataflow ou RT metodology
-->
{{collapse bottom}}
 
==Avaliações==
Durante o semestre serão realizadas 2 avaliações e várias atividades feitas extra classe.
 
;Data das avaliações:
*A1 : Avaliação A1 (peso 35) XX/2025
*A2 : Avaliação A2 (peso 45) XX/2025
*AEs : Média ponderada das AEs  (peso 20)  
*R1 : Recuperação de A1 : XX/2025
*R2 : Recuperação de A2 : XX/2025  
*[[Folha de consulta de VHDL]]
 
<!--
== Atividade relâmpago (AR) ==
As atividades relâmpago devem ser entregues no Moodle da disciplina. A não entrega dessas atividades não gera nenhum desconto, apenas geram pontos de BÔNUS que são adicionados aos conceitos das avaliações A1 a AN.
<!--
===AR1 - Conhecendo os dispositivos lógicos programáveis===
;Atividade:
Para esse desafio, no PASSO 3 da AE1, selecione o dispositivo EP4CE6E22C7 da família Cyclone IV E.  
 
Utilizando o circuito que realiza o cálculo da distância de Hamming entre dois sinais, procure melhorar o processo de compilação de modo que consiga reduzir ao máximo o tempo de propagação entre entrada e saída.  
 
*Insira restrições de atraso máximo para o compilador utilizando o Synopsys Design Constraints File
*Modifique a técnica utilizada pelo Quartus na otimização em em Optimization Technique por default está selecionado [x] Balanced (Normal flow) .
:*selecione uma das opções de [x] Performance para "procurar" reduzir o tempo de propagação e/ou aumentar a frequência máxima do sistema.
:*selecione uma das opções de [x] Performance para "procurar" reduzir o tempo de propagação e/ou aumentar a frequência máxima do sistema.
:*selecione uma das opções de [x] Power para "procurar" reduzir a potência utilizados no sistema.
:*selecione uma das opções de [x] Power para "procurar" reduzir a potência utilizados no sistema.
Linha 2 699: Linha 2 848:
== Atividade extra-classe (AE) ==
== Atividade extra-classe (AE) ==
A média ponderada das atividades extra-classe será considerada no cálculo do conceito final da UC.  A entrega das mesmas será feita pelo Moodle, e cada dia de atraso irá descontar 0,2 na nota da atividade.  Muitas dessas atividades também geram pontos de BÔNUS que são adicionados aos conceitos das avaliações A1 a AN.  Para os BÔNUS só serão considerados projetos entregues no prazo.
A média ponderada das atividades extra-classe será considerada no cálculo do conceito final da UC.  A entrega das mesmas será feita pelo Moodle, e cada dia de atraso irá descontar 0,2 na nota da atividade.  Muitas dessas atividades também geram pontos de BÔNUS que são adicionados aos conceitos das avaliações A1 a AN.  Para os BÔNUS só serão considerados projetos entregues no prazo.
 
<!--
===AE1 -  Conhecendo os dispositivos lógicos programáveis===
===AE1 -  Conhecendo os dispositivos lógicos programáveis===
{{collapse top | expand=true| bg=lightyellow | AE1 -  Conhecendo os dispositivos lógicos programáveis}}
{{collapse top | expand=true| bg=lightyellow | AE1 -  Conhecendo os dispositivos lógicos programáveis}}
Linha 2 931: Linha 3 080:
* O projeto deverá ser implementado em FPGA em um dos kits disponíveis no LabSiDi.
* O projeto deverá ser implementado em FPGA em um dos kits disponíveis no LabSiDi.


;PASSO 0:
;PASSO 0 - Contador BCD:
* Adapte o contador BCD ('''contaBCD.vhd''')
* Adapte o contador BCD ('''contaBCD.vhd''')
:* Baseie-se no contador desenvolvido em aula (faixa 00–99).
:* Baseie-se no contador desenvolvido em aula (faixa 00–99).
Linha 2 946: Linha 3 095:
:* Verifique se as opções de overflow e parada funcionam.
:* Verifique se as opções de overflow e parada funcionam.


;PASSO 1:
;PASSO 1 - Divisor de Clock:
* Adapte o divisor de clock ('''div_clk.vhd''')
* Adapte o divisor de clock ('''div_clk.vhd''')
:* Gere um pulso de habilitação (ENABLE_OUT) para o contador a cada 1 segundo, a partir do clock disponível no kit.  O pulso deve durar o período de 1 clock (20ns)
:* Gere um pulso de habilitação (ENABLE_OUT) para o contador a cada 1 segundo, a partir do clock disponível no kit.  O pulso deve durar o período de 1 clock (20ns)
Linha 2 954: Linha 3 103:
:*Use um CLOCK de 50Hz e verifique se as saidas CLOCK_OUT e ENABLE_OUT estão corretas
:*Use um CLOCK de 50Hz e verifique se as saidas CLOCK_OUT e ENABLE_OUT estão corretas


;PASSO 2:
;PASSO 2 - Conversor BCD2SSD:
* Projeto o conversor BCD para SSD ('''bcd2ssd.vhd''')
* Projeto o conversor BCD para SSD ('''bcd2ssd.vhd''')
:* Converta o valor de entrada BCD (0 a 9) para o padrão de 7 segmentos.
:* Converta o valor de entrada BCD (0 a 9) para o padrão de 7 segmentos.
Linha 2 964: Linha 3 113:
:*Teste se a entrada OCULTA_ZERO funciona.
:*Teste se a entrada OCULTA_ZERO funciona.


;PASSO 3:
;PASSO 3 - Entity Top-Level:
* Implemente a entity Top-Level ('''timer_seg.vhd''')
* Implemente a entity Top-Level ('''timer_seg.vhd''')
:* Instancie os componentes:  
:* Instancie os componentes:  
Linha 3 002: Linha 3 151:
*Simule o timer para contar de 00 a 23 com parada, e para display de ânodo comum.
*Simule o timer para contar de 00 a 23 com parada, e para display de ânodo comum.


;PASSO 4:
;PASSO 4 - Implemetação no Kit FPGA:
Implemente o projeot no FPGA:
Implemente o projeto no FPGA:
* Escolha um dos kits disponíveis no laboratório.
* Escolha um dos kits disponíveis no laboratório.
* Configure o projeto para exibir nos dois mostradores HEX (HEX0 e HEX1) ou DISP (DISP0 e DISP1).
* Configure o projeto para exibir nos dois mostradores HEX (HEX0 e HEX1) ou DISP (DISP0 e DISP1).
Linha 3 011: Linha 3 160:
* Configure o parâmetro DU para que a contagem seja de 00 até 59 e depois reinicie automaticamente.
* Configure o parâmetro DU para que a contagem seja de 00 até 59 e depois reinicie automaticamente.


;PASSO 5 - ENTREGAS:
;PASSO 5 - Entregas:
*Documentar o experimento em um relatório técnico que contenha no mínimo:  
*Documentar o experimento em um relatório técnico que contenha no mínimo:  
:*Identificação (título, disciplina, data, autores);
:*Identificação (título, disciplina, data, autores);
Linha 3 038: Linha 3 187:
* O projeto '''pode''' ser implementado em FPGA em um dos kits disponíveis no LabSiDi, mas '''não é obrigatório'''.
* O projeto '''pode''' ser implementado em FPGA em um dos kits disponíveis no LabSiDi, mas '''não é obrigatório'''.


;PASSO 0:
;PASSO 0 - Timer de Segundos:
* Adapte o timer de segundas para contar em binário ('''timer_sec.vhd''')
* Adapte o timer de segundos para contar em binário ('''timer_sec.vhd''')
:* O clock do contador deverá ser o clock fornecido pelo kit (50MHz => 20ns)
:* O clock do contador deverá ser o clock fornecido pelo kit (50MHz => 20ns)
::* Adicione entradas: 1) ENABLE para controlar a contagem. 2) ZERAR: zera a contagem. 3) CONTAR: habilita ou desabilita a contagem.
::* Adicione entradas: 1) ENABLE para controlar a contagem. 2) ZERAR: zera a contagem. 3) CONTAR: habilita ou desabilita a contagem.
Linha 3 048: Linha 3 197:
:*Teste o funcionamento das entradas ZERAR e CONTAR.
:*Teste o funcionamento das entradas ZERAR e CONTAR.


;PASSO 1:
;PASSO 1 - Divisor de Clock:
* Utilize o divisor de clock ('''div_clk.vhd''') da atividade AE15.  Nenhuma adaptação é necessária.
* Utilize o divisor de clock ('''div_clk.vhd''') da atividade AE15.  Nenhuma adaptação é necessária.


;PASSO 2:
;PASSO 2 - FSM do semáforo:
* Projeto da FSM do semáforo  ('''FSM_semaforo.vhd''')
* Projeto da FSM do semáforo  ('''FSM_semaforo.vhd''')
:*Utilize o template fornecido para descrever a FSM representada pelo seguinte diagrama de estados:
:*Utilize o template fornecido para descrever a FSM representada pelo seguinte diagrama de estados:
Linha 3 061: Linha 3 210:
:*Para testar, é necessário gerar manualmente o sinal de ATIVAR e os valores do timer para verificar o avanço dos estados da FSM
:*Para testar, é necessário gerar manualmente o sinal de ATIVAR e os valores do timer para verificar o avanço dos estados da FSM
:*Verifique se o sinal de saida ZERAR é ativado corretamente.
:*Verifique se o sinal de saida ZERAR é ativado corretamente.
:*Mostre claramente a FSM alternando entre AM1 e AM2, e depois fazendo 1 ou 2 ciclos de controle das vias.
:*Mostre claramente a FSM alternando entre AM1 e AM2, e depois faça o semáforo evoluir por 2 ciclos de controle das vias.


;PASSO 3:
;PASSO 3 - Entity Top-Level:
* Implemente a entity Top-Level ('''timer_seg.vhd''')
* Implemente a entity Top-Level ('''timer_seg.vhd''')
:* Instancie os componentes:  
:* Instancie os componentes:  
Linha 3 104: Linha 3 253:
{{fig|AE16d|Simulação do Controlador semafórico para duas vias  (ciclo verde)|SIM_Sema2ViasVD1VD2.png|800 px| }}
{{fig|AE16d|Simulação do Controlador semafórico para duas vias  (ciclo verde)|SIM_Sema2ViasVD1VD2.png|800 px| }}


;PASSO 4 - ENTREGAS:
;PASSO 4 - Entregas:
*Documentar o experimento em um relatório técnico que contenha no mínimo:  
*Documentar o experimento em um relatório técnico que contenha no mínimo:  
:*Identificação (título, disciplina, data, autores);
:*Identificação (título, disciplina, data, autores);
Linha 3 508: Linha 3 657:


;Atividades:
;Atividades:
*'''PASSO 1 -''' Entender e testar os códigos das Listing (L11.1 ou L11.2 ou L11.3), L11.5, L11.6, L11.7 e L11.8 do livro do CHU.  
*'''PASSO 1 -''' Entender e testar os códigos das Listing (L11.1 ou L11.2 ou L11.3), L11.5, L11.6, L11.7 e L11.8 de  <ref name="CHU2006"/>.  
::Entre as L11.1, L11.2 e L11.3, escolha apenas uma delas para os testes. A L11.4 fica de fora pois conter erro.
::Entre as L11.1, L11.2 e L11.3, escolha apenas uma delas para os testes. A L11.4 fica de fora pois conter erro.
:*Realize a '''Analyses e Synthesis''', '''Fitter''' e '''Timing Analysis''' de cada versão
:*Realize a '''Analyses e Synthesis''', '''Fitter''' e '''Timing Analysis''' de cada versão
Linha 3 516: Linha 3 665:


*'''PASSO 2 -''' Análise da variação do número de bits
*'''PASSO 2 -''' Análise da variação do número de bits
:*Altere o código do CHU para que funcione para um número genérico de bits.   
:*Altere o código para que funcione para um número genérico de bits.   
::Dica:  Para gerar um vetor de N zeros, crie uma constante e utilize a constante no código.
::Dica:  Para gerar um vetor de N zeros, crie uma constante e utilize a constante no código.
  constant zeros : std_logic_vector(N-1 downto 0) := (others => '0');
  constant zeros : std_logic_vector(N-1 downto 0) := (others => '0');

Edição atual tal como às 11h22min de 11 de agosto de 2025

1 Registro on-line das aulas

1.1 Unidade 1 - Aula inicial, Introdução a disciplina

  • 1 ENCONTRO
Unidade 1 - Aula inicial, Introdução a disciplina
Encontro 1 (12 ago.)
  • A página da UC contém os materiais que não alteram entre semestre.
  • Relação com as outras UCs do Eixo Sistemas Computacionais (Marrom). Ver grafo do curriculo
  • ELD129002 - ELETRÔNICA DIGITAL I (ELD1): Sistema de numeração e códigos. Lógica booleana. Circuitos combinacionais. Circuitos aritméticos. Linguagem de descrição de hardware. Implementação e teste de circuitos digitais. Projeto de circuitos lógicos.
  • ELD129003 - ELETRÔNICA DIGITAL II (ELD2): Dispositivos lógicos programáveis. Circuitos sequenciais. Metodologia síncrona. Projeto hierárquico e parametrizado. Máquinas de estados finita. Register Transfer Methodology. Teste de circuitos digitais. Implementação em FPGA. Introdução a Linguagem de Descrição de Hardware.
  • AOC129004 - ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES (AOC): Introdução à Arquitetura Computadores. Linguagem Assembly. Linguagem de Máquina. Programação Assembly. Modos de Endereçamento. Processo de compilação e carga de um programa. Introdução à Organização de Computadores. Organização Monociclo e Multiciclo. Pipeline. Memória e Sistema de E/S.
  • MIC129007 - MICROCONTROLADORES (MIC): Introdução a Microcontroladores e Aplicações. Arquitetura de um microcontrolador. Pilha e Subrotinas. Interrupção. Contadores e Temporizadores. Interface com Periféricos. Programação em alto nível (ex.: C, C++ e RUST) para Microcontroladores: Mapeamento de tipos e estruturas de alto nível para sistemas com recursos limitados. Projeto de hardware e firmware com microcontroladores.
  • STE129008 - STE - SISTEMAS EMBARCADOS (STE): Conceitos em Sistemas Embarcados. Metodologia de Desenvolvimento de Sistemas Embarcados. Sistemas Operacionais para Sistemas Embarcados. Ferramentas de desenvolvimento e depuração. Barramentos e dispositivos de acesso a redes. Desenvolvimento de Projeto.
  • Nesta página está o Registro diário dos encontros e avaliações.
  • A entrega de atividades e avaliações será através da plataforma Moodle. A inscrição dos alunos é automática a partir do SIGAA.
  • Para a comunicação entre professor-aluno, além dos avisos no SIGAA, utilizaremos o chat institucional. A princípio todos os alunos já estão previamente cadastrados pelo seu email institucional. Confiram enviando uma mensagem de apresentação.
  • Utilizaremos durante as aulas algumas ferramentas computacionas como o site do Falstad para entender circuitos digitais e fazer simulações básicas.
  • Também utilizaremos os softwares Quartus Light e ModelSim instalados nas maquinas do laboratório para praticar a parte de programação de hardware (descrição de hardware). Esses softwares também podem ser usados através da Nuvem do IFSC..
  • Para a prática de implementação dos circitos em dispositivos lógicos utilizaremos os kits de FPGA disponíveis no LabSiDi. Ver User Manual da DE2-115, e Manual do Usuário da Mercúrio IV.
LER PARA O PRÓXIMO ENCONTRO

1.2 Unidade REV - PRIMEIRO CONTATO COM VHDL

  • 5 ENCONTROS
Unidade REV - PRIMEIRO CONTATO COM VHDL

1.3 Unidade 2 - Dispositivos Lógicos Programáveis

  • 5 ENCONTROS
Unidade 2 - Dispositivos Lógicos Programáveis

1.4 Unidade 3 - Circuitos sequenciais (Implementação com HDL)

  • 18 ENCONTROS
Unidade 3 - Circuitos sequenciais (Implementação com HDL)

1.5 Unidade 4 - Maquinas de Estado Finitas

  • 5 ENCONTROS
Unidade 4 - Maquinas de Estado Finitas

1.6 Unidade 5 - Metodologia RT (Register Transfer)

  • 7 ENCONTROS
Unidade 5 - Metodologia RT (Register Transfer)

2 Avaliações

Durante o semestre serão realizadas 2 avaliações e várias atividades feitas extra classe.

Data das avaliações
  • A1 : Avaliação A1 (peso 35) XX/2025
  • A2 : Avaliação A2 (peso 45) XX/2025
  • AEs : Média ponderada das AEs (peso 20)
  • R1 : Recuperação de A1 : XX/2025
  • R2 : Recuperação de A2 : XX/2025
  • Folha de consulta de VHDL


3 Atividade extra-classe (AE)

A média ponderada das atividades extra-classe será considerada no cálculo do conceito final da UC. A entrega das mesmas será feita pelo Moodle, e cada dia de atraso irá descontar 0,2 na nota da atividade. Muitas dessas atividades também geram pontos de BÔNUS que são adicionados aos conceitos das avaliações A1 a AN. Para os BÔNUS só serão considerados projetos entregues no prazo.

4 Referências Bibliográficas:

Será que uma boa parte do que fazemos com calculo digital será analógico no futuro? Future Computers Will Be Radically Different (Analog Computing)

Curso de Engenharia de Telecomunicações