Subprogramas Procedimentos e Funções MO801/MC912.

Slides:



Advertisements
Apresentações semelhantes
Passagem de parâmetros por valor txtInOut1.Text = num1 txtInOut2.Text = num2 txtOut.Text = num3 End Sub Private Sub cmdVal_Click() Dim num1 As Integer,
Advertisements

Arquitetura de Sistemas Operacionais
VHDL VHSIC Hardware Description Language Very High Speed Integrated Circuits VHDL-87 VHDL-93.
Criação de Funções Conjunto de regras
Fernando Gehm Moraes Ney Laert Vilar Calazans
César Augusto Missio Marcon Ney Laert Vilar Calazans
VHDL Very High Speed Integrated Circuit Hardware Description Language Prof. Eduardo Todt 2008.
Verificação MO801/MC912.
Dicas de Circuitos MO801/MC912.
Prof. José Fernando Rodrigues Júnior Pacotes Material original: Profa. Elaine Parros Machado de Sousa SCC Bancos de Dados e Suas Aplicações.
Procedimentos e Funções
Char Drivers Alexandre Madeira Taciano Rodolfo Programação de Periféricos Eduardo Augusto Bezerra 30/06/2005.
Sistemas Operacionais
Library IEEE; use ieee.std_logic_1164.all; use IEEE.std_logic_arith.all;
Construção sequencial CASE WHEN
Prof. Celso Gramática Prof. Celso
FORTRAN 90 Denise Yumi Takamura.
SQL Procedural Junho/2006.
SQL procedural – parte 2.
Funções de Linha 24/04/06. Funções de Linha Gerar ou construir novo valor não existente na tabela inicial. Valor construído a partir de dados de uma ou.
Transações.
Modularização de Código. Modularizar código Construção do algoritmo em um módulo único (Início...Fim/ Program... End) Único arquivo.
Introdução à Lógica de Programação
Prof. Dr. Helder Anibal Hermini
Reconstrução filogenética: Inferência Bayesiana
Processamento de Imagens
Mais sobre classes Baseada no Livro: Deitel&Deitel - C++ How To program Cap. 7 Prentice Hall 1994 SCE 213 Programação Orientada a Objetos, ICMC - USP 2.
Profa. Graziela Santos de Araújo Algoritmos e Programação II, 2010
ESTÉTICA Arte e realidade O belo e a questão do gosto Arte e Técnica
CE-262 Ontologia e Web Semântica Prof. José M Parente de Oliveira
CES-41 COMPILADORES Capítulo VII Código Intermediário.
Capítulo IX – Ponteiros 9.1 – Introdução 9.2 – Relação entre ponteiros e variáveis indexadas 9.3 – Alocação dinâmica de memória 9.4 – Variáveis indexadas,
Exemplo: ordenação de uma lista pelo Selection-Sort:
CES-41 COMPILADORES Capítulo I Introdução.
Capítulo I – Conceitos Primários 1.1 – Estrutura de um computador 1.2 – Informações manipuladas por um computador 1.3 – Evolução das linguagens de programação.
Intervalos de confiança Sejam X 1, X 2, …, X n i.i.d. com distribuição F. Um intervalo de confiança de nível 1– para é um par de estatísticas [T 1 (X),
Variáveis Aleatórias Uma variável aleatória associa um número real a cada resultado de um experimento aleatório. Mais precisamente…
Curso Técnico em Informática La Salle - Canoas
Já definimos o coeficiente angular de uma curva y = f(x) no ponto onde x = x 0. Derivadas Chamamos esse limite, quando ele existia, de derivada de f em.
Função confirmar Em muitos programas temos de confirmar uma opção com S ou N. Vamos fazer então uma função que retorna a escolha realizada pelo usuário.
Aritmética de ponto flutuante Erros
Organização de Sistemas de Computadores
Desempenho A rápida taxa de melhoria na tecnologia de computadores veio em decorrência de dois fatores: avanços na tecnologia utilizada na construção.
7. INTEGRAÇÃO NUMÉRICA Parte 1
Tecnologia para Web JavaScript Enrique Pimentel Leite de Oliveira
Curso de Programação em C++ Universidade Federal do Ceará Departamento de Engenharia Estrutural e Construção Civil Prof: Evandro Parente Junior Monitor:
Baseado no documento do Prof. Ronaldo Martins da Costa
LINGUAGENS DE PROGRAMAÇÃO
Objetos Distribuídos - Programação Distribuída Orientado a Objetos Luiz Affonso Guedes.
Programação Concorrente com Thread Java
Stored Procedure, Function and Trigger
Introdução à estrutura e funcionamento de um sistema informático
Usando Java no Oracle Por Edson Almeida Junior
ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES I prof. Dr. César Augusto M. Marcon prof. Dr. Edson Ifarraguirre Moreno Verificação por Simulação Circuitos Descritos.
Variáveis, Tipos de Dados e Constantes
EPUSP – PTC Guido Stolfi
INPE / CAP-315 Airam J. Preto, Celso L. Mendes Aula 30 (1) Empacotamento de Dados em MPI Tópicos: Buffer de Mensagem Empacotamento/Desempacotamento.
Var a: tPtNo; begin { corpo principal } PercPreOrdem(a);... a Visão esquemática da memória.
Listas duplamente encadeadas Estrutura: tDado = integer; { ou real, char, etc.} tPtNo = ^tNo; tNo = record Ant: tPtNo Dado: tDado; Prox: tPtNo; end; var.
ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES I prof. Dr. César Augusto M. Marcon prof. Dr. Edson Ifarraguirre Moreno Memórias.
Infra-estrutura de Hardware
Funções ou procedures Professor Esp. Diego André Sant’Ana
RT-EXPERT Artis Corp. C calling program RTSUB [rule set subroutine] RTSUB [rule set subroutine] RTSUB [rule set subroutine]... DSL Decision Support Language.
The Present Continuous
Tópicos em Arquitetura e Hardware
Triggers (Gatilhos) Professor Esp. Diego André Sant’Ana
SPECIAALTJES.
Arquitetura de Sistemas Operacionais
O Problema dos Leitores e Escritores
Apresentação do Hardware
Transcrição da apresentação:

Subprogramas Procedimentos e Funções MO801/MC912

Conceitos Gerais Similar a outras linguagens de programação Procedimentos não retornam valores –statement Funções retornam valores –expression O hardware é replicado o número de vezes que a função/procedimento é chamada

Procedimentos procedure read_memory is begin address_bus <= mem_address_reg; mem_read <= '1'; mem_request <= '1'; wait until mem_ready = '1' or reset = '1'; if reset = '1' then return; end if; mem_data_reg := data_bus_in; mem_request <= '0'; wait until mem_ready = '0'; end procedure read_memory;

Parâmetros procedure addu ( a, b : in word32; result : out word32; overflow : out boolean ) is variable sum : word32; variable carry : bit := '0'; begin for index in sum'reverse_range loop sum(index) := a(index) xor b(index) xor carry; carry := ( a(index) and b(index) ) or ( carry and ( a(index) xor b(index) ) ); end loop; result := sum; overflow := carry = '1'; end procedure addu;

Tipos de Parâmetros in –É visto como uma constante dentro do procedimento –Passagem por cópia out –É utilizado para retornar um valor –Não pode ser lido, só escrito –O valor é copiado para a variável externa ao final do procedimento inout –Serve como entrada e saída –O valor é copiado para a variável externa ao final do procedimento

Classes dos Parâmetros Especificam como o parâmetro deve ser visto pelo procedimento –variable Opção padrão para out e inout. –constant Opção padrão para in. –signal Pode ser usado com in, out e inout Efeito de passagem por referência

Exemplo procedure generate_pulse_train ( width, separation : in delay_length; number : in natural; signal s : out std_ulogic ) is begin for count in 1 to number loop s <= '1', '0' after width; wait for width + separation; end loop; end procedure generate_pulse_train;

Uso raw_signal_generator : process is begin generate_pulse_train ( width => period / 2, separation => period - period / 2, number => pulse_count, s => raw_signal ); wait; end process raw_signal_generator;

Localização Dentro de um processo –Pode acessar as variáveis do processo Dentro da arquitetura –Só pode acessar sinais –Deve declarar os parâmetros como sinais

Valor Padrão procedure increment ( a : inout word32; by : in word32 := X"0000_0001" ) is variable sum : word32; variable carry : bit := '0'; begin for index in a'reverse_range loop sum(index) := a(index) xor by(index) xor carry; carry := ( a(index) and by(index) ) or ( carry and ( a(index) xor by(index) ) ); end loop; a := sum; end procedure increment;

Valor Padrão Chamada com todos os parâmetros –increment(count, X0000_0004); Omitindo o último parâmetro –increment(count); Não especificando o último parâmetro –increment(count, open); As duas últimas alternativas são equivalentes Dica: Use open quando o parâmetro não for o último

Vetores sem limites procedure find_first_set ( v : in bit_vector; found : out boolean; first_set_index : out natural ) is begin for index in v'range loop if v(index) = '1' then found := true; first_set_index := index; return; end if; end loop; found := false; end procedure find_first_set;

Variações de Chamadas Procedimento procedure p(f1:in t1; f2:in t2; f3:out t3; f4:in t4 := v4) is begin … end procedure p; Chamadas p(val1, val2, var3, val4); p(f1 => val1, f2 => val2, f4 => val4, v3 => var3); p(val1, val2, f4 => open, f3 => var3); p(val1, val2, var3);

Chamadas em Comandos Concorrentes Quando chamados fora de processos, os procedimentos funcionam como se o código fosse: call_proc : process is begin p(s1, s2, val1); wait on s1, s2; end process call_proc;

Chamadas em Comandos Concorrentes Se não existir sinal de entrada e o procedimento retornar, ele não será chamado novamente –Útil quando se quer chamar um procedimento apenas uma vez –Boa forma de fazer checagem de dados O procedimento pode ser um laço que nunca retorna –Ele deve executar wait de tempos em tempos

Funções Devem retornar valor –Não podem encerrar sem retornar valor Parâmetros devem ser in Funções Puras (pure) –Não acessam variáveis nem sinais externos –Padrão de VHDL Funções Impuras (impure) –Podem retornar valores diferentes para duas chamadas com os mesmos parâmetros

Exemplo function limit ( value, min, max : integer ) return integer is begin if value > max then return max; elsif value < min then return min; else return value; end if; end function limit;

Outro Exemplo function bv_to_natural ( bv : in bit_vector ) return natural is variable result : natural := 0; begin for index in bv'range loop result := result * 2 + bit'pos(bv(index)); end loop; return result; end function bv_to_natural;

Chamada type rom_array is array (natural range 0 to rom_size-1) of bit_vector(0 to word_size-1); variable rom_data : rom_array; data <= rom_data(bv_to_natural(address));

Overload Mais de uma declaração de função de um subprograma com o mesmo nome –procedure increment(a : inout integer; n : in integer := 1) is … –procedure increment(a : inout bit_vector; in bit_vector := B1) is … –procedure increment(a : inout bit_vector; in integer := 1) is … A diferenciação é feita pelos tipos dos parâmetros

Overload de operadores Operadores podem ser sobrescritos Muito útil para definição de novos tipos As redefinição de operadores lógicos não fazem curto circuito

Exemplos function +(left, right : in bit_vector) return bit_vector is begin … end function +; function abs(right : in bit_vector) return bit_vector is begin … end function abs;

Regras de Escopo Similares às das outras linguagens Apenas os elementos mais internos são vistos quando há conflito de nomes

Pacotes Forma de encapsular código Podem conter –declarações de componentes –configurações –constantes –procedimentos –funções –tipos –etc…

Composição Cabeçalho do pacote –Visível externamente –Define as interfaces –Pode declarar uma constante sem valor Corpo do pacote –Contém as implementações –Define o valor da constante declarada no cabeçalho

Exemplo de Cabeçalho package bit_vector_signed_arithmetic is function "+" ( bv1, bv2 : bit_vector ) return bit_vector; function "-" ( bv : bit_vector ) return bit_vector; function "*" ( bv1, bv2 : bit_vector ) return bit_vector; end package bit_vector_signed_arithmetic;

Corpo do Pacote package body bit_vector_signed_arithmetic is function "+" ( bv1, bv2 : bit_vector ) return bit_vector is... function "-" ( bv : bit_vector ) return bit_vector is... function mult_unsigned ( bv1, bv2 : bit_vector ) return bit_vector is … function "*" ( bv1, bv2 : bit_vector ) return bit_vector is begin if bv1(bv1'left) = '0' and bv2(bv2'left) = '0' then return mult_unsigned(bv1, bv2); elsif bv1(bv1'left) = '0' and bv2(bv2'left) = '1' then return -mult_unsigned(bv1, -bv2); elsif bv1(bv1'left) = '1' and bv2(bv2'left) = '0' then return -mult_unsigned(-bv1, bv2); else return mult_unsigned(-bv1, -bv2); end if; end function "*"; end package body bit_vector_signed_arithmetic;

Uso de Pacotes work é a biblioteca padrão Pode importar todas as definições do pacote use work.bit_vector_signed_arithmetic.all; Ou apenas uma use work.bit_vector_signed_arithmetic.+