Mudanças entre as edições de "ELD129003-Engtelecom (Diário) - Prof. Marcos Moecke"
Linha 70: | Linha 70: | ||
*[[Uso do ambiente EDA - QUARTUS Prime para programação em VHDL]] | *[[Uso do ambiente EDA - QUARTUS Prime para programação em VHDL]] | ||
− | ; | + | ;PARA O PRÓXIMO ENCONTRO: |
* Para os alunos que são da matriz curricular 1290 (PPC 2023). | * Para os alunos que são da matriz curricular 1290 (PPC 2023). | ||
:*Realizar os '''passos de 0 a 4''' descritos em [[Uso do ambiente EDA - QUARTUS Prime para programação em VHDL]] | :*Realizar os '''passos de 0 a 4''' descritos em [[Uso do ambiente EDA - QUARTUS Prime para programação em VHDL]] | ||
Linha 85: | Linha 85: | ||
*Conhecer a IDE do ModelSim | *Conhecer a IDE do ModelSim | ||
*Seguir o procedimento descrito em [[Uso do ambiente EDA - QUARTUS Prime para programação em VHDL]] | *Seguir o procedimento descrito em [[Uso do ambiente EDA - QUARTUS Prime para programação em VHDL]] | ||
+ | ====ATUAL==== | ||
+ | ;Encontro 4 (27 fev): | ||
+ | * Conhecer instruções WHEN_ELSE, WITH_SELECT, CONFIGURATION (estudo de caso com mux4x1) | ||
+ | Um multiplexador digital de N entradas e 1 saída, frequentemente abreviado como MUX N:1, é um circuito digital muito utilizado para rotear sinais digitais Ele desempenha a função de selecionar uma das entradas para ser encaminhada para a saída com base em um sinal de seleção (ou controle). | ||
+ | |||
+ | {{collapse top | expand=false |Mux2x1}} | ||
+ | A tabela verdade que descreve um MUX2:1 é mostrada abaixo: | ||
+ | <center> | ||
+ | {| class="wikitable" style="text-align:center;" | ||
+ | |- style="font-weight:bold;" | ||
+ | ! X1 | ||
+ | ! X0 | ||
+ | ! Sel | ||
+ | ! style="background-color:#c0c0c0;" | Y | ||
+ | |- | ||
+ | | 0 | ||
+ | | 0 | ||
+ | | 0 | ||
+ | | style="background-color:#c0c0c0;" | 0 | ||
+ | |- | ||
+ | | 0 | ||
+ | | 0 | ||
+ | | 1 | ||
+ | | style="background-color:#c0c0c0;" | 0 | ||
+ | |- | ||
+ | | 0 | ||
+ | | 1 | ||
+ | | 0 | ||
+ | | style="background-color:#c0c0c0;" | 1 | ||
+ | |- | ||
+ | | 0 | ||
+ | | 1 | ||
+ | | 1 | ||
+ | | style="background-color:#c0c0c0;" | 0 | ||
+ | |- | ||
+ | | 1 | ||
+ | | 0 | ||
+ | | 0 | ||
+ | | style="background-color:#c0c0c0;" | 0 | ||
+ | |- | ||
+ | | 1 | ||
+ | | 0 | ||
+ | | 1 | ||
+ | | style="background-color:#c0c0c0;" | 1 | ||
+ | |- | ||
+ | | 1 | ||
+ | | 1 | ||
+ | | 0 | ||
+ | | style="background-color:#c0c0c0;" | 1 | ||
+ | |- | ||
+ | | 1 | ||
+ | | 1 | ||
+ | | 1 | ||
+ | | style="background-color:#c0c0c0;" | 1 | ||
+ | |} | ||
+ | </center> | ||
+ | |||
+ | O MUX2:1 também pode ser representado de forma resumida por: | ||
+ | <center> | ||
+ | {| class="wikitable" style="text-align:center;" | ||
+ | |- style="font-weight:bold;" | ||
+ | ! X1 | ||
+ | ! X0 | ||
+ | ! Sel | ||
+ | ! style="background-color:#c0c0c0;" | Y | ||
+ | |- | ||
+ | | - | ||
+ | | X0 | ||
+ | | 0 | ||
+ | | style="background-color:#c0c0c0;" | X0 | ||
+ | |- | ||
+ | | X1 | ||
+ | | - | ||
+ | | 1 | ||
+ | | style="background-color:#c0c0c0;" | X1 | ||
+ | |} | ||
+ | </center> | ||
+ | Onde o X0 e X1 na entrada podem assumir os valores 0 ou 1, e o simbolo "-" corresponde ao ''don't care'' (em VDHL) | ||
+ | |||
+ | A função booleana que descreve a operação de um MUX 2:1 pode ser representada da seguinte forma: | ||
+ | |||
+ | |||
+ | <math> Y = \overline{Sel} . X0 + Sel . X1 </math> | ||
+ | |||
+ | Onde Y é a saída; Sel é o sinal de seleção; X0 e X1 são as entradas. | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | {{collapse top | expand=false |Mux4x1}} | ||
+ | *'''MUX4:1''' | ||
+ | O MUX4:1 pode ser representado de forma resumida pela tabela verdade: | ||
+ | |||
+ | <center> | ||
+ | {| class="wikitable" style="text-align:center;" | ||
+ | |- style="font-weight:bold;" | ||
+ | ! colspan="4" | Entradas | ||
+ | ! colspan="2" | Seleção | ||
+ | ! Saída | ||
+ | |- style="font-weight:bold;" | ||
+ | | X3 | ||
+ | | X2 | ||
+ | | X1 | ||
+ | | X0 | ||
+ | | Sel1 | ||
+ | | Sel0 | ||
+ | | style="background-color:#c0c0c0;" | Y | ||
+ | |- | ||
+ | | - | ||
+ | | - | ||
+ | | - | ||
+ | | X0 | ||
+ | | 0 | ||
+ | | 0 | ||
+ | | style="background-color:#c0c0c0;" | X0 | ||
+ | |- | ||
+ | | - | ||
+ | | - | ||
+ | | X1 | ||
+ | | - | ||
+ | | 0 | ||
+ | | 1 | ||
+ | | style="background-color:#c0c0c0;" | X1 | ||
+ | |- | ||
+ | | - | ||
+ | | X2 | ||
+ | | - | ||
+ | | - | ||
+ | | 1 | ||
+ | | 0 | ||
+ | | style="background-color:#c0c0c0;" | X2 | ||
+ | |- | ||
+ | | X3 | ||
+ | | - | ||
+ | | - | ||
+ | | - | ||
+ | | 1 | ||
+ | | 1 | ||
+ | | style="background-color:#c0c0c0;" | X3 | ||
+ | |} | ||
+ | </center> | ||
+ | A função booleana que descreve a operação de um MUX 4:1 pode ser representada da seguinte forma: | ||
+ | |||
+ | <math> Y = X0 . \overline{Sel1} . \overline{Sel0} + X1 . \overline{Sel1} . Sel0 + X2 . Sel1 . \overline{Sel0} + X3 . Sel1 . Sel0 </math> | ||
+ | |||
+ | |||
+ | Dada a função booleana do MUX4:1 é simples para descreve-lo em VHDL utilizando apenas operadores lógicos. | ||
+ | |||
+ | <syntaxhighlight lang=vhdl> | ||
+ | entity mux4x1 is | ||
+ | port | ||
+ | ( | ||
+ | -- Input ports | ||
+ | X: in bit_vector (3 downto 0); | ||
+ | Sel : in bit_vector (1 downto 0); | ||
+ | -- Output ports | ||
+ | Y : out bit | ||
+ | ); | ||
+ | end entity; | ||
+ | |||
+ | -- Implementação com lógica pura | ||
+ | architecture v_logica_pura of mux4x1 is | ||
+ | |||
+ | begin | ||
+ | Y <= (X(0) and (not Sel(1)) and (not Sel(0))) or | ||
+ | ... | ||
+ | end architecture; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | No entanto, o MUX4:1 também pode ser descrito utilizando a instrução '''WHEN-ELSE''' | ||
+ | <syntaxhighlight lang=vhdl> | ||
+ | <optional_label>: <target> <= | ||
+ | <value> when <condition> else | ||
+ | <value> when <condition> else | ||
+ | ... | ||
+ | <value> else | ||
+ | <value>; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | *Importante: O '''último ELSE''' sem condição para cobrir todos os demais valores para evitar a criação de LATCHES. | ||
+ | Warning (13012): Latch ... has unsafe behavior | ||
+ | |||
+ | * No QuartusII existe um template pronto para ser utilizado em: '''[Edit > Insert Template > Language templates = VHDL (+) > Constructs (+) > Concurrent Statemens (+) > Conditional Signal Assignment]''' | ||
+ | |||
+ | No caso do MUX4:1 ele poderia ser descrito como: | ||
+ | <syntaxhighlight lang=vhdl> | ||
+ | -- Implementação com WHEN ELSE | ||
+ | architecture v_WHEN_ELSE of mux4x1 is | ||
+ | begin | ||
+ | Y <= X(0) when Sel = "00" else | ||
+ | X(1) when Sel = "01" else | ||
+ | X(2) when Sel = "10" else | ||
+ | X(3); | ||
+ | end architecture; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Outra forma de descrever o MUX4:1 seria utilizando a instrução '''WITH-SELECT''' | ||
+ | |||
+ | <syntaxhighlight lang=vhdl> | ||
+ | <optional_label>: with <expression> select | ||
+ | <target> <= | ||
+ | <value> when <choices>, | ||
+ | <value> when <choices>, | ||
+ | ... | ||
+ | <value> when others; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | *Importante: Para cobrir todas as demais possibilidades deve ser utilizado o '''WHEN OTHERS''' evitando novamente a criação de LATCHES, ou erros de análise. | ||
+ | |||
+ | Error (10313): VHDL Case Statement error ...: Case Statement choices must cover all possible values of expression | ||
+ | |||
+ | * No QuartusII existe um template pronto para ser utilizado em: '''[Edit > Insert Template > Language templates = VHDL (+) > Constructs (+) > Concurrent Statemens (+) > Selected Signal Assignment]'''. '''Mas ATENÇÃO, faltam as virgulas após cada escolha'''. | ||
+ | |||
+ | <syntaxhighlight lang=vhdl> | ||
+ | -- Implementação com WITH SELECT | ||
+ | architecture v_WITH_SELECT of mux4x1 is | ||
+ | |||
+ | begin | ||
+ | with Sel select | ||
+ | Y <= X(0) when "00", -- note o uso da , | ||
+ | X(1) when "01", | ||
+ | X(2) when "10", | ||
+ | X(3) when others; -- note o uso de others, para todos os demais valores. | ||
+ | -- Não pode ser substituido por "11" mesmo que o signal seja bit_vector. | ||
+ | end architecture; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | * Note que para associar uma entre várias arquiteturas com a sua ENTITY pode-se utilizar a instrução CONFIGURATION. No exemplo abaixo a ARCHITECTURE que está descomentada é a que será associada a ENTITY mux4x1. | ||
+ | * Caso não se use a instrução CONFIGURATION, a última ARCHITECTURE será associada a ENTITY. | ||
+ | * Apesar de apenas uma das ARCHITECTUREs ser associada, todas elas devem estar sintaticamente corretas, pois passarão pelo processo de ANÁLISE E SINTESE. | ||
+ | <syntaxhighlight lang=vhdl> | ||
+ | CONFIGURATION <configuration_name> OF <entity_name> IS | ||
+ | FOR <architecture_name> END FOR; | ||
+ | END CONFIGURATION; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | <syntaxhighlight lang=vhdl> | ||
+ | -- Design Unit que associa a architecture com a entity | ||
+ | CONFIGURATION cfg_ifsc OF mux4x1 IS | ||
+ | FOR v_logica_pura END FOR; | ||
+ | -- FOR v_WHEN_ELSE END FOR; | ||
+ | -- FOR v_WITH_SELECT END FOR; | ||
+ | END CONFIGURATION; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | * Faça a análise e sintese do mux4x1, associando a architecture v_logica_pura, depois v_WITH_SELECT, depois v_WHEN e por último v_IF_ELSE. | ||
+ | * Note a diferença entre os RTL Viewer obtidos para cada architecture. | ||
+ | {{fig|2.1|Código RTL do mux4x1 v_logica_pura| RTL_mux4x1v1.png| 300 px |}} | ||
+ | {{fig|2.2|Código RTL do mux4x1 v_WHEN_ELSE| RTL_mux4x1v2.png| 400 px |}} | ||
+ | {{fig|2.3|Código RTL do mux4x1 v_WITH_SELECT| RTL_mux4x1v3.png| 200 px |}} | ||
+ | :'''OBS''': [https://en.wikipedia.org/wiki/Register-transfer_level Register Transfer-Level] (RTL) é uma abstração na qual o circuito é descrito em termos de fluxo de sinais entre os registradores presentes no hardware e as operações combinacionais realizadas com esses dados. | ||
+ | |||
+ | ;PARA O PRÓXIMO ENCONTRO: | ||
+ | *Realize a simulação das 3 arquiteturas do MUX4:1 no Modelsim | ||
+ | *Crie um arquivo tb_mux4x1_v1.do que repita a simulação da arquitetura v1 | ||
+ | *Crie um arquivo tb_mux4x1_v2.do que repita a simulação da arquitetura v2 | ||
+ | *Crie um arquivo tb_mux4x1_v3.do que repita a simulação da arquitetura v1 | ||
+ | *Inclua todos os arquivos .do no projeto do Quartus e salve o arquivo QAR | ||
{{collapse bottom}} | {{collapse bottom}} | ||
Edição das 22h35min de 26 de fevereiro de 2024
Registro on-line das aulas
Unidade 1 - Aula inicial, Introdução a disciplina
- 1 ENCONTRO
Unidade 1 - Aula inicial, Introdução a disciplina |
---|
|
Unidade REV - PRIMEIRO CONTATO COM VHDL
- 3 ENCONTROS
Unidade REV - PRIMEIRO CONTATO COM VHDL | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
library library_name;
use library_name.package_name.all;
entity entity_name is
[generic (
cons_name1: const_type const_value;
cons_name2: const_type const_value;
...
cons_nameN: const_type const_value);]
[port (
signal_name1: mode signal_type;
signal_name2: mode signal_type;
...
signal_nameN: mode signal_type);]
[declarative_part]
[begin
statement_part]
end [entity] [entity_name];
architecture arch_name of entity_name is
[declarative_part]
begin
statement_part
end [architecture] [arch_name];
ATUAL
Um multiplexador digital de N entradas e 1 saída, frequentemente abreviado como MUX N:1, é um circuito digital muito utilizado para rotear sinais digitais Ele desempenha a função de selecionar uma das entradas para ser encaminhada para a saída com base em um sinal de seleção (ou controle).
AvaliaçõesDurante o semestre serão realizadas 4 avaliações. As avaliações devem ser enviadas pela plataforma Moodle com os arquivos solicitados.
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. 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. Referências Bibliográficas:
|