Mudanças entre as edições de "DLP29006-Engtelecom(2021-1) - Prof. Marcos Moecke"
Ir para navegação
Ir para pesquisar
Linha 94: | Linha 94: | ||
===Unidade 2 - Introdução ao VHDL e ambienta EDA - QUARTUS=== | ===Unidade 2 - Introdução ao VHDL e ambienta EDA - QUARTUS=== | ||
+ | * 3 AULAS | ||
+ | {{collapse top| Unidade 2 - Introdução ao VHDL e ambienta EDA - QUARTUS}} | ||
+ | ;Aula 4 (18 mai): | ||
+ | * Introdução ao VHDL e ambiente EDA - QUARTUS | ||
+ | * Estrutura do código VHDL | ||
+ | :* Declaração das bibliotecas e pacotes '''LIBRARY''' / '''PACKAGE''' | ||
+ | <syntaxhighlight lang=vhdl> | ||
+ | library library_name; | ||
+ | use library_name.package)name.all; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | :* '''ENTITY''' | ||
+ | <syntaxhighlight lang=vhdl> | ||
+ | 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]; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | :* '''ARCHITECTURE''' | ||
+ | <syntaxhighlight lang=vhdl> | ||
+ | architecture arch_name of entity_name is | ||
+ | [declarative_part] | ||
+ | begin | ||
+ | statement_part | ||
+ | end [architecture] [arch_name]; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | * Exemplo - Declaração de uma porta NAND em VHDL | ||
+ | |||
+ | <syntaxhighlight lang=vhdl> | ||
+ | library std; | ||
+ | use std.standard.all; | ||
+ | |||
+ | entity nand_gate is | ||
+ | port (a, b: in bit; x: out bit); | ||
+ | end entity; | ||
+ | |||
+ | architecture nome_arch of nand_gate is | ||
+ | begin | ||
+ | x <= a nand b; | ||
+ | end architecture; | ||
+ | </syntaxhighlight> | ||
+ | <!-- | ||
+ | ;Aula 5 (21 fev): | ||
+ | * Exemplo 2.2 (VHDL) - programação de um flip-flop | ||
+ | <syntaxhighlight lang=vhdl> | ||
+ | -- Declaração das bibliotecas e pacotes | ||
+ | LIBRARY ieee; | ||
+ | USE ieee.std_logic_1164.all; | ||
+ | |||
+ | -- Especificação de todas as entradas e saídas do circuito | ||
+ | ENTITY flip_flop IS | ||
+ | PORT (d, clk, rst: IN STD_LOGIC; | ||
+ | q: OUT STD_LOGIC); | ||
+ | END; | ||
+ | |||
+ | -- Descrição de como o circuito deve funcionar | ||
+ | ARCHITECTURE flip_flop OF flip_flop IS | ||
+ | BEGIN | ||
+ | PROCESS (clk, rst) | ||
+ | BEGIN | ||
+ | IF (rst='1') THEN | ||
+ | q <= '0'; | ||
+ | ELSIF (clk'EVENT AND clk='1') THEN | ||
+ | q <= d; | ||
+ | END IF; | ||
+ | END PROCESS; | ||
+ | END; | ||
+ | </syntaxhighlight> | ||
+ | :* Após a [[criação do projeto em VHDL]] utilizando a descrição de hardware acima, [[compile o código VHDL]]. | ||
+ | :* Use o [[RTL Viewer]] para ver a descrição RTL do circuito. | ||
+ | {{fig|2.2|Código RTL do Exemplo 2.2| RTL_Ex2_2_Pedronib.png| 400 px |}} | ||
+ | |||
+ | :* Use o [[Technology Map Viewer]] para ver a como o circuito foi mapeado para os elementos lógicos disponíveis no dispositivo FPGA selecionado (EP1C3T100A8) | ||
+ | {{fig|2.3|Technology Map do Exemplo 2.2| TM_Ex2_2_Pedronib.png| 400 px |}} | ||
+ | |||
+ | :* Abra o [[Chip Planner]] e observe no [[Node Properties]] como esse circuito é conectado dentro do dispositivo FPGA selecionado | ||
+ | {{fig|2.4|Chip Planner do Exemplo 2.2| ChipPlanner_Ex2_2_Pedronib.png| 400 px |}} | ||
+ | |||
+ | :* Modifique o circuito do flip-flop para que ele passe a ter 4 flip-flops | ||
+ | {{fig|2.5|RTL 4 FF| RTL_4FF.png| 400 px |}} | ||
+ | |||
+ | ;Aula 6 e 7 (26 e 28 fev): | ||
+ | * Uso de alguns sites auxiliares para a programação em VHDL: | ||
+ | :*[[Preparando para gravar o circuito lógico no FPGA]] | ||
+ | :*[[Palavras reservadas do VHDL]] | ||
+ | :*[http://g2384.github.io/work/VHDLformatter.html VHDL Beautifier, Formatter] - para formatar automaticamente um código VHDL. | ||
+ | :*[[Media:Quartus_II_Simulation.pdf | Tutorial do QSIM - Introduction to Simulation of VHDL Designs]] da ALTERA. | ||
+ | *Exemplo de um contador em VHDL. [https://en.wikipedia.org/wiki/VHDL#Example:_a_counter COUNTER] na página de VHDL da Wikipedia. | ||
+ | :*[[Restringir a frequencia máxima de clock no Quartus II]] | ||
+ | |||
+ | :* Objetivos: Copiar e colar o código no Quartus; diferença entre analise e síntese e compilação; observar o RTL (usar UNGROUP); simulação funcional e simulação temporal; observar os atrasos de propagação na simulação temporal. | ||
+ | |||
+ | * Uso das bibliotecas no VHDL. | ||
+ | :*Library '''std''' | ||
+ | ::O Package '''standard''': é parte do VHDL desde a primeira versão (1987). Ela contem definição de tipos de dados (BIT, INTEGER, BOOLEAN, CHARACTER, etc.) e seus operadores logicos, aritméticos, de comparação e shift. | ||
+ | ::O Package textio fornece os recurso para o tratamento de textos e arquivos, que podem ser utilizados na simulação. | ||
+ | *Como declarar e usar os pacotes da biblioteca '''std'''. | ||
+ | :: Note que esses pacotes são implicitamente carregados não precisando ser declarados. Ambos pacotes foram expandidos no VHDL 2008. | ||
+ | :::<syntaxhighlight lang=vhdl> | ||
+ | -- NAO É NECESSARIO DECLARAR | ||
+ | library std; | ||
+ | use std.standard.all; | ||
+ | use std.textio.all; | ||
+ | </syntaxhighlight> | ||
+ | *Onde estão os arquivos dessa biblioteca na versão Quartus II instalada nos computadores do IFSC e na IFSC_CLOUD? | ||
+ | ls /opt/altera/13.0sp1/quartus/libraries/vhdl/std | ||
+ | |||
+ | :*Library '''ieee''' | ||
+ | :: O Package '''[[Std logic 1164.vhd | std_logic_1164]]''' define os tipos de dados STD_ULOGIC e STD_LOGIC. | ||
+ | :: O Package '''[[Numeric std.vhd | numeric_std]]''' define os tipos de dados SIGNED e UNSIGNED e seus operadores considerando o tipo STD_LOGIC como base. | ||
+ | :: O Package '''numeric_bit''' define os tipos de dados SIGNED e UNSIGNED e seus operadores considerando o tipo BIT como base. | ||
+ | :: O Package '''numeric_std_unsigned''' introduz operadores sobre o tipo STD_LOGIC_VECTOR, considerando os como números sem sinal. | ||
+ | :: O Package '''numeric_bit_unsigned''' introduz operadores sobre o tipo BIT_VECTOR, considerando os como números sem sinal. | ||
+ | :: O Package '''fixed_pkg''' (e pacotes associados) definem os tipos de ponto fixo unsigned (UFIXED) e signed (SFIXED) e seus operadores. | ||
+ | :: O Package '''float_pkg''' (e pacotes associados) definem o tipo de ponto flutuante (FLOAT) e seus operadores. | ||
+ | :* Pacotes não padronizados ('''NÃO UTILIZAR''') | ||
+ | : O Package [[Std logic arith.vhd | std_logic_arith]] define os tipos de dados SIGNED e UNSIGNED e seus operadores. Deve ser sempre substituído por pelo pacote padrão equivalente numeric_std. (disponível da Mentor e Synopsys) | ||
+ | : O Package [[Std logic unsigned.vdh | std_logic_unsigned]] é semelhante ao numeric_std_unsigned. (disponível da Synopsys) | ||
+ | : O Package std_logic_signed é semelhante ao acima operando sobre números com sinal. (disponível da Synopsys) | ||
+ | |||
+ | *Como declarar e usar os pacotes da biblioteca '''ieee'''. | ||
+ | :::<syntaxhighlight lang=vhdl> | ||
+ | library ieee; | ||
+ | -- UTILIZAR ESTES PACOTES | ||
+ | use ieee.std_logic_1164.all; | ||
+ | use ieee.numeric_std.all; | ||
+ | |||
+ | -- NAO UTILIZAR ESTES PACOTES | ||
+ | use ieee.std_logic_arith.all; | ||
+ | use ieee.std_logic_signed.all; | ||
+ | use ieee.std_logic_unsigned.all; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | *Onde estão os arquivos dessa biblioteca na versão Quartus II versão 13.0sp1 instalada nos computadores do IFSC e na IFSC_CLOUD? | ||
+ | ::Os pacotes padrão: | ||
+ | ls /opt/altera/13.0sp1/quartus/libraries/vhdl/ieee | ||
+ | |||
+ | ::Os pacotes não padrão: | ||
+ | ls /opt/altera/13.0sp1/quartus/libraries/vhdl/mentor/arithmetic (Mentor Graphics) | ||
+ | ls /opt/altera/13.0sp1/quartus/libraries/vhdl/synopsys/ieee (Synopsys) | ||
+ | |||
+ | *Os arquivos dessa biblioteca do padrão (versão 2008) estão apenas disponíveis a partir do Quartus II versão 16.0 instalado na IFSC_CLOUD? | ||
+ | ls /opt/altera/16.0/quartus/libraries/vhdl/ieee/2008 | ||
+ | |||
+ | * Estrutura do código VHDL | ||
+ | |||
+ | |||
+ | <!-- | ||
+ | |||
+ | ;Aula 7 e 8 (14 e 16 ago): | ||
+ | <big> Video motivational para apreender FPGA, VHDL [https://youtu.be/ecyyZ6zTLic Microsoft's Bing* Intelligent Search with Intel® FPGAs] </big> | ||
+ | |||
+ | :*Realize as simulações funcional e temporal do circuito usando o QSIM. | ||
+ | {{fig|2.6|Simulação Funcional de 4 FF 100ns| SIM1_4FF.png| 400 px |}} | ||
+ | |||
+ | {{fig|2.7|Simulação Temporal de 4 FF 100ns| SIM2_4FF.png| 800 px |}} | ||
+ | |||
+ | Note que na simulação funcional a mudança da saída Q ocorre no instante em que ocorre a borda de subida do clock ou no momento do reset. No entanto, no caso da simulação com timing, existe um atraso de ~6ns nestas mudanças. | ||
+ | |||
+ | ''IMPORTANTE:'' Na prática normalmente não é necessário fazer a simulação temporal, pois através do Time Quest Report é possível verificar se o circuito atende as restrições de tempo. | ||
+ | * Para definir as restrições de tempo do clock por exemplo, pode ser adicionado um arquivo .sdc ao projeto definindo a frequência do clock esperada através da seguinte linha: | ||
+ | |||
+ | create_clock -name CLK50MHz -period 50MHz [get_ports {*}] | ||
+ | |||
+ | *Realize as simulações funcional do circuito usando o Modelsim. | ||
+ | |||
+ | *'''PASSO 1a''': Abra o Modelsim | ||
+ | /opt/altera/13.0sp1/modelsim_ae/bin/vsim | ||
+ | |||
+ | *'''PASSO 1b''': Resete o Layout do Modelsim (caso tenha feito alguma modificação e não saiba como retornar ao original) (Layout > Reset). | ||
+ | |||
+ | *'''PASSO 1c''': Mude para a pasta onde está o projeto, usando a barra de menu (File > Change Directory... [Escolha a pasta]. Ou via linha de comando na janela de transcript. | ||
+ | cd /home/nome_usuario/nome_pasta/... | ||
+ | |||
+ | *'''PASSO 1d''': Confira se está na pasta correta | ||
+ | pwd | ||
+ | ls | ||
+ | |||
+ | *PASSO 1e: Compile o arquivo vhd do projeto. (Compile > Compile... selecione [n_Flip_Flop.vhd] e clique em [Compile]). Responda a [Create Library?] com [Yes]. Em seguida clique em [Done]. Ou | ||
+ | vlib work | ||
+ | vcom -work work n_flip_flop.vhd | ||
+ | |||
+ | *'''PASSO 1f''': Inicie a simulação (Simulation > Start Simulation... na aba [Design] selecione a Entity [n_Flip_Flop] no Package work e clique em [OK]. Ou | ||
+ | vsim work.n_flip_flop | ||
+ | |||
+ | *'''PASSO 2a''': Inicie a criação dos sinais de entrada da Entity. Clique_direito sobre o nome da Entity na janela Library, e em seguida selecione [Create Wave]. Ou | ||
+ | wave create -pattern none -portmode in -language vhdl -range N 1 /n_flip_flop/d | ||
+ | wave create -pattern none -portmode in -language vhdl /n_flip_flop/clk | ||
+ | wave create -pattern none -portmode in -language vhdl /n_flip_flop/rst | ||
+ | wave create -pattern none -portmode out -language vhdl -range 1 N /n_flip_flop/q | ||
+ | |||
+ | Será aberta uma janela [Wave] na qual irão ser mostrados as 3 portas de entrada da Entity e a porta de saída. Clique sobre o sinal da porta de saída e [Delete], pois esse sinal não será editado. Aproveite para arrastar com o mouse os sinais na janela Wave para ficarem na seguinte ordem: rst, clk, d. | ||
+ | |||
+ | *'''PASSO 2b''': Crie o sinal de rst como um pulso de valor '1' entre 20 e 30 ns. | ||
+ | |||
+ | Clique_direito sobre o sinal rst e selecione [Edit > Create/Modify Waveform] e escolha [Patterns = Constant], [Start Time = 0] [End Time = 1000] [Time Unit = ps] e clique em [Next], [Value = 0] e clique em [Finish]. Ou | ||
+ | wave modify -driver freeze -pattern constant -value 0 -starttime 0ps -endtime 1000ps Edit:/n_flip_flop/rst | ||
+ | |||
+ | Clique_direito sobre o sinal rst e selecione [Edit > Create/Modify Waveform] e escolha [Patterns = Constant], [Start Time = 20] [End Time = 30] [Time Unit = ps] e clique em [Next], [Value = 1] e clique em [Finish]. Ou | ||
+ | wave modify -driver freeze -pattern constant -value 1 -starttime 20ps -endtime 30ps Edit:/n_flip_flop/rst | ||
+ | |||
+ | *'''PASSO 2c''': Crie o sinal de clk com um período de 100ps, iniciando em alto. | ||
+ | |||
+ | Clique_direito sobre o sinal clk e selecione [Edit > Create/Modify Waveform] e escolha [Patterns = Clock], [Start Time = 0] [End Time = 1000] [Time Unit = ps] e clique em [Next], [Initial Value = 1], [Clock Period = 100ps], [Duty Cycle = 50] e clique em [Finish]. Ou | ||
+ | wave modify -driver freeze -pattern clock -initialvalue 1 -period 100ps -dutycycle 50 -starttime 0ps -endtime 1000ps Edit:/n_flip_flop/clk | ||
+ | |||
+ | *'''PASSO 2d''': Crie o sinal de d como sendo uma contagem entre "0000" e "1111" | ||
+ | |||
+ | Clique_direito sobre o sinal d e selecione [Edit > Create/Modify Waveform] e escolha [Patterns = Counter], [Start Time = 0] [End Time = 1000] [Time Unit = ps] e clique em [Next], [Start Value = 0000], [End Value = 1111], [Time Period = 120ps], [Counter Type = Range], [Count Direction = Up], [Step Count = 1], [Repeat = Forever] e clique em [Finish]. Ou | ||
+ | wave modify -driver freeze -pattern counter -startvalue 0000 -endvalue 1111 -type Range -direction Up -period 120ps -step 1 -repeat forever -range 4 1 -starttime 0ps -endtime 1000ps Edit:/n_flip_flop/d | ||
+ | |||
+ | *'''PASSO 2e''': Insira o sinal de saída q na janela Wave. | ||
+ | |||
+ | Clique sobre o sinal q na janela Objects e solte-o na janela Wave. Ao final desses passos a janela Wave deverá estar conforme mostrado abaixo: | ||
+ | {{fig|2.8|Edição do Waveform de 4 FF 1000ns no Modelsim| MODELSIM_4FF_Edit.png| 800 px |}} | ||
+ | |||
+ | *'''PASSO 3''': Realize a simulação de 1000 ps | ||
+ | |||
+ | :Opção 1: Clique 10 vezes sobre o icone [Run] ou [F9] | ||
+ | :Opção 2: Digite 10 vezes o comando run na janela Transcript (cada run dura o tempo indicado ao lado esquerdo do icone [Run] | ||
+ | :Opção 3: Digite o comando run 1000 ps | ||
+ | :Opção 4: Digite o comando run -all (será executado o tempo necessario para concluir os sinais que foram desenhados. | ||
+ | |||
+ | *'''PASSO 4''': Análise da simulação | ||
+ | |||
+ | Selecione com o shift_clique_esquerdo do mouse os sinas d e q (barramentos de 4 bits) e em seguida clique_direito e selecione [radix > unsigned]. A janela Wave deverá estar conforme mostrado abaixo: | ||
+ | {{fig|2.9|Simulação funcional de 4 FF 1000ns no Modelsim| MODELSIM_4FF_Simul.png| 800 px |}} | ||
+ | |||
+ | *Note que a saída q está com (Forcing Unknown - (X em vermelho) entre 0 e 20 ps. Isso ocorre pois antes de aplicar o RESET o Flip Flop tem valor desconhecido. Por isso é sempre importante aplicar um RESET logo ao iniciar a simulação de um circuito sequencial. | ||
+ | *Note que as mudanças na saída q ocorrem sempre na transição de subida do sinal do CLOCK. Mudanças que ocorrem na entrada do sinal d não afetam a saída. | ||
+ | *Experimente mudar o sinal de entrada d com períodos diferentes (e.g. 60ps) e repita a simulação. | ||
+ | *Inclua um pequeno pulso de RESET na instante 530ps. | ||
+ | |||
+ | *'''PASSO 5''': Criação de um teste bench com arquivo .do | ||
+ | Use os comandos da janela de transcript para criar um arquivo tb_FF.do que permite repetir de forma automatica o teste realizado. | ||
+ | <syntaxhighlight lang=tcl> | ||
+ | ################################ | ||
+ | # FILE : tb_FF.do | ||
+ | # AUTOR: Marcos Moecke | ||
+ | # DATA : 14 de agosto de 2019 | ||
+ | ################################ | ||
+ | |||
+ | #criacao da library work | ||
+ | vlib work | ||
+ | |||
+ | #compilacao da entity nome.vhd (nao necessita ser compilado no quartus II) | ||
+ | vcom -work work n_flip_flop.vhd | ||
+ | |||
+ | #simulacao na entity nome.vhd | ||
+ | vsim work.n_flip_flop | ||
+ | |||
+ | #edicao do sinal rst | ||
+ | wave create -pattern none -portmode in -language vhdl /n_flip_flop/rst | ||
+ | wave modify -driver freeze -pattern constant -value 0 -starttime 0ps -endtime 1000ps Edit:/n_flip_flop/rst | ||
+ | wave modify -driver freeze -pattern constant -value 1 -starttime 20ps -endtime 30ps Edit:/n_flip_flop/rst | ||
+ | |||
+ | #edicao do sinal clock | ||
+ | wave create -pattern none -portmode in -language vhdl /n_flip_flop/clk | ||
+ | wave modify -driver freeze -pattern clock -initialvalue 1 -period 100ps -dutycycle 50 -starttime 0ps -endtime 1000ps Edit:/n_flip_flop/clk | ||
+ | |||
+ | #edicao do sinal d | ||
+ | wave create -pattern none -portmode in -language vhdl -range N 1 /n_flip_flop/d | ||
+ | wave modify -driver freeze -pattern counter -startvalue 0000 -endvalue 1111 -type Range -direction Up -period 120ps -step 1 -repeat forever -range 4 1 -starttime 0ps -endtime 1000ps Edit:/n_flip_flop/d | ||
+ | |||
+ | #inclusao do sinal de saida q (como BINARY) | ||
+ | add wave -position end sim:/n_flip_flop/q | ||
+ | |||
+ | #inclusao do sinal de saida q (como UNSIGNED) | ||
+ | add wave -position end -radix hexadecimal sim:/n_flip_flop/q | ||
+ | |||
+ | #execucao da simulacao inteira | ||
+ | run -all | ||
+ | |||
+ | #reinicio do tempo e simulacao | ||
+ | restart | ||
+ | |||
+ | #execucao da simulacao por 1000 ps | ||
+ | run 1000 ps | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | *Para conhecer melhor o MODELSIM GRAPHICAL WAVEFORM EDITOR, consulte o [[Media:ModelsimGraphicalWaveformEditor.pdf | INTRODUCTION TO SIMULATION OF VHDL DESIGNS USING MODELSIM GRAPHICAL WAVEFORM EDITOR]] | ||
+ | |||
+ | <!-- | ||
+ | ;Aula 6 (25 fev): | ||
+ | :* Exemplo 2.3 (VHDL e QSIM) - programação de um circuito somador com registrador | ||
+ | :: Realizar as simulações funcional e temporal do circuito | ||
+ | :: Observar o "Technology Map" e o "RTL" do circuito | ||
+ | <syntaxhighlight lang=vhdl> | ||
+ | LIBRARY ieee; | ||
+ | USE ieee.std_logic_1164.all; | ||
+ | |||
+ | ENTITY registered_comp_add IS | ||
+ | PORT (clk: IN STD_LOGIC; | ||
+ | a, b: IN INTEGER RANGE 0 TO 7; | ||
+ | reg_comp: OUT STD_LOGIC; | ||
+ | reg_sum: OUT INTEGER RANGE 0 TO 15); | ||
+ | END; | ||
+ | |||
+ | ARCHITECTURE circuit OF registered_comp_add IS | ||
+ | SIGNAL comp: STD_LOGIC; | ||
+ | SIGNAL sum: INTEGER RANGE 0 TO 15; | ||
+ | BEGIN | ||
+ | comp <= '1' WHEN a>b ELSE '0'; | ||
+ | sum <= a + b; | ||
+ | PROCESS (clk) | ||
+ | BEGIN | ||
+ | IF (clk'EVENT AND clk='1') THEN | ||
+ | reg_comp <= comp; | ||
+ | reg_sum <= sum; | ||
+ | END IF; | ||
+ | END PROCESS; | ||
+ | END; | ||
+ | </syntaxhighlight> | ||
+ | :: Acrescente saídas para o sinal '''sum''' e para o sinal '''comp''', de modo a poder observar estes sinais no simulador QSIM e realize novas simulações funcional e temporal. | ||
+ | {{fig|2.10|Código RTL do Exemplo 2.3| RTL_Ex2_3_Pedronib.png| 400 px |}} | ||
+ | |||
+ | Note que na simulação funcional a mudança da saída Q ocorre no instante em que ocorre a borda de subida do clock ou no momento do reset. No entanto, no caso da simulação com timing, existe um atraso nestas mudanças. | ||
+ | |||
+ | ''IMPORTANTE:'' Na prática normalmente não é necessário fazer a simulação temporal, pois através do Time Quest Report é possivel verificar se o circuito atende as restrições de tempo. | ||
+ | * Para definir as restrições de tempo do clock por exemplo, pode ser adicionado um arquivo .sdc ao projeto definindo a frequencia do clock esperada através da seguinte linha: | ||
+ | |||
+ | create_clock -name CLK50MHz -period 50MHz [get_ports {*}] | ||
+ | ::ver [[Media:Quartus_II_Simulation.pdf | Tutorial do QSIM - Introduction to Simulation of VHDL Designs]] da ALTERA. | ||
+ | ::Ver pag. 3 a 24 de <ref name="PEDRONI2010b"> PEDRONI, Volnei A. '''Circuit Design and Simulation with VHDL'''; 2ª ed. Massachusetts-EUA:MIT, 2010. 608 p. ISBN 9780262014335 </ref> | ||
+ | --> | ||
+ | {{collapse bottom}} | ||
==Avaliações== | ==Avaliações== |
Edição das 16h37min de 18 de maio de 2021
Registro on-line das aulas
Unidade 1 - Introdução a disciplina
- 3 AULAS
Unidade 1 - Introdução a disciplina | ||||
---|---|---|---|---|
|
Unidade 2 - Introdução ao VHDL e ambienta EDA - QUARTUS
- 3 AULAS
Unidade 2 - Introdução ao VHDL e ambienta EDA - QUARTUS |
---|
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];
library std;
use std.standard.all;
entity nand_gate is
port (a, b: in bit; x: out bit);
end entity;
architecture nome_arch of nand_gate is
begin
x <= a nand b;
end architecture;
|
Avaliações
Nas avaliações A1 e A2 são com consulta apenas as folhas de consulta entregues:
- VHDL Quick Reference - SynthWorks
- VHDL Types and Operators Quick Reference - SynthWorks
- ModelSim Quick Reference - SynthWorks
- Tabelas das figuras 3.6, 3.10 e 4.1 do livro do Pedroni.
- Arquivo:Numeric std conversions.png
- Dica use também como fonte de consulta os templates do Quartus.
- Ao final das avaliações o aluno deverá enviar a avaliação para a plataforma Moodle com os arquivos solicitados.