ELD129003-Engtelecom (Diário) - Prof. Marcos Moecke: mudanças entre as edições
Ir para navegação
Ir para pesquisar
(33 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 ( | ;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 === | ||
* | |||
* 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]]; | ||
;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"> 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 === | ||
* | |||
{{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) === | ||
* | * 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 | {{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 | ;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 | | {{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 | | {{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 | | {{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 | | {{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 | | {{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 | | {{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 | ;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 | ;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 | ;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 | ;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 | | {{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 | | {{fig|3.18|Contador de segundos e minutos - clock síncrono | contaSSMMsync.png| 600 px | <ref name="CHU2006"/>}} | ||
;Encontro | ;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 | *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 | *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 | *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 | ;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 | *'''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 | ;Encontro 19 (22 mai.): | ||
*Instrução '''IF GENERATE''' | *Instrução '''IF GENERATE''' | ||
Linha 1 685: | Linha 1 690: | ||
;Encontro | ;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 | |||
;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 | <!-- | ||
;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 | * AE16 - Controlador de Semáforo de duas vias - trabalho remoto na nuvem | ||
;Encontro 28 (17 jun.) | |||
* 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 | ;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 | {{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 | {{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 | {{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 | 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 | ;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: | {{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: | 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: | {{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: | 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: | {{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 | <!-- | ||
;Encontro | 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| | {{fig|5.1|Diagrama de blocos básico de uma FSMD |FSMD_block_diagram.png|500 px| <ref name="CHU2006"/>}} | ||
;Encontro 32 e 33 (3 e 8 jul.) - Multiplicador por adição repetitivas. | |||
;Encontro | ''Nota: Este exemplo é apresentado no livro <ref name="CHU2006"/> na seção 11.3'' | ||
''Nota: Este exemplo é apresentado no livro | |||
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. | 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. | ||
Linha 2 514: | Linha 2 529: | ||
<pre> | <pre> | ||
if (a_in = 0 or b_in = 0) then | if (a_in = 0 or b_in = 0) then | ||
r_out = 0 | |||
else | else | ||
a = a_in | a = a_in | ||
Linha 2 522: | 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 546: | Linha 2 561: | ||
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| | {{fig|5.2|Diagrama ASMD do algoritmo multiplicador L11.1 |ASMD_mult_sum.png|400 px| <ref name="CHU2006"/>}} | ||
;FSMD do algoritmo: | ;FSMD do algoritmo: | ||
Linha 2 579: | Linha 2 594: | ||
:a ← a-in (nos estados load e ab0) | :a ← a-in (nos estados load e ab0) | ||
{{fig|5.3|FSMD do algoritmo multiplicador L11.1 |FSMD_mult_sum.png| | {{fig|5.3|FSMD do algoritmo multiplicador L11.1 |FSMD_mult_sum.png|600 px| <ref name="CHU2006"/>}} | ||
;Melhoria da implementação do algoritmo com saída Mealy: | ;Melhoria da implementação do algoritmo com saída Mealy: | ||
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. | 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. | ||
{{fig|5.4|Diagrama ASMD do algoritmo multiplicador L11.6 (saída Mealy) | ASMDMealy_mult_sum.png|400 px| | {{fig|5.4|Diagrama ASMD do algoritmo multiplicador L11.6 (saída Mealy) | ASMDMealy_mult_sum.png|400 px| <ref name="CHU2006"/>}} | ||
*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 | *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"/>. | ||
*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). | ;Encontro 34 (10 jul.) - Multiplicador por adição repetitivas. | ||
*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). | |||
:*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. | :*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. | :* 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. | ||
<center> | |||
{| class="wikitable" style="text-align:center;" | |||
|- style="font-weight:bold;" | |||
! style="background-color:#c0c0c0;" | Listing 11. | |||
! colspan="2" style="background-color:#c0c0c0;" | 1 | |||
! colspan="2" style="background-color:#c0c0c0;" | 2 | |||
! colspan="2" style="background-color:#c0c0c0;" | 3 | |||
! colspan="2" style="background-color:#c0c0c0;" | 5 | |||
! colspan="2" style="background-color:#c0c0c0;" | 6 | |||
|- style="text-align:left;" | |||
| style="text-align:center;" | Fmax | |||
| colspan="2" | | |||
| colspan="2" | | |||
| colspan="2" | | |||
| colspan="2" | | |||
| colspan="2" | | |||
|- style="font-weight:bold; background-color:#c0c0c0;" | |||
| || Nclk || Top || Nclk || Top || Nclk || Top || Nclk || Top || Nclk || Top | |||
|- | |||
| 0x31 | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
|- | |||
| 31x0 | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
|- | |||
| 2x31 | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
|- | |||
| 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) == | == 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. | 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. | ||
Linha 2 737: | 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 969: | 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 984: | 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 992: | 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 3 002: | 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 040: | 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 | 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 049: | 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 - | ;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 076: | 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 | * 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 086: | 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 099: | 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 | :*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 142: | 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 - | ;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 546: | 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 | *'''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 554: | 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 | :*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 |
---|
|
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)