You are on page 1of 27

UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE DEPARTAMENTO DE ENGENHARIA ELTRICA INSTRUMENTAO ELETRNICA LUCIANO FONTES CAVALCANTE

PROJETO DE UM MEDIDOR DE DISTNCIA POR EMISSO DE ONDAS SONORAS

GILENNON WILKER GOMES BEZERRA GILMAR GUEDES DE CARVALHO RAFAEL BRIANI BIONDI

NATAL/RN JULHO DE 2011

SUMRIO

1. 2.

INTRODUO ............................................................................................................................ 5 PROJETO VHDL DO MEDIDOR DE DISTNCIA ................................................................... 5 2.1. 2.2. 2.3. 2.4. 2.5. 2.6. 2.7. BLOCO DIVISOR DE CLOCK ......................................................................................................... 5 BLOCO DE COMPENSAO TRMICA ......................................................................................... 7 M QUINA DE ESTADOS ............................................................................................................... 8 BLOCO DO CONTADOR BINRIO/DECIMAL................................................................................ 10 BLOCO DE MEMRIA DE EXIBIO ........................................................................................... 11 BLOCO DE CONVERSO BINRIA PARA DISPLAY DE SETE SEGMENTOS ................................. 12 SISTEMA DIGITAL DO INSTRUMENTO COMPLETO ..................................................................... 13

3. 4.

CONCLUSES ......................................................................................................................... 15 PROPOSIES DE MELHORAMENTO ................................................................................ 15

ANEXOS (CDIGOS EM VHDL) ..................................................................................................... 15

LISTA DE FIGURAS

FIGURA 1: BLOCO DIVISOR DE CLOCK.......................................................................................................... 6 FIGURA 2: SIMULAO DO BLOCO DIVISOR DE FREQNCIA ...................................................................... 7 FIGURA 3: BLOCO DE COMPENSAO TRMICA .......................................................................................... 7 FIGURA 4: SIMULAO DO BLOCO DE COMPENSAO TRMICA ................................................................. 8 FIGURA 5: DIAGRAMA DE ESTADOS DO INSTRUMENTO................................................................................ 8 FIGURA 6: BLOCO DA MQUINA DE ESTADOS .............................................................................................. 9 FIGURA 7: SIMULAO DO BLOCO DA MQUINA DE ESTADOS ................................................................... 10 FIGURA 8: BLOCO DO CONTADOR BINRIO/DECIMAL ................................................................................. 10 FIGURA 9: SIMULAO DO BLOCO CONTADOR BINRIO DECIMAL ............................................................. 11 FIGURA 10: BLOCO DE MEMRIA DE EXIBIO .......................................................................................... 11 FIGURA 11: SIMULAO DO BLOCO DE MEMRIA DE EXIBIO................................................................. 12 FIGURA 12: BLOCO DE CONVERSO BINRIA PARA DISPLAY DE SETE SEGMENTOS ................................. 13 FIGURA 13: SIMULAO DO BLOCO DE CONVERSO BINRIA PARA DISPLAY DE SETE SEGMENTOS ........ 13 FIGURA 14: SISTEMA COMPLETO ............................................................................................................... 13 FIGURA 15: FUNCIONAMENTO NORMAL DO INSTRUMENTO ....................................................................... 14 FIGURA 16: FUNCIONAMENTO DO RESET GLOBAL DO SISTEMA ................................................................ 14

LISTA DE TABELAS

TABELA 1: VELOCIDADE DE PROPAGAO SONORA EM FUNO DA TEMPERATURA.................................. 6 TABELA 2: FREQNCIA DE CLOCK EM FUNO DA TEMPERATURA ........................................................... 6 TABELA 3: ESCOLHA DA COMPENSAO TRMICA ...................................................................................... 7 TABELA 4: ESTADOS DA MQUINA DE ESTADOS .......................................................................................... 9 TABELA 5: TABELA DE CONVERSO BINRIA PARA DISPLAY DE SETE SEGMENTOS .................................. 12 TABELA 6: FUNO DAS ENTRADAS E SADAS DO SISTEMA....................................................................... 14

PROJETO DE UM MEDIDOR DE DISTNCIA POR EMISSO DE ONDAS SONORAS

1. Introduo Este projeto tem como objetivo a concepo de um instrumento de medio de distancia por emisso de ondas sonoras. O enfoque do projeto ser no sistema digital de controle e tratamento dos dados e o mesmo ser desenvolvido em linguagem de descrio de hardware (VHDL). As especificaes do projeto so listadas abaixo: Distncia mnima de medio igual a um centmetro; Distncia mxima de medio igual a 99,99 metros ( 100 metros); Passo de medio igual a um centmetro; Correo trmica de propagao sonora on board; Codificao VHDL estruturada.

