>> Tecnologia eletrônica >  >> TVs >> Conversores de TV

Código para geração de onda quadrada em VHDL?

```vhdl
biblioteca ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entidade square_wave_generator é
porto (
clk:em std_logic;
redefinir:em std_logic;
frequência:em std_logic_vector (7 até 0); -- Frequência de entrada em Hz (0-255)
output_signal:saída std_logic
);
entidade final square_wave_generator;

arquitetura comportamental de square_wave_generator é

contador de sinal:não assinado (7 até 0);
sinal half_period:sem sinal (7 até 0);

começar

- Calcular meio período com base na entrada de frequência
half_period <=10000000 / (2 * sem sinal (frequência)); -- 10000000 =frequência de clock de 10 MHz

processo (clk, redefinir)
começar
se redefinir ='1' então
contador <=(outros => '0');
sinal_saída <='0';
elsif borda_ascendente(clk) então
se contador =half_period - 1 então
contador <=(outros => '0');
output_signal <=não output_signal;
outro
contador <=contador + 1;
terminar se;
terminar se;
processo final;

arquitetura final comportamental;
```

Explicação:

1. Declaração da Entidade:
- Define a entidade `square_wave_generator` com portas para clock, reset, entrada de frequência (8 bits) e sinal de saída.

2. Arquitetura:
- Utiliza a arquitetura `comportamental` para descrever a lógica.

3. Sinais:
- `counter`:Um contador não assinado de 8 bits para gerar a forma de onda.
- `half_period`:Um sinal sem sinal de 8 bits que representa o meio período da onda quadrada (calculado com base na frequência de entrada).

4. Cálculo do Meio Período:
- A linha `half_period <=10000000 / (2 * unsigned(frequency));` calcula o meio período com base na frequência de entrada e uma frequência de clock de 10MHz. Ajuste o valor `10000000` se a frequência do clock for diferente.

5. Processo:
- O processo é sensível aos sinais de relógio e reset.
- Realiza o seguinte:
- Redefinir lógica: Se `reset` for alto, o contador será zerado e a saída será definida como baixa.
- Lógica de borda ascendente: Na borda ascendente do relógio, o processo verifica se o contador atingiu o valor `half_period - 1`. Nesse caso, ele alterna o `output_signal` e zera o contador. Caso contrário, incrementa o contador.

Como funciona:

- O contador conta de 0 a `half_period - 1`.
- Quando o contador atinge `half_period - 1`, o sinal de saída é alternado e o contador é reiniciado.
- Isso cria uma onda quadrada com um período duas vezes maior que o `meio_período` calculado.

Uso:

- Conecte os sinais `clk` e `reset` ao seu relógio e reinicie as entradas.
- Fornece a frequência desejada (0-255 Hz) através da entrada `frequency`.
- O `output_signal` produzirá a onda quadrada gerada.

Observação: Este código assume uma frequência de clock de 10 MHz. Modifique o cálculo `half_period` se a frequência do clock for diferente.