Mudanças entre as edições de "SST20707-2013-2"
(68 revisões intermediárias por 2 usuários não estão sendo mostradas) | |||
Linha 7: | Linha 7: | ||
* [[Síntese de Sistemas de Telecomunicações |Ementa e referências bibliográficas]] | * [[Síntese de Sistemas de Telecomunicações |Ementa e referências bibliográficas]] | ||
+ | |||
+ | == Conceitos == | ||
+ | * [https://docs.google.com/spreadsheet/ccc?key=0AolsLbqpwc8_dGk3UnhiNWhwT3MwWTF2TWRfN1lHNXc&usp=sharing Conceitos.] | ||
== Assuntos trabalhados == | == Assuntos trabalhados == | ||
Linha 15: | Linha 18: | ||
== Apoio Desenvolvimento == | == Apoio Desenvolvimento == | ||
*[http://www.altera.com/education/univ/materials/boards/de2-115/unv-de2-115-board.html Página DE2-115 (Manual, QSF)] | *[http://www.altera.com/education/univ/materials/boards/de2-115/unv-de2-115-board.html Página DE2-115 (Manual, QSF)] | ||
+ | <!-- | ||
+ | <syntaxhighlight lang=text> | ||
+ | killall jtagd | ||
+ | |||
+ | sudo vim /etc/udev/rules.d/51-usbblaster.rules | ||
+ | SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6001", MODE="0666" | ||
+ | |||
+ | sudo groupadd usbblaster | ||
+ | sudo usermod -a -G usbblaster aluno | ||
+ | sudo usermod -a -G usbblaster root | ||
+ | sudo chown root:usbblaster /etc/udev/rules.d/51-usbblaster.rules | ||
+ | |||
+ | sudo udevadm control --reload-rules | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | *Resolve problema Modelsim | ||
+ | sudo apt-get install gnome-session-fallbac | ||
+ | |||
+ | --> | ||
== Slides == | == Slides == | ||
Linha 20: | Linha 42: | ||
*[[Media:Sst-lab1_esquematico_fluxo_quartus.pdf|Fluxo de Projeto Quartus]] | *[[Media:Sst-lab1_esquematico_fluxo_quartus.pdf|Fluxo de Projeto Quartus]] | ||
*[[Media:Sst-lab2_VHDL_fluxo_quartus.pdf|Introdução à Linguagem VHDL]] | *[[Media:Sst-lab2_VHDL_fluxo_quartus.pdf|Introdução à Linguagem VHDL]] | ||
+ | *[[Media:Sst-lab3_componentes.pdf|Componentes em VHDL]] | ||
+ | *[[Media:sst-lab4_mux_decode.pdf|Mux e Decode]] | ||
+ | *[[Media:sst-lab5_flipflop.pdf|Circuitos Seqüênciais]] | ||
+ | *[[Media:sst-lab6_fsm.pdf|Máquinas de Estado]] | ||
− | = | + | = 16/08: Apresentação = |
* Apresentação do professor. | * Apresentação do professor. | ||
* Apresentação dos alunos: Nome, perfil, preferências, etc. | * Apresentação dos alunos: Nome, perfil, preferências, etc. | ||
Linha 29: | Linha 55: | ||
** Histórico | ** Histórico | ||
− | = | + | = 20/08: Desenvolvimento com PLDs = |
* Famílias de Componentes Lógicos Programáveis | * Famílias de Componentes Lógicos Programáveis | ||
* Arquitetura dos FPGAS | * Arquitetura dos FPGAS | ||
* Introdução ao Fluxo de Projeto do Quartus | * Introdução ao Fluxo de Projeto do Quartus | ||
− | = | + | = 23/08: Laboratório Quartus = |
* Fluxo de projeto esquemáticos com Quartus e Modelsim (Porta AND) | * Fluxo de projeto esquemáticos com Quartus e Modelsim (Porta AND) | ||
* Exercício: Projeto, Simulação e Teste do [http://en.wikipedia.org/wiki/Adder_(electronics) meio-somador] | * Exercício: Projeto, Simulação e Teste do [http://en.wikipedia.org/wiki/Adder_(electronics) meio-somador] | ||
− | = | + | = 27/08: Introdução à Linguagem VHDL = |
* Finalização do fluxo de projeto do Meio somador no Quartus e Modelsim, utilização a entrada de esquemático. | * Finalização do fluxo de projeto do Meio somador no Quartus e Modelsim, utilização a entrada de esquemático. | ||
* Apresentação da Linguagem VHDL | * Apresentação da Linguagem VHDL | ||
* Conceitos de entidade (entity) e arquitetura (architecture) | * Conceitos de entidade (entity) e arquitetura (architecture) | ||
+ | |||
+ | = 30/08: Projetando com VHDL = | ||
+ | * Estudo de caso: Meio Somador em VHDL | ||
+ | |||
+ | = 03/09: Projetando com VHDL = | ||
+ | * Exercício: Manipulação do LCD utilizando VHDL | ||
+ | |||
+ | = 06/09: Código Concorrente (WHEN, SELECT) = | ||
+ | |||
+ | == WHEN == | ||
+ | *Sintaxe Simplificada: | ||
+ | ;:<code> | ||
+ | signal_name <= | ||
+ | value_expr_1 when boolean_expr_1 else | ||
+ | value_expr_2 when boolean_expr_2 else | ||
+ | value_expr_3 when boolean_expr_3 else | ||
+ | ... | ||
+ | value_expr_n | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | *Exemplo: | ||
+ | ;:<code> | ||
+ | x <= a when (s="00") else | ||
+ | b when (s="01") else | ||
+ | c when (s="10") else | ||
+ | d; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | == SELECT == | ||
+ | *Sintaxe Simplificada: | ||
+ | ;:<code> | ||
+ | with select_expression select | ||
+ | signal_name <= value_expr_1 when choice_1, | ||
+ | value_expr_2 when choice_2, | ||
+ | value_expr_3 when choice_3, | ||
+ | ... | ||
+ | value_expr_n when choice_n; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | *Exemplo: | ||
+ | ;:<code> | ||
+ | with s select | ||
+ | x <= "0001" when "00", | ||
+ | "0010" when "01", | ||
+ | "0011" when "10", | ||
+ | "0100" when others; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | = 10/09: Componentes (COMPONENT, PORT MAP) = | ||
+ | |||
+ | *Sintaxe Simplificada: | ||
+ | ;:<syntaxhighlight lang=vhdl> | ||
+ | --Declaração---------------------------------------------------------- | ||
+ | |||
+ | COMPONENT component_name [IS] | ||
+ | [GENERIC ( | ||
+ | const_name: const_type := const_value; | ||
+ | ...);] | ||
+ | PORT ( | ||
+ | port_name: port_mode signal_type; | ||
+ | ...); | ||
+ | END COMPONENT [component_name]; | ||
+ | |||
+ | |||
+ | --Instanciação---------------------------------------------------------- | ||
+ | |||
+ | label: [COMPONENT] component_name [GENERIC MAP (generic_list) ] PORT MAP (port_list); | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | *Exemplo: | ||
+ | ;:<code> | ||
+ | --Declaração---------------------------------------------------------- | ||
+ | |||
+ | COMPONENT nand_gate IS | ||
+ | PORT ( a, b: IN STD_LOGIC; | ||
+ | c: OUT STD_LOGIC); | ||
+ | END COMPONENT; | ||
+ | |||
+ | |||
+ | --Instanciação--------------------------------------------------------- | ||
+ | |||
+ | nand1: nand_gate PORT MAP (x, y, z); --mapeamento posicional | ||
+ | nand2: nand_gate PORT MAP (a=>x, b=>y, c=>z); --mapeamento nominal | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | *Exemplo GENERIC: | ||
+ | ;:<code> | ||
+ | --Declaração---------------------------------------------------------- | ||
+ | |||
+ | COMPONENT xor_gate IS | ||
+ | GENERIC (N: INTEGER := 8); | ||
+ | PORT ( a: IN STD_LOGIC(1 TO N); | ||
+ | b: OUT STD_LOGIC); | ||
+ | END COMPONENT; | ||
+ | |||
+ | |||
+ | --Instanciação---------------------------------------------------------- | ||
+ | |||
+ | xor1: xor_gate GENERIC MAP (16) PORT MAP (x, y); --map. posicional | ||
+ | xor2: xor_gate GENERIC MAP (N=>16) PORT MAP (a=>x, b=>y); --map. nominal | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | = 13/09: Componentes (continuação) = | ||
+ | |||
+ | *Exercício utilizando o "decodificador" LCD e o debouncer. | ||
+ | *[[Media:Debouncer.zip|Arquivos]] de apoio. | ||
+ | |||
+ | |||
+ | [[imagem:componentes-decode.png|600px|center]] | ||
+ | |||
+ | |||
+ | = 17/09: Não houve aula = | ||
+ | * Palestra Sinapse da Inovação | ||
+ | |||
+ | = 20/09: Componentes (continuação) = | ||
+ | *Exercício de componentes utilizando o exemplo do LCD Decode. | ||
+ | |||
+ | = 24/09: Suspensa = | ||
+ | *Convocação do professores pela Direção de Ensino | ||
+ | |||
+ | = 27/09: Projeto MUX 4x1 = | ||
+ | * Projeto e simulação do MUX estrutural e comportamental. | ||
+ | |||
+ | = 01/10: Projeto do Decode de 7 Segmentos= | ||
+ | * Projeto e simulação do Decode de 7 segmentos para a escrita de "IFSC" | ||
+ | |||
+ | = 04/10: Apresentação do 1º Projeto= | ||
+ | |||
+ | ==Documentação do Projeto:== | ||
+ | *Deve ser preparado um arquivo compactado (*.zip, *.rar) contendo o seguinte: | ||
+ | **Arquivo *.qar com todos os VHDL do projeto (topo_upc.vhd, op_or.vhd, op_xor.vhd, op_soma.vhd, op_id.vhd, mux_4x1.vhd, decode_7seg.vhd); | ||
+ | **Arquivos *.do de todos os módulos (test_X.do e wave_X.do, sendo X é a identificação do módulo testado); | ||
+ | **Relatório | ||
+ | |||
+ | **'''OBS: Se o email voltar utilize o email alternativo: roberto@eel.ufsc.br''' | ||
+ | |||
+ | *O Relatório deve conter o seguinte: | ||
+ | ** Identificação do autor | ||
+ | **Tabela verdade para cada componente; | ||
+ | **Diagrama de blocos com sinais de entrada e saída para cada componente; | ||
+ | **Diagramas de forma de ondas extraídos diretamente do ModelSim para cada componente; | ||
+ | **Descrição das ferramentas utilizadas e fluxo de projeto; | ||
+ | |||
+ | == Avaliação == | ||
+ | *O trabalho deverá ser desenvolvido individualmente. | ||
+ | *O trabalho deverá chegar na caixa de entrada do email do professor com o assunto SST-UCP_Nome_Aluno até o dia '''18/10/2013 às 23:59h''', impreterivelmente. | ||
+ | *A apresentação e demonstração do funcionamento por intermédio de simulação e prototipação será realizada em data a ser definida. | ||
+ | *Durante a apresentação, os alunos deverão estar aptos a responder quaisquer perguntas. Respostas insatisfatórias ou a ausência do aluno acarretará em anulação da nota do trabalho. | ||
+ | *As explicações durante a demonstração do projeto funcionando são fundamentais para a avaliação. | ||
+ | *Trabalhos copiados resultarão em nota zero para todos os alunos envolvidos. Poderá ser utilizado a ferramenta MOSS como auxílio na identificação de situações de plágio. | ||
+ | |||
+ | ==Objetivo== | ||
+ | Desenvolver um projeto hierárquico com módulos em VHDL que implementem uma Unidade de Processamento Combinacional (UPC) capaz de realizar as funções lógicas OU e XOR, a função aritmética de SOMA e a geração do ID baseado na matrícula sobre dois operandos de 8 bits e apresentar o resultado em dois displays de 7 segmentos e 8 LEDs da DE2-115. | ||
+ | |||
+ | |||
+ | [[imagem:diagrama_upc.png|600px|center]] | ||
+ | |||
+ | |||
+ | *A UPC terá o seguinte funcionamento: | ||
+ | **Entrar com o operando A nas chaves SW (15-8) e o operando B nas chaves SW (7-0) | ||
+ | **Entrar com a escolha da operação (OP) a ser executada nas chaves (17-16) | ||
+ | **Disponibilizar na saída (Diplays e LEDs) o resultado da operação. | ||
+ | |||
+ | *Requisitos: | ||
+ | **O projeto deverá ser desenvolvido fora horário de aula. | ||
+ | **Todos os módulos devem ser implementados como componentes e instanciados no arquivo topo. | ||
+ | **O componente MUX deve ter a implementação de duas arquiteturas: Estrutural e Comportamental. | ||
+ | **Deve haver somente um componente Decode e duas instanciações. | ||
+ | **Componente ID: A operação ID deve manipular os quatro últimos números da matrícula do aluno (------XYH-L). Quando o valor da entrada A for o XY (hexadecimal) e a operação selecionada for o ID os displays devem mostrar o valor HL. Qualquer outro valor de entrada deve gerar o valor FF no display. | ||
+ | |||
+ | ==Cronograma== | ||
+ | *04/10: Apresentação dos objetivos do trabalho. | ||
+ | *11/10: Aula para retirada de dúvidas. Observação: O projeto já deve estar encaminhado, lembrem que nesse dia, já se passou metade do prazo para entrega. | ||
+ | *18/10: Prazo final para entrega do trabalho. | ||
+ | |||
+ | ==Horários do Laboratório== | ||
+ | *Previsão (precisa confirmar disponibilidade dos Labs): | ||
+ | **Segunda: 10:00h às 20:00h | ||
+ | **Terça: 14:00h às 20:00h | ||
+ | **Quarta: 16:00h às 18:00h | ||
+ | **Quinta: 14:00h às 20:00h | ||
+ | |||
+ | = 08/10: Apoio Projeto = | ||
+ | |||
+ | = 11/10: Introdução ao Código Seqüencial = | ||
+ | |||
+ | * Seqüencial vs. Combinacional | ||
+ | * Exemplo [http://commons.wikimedia.org/wiki/File:R-S.gif Flip-Flop RS] | ||
+ | * Lista de Sensibilidade | ||
+ | |||
+ | :<code> | ||
+ | library IEEE; | ||
+ | use IEEE.STD_LOGIC_1164.all; | ||
+ | entity test_proc is | ||
+ | port( | ||
+ | data_in : in std_logic; | ||
+ | data_out: out std_logic | ||
+ | ); | ||
+ | end test_proc; | ||
+ | |||
+ | architecture circuit of test_proc is | ||
+ | signal A,B,C,D: std_logic; | ||
+ | begin | ||
+ | A <= data_in; | ||
+ | data_out <= D; | ||
+ | |||
+ | --Version 1 --Version 2 | ||
+ | process(A) --process (A,C) | ||
+ | begin | ||
+ | B <= A; | ||
+ | B <= '0'; | ||
+ | C <= A and '1'; | ||
+ | C <= not A; | ||
+ | D <= C; | ||
+ | end process; | ||
+ | end circuit; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | = 15/10: Introdução ao Código Seqüencial (cont.)= | ||
+ | |||
+ | * Lista de Sensibilidade (reentrada no process) | ||
+ | |||
+ | * test_proc.vhd (não funciona no Quartus): | ||
+ | :<code> | ||
+ | library IEEE; | ||
+ | use IEEE.STD_LOGIC_1164.all; | ||
+ | entity test_proc is | ||
+ | port( | ||
+ | data_in : in std_logic; | ||
+ | data_out: out std_logic | ||
+ | ); | ||
+ | end test_proc; | ||
+ | |||
+ | architecture circuit of test_proc is | ||
+ | signal A,B,C,D: std_logic; | ||
+ | begin | ||
+ | A <= data_in; | ||
+ | data_out <= D; | ||
+ | |||
+ | --Version 1 --Version 2 | ||
+ | process --process | ||
+ | begin --begin | ||
+ | wait on A,C; -- wait on A,C; | ||
+ | -- wait for 2 ns; | ||
+ | B <= A; | ||
+ | B <= '0'; | ||
+ | C <= A and '1'; | ||
+ | C <= not A; | ||
+ | D <= C; | ||
+ | end process; | ||
+ | end circuit; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | *test.do: | ||
+ | :<code> | ||
+ | if {[file exists work]} { | ||
+ | vdel -lib work -all | ||
+ | } | ||
+ | vlib work | ||
+ | vcom -93 -work work {test_proc.vhd} | ||
+ | vsim work.test_proc | ||
+ | |||
+ | add wave -noupdate /test_proc/data_in | ||
+ | add wave -noupdate /test_proc/A | ||
+ | add wave -noupdate /test_proc/B | ||
+ | add wave -noupdate /test_proc/C | ||
+ | add wave -noupdate /test_proc/D | ||
+ | add wave -noupdate /test_proc/data_out | ||
+ | |||
+ | force -freeze sim:/test_proc/data_in 0 @10ns,1 @20ns,0 @30ns | ||
+ | run 40ns | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | = 18/10: NÃO HOUVE AULA = | ||
+ | * Debate eleição | ||
+ | |||
+ | = 22/10: NÃO HOUVE AULA = | ||
+ | * Palestra SNCT | ||
+ | |||
+ | = 25/10: Código Seqüencial = | ||
+ | *Conceito de Variável | ||
+ | *Variável vs. Signal | ||
+ | *Estruturas de Controle | ||
+ | |||
+ | ==Variável vs. Sinal== | ||
+ | :<code> | ||
+ | library ieee; | ||
+ | use ieee.std_logic_1164.all; | ||
+ | |||
+ | entity sig_var is | ||
+ | port( d1: in std_logic; | ||
+ | res1, res2: out std_logic); | ||
+ | end sig_var; | ||
+ | |||
+ | architecture behv of sig_var is | ||
+ | signal sig_s1: std_logic; | ||
+ | begin | ||
+ | |||
+ | proc1: process(d1) | ||
+ | variable var_s1: std_logic; | ||
+ | begin | ||
+ | var_s1 := d1; | ||
+ | res1 <= var_s1; | ||
+ | end process; | ||
+ | |||
+ | proc2: process(d1) | ||
+ | begin | ||
+ | sig_s1 <= d1; | ||
+ | res2 <= sig_s1; | ||
+ | end process; | ||
+ | |||
+ | end behv; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ==Estruturas de Controle== | ||
+ | === IF === | ||
+ | *Sintaxe Simplificada: | ||
+ | :<code> | ||
+ | [ label: ] if condition1 then | ||
+ | sequence-of-statements | ||
+ | elsif condition2 then \_ optional | ||
+ | sequence-of-statements / | ||
+ | elsif condition3 then \_ optional | ||
+ | sequence-of-statements / | ||
+ | ... | ||
+ | |||
+ | else \_ optional | ||
+ | sequence-of-statements / | ||
+ | end if [ label ] ; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | *Exemplo: | ||
+ | :<code> | ||
+ | if a=b then | ||
+ | c:=a; | ||
+ | elsif b<c then | ||
+ | d:=b; | ||
+ | b:=c; | ||
+ | else | ||
+ | do_it; | ||
+ | end if; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === LOOP === | ||
+ | *Sintaxe Simplificada: | ||
+ | :<code> | ||
+ | [ label: ] loop | ||
+ | sequence-of-statements -- use exit statement to get out | ||
+ | end loop [ label ] ; | ||
+ | |||
+ | [ label: ] for variable in range loop | ||
+ | sequence-of-statements | ||
+ | end loop [ label ] ; | ||
+ | |||
+ | [ label: ] while condition loop | ||
+ | sequence-of-statements | ||
+ | end loop [ label ] ; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | *Exemplo: | ||
+ | :<code> | ||
+ | loop | ||
+ | input_something; | ||
+ | exit when end_file; | ||
+ | end loop; | ||
+ | |||
+ | for I in 1 to 10 loop | ||
+ | AA(I) := 0; | ||
+ | end loop; | ||
+ | |||
+ | while not end_test loop | ||
+ | input_something; | ||
+ | end loop; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | = 29/10: Exercício Código Sequencial = | ||
+ | * UPC com registradores | ||
+ | |||
+ | = 01/11: Exercício Código Sequencial (cont.) = | ||
+ | * Contador até 10. | ||
+ | |||
+ | = 05/11: Exercício Código Sequencial (cont.) = | ||
+ | * Temporizador 60 segundos. | ||
+ | |||
+ | = 08/11: Exercício Código Sequencial (cont.) = | ||
+ | * Temporizador 60 segundos. | ||
+ | |||
+ | = 12/11: Introdução a FSM e Apresentação Trabalho= | ||
+ | *Introdução a máquina de estado: | ||
+ | **Estado | ||
+ | **Transição | ||
+ | **Ação | ||
+ | *Estrutura de máquinas de estado | ||
+ | *Técnicas de implementação (1, 2 e 3 processos) | ||
+ | *Exercício de simulação de uma FSM | ||
+ | |||
+ | ==Apresentação 2º Projeto== | ||
+ | ===Documentação do Projeto:=== | ||
+ | *Deve ser preparado um arquivo compactado (*.zip, *.rar) contendo o seguinte: | ||
+ | **Arquivo *.qar com todos os VHDL do projeto (topo_upc.vhd, op_or.vhd, op_xor.vhd, op_soma.vhd, op_id.vhd, mux_4x1.vhd, decode_7seg.vhd, fsm.vhd, reg.vhd); | ||
+ | **Arquivos de teste (*.do) do módulo FSM, Registrador e do TOPO (test_fsm.do, wave_fsm.do, test_reg.do, wave_reg.do, teste_topo, wave_topo); | ||
+ | **Relatório | ||
+ | |||
+ | *O Relatório deve conter o seguinte: | ||
+ | **Identificação do autor; | ||
+ | **Diagrama da Máquina de estado implementada; | ||
+ | **Tabela verdade da máquina de estado. | ||
+ | **Diagramas de forma de ondas extraídos diretamente do ModelSim para o TOPO e FSM. | ||
+ | |||
+ | *'''Observações:''' | ||
+ | **'''Recuperação:''' o relatório deve ser completo (todos os itens do último relatório mais os itens acima). | ||
+ | **Se o email voltar utilize o email alternativo: roberto@eel.ufsc.br' | ||
+ | |||
+ | ===Avaliação === | ||
+ | *O trabalho deverá ser desenvolvido individualmente. | ||
+ | *O trabalho deverá chegar na caixa de entrada do email do professor com o assunto SST-SEQ_Nome_Aluno até o dia '''10/12/2013 às 23:59h''', impreterivelmente. | ||
+ | *A apresentação e demonstração do funcionamento por intermédio de simulação e prototipação será realizada no dia 13/12/2013 no horário da aula. | ||
+ | *Durante a apresentação, os alunos deverão estar aptos a responder quaisquer perguntas. Respostas insatisfatórias ou a ausência do aluno acarretará em anulação da nota do trabalho. | ||
+ | *'''A nota é definida pelo conhecimento adquirido do aluno (respostas das questões) durante a execução do projeto, que deve estar funcionando.''' | ||
+ | *Conceitos Envolvidos: | ||
+ | **Teoria de circuitos seqüências em VHDL. | ||
+ | **Implementação em VHDL de máquinas de estado. | ||
+ | **Teste de circuitos seqüênciais. | ||
+ | **'''Recuperação: Todos os conteúdos.''' | ||
+ | |||
+ | ===Objetivo=== | ||
+ | Reduzir a quantidade de chaves no projeto combinacional da primeira avaliação, utilizando apenas um conjunto de 8 chaves, SW(7..0), para leitura dos dois operandos. A UPC terá o seguinte funcionamento: | ||
+ | #Definir a operação (SW(17..16)) | ||
+ | #Entrar com o primeiro operando (SW(7..0)), pressionar Enter | ||
+ | #Entrar com o segundo operando (SW(7..0)), pressionar Enter (somente para as operações "soma", "xor ou "or") | ||
+ | #Mostrar o valor da operação | ||
+ | |||
+ | A partir do objetivo geral, temos o seguintes objetivos específicos: | ||
+ | *Implementar um registrador de tamanho genérico; | ||
+ | *Adicionar um registrador para armazenar o primeiro operando; | ||
+ | *Adicionar registradores para armazenar o resultado das operações; | ||
+ | *Implementar e adicionar uma máquina de estado (FSM) para fazer o controle como descrito abaixo. | ||
+ | |||
+ | [[imagem:diagrama-seq.png|700px|center]] | ||
+ | |||
+ | |||
+ | *A FSM terá o seguinte funcionamento: | ||
+ | **No estado inicial, “Esperando”, as saídas da FSM estão desabilitadas (Enable_1=‘0’, Enable_2=‘0’, Selecao=“XX”). Isso garante que nenhuma atividade ocorrerá na calculadora, enquanto o usuário não fornecer os operandos e a operação. | ||
+ | **Quando Enter (Key(1)) for ‘0’, a FSM avança para o próximo estado, para aguardar até o Enter voltar para ‘1’ (botão “não pressionado”). | ||
+ | **No estado “Operação” é realizada uma transição para o próximo estado, de acordo com a operação selecionada. | ||
+ | **Se a operação for “ID” (de apenas um operando), a operação é realizada, o resultado é armazenado no registrador de saída (Enable_2=‘1’) e a FSM retorna para o estado inicial “Esperando”. | ||
+ | **Para as demais operações, a leitura do segundo operando é realizada em um estado adicional - Enable_1 e Enable_2 precisam ser devidamente controlados em cada estado.Para essas operações, quando o Enter for pressionado pela segunda vez (Key(1) = ‘0’), o resultado é escrito nos registradores de saída (Enable_1=‘1’), e a FSM retorna para o estado inicial “Esperando”. | ||
+ | |||
+ | *Requisitos: | ||
+ | **O projeto deverá ser desenvolvido fora do horário de aula. | ||
+ | **A FSM deve ser implementada utilizando três (3) "Process". | ||
+ | **A implementação do registrador deve prever uma largura de palavra genérica. | ||
+ | |||
+ | = 19/11: Máquinas de Estado = | ||
+ | * Implementação da máquina de estado do contador de letra (A-Z). | ||
+ | |||
+ | = 22/11: Máquinas de Estado = | ||
+ | * Última aula |
Edição atual tal como às 13h41min de 14 de dezembro de 2013
Síntese de Sistemas de Telecomunicações: Diário de Aula 2013-2
Professor: Roberto de Matos
Encontros: 3ª feira 9:40 e 6ª feira 7:30
Atendimento paralelo: 4ª feira das 13:30 às 15:20.
Conceitos
Assuntos trabalhados
- Introdução aos dispositivos lógicos programáveis
- Introdução à tecnologia FPGA
- Introdução a linguagem VHDL
Apoio Desenvolvimento
Slides
- Slides de Introdução
- Fluxo de Projeto Quartus
- Introdução à Linguagem VHDL
- Componentes em VHDL
- Mux e Decode
- Circuitos Seqüênciais
- Máquinas de Estado
16/08: Apresentação
- Apresentação do professor.
- Apresentação dos alunos: Nome, perfil, preferências, etc.
- Apresentação da disciplina: conteúdo, bibliografia e avaliação.
- Aula Introdutória:
- Por que dispositivos lógicos programáveis?
- Histórico
20/08: Desenvolvimento com PLDs
- Famílias de Componentes Lógicos Programáveis
- Arquitetura dos FPGAS
- Introdução ao Fluxo de Projeto do Quartus
23/08: Laboratório Quartus
- Fluxo de projeto esquemáticos com Quartus e Modelsim (Porta AND)
- Exercício: Projeto, Simulação e Teste do meio-somador
27/08: Introdução à Linguagem VHDL
- Finalização do fluxo de projeto do Meio somador no Quartus e Modelsim, utilização a entrada de esquemático.
- Apresentação da Linguagem VHDL
- Conceitos de entidade (entity) e arquitetura (architecture)
30/08: Projetando com VHDL
- Estudo de caso: Meio Somador em VHDL
03/09: Projetando com VHDL
- Exercício: Manipulação do LCD utilizando VHDL
06/09: Código Concorrente (WHEN, SELECT)
WHEN
- Sintaxe Simplificada:
signal_name <=
value_expr_1 when boolean_expr_1 else
value_expr_2 when boolean_expr_2 else
value_expr_3 when boolean_expr_3 else
...
value_expr_n
</syntaxhighlight>
- Exemplo:
x <= a when (s="00") else
b when (s="01") else
c when (s="10") else
d;
</syntaxhighlight>
SELECT
- Sintaxe Simplificada:
with select_expression select
signal_name <= value_expr_1 when choice_1,
value_expr_2 when choice_2,
value_expr_3 when choice_3,
...
value_expr_n when choice_n;
</syntaxhighlight>
- Exemplo:
with s select
x <= "0001" when "00",
"0010" when "01",
"0011" when "10",
"0100" when others;
</syntaxhighlight>
10/09: Componentes (COMPONENT, PORT MAP)
- Sintaxe Simplificada:
--Declaração----------------------------------------------------------
COMPONENT component_name [IS]
[GENERIC (
const_name: const_type := const_value;
...);]
PORT (
port_name: port_mode signal_type;
...);
END COMPONENT [component_name];
--Instanciação----------------------------------------------------------
label: [COMPONENT] component_name [GENERIC MAP (generic_list) ] PORT MAP (port_list);
- Exemplo:
--Declaração----------------------------------------------------------
COMPONENT nand_gate IS
PORT ( a, b: IN STD_LOGIC;
c: OUT STD_LOGIC);
END COMPONENT;
--Instanciação---------------------------------------------------------
nand1: nand_gate PORT MAP (x, y, z); --mapeamento posicional
nand2: nand_gate PORT MAP (a=>x, b=>y, c=>z); --mapeamento nominal
</syntaxhighlight>
- Exemplo GENERIC:
--Declaração----------------------------------------------------------
COMPONENT xor_gate IS
GENERIC (N: INTEGER := 8);
PORT ( a: IN STD_LOGIC(1 TO N);
b: OUT STD_LOGIC);
END COMPONENT;
--Instanciação----------------------------------------------------------
xor1: xor_gate GENERIC MAP (16) PORT MAP (x, y); --map. posicional
xor2: xor_gate GENERIC MAP (N=>16) PORT MAP (a=>x, b=>y); --map. nominal
</syntaxhighlight>
13/09: Componentes (continuação)
- Exercício utilizando o "decodificador" LCD e o debouncer.
- Arquivos de apoio.
17/09: Não houve aula
- Palestra Sinapse da Inovação
20/09: Componentes (continuação)
- Exercício de componentes utilizando o exemplo do LCD Decode.
24/09: Suspensa
- Convocação do professores pela Direção de Ensino
27/09: Projeto MUX 4x1
- Projeto e simulação do MUX estrutural e comportamental.
01/10: Projeto do Decode de 7 Segmentos
- Projeto e simulação do Decode de 7 segmentos para a escrita de "IFSC"
04/10: Apresentação do 1º Projeto
Documentação do Projeto:
- Deve ser preparado um arquivo compactado (*.zip, *.rar) contendo o seguinte:
- Arquivo *.qar com todos os VHDL do projeto (topo_upc.vhd, op_or.vhd, op_xor.vhd, op_soma.vhd, op_id.vhd, mux_4x1.vhd, decode_7seg.vhd);
- Arquivos *.do de todos os módulos (test_X.do e wave_X.do, sendo X é a identificação do módulo testado);
- Relatório
- OBS: Se o email voltar utilize o email alternativo: roberto@eel.ufsc.br
- O Relatório deve conter o seguinte:
- Identificação do autor
- Tabela verdade para cada componente;
- Diagrama de blocos com sinais de entrada e saída para cada componente;
- Diagramas de forma de ondas extraídos diretamente do ModelSim para cada componente;
- Descrição das ferramentas utilizadas e fluxo de projeto;
Avaliação
- O trabalho deverá ser desenvolvido individualmente.
- O trabalho deverá chegar na caixa de entrada do email do professor com o assunto SST-UCP_Nome_Aluno até o dia 18/10/2013 às 23:59h, impreterivelmente.
- A apresentação e demonstração do funcionamento por intermédio de simulação e prototipação será realizada em data a ser definida.
- Durante a apresentação, os alunos deverão estar aptos a responder quaisquer perguntas. Respostas insatisfatórias ou a ausência do aluno acarretará em anulação da nota do trabalho.
- As explicações durante a demonstração do projeto funcionando são fundamentais para a avaliação.
- Trabalhos copiados resultarão em nota zero para todos os alunos envolvidos. Poderá ser utilizado a ferramenta MOSS como auxílio na identificação de situações de plágio.
Objetivo
Desenvolver um projeto hierárquico com módulos em VHDL que implementem uma Unidade de Processamento Combinacional (UPC) capaz de realizar as funções lógicas OU e XOR, a função aritmética de SOMA e a geração do ID baseado na matrícula sobre dois operandos de 8 bits e apresentar o resultado em dois displays de 7 segmentos e 8 LEDs da DE2-115.
- A UPC terá o seguinte funcionamento:
- Entrar com o operando A nas chaves SW (15-8) e o operando B nas chaves SW (7-0)
- Entrar com a escolha da operação (OP) a ser executada nas chaves (17-16)
- Disponibilizar na saída (Diplays e LEDs) o resultado da operação.
- Requisitos:
- O projeto deverá ser desenvolvido fora horário de aula.
- Todos os módulos devem ser implementados como componentes e instanciados no arquivo topo.
- O componente MUX deve ter a implementação de duas arquiteturas: Estrutural e Comportamental.
- Deve haver somente um componente Decode e duas instanciações.
- Componente ID: A operação ID deve manipular os quatro últimos números da matrícula do aluno (------XYH-L). Quando o valor da entrada A for o XY (hexadecimal) e a operação selecionada for o ID os displays devem mostrar o valor HL. Qualquer outro valor de entrada deve gerar o valor FF no display.
Cronograma
- 04/10: Apresentação dos objetivos do trabalho.
- 11/10: Aula para retirada de dúvidas. Observação: O projeto já deve estar encaminhado, lembrem que nesse dia, já se passou metade do prazo para entrega.
- 18/10: Prazo final para entrega do trabalho.
Horários do Laboratório
- Previsão (precisa confirmar disponibilidade dos Labs):
- Segunda: 10:00h às 20:00h
- Terça: 14:00h às 20:00h
- Quarta: 16:00h às 18:00h
- Quinta: 14:00h às 20:00h
08/10: Apoio Projeto
11/10: Introdução ao Código Seqüencial
- Seqüencial vs. Combinacional
- Exemplo Flip-Flop RS
- Lista de Sensibilidade
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity test_proc is
port(
data_in : in std_logic;
data_out: out std_logic
);
end test_proc;
architecture circuit of test_proc is
signal A,B,C,D: std_logic;
begin
A <= data_in;
data_out <= D;
--Version 1 --Version 2
process(A) --process (A,C)
begin
B <= A;
B <= '0';
C <= A and '1';
C <= not A;
D <= C;
end process;
end circuit;
</syntaxhighlight>
15/10: Introdução ao Código Seqüencial (cont.)
- Lista de Sensibilidade (reentrada no process)
- test_proc.vhd (não funciona no Quartus):
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity test_proc is
port(
data_in : in std_logic;
data_out: out std_logic
);
end test_proc;
architecture circuit of test_proc is
signal A,B,C,D: std_logic;
begin
A <= data_in;
data_out <= D;
--Version 1 --Version 2
process --process
begin --begin
wait on A,C; -- wait on A,C;
-- wait for 2 ns;
B <= A;
B <= '0';
C <= A and '1';
C <= not A;
D <= C;
end process;
end circuit;
</syntaxhighlight>
- test.do:
if {[file exists work]} {
vdel -lib work -all
}
vlib work
vcom -93 -work work {test_proc.vhd}
vsim work.test_proc
add wave -noupdate /test_proc/data_in
add wave -noupdate /test_proc/A
add wave -noupdate /test_proc/B
add wave -noupdate /test_proc/C
add wave -noupdate /test_proc/D
add wave -noupdate /test_proc/data_out
force -freeze sim:/test_proc/data_in 0 @10ns,1 @20ns,0 @30ns
run 40ns
</syntaxhighlight>
18/10: NÃO HOUVE AULA
- Debate eleição
22/10: NÃO HOUVE AULA
- Palestra SNCT
25/10: Código Seqüencial
- Conceito de Variável
- Variável vs. Signal
- Estruturas de Controle
Variável vs. Sinal
library ieee;
use ieee.std_logic_1164.all;
entity sig_var is
port( d1: in std_logic;
res1, res2: out std_logic);
end sig_var;
architecture behv of sig_var is
signal sig_s1: std_logic;
begin
proc1: process(d1)
variable var_s1: std_logic;
begin
var_s1 := d1;
res1 <= var_s1;
end process;
proc2: process(d1)
begin
sig_s1 <= d1;
res2 <= sig_s1;
end process;
end behv;
</syntaxhighlight>
Estruturas de Controle
IF
- Sintaxe Simplificada:
[ label: ] if condition1 then
sequence-of-statements
elsif condition2 then \_ optional
sequence-of-statements /
elsif condition3 then \_ optional
sequence-of-statements /
...
else \_ optional
sequence-of-statements /
end if [ label ] ;
</syntaxhighlight>
- Exemplo:
if a=b then
c:=a;
elsif b<c then
d:=b;
b:=c;
else
do_it;
end if;
</syntaxhighlight>
LOOP
- Sintaxe Simplificada:
[ label: ] loop
sequence-of-statements -- use exit statement to get out
end loop [ label ] ;
[ label: ] for variable in range loop
sequence-of-statements
end loop [ label ] ;
[ label: ] while condition loop
sequence-of-statements
end loop [ label ] ;
</syntaxhighlight>
- Exemplo:
loop
input_something;
exit when end_file;
end loop;
for I in 1 to 10 loop
AA(I) := 0;
end loop;
while not end_test loop
input_something;
end loop;
</syntaxhighlight>
29/10: Exercício Código Sequencial
- UPC com registradores
01/11: Exercício Código Sequencial (cont.)
- Contador até 10.
05/11: Exercício Código Sequencial (cont.)
- Temporizador 60 segundos.
08/11: Exercício Código Sequencial (cont.)
- Temporizador 60 segundos.
12/11: Introdução a FSM e Apresentação Trabalho
- Introdução a máquina de estado:
- Estado
- Transição
- Ação
- Estrutura de máquinas de estado
- Técnicas de implementação (1, 2 e 3 processos)
- Exercício de simulação de uma FSM
Apresentação 2º Projeto
Documentação do Projeto:
- Deve ser preparado um arquivo compactado (*.zip, *.rar) contendo o seguinte:
- Arquivo *.qar com todos os VHDL do projeto (topo_upc.vhd, op_or.vhd, op_xor.vhd, op_soma.vhd, op_id.vhd, mux_4x1.vhd, decode_7seg.vhd, fsm.vhd, reg.vhd);
- Arquivos de teste (*.do) do módulo FSM, Registrador e do TOPO (test_fsm.do, wave_fsm.do, test_reg.do, wave_reg.do, teste_topo, wave_topo);
- Relatório
- O Relatório deve conter o seguinte:
- Identificação do autor;
- Diagrama da Máquina de estado implementada;
- Tabela verdade da máquina de estado.
- Diagramas de forma de ondas extraídos diretamente do ModelSim para o TOPO e FSM.
- Observações:
- Recuperação: o relatório deve ser completo (todos os itens do último relatório mais os itens acima).
- Se o email voltar utilize o email alternativo: roberto@eel.ufsc.br'
Avaliação
- O trabalho deverá ser desenvolvido individualmente.
- O trabalho deverá chegar na caixa de entrada do email do professor com o assunto SST-SEQ_Nome_Aluno até o dia 10/12/2013 às 23:59h, impreterivelmente.
- A apresentação e demonstração do funcionamento por intermédio de simulação e prototipação será realizada no dia 13/12/2013 no horário da aula.
- Durante a apresentação, os alunos deverão estar aptos a responder quaisquer perguntas. Respostas insatisfatórias ou a ausência do aluno acarretará em anulação da nota do trabalho.
- A nota é definida pelo conhecimento adquirido do aluno (respostas das questões) durante a execução do projeto, que deve estar funcionando.
- Conceitos Envolvidos:
- Teoria de circuitos seqüências em VHDL.
- Implementação em VHDL de máquinas de estado.
- Teste de circuitos seqüênciais.
- Recuperação: Todos os conteúdos.
Objetivo
Reduzir a quantidade de chaves no projeto combinacional da primeira avaliação, utilizando apenas um conjunto de 8 chaves, SW(7..0), para leitura dos dois operandos. A UPC terá o seguinte funcionamento:
- Definir a operação (SW(17..16))
- Entrar com o primeiro operando (SW(7..0)), pressionar Enter
- Entrar com o segundo operando (SW(7..0)), pressionar Enter (somente para as operações "soma", "xor ou "or")
- Mostrar o valor da operação
A partir do objetivo geral, temos o seguintes objetivos específicos:
- Implementar um registrador de tamanho genérico;
- Adicionar um registrador para armazenar o primeiro operando;
- Adicionar registradores para armazenar o resultado das operações;
- Implementar e adicionar uma máquina de estado (FSM) para fazer o controle como descrito abaixo.
- A FSM terá o seguinte funcionamento:
- No estado inicial, “Esperando”, as saídas da FSM estão desabilitadas (Enable_1=‘0’, Enable_2=‘0’, Selecao=“XX”). Isso garante que nenhuma atividade ocorrerá na calculadora, enquanto o usuário não fornecer os operandos e a operação.
- Quando Enter (Key(1)) for ‘0’, a FSM avança para o próximo estado, para aguardar até o Enter voltar para ‘1’ (botão “não pressionado”).
- No estado “Operação” é realizada uma transição para o próximo estado, de acordo com a operação selecionada.
- Se a operação for “ID” (de apenas um operando), a operação é realizada, o resultado é armazenado no registrador de saída (Enable_2=‘1’) e a FSM retorna para o estado inicial “Esperando”.
- Para as demais operações, a leitura do segundo operando é realizada em um estado adicional - Enable_1 e Enable_2 precisam ser devidamente controlados em cada estado.Para essas operações, quando o Enter for pressionado pela segunda vez (Key(1) = ‘0’), o resultado é escrito nos registradores de saída (Enable_1=‘1’), e a FSM retorna para o estado inicial “Esperando”.
- Requisitos:
- O projeto deverá ser desenvolvido fora do horário de aula.
- A FSM deve ser implementada utilizando três (3) "Process".
- A implementação do registrador deve prever uma largura de palavra genérica.
19/11: Máquinas de Estado
- Implementação da máquina de estado do contador de letra (A-Z).
22/11: Máquinas de Estado
- Última aula