Tendo em vista que para maior robustez e simplicidade do sistema a codificao VHDL dever ser estruturada, o projeto ser dividido em blocos que uma vez interligados possibilitem o bom funcionamento do instrumento. 2. Projeto VHDL do medidor de distncia Como dito anteriormente a codificao VHDL dever ser estruturada, e para que se possa estrutur-la deve-se dividir o projeto em blocos. Desta forma, o projeto ser dividido entre: Divisor de clock; Compensador trmico; Mquina de estados; Contador binrio/decimal; Memria de exibio; Conversor binrio para display de sete segmentos.

Todos os blocos sero apresentados a seguir, com suas respectivas descries, codificaes e simulaes.

2.1.

Bloco divisor de clock

Este bloco tem como principal funo gerar uma freqncia conveniente a partir do clock proveniente do cristal gerador do circuito. O cristal utilizado na placa FPGA deste projeto possui uma freqncia igual a 50 MHz. Para facilitar o tratamento dos dados do instrumento utilizar-se- um clock tal que possibilite a medida de um centmetro por perodo. Desta forma, observa-se a Tabela 1 abaixo para definir-se o clock de sada do divisor de clock.

PROJETO DE UM MEDIDOR DE DISTNCIA POR EMISSO DE ONDAS SONORAS


Tabela 1: Velocidade de propagao sonora em funo da temperatura

Temperatura (C) Velocidade (m/s)

-5 329

0 332

5 335

10 338

15 341

20 343

25 346

30 349

Desta forma, utiliza-se a seguinte equao para definir as freqncias que devero ser geradas pelo bloco divisor de freqncias: Nota-se que a freqncia a velocidade em (cm/s) dividida por dois. Isto se deve ao fato da onda percorrer duas vezes distncia a ser medida, ou seja, a ida do instrumento ao objeto e a volta do objeto ao instrumento aps reflexo. Resolvendo-se a equao acima para todas as temperaturas possveis obtm-se a seguinte tabela de freqncias em funo de temperatura:
Tabela 2: Freqncia de clock em funo da temperatura

Temperatura (C) Freqncia (kHz)

-5 16,5

0 16,6

5 16,8

10 16,9

15 17,1

20 17,2

25 17,3

30 17,5

Desta forma, pode-se concluir que o projeto dever possuir oito divisores de clock, com oito valores de freqncia diferentes. A utilizao destas freqncias ser decidida pelo bloco de compensao trmica que ser apresentado na seqncia. O bloco divisor de clock desenvolvido em VHDL tem o seguinte aspecto:

Figura 1: Bloco divisor de clock

Pode-se observar que na entrada do bloco deve-se conectar o clock de 50 MHz e um sinal de reinicializao, enquanto que na sada do mesmo obterse- o clock desejado. A Figura 2 a seguir mostra a simulao efetuada para este bloco, o que inicialmente garante o seu funcionamento. Por motivos visuais a freqncia simulada ser dividida por quatro, entretanto, se o sistema garante a diviso por quatro o mesmo garantir a diviso para gerao das freqncias necessrias para o sistema de medio. O cdigo completo do bloco de diviso de freqncia estar disponibilizado em anexo neste mesmo documento.

PROJETO DE UM MEDIDOR DE DISTNCIA POR EMISSO DE ONDAS SONORAS

Figura 2: Simulao do bloco divisor de freqncia

Como se pode observar a freqncia de sada do bloco divisor de freqncia igual freqncia de entrada dividida por quatro. Pode-se observar tambm que a sada do bloco divisor de freqncia somente passa a ser gerada quando o sinal de reset desabilitado. A seguir ser apresentado o bloco de compensao trmica, que o bloco responsvel por gerir a freqncia que ser utilizada pelo instrumento.

2.2.

Bloco de compensao trmica

O bloco de compensao trmica tem como principal funo escolher a freqncia que dever ser utilizada no instrumento de acordo com a temperatura do meio externo. Este bloco comandado por trs variveis de entrada e o funcionamento do mesmo como mostra a Tabela 3 abaixo:
Tabela 3: Escolha da compensao trmica

Varivel 1 (binria) Varivel 2 (binria) Varivel 3 (binria) Freqncia (kHz)

0 0 0
16,5

0 0 1
16,6

0 1 0
16,8

0 1 1
16,9

1 0 0
17,1

1 0 1
17,2

1 1 0
17,3

1 1 1
17,5

Desta forma, analisando-se a Tabela 3, bloco de compensao trmica desenvolvido em VHDL tem o seguinte aspecto:

Figura 3: Bloco de compensao trmica

A Figura 4 a seguir mostra a simulao efetuada para este bloco, o que inicialmente garante o seu funcionamento. O cdigo completo do bloco de diviso de freqncia estar disponibilizado em anexo neste mesmo documento.

PROJETO DE UM MEDIDOR DE DISTNCIA POR EMISSO DE ONDAS SONORAS

Figura 4: Simulao do bloco de compensao trmica

Como se pode observar na Figura 4 acima, de acordo com a entrada escolhida para o bloco de compensao trmica obtm-se uma sada de freqncia referente temperatura escolhida. A seguir ser apresentado o bloco da mquina de estados, responsvel por gerir todo o funcionamento do instrumento de medio de distncia por ondas sonoras.

2.3.

Mquina de estados

O bloco da mquina de estados responsvel pelo controle central do instrumento, tendo em vista que o bloco responsvel por gerar os sinais que inicializaro todos os outros blocos. Outra funo do bloco da mquina de estados cadenciar a ordem dos acontecimentos, para que o instrumento apresente o funcionamento correto. A Figura 5 abaixo representa o funcionamento da mquina de estados desenvolvida para esta aplicao.

Figura 5: Diagrama de estados do instrumento

A varivel de entrada rst reinicializa todo o sistema, a varivel de entrada start habilita a medio e a varivel de entrada back indica o fim da medida. A Tabela 4 a seguir apresentar os descritivos e as conseqncias de cada estado representado nesta mquina de estados.

PROJETO DE UM MEDIDOR DE DISTNCIA POR EMISSO DE ONDAS SONORAS

Tabela 4: Estados da mquina de estados

Estado

Descrio Estado de inicializao do sistema. Neste estado todas as variveis so remetidas aos seus estados iniciais. Este o estado de inicializao da memria.

S0

S1

Estado de espera. Neste estado o sistema aguarda a requisio de funcionamento. Nenhuma varivel modificada neste estado. Estado de contagem. Neste estado inicia-se a contagem e aguarda-se o retorno do sinal enviado. A varivel de emisso de som e o enable do contador so inicializadas. Estado de armazenamento. Neste estado os dados provenientes da contagem so armazenados em memrias que alimentaro os displays. A varivel de armazenamento inicializada. Estado de reinicializao. Neste estado os contadores sero reinicializados. A varivel de limpeza dos contadores inicializada.

S2

S3

S4

Variveis clear_mem = 1 clear_count = 0 enable = 0 save = 0 sound = 0 clear_mem = 0 clear_count = 0 enable = 0 save = 0 sound = 0 clear_mem = 0 clear_count = 0 enable = 1 save = 0 sound = 1 clear_mem = 0 clear_count = 0 enable = 0 save = 1 sound = 0 clear_mem = 0 clear_count = 1 enable = 0 save = 0 sound = 0

A varivel de sada clear_mem responsvel pela reinicializao das memrias, a varivel de sada clear_count responsvel pela reinicializao dos contadores, a varivel de sada enable habilita os contadores, a varivel de sada save salva os dados dos contadores em memrias de exibio e por fim a varivel de sada sound habilita o envio do som. O bloco da mquina de estados desenvolvido em VHDL tem o seguinte aspecto:

Figura 6: Bloco da mquina de estados

A Figura 7 a seguir mostra a simulao efetuada para este bloco, o que inicialmente garante o seu funcionamento. O cdigo completo do bloco de diviso de freqncia estar disponibilizado em anexo neste mesmo documento.
9

PROJETO DE UM MEDIDOR DE DISTNCIA POR EMISSO DE ONDAS SONORAS

Figura 7: Simulao do bloco da mquina de estados

A seguir ser apresentado o bloco do contador binrio/decimal, responsvel por contar a distncia medida diretamente em centmetros.

2.4.

Bloco do contador binrio/decimal

A funo principal deste bloco efetuar uma contagem binria de zero a nove, de maneira a possibilitar a simplificao do tratamento digital dos dados do instrumento. Levando-se em considerao que cada pulso de clock representa um centmetro de distncia entre o instrumento e o objeto que se deseja medir a distncia pode-se utilizar contadores binrios/decimal para a obteno direta do valor final em centmetros na sada dos displays de sete segmentos. Levando-se em considerao que a distncia mxima que se deseja medir igual a 99,99 metros (9.999 centmetros) e que cada contador responsvel por um algarismo deveremos utilizar para este instrumento quatro blocos de contador binrio/decimal. O bloco contador binrio/decimal desenvolvido em VHDL tem o seguinte aspecto:

Figura 8: Bloco do contador binrio/decimal

Como se pode observar o bloco do contador binrio decimal apresenta trs entradas, sendo elas: a entrada de clock, a entrada de reset e a entrada de habilitao de funcionamento (enable). Como sada do bloco pode-se observar a sada binria/decimal com quatro bits e a sada de overflow que sinaliza o estouro do contador. A Figura 9 a seguir mostra o funcionamento do bloco contador binrio/decimal. Os cdigos deste bloco estaro anexados a este documento.

10

PROJETO DE UM MEDIDOR DE DISTNCIA POR EMISSO DE ONDAS SONORAS

Figura 9: Simulao do bloco contador binrio decimal

Como se pode observar na Figura 9 acima o bloco contador binrio/decimal somente passa a operar como o desejado aps a inicializao do sinal de entrada enable. Os contadores so colocados em cascata e ao trmino da contagem de um dos contadores o mesmo envia o seu sinal de overflow entrada enable do subseqente para que o mesmo incremente a sua sada em uma unidade. Os contadores vo, desta forma, formando um nmero com a quantidade de algarismos igual ao nmero de contadores em cascata. Quando o ltimo contador estoura, o sinal de overflow do mesmo enviado ao sinal de reinicializao do sistema que reinicializa o instrumento sinalizando que o mesmo excedeu o limite especificado (9.999 cm). A seguir ser apresentado o bloco de memria de exibio, responsvel por manter os valores medidos no display aps reinicializao dos contadores.

2.5.

Bloco de memria de exibio

O bloco de memria de exibio tem como principal funo manter os displays com o valor obtido atravs da medio aps a reinicializao dos contadores. Analisando-se por este ngulo, o funcionamento deste bloco bastante parecido com um flip-flop D. O bloco de memria de exibio desenvolvido em VHDL tem o seguinte aspecto:

Figura 10: Bloco de memria de exibio

O funcionamento deste bloco basicamente o seguinte: Envia-se um sinal 1 na entrada escrever e a varivel da entrada bcd_in armazenada na memria e passada diretamente para a sada bcd_out. A Figura 11 a seguir mostra o funcionamento do bloco memria de exibio. Os cdigos deste bloco estaro anexados a este documento.

11

PROJETO DE UM MEDIDOR DE DISTNCIA POR EMISSO DE ONDAS SONORAS

Figura 11: Simulao do bloco de memria de exibio

Como se pode observar o funcionamento deste bloco tal qual se esperava. A seguir ser apresentado o bloco de converso binria para display de sete segmentos, responsvel por fazer esta converso.

2.6.

Bloco de converso binria para display de sete segmentos

O bloco de converso binria para display de sete seguimentos tem como objetivo converte dados binrios de quatro bits (decimal de zero a nove) em dados que possam ser mostrados nos displays de sete segmentos. Para o desenvolvimento deste bloco foi utilizada a seguinte tabela:
Tabela 5: Tabela de converso binria para display de sete segmentos

Para a aplicao do instrumento de medio de distncia os dados a serem mostrados pelos displays so unicamente numricos e desta forma foi utilizada apenas esta parte da Tabela 5. O bloco de converso binria para display de sete segmentos desenvolvido em VHDL tem o seguinte aspecto:

12

PROJETO DE UM MEDIDOR DE DISTNCIA POR EMISSO DE ONDAS SONORAS

Figura 12: Bloco de converso binria para display de sete segmentos

O conversor funciona de forma continua, ou seja, independente de inicializaes. Todos os dados binrios colocados na entrada do bloco de converso so automaticamente convertidos para dados do formato display de sete segmentos. A Figura 13 a seguir mostra o funcionamento do bloco de converso binria para display de sete segmentos. Os cdigos deste bloco estaro anexados a este documento.

Figura 13: Simulao do bloco de converso binria para display de sete segmentos

Como se pode observar o funcionamento deste bloco tal qual se esperava. A seguir ser apresentado o bloco completo do sistema.

2.7.

Sistema completo do instrumento

A Figura 14 abaixo uma representao do circuito completo do instrumento de medio de distncia por ondas sonoras.

Figura 14: Sistema completo

13

PROJETO DE UM MEDIDOR DE DISTNCIA POR EMISSO DE ONDAS SONORAS As entradas e sadas globais do sistema esto representadas em vermelho, enquanto que os sinais internos esto representados em preto. A Tabela 6 abaixo apresenta um resumo das entradas e sadas do sistema, com um resumo de suas funes.
Tabela 6: Funo das entradas e sadas do sistema

Entradas/Sadas Clk Rst Start Back Sound Chose display_1 display_2 display_3 display_4

Funo Clock global do sistema (50 MHz). Reset global do sistema (Ativado com nvel lgico 1). Boto de inicializao da medio (Ativado com nvel lgico 1). Retorno do sensor de udio (Ativado com nvel lgico 1). Sada de ativao da sada de udio (Ativado com nvel lgico 1). Escolha da temperatura (Vetor de trs bits). Sada do display sete segmentos 1. Sada do display sete segmentos 2. Sada do display sete segmentos 3. Sada do display sete segmentos 4.

A Figura 15 abaixo mostra o funcionamento normal do instrumento de medio de distncia por ondas sonoras:

Figura 15: Funcionamento normal do instrumento

Como se pode observar na Figura 15 acima, aps a inicializao do instrumento por intermdio do boto start o mesmo inicializa o envio do som e a contagem. Com o retorno do sinal de udio, o instrumento envia o valor contado para os displays de sete segmentos, por intermdio das memrias de exibio. A Figura 16 abaixo mostra o funcionamento do reset global do sistema.

Figura 16: Funcionamento do reset global do sistema

14

PROJETO DE UM MEDIDOR DE DISTNCIA POR EMISSO DE ONDAS SONORAS Como se pode observar, quando o boto de reset global do sistema acionado, todas as variveis so remetidas aos seus estados de inicializao. A seguir sero apresentadas as concluses deste projeto.

3. Concluses O sistema funcionou como o esperado e todos os resultados das simulaes foram satisfatrios. O sistema apresenta um range de medio de 99,99 metros, com uma sensibilidade de um centmetro. A codificao respeitou as exigncias no que se diz respeito estruturao do cdigo e desta forma pode-se obter um cdigo robusto e de fcil implementao. O sistema no foi montado na placa de FPGA, tendo em vista a dificuldade de obteno da mesma e a curta durao do curso de instrumentao, entretanto os resultados de simulao mostram que o projeto vivel e que o funcionamento do mesmo como o desejado. O curso de instrumentao foi de grande importncia na formao acadmica de todos os integrantes do grupo responsvel por este trabalho, mostrando a importncia do sensoriamento e da instrumentao nas diversas reas de engenharia. 4. Proposies de melhoramento Seria interessante para os futuros grupos montar este sistema em uma placa de FPGA, projetando desta forma o emissor de udio, o sensor receptor e os filtros necessrios para o bom funcionamento do sistema. Outro melhoramento possvel seria a automatizao do sistema de compensao trmico, com a montagem de um sensor de temperatura e de um conversor analgico digital (ADC). ANEXOS (Cdigos em VHDL)

Divisor de clock (Cdigo abaixo referente freqncia de 16,5 kHz) clk_div_16_5.vhd (freqncia de 16,5 kHz) clk_div_16_6.vhd (freqncia de 16,6 kHz) clk_div_16_8.vhd (freqncia de 16,8 kHz) clk_div_16_9.vhd (freqncia de 16,9 kHz) clk_div_17_1.vhd (freqncia de 17,1 kHz) clk_div_17_2.vhd (freqncia de 17,2 kHz) clk_div_17_3.vhd (freqncia de 17,3 kHz) clk_div_17_5.vhd (freqncia de 17,5 kHz)

Obs.: Um cdigo para cada freqncia, ou seja, oito blocos separados de freqncias.

15

PROJETO DE UM MEDIDOR DE DISTNCIA POR EMISSO DE ONDAS SONORAS library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity clk_div_16_5 is Port ( clk_in : in STD_LOGIC; rst : in STD_LOGIC; clk_out : out STD_LOGIC); end clk_div_16_5; architecture Behavioral of clk_div_16_5 is signal clk_out_sgn : STD_LOGIC; begin process(rst, clk_in) variable count : integer range 0 to 50000000 := 0; variable ref : integer := 3030; -- Valor que se deseja dividir a frequncia begin if (rst = '1') then count := 0; ref := 3030; -- Valor que se deseja dividir a frequncia clk_out_sgn <= '0'; else if (rising_edge(clk_in)) then count := count + 1; if (count >= (ref/2)) then count := 0; clk_out_sgn <= not clk_out_sgn; end if; end if; end if; end process; clk_out <= clk_out_sgn; end Behavioral;

Compensador trmico (comp_term.vhd) library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity comp_term is Port ( clk_in : in STD_LOGIC; rst : in STD_LOGIC; chose : in STD_LOGIC_VECTOR (2 downto 0); clk_1 : in STD_LOGIC; clk_2 : in STD_LOGIC; clk_3 : in STD_LOGIC; clk_4 : in STD_LOGIC; clk_5 : in STD_LOGIC; clk_6 : in STD_LOGIC; clk_7 : in STD_LOGIC; clk_8 : in STD_LOGIC; clk_out : out STD_LOGIC ); end comp_term; architecture Behavioral of comp_term is begin process(clk_in, rst, chose) 16

PROJETO DE UM MEDIDOR DE DISTNCIA POR EMISSO DE ONDAS SONORAS begin if (rst = '1') then clk_out <= '0'; else if (rising_edge(clk_in)) then case chose is when "000" => clk_out <= clk_1; when "001" => clk_out <= clk_2; when "010" => clk_out <= clk_3; when "011" => clk_out <= clk_4; when "100" => clk_out <= clk_5; when "101" => clk_out <= clk_6; when "110" => clk_out <= clk_7; when "111"=> clk_out <= clk_8; when others => clk_out <= '0'; end case; end if; end if; end process; end Behavioral;

Mquina de Estados (state_machine.vhd) library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity state_machine is Port ( clk : in STD_LOGIC; rst : in STD_LOGIC; start : in STD_LOGIC; back : in STD_LOGIC; enable : out STD_LOGIC; clear_mem : out STD_LOGIC; clear_count : out STD_LOGIC; save : out STD_LOGIC; sound : out STD_LOGIC); end state_machine; architecture Behavioral of state_machine is type state is (S0, S1, S2, S3, S4); signal current_state, next_state : state; signal clear_mem_sgn : STD_LOGIC; signal clear_count_sgn : STD_LOGIC; signal enable_sgn : STD_LOGIC; signal save_sgn : STD_LOGIC; signal sound_sgn : STD_LOGIC; begin process(clk, rst) 17

PROJETO DE UM MEDIDOR DE DISTNCIA POR EMISSO DE ONDAS SONORAS begin if (rst = '1') then current_state <= S0; else if (rising_edge(clk)) then current_state <= next_state; end if; end if; end process; process(current_state, start, back) begin case current_state is when S0 => next_state <= S1; when S1 => if (start = '1') then next_state <= S2; else next_state <= S1; end if; when S2 => if (back = '1') then next_state <= S3; else next_state <= S2; end if; when S3 => next_state <= S4; when S4 => next_state <= S1; end case; end process; process(current_state) begin case current_state is when S0 => clear_mem_sgn <= '1'; clear_count_sgn <= '0'; enable_sgn <= '0'; save_sgn <= '0'; sound_sgn <= '0'; when S1 => clear_mem_sgn <= '0'; clear_count_sgn <= '0'; enable_sgn <= '0'; save_sgn <= '0'; sound_sgn <= '0'; when S2 => clear_mem_sgn <= '0'; clear_count_sgn <= '0'; enable_sgn <= '1'; save_sgn <= '0'; sound_sgn <= '1'; when S3 => clear_mem_sgn <= '0';

18

PROJETO DE UM MEDIDOR DE DISTNCIA POR EMISSO DE ONDAS SONORAS clear_count_sgn <= '0'; enable_sgn <= '0'; save_sgn <= '1'; sound_sgn <= '0'; when S4 => clear_mem_sgn <= '0'; clear_count_sgn <= '1'; enable_sgn <= '0'; save_sgn <= '0'; sound_sgn <= '0'; end case; end process; clear_mem <= clear_mem_sgn; clear_count <= clear_count_sgn; enable <= enable_sgn; save <= save_sgn; sound <= sound_sgn; end Behavioral;

Contador Binrio para decimal (count_bcd.vhd) library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity count_bcd is Port ( clk : in STD_LOGIC; rst : in STD_LOGIC; en : in STD_LOGIC; c_out : out STD_LOGIC; bcd_out : out STD_LOGIC_VECTOR (3 downto 0)); end count_bcd; architecture Behavioral of count_bcd is signal bcd_out_sgn : STD_LOGIC_VECTOR (3 downto 0); signal c_out_sgn : STD_LOGIC; begin process(clk, rst) begin if (rst = '1') then bcd_out_sgn <= (others => '0'); c_out_sgn <= '0'; else if (rising_edge(clk)) then if (en = '1') then if (bcd_out_sgn = "1001") then bcd_out_sgn <= (others => '0'); c_out_sgn <= '1'; else bcd_out_sgn <= bcd_out_sgn + '1'; c_out_sgn <= '0'; end if; end if; end if; end if; end process; 19

PROJETO DE UM MEDIDOR DE DISTNCIA POR EMISSO DE ONDAS SONORAS bcd_out <= bcd_out_sgn; c_out <= c_out_sgn; end Behavioral;

Memria de exibio (memoire.vhd) library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity memoire is Port ( clk : in STD_LOGIC; rst : in STD_LOGIC; escrever : in STD_LOGIC; bcd_in : in STD_LOGIC_VECTOR (3 downto 0); bcd_out : out STD_LOGIC_VECTOR (3 downto 0)); end memoire; architecture Behavioral of memoire is begin process(clk, rst) begin if (rst = '1') then bcd_out <= (others => '0'); else if (rising_edge(clk)) then if (escrever = '1') then bcd_out <= bcd_in; end if; end if; end if; end process; end Behavioral;

Conversor Binrio para display de sete segmentos (Bin_to_7disp.vhd) library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity bin_to_7disp is Port ( clk : in STD_LOGIC; rst : in STD_LOGIC; binaire : in STD_LOGIC_VECTOR (3 downto 0); display : out STD_LOGIC_VECTOR (6 downto 0)); end bin_to_7disp; architecture Behavioral of bin_to_7disp is signal display_sgn : STD_LOGIC_VECTOR (6 downto 0); signal binaire_sgn : STD_LOGIC_VECTOR (3 downto 0); begin process(clk, rst) begin if (rst = '1') then display_sgn <= (others => '0'); binaire_sgn <= (others => '0'); else if (rising_edge(clk)) then

20

PROJETO DE UM MEDIDOR DE DISTNCIA POR EMISSO DE ONDAS SONORAS binaire_sgn <= binaire; case binaire is when "0000" => display_sgn <= "1111110"; when "0001" => display_sgn <= "0110000"; when "0010" => display_sgn <= "1101101"; when "0011" => display_sgn <= "1111001"; when "0100" => display_sgn <= "0110011"; when "0101" => display_sgn <= "1011011"; when "0110" => display_sgn <= "0011111"; when "0111" => display_sgn <= "1110000"; when "1000" => display_sgn <= "1111111"; when "1001" => display_sgn <= "1110011"; when others => display_sgn <= "0000000"; end case; end if; end if; end process; display <= display_sgn; end Behavioral;

Sistema Completo (circuito.vhd) library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity circuito is Port ( clk_in : in STD_LOGIC; rst : in STD_LOGIC; chose : in STD_LOGIC_VECTOR (2 downto 0); start : in STD_LOGIC; back : in STD_LOGIC; display1 : out std_logic_vector (6 downto 0); display2 : out std_logic_vector (6 downto 0); display3 : out std_logic_vector (6 downto 0); display4 : out std_logic_vector (6 downto 0); sound : out STD_LOGIC); end circuito; architecture Behavioral of circuito is COMPONENT clk_div_16_5 PORT( clk_in : IN std_logic; rst : IN std_logic; 21

PROJETO DE UM MEDIDOR DE DISTNCIA POR EMISSO DE ONDAS SONORAS clk_out : OUT std_logic ); END COMPONENT; COMPONENT clk_div_16_6 PORT( clk_in : IN std_logic; rst : IN std_logic; clk_out : OUT std_logic ); END COMPONENT; COMPONENT clk_div_16_8 PORT( clk_in : IN std_logic; rst : IN std_logic; clk_out : OUT std_logic ); END COMPONENT; COMPONENT clk_div_16_9 PORT( clk_in : IN std_logic; rst : IN std_logic; clk_out : OUT std_logic ); END COMPONENT; COMPONENT clk_div_17_1 PORT( clk_in : IN std_logic; rst : IN std_logic; clk_out : OUT std_logic ); END COMPONENT; COMPONENT clk_div_17_2 PORT( clk_in : IN std_logic; rst : IN std_logic; clk_out : OUT std_logic ); END COMPONENT; COMPONENT clk_div_17_3 PORT( clk_in : IN std_logic; rst : IN std_logic; clk_out : OUT std_logic ); END COMPONENT; COMPONENT clk_div_17_5 PORT( clk_in : IN std_logic;

22

PROJETO DE UM MEDIDOR DE DISTNCIA POR EMISSO DE ONDAS SONORAS rst : IN std_logic; clk_out : OUT std_logic ); END COMPONENT; COMPONENT comp_term PORT( clk_in : IN std_logic; rst : IN std_logic; chose : IN std_logic_vector(2 downto 0); clk_1 : IN std_logic; clk_2 : IN std_logic; clk_3 : IN std_logic; clk_4 : IN std_logic; clk_5 : IN std_logic; clk_6 : IN std_logic; clk_7 : IN std_logic; clk_8 : IN std_logic; clk_out : OUT std_logic ); END COMPONENT; COMPONENT state_machine PORT( clk : IN std_logic; rst : IN std_logic; start : IN std_logic; back : IN std_logic; enable : OUT std_logic; clear_mem : OUT std_logic; clear_count : OUT std_logic; save : OUT std_logic; sound : OUT std_logic ); END COMPONENT; COMPONENT count_bcd PORT( clk : IN std_logic; rst : IN std_logic; en : IN std_logic; c_out : OUT std_logic; bcd_out : OUT std_logic_vector(3 downto 0) ); END COMPONENT; COMPONENT memoire PORT( clk : IN std_logic; rst : IN std_logic; escrever : IN std_logic; bcd_in : IN std_logic_vector(3 downto 0); bcd_out : OUT std_logic_vector(3 downto 0) ); END COMPONENT;

23

PROJETO DE UM MEDIDOR DE DISTNCIA POR EMISSO DE ONDAS SONORAS

COMPONENT bin_to_7disp PORT( clk : IN std_logic; rst : IN std_logic; binaire : IN std_logic_vector(3 downto 0); display : OUT std_logic_vector(6 downto 0) ); END COMPONENT; SIGNAL clk_1 SIGNAL clk_2 SIGNAL clk_3 SIGNAL clk_4 SIGNAL clk_5 SIGNAL clk_6 SIGNAL clk_7 SIGNAL clk_8 SIGNAL clk_out : : : : : : : : : STD_LOGIC; STD_LOGIC; STD_LOGIC; STD_LOGIC; STD_LOGIC; STD_LOGIC; STD_LOGIC; STD_LOGIC; STD_LOGIC;

SIGNAL enable : STD_LOGIC; SIGNAL clear_mem : STD_LOGIC; SIGNAL clear_count : STD_LOGIC; SIGNAL save : STD_LOGIC; signal en_sgn1 : std_logic; signal en_sgn2 : std_logic; signal en_sgn3 : std_logic; signal c_out : std_logic; signal bcd_out1 : std_logic_vector (3 downto 0); signal bcd_out2 : std_logic_vector (3 downto 0); signal bcd_out3 : std_logic_vector (3 downto 0); signal bcd_out4 : std_logic_vector (3 downto 0); signal bcd_out_mem1 : std_logic_vector (3 downto 0); signal bcd_out_mem2 : std_logic_vector (3 downto 0); signal bcd_out_mem3 : std_logic_vector (3 downto 0); signal bcd_out_mem4 : std_logic_vector (3 downto 0); signal limpa_mem : std_logic; signal limpa_count : std_logic; signal limpa_machine : std_logic; begin limpa_mem <= rst or clear_mem or c_out; limpa_count <= rst or clear_count or c_out; limpa_machine <= rst or c_out; uut1: clk_div_16_5 PORT MAP ( clk_in => clk_in, rst => rst, clk_out => clk_1 ); uut2: clk_div_16_6 PORT MAP (

24

PROJETO DE UM MEDIDOR DE DISTNCIA POR EMISSO DE ONDAS SONORAS clk_in => clk_in, rst => rst, clk_out => clk_2 ); uut3: clk_div_16_8 PORT MAP ( clk_in => clk_in, rst => rst, clk_out => clk_3 ); uut4: clk_div_16_9 PORT MAP ( clk_in => clk_in, rst => rst, clk_out => clk_4 ); uut5: clk_div_17_1 PORT MAP ( clk_in => clk_in, rst => rst, clk_out => clk_5 ); uut6: clk_div_17_2 PORT MAP ( clk_in => clk_in, rst => rst, clk_out => clk_6 ); uut7: clk_div_17_3 PORT MAP ( clk_in => clk_in, rst => rst, clk_out => clk_7 ); uut8: clk_div_17_5 PORT MAP ( clk_in => clk_in, rst => rst, clk_out => clk_8 ); uut9: comp_term PORT MAP ( clk_in => clk_in, rst => rst, chose => chose, clk_1 => clk_1, clk_2 => clk_2, clk_3 => clk_3, clk_4 => clk_4, clk_5 => clk_5, clk_6 => clk_6, clk_7 => clk_7, clk_8 => clk_8, clk_out => clk_out );

25

PROJETO DE UM MEDIDOR DE DISTNCIA POR EMISSO DE ONDAS SONORAS

uut10: state_machine PORT MAP ( clk => clk_in, rst => limpa_machine, start => start, back => back, enable => enable, clear_mem => clear_mem, clear_count => clear_count, save => save, sound => sound ); uut11: count_bcd PORT MAP ( clk => clk_out, rst => limpa_count, en => enable, c_out => en_sgn1, bcd_out => bcd_out1 ); uut12: count_bcd PORT MAP ( clk => en_sgn1, rst => limpa_count, en => enable, c_out => en_sgn2, bcd_out => bcd_out2 ); uut13: count_bcd PORT MAP ( clk => en_sgn2, rst => limpa_count, en => enable, c_out => en_sgn3, bcd_out => bcd_out3 ); uut14: count_bcd PORT MAP ( clk => en_sgn2, rst => limpa_count, en => enable, c_out => c_out, bcd_out => bcd_out4 ); uut15: memoire PORT MAP ( clk => clk_in, rst => limpa_mem, escrever => save, bcd_in => bcd_out1, bcd_out => bcd_out_mem1 ); uut16: memoire PORT MAP ( clk => clk_in,

26

PROJETO DE UM MEDIDOR DE DISTNCIA POR EMISSO DE ONDAS SONORAS rst => limpa_mem, escrever => save, bcd_in => bcd_out2, bcd_out => bcd_out_mem2 ); uut17: memoire PORT MAP ( clk => clk_in, rst => limpa_mem, escrever => save, bcd_in => bcd_out3, bcd_out => bcd_out_mem3 ); uut18: memoire PORT MAP ( clk => clk_in, rst => limpa_mem, escrever => save, bcd_in => bcd_out4, bcd_out => bcd_out_mem4 ); uut19: bin_to_7disp PORT MAP ( clk => clk_in, rst => rst, binaire => bcd_out_mem1, display => display1 ); uut20: bin_to_7disp PORT MAP ( clk => clk_in, rst => rst, binaire => bcd_out_mem2, display => display2 ); uut21: bin_to_7disp PORT MAP ( clk => clk_in, rst => rst, binaire => bcd_out_mem3, display => display3 ); uut22: bin_to_7disp PORT MAP ( clk => clk_in, rst => rst, binaire => bcd_out_mem4, display => display4 ); end Behavioral;

27

You might also like