Генерация чистой синусоидальной волны в качестве выходной формы FPGA с использованием кода VHDL - PullRequest
2 голосов
/ 02 июля 2010

Мы знаем, что выход ПЛИС является цифровым, но можем ли мы генерировать чистый аналоговый синусоидальный сигнал, используя код VHDL. Также можно указать частоту синусоиды.

Ответы [ 5 ]

2 голосов
/ 02 июля 2010

Определите «чистый» - сколько «битов» квантования вы можете прожить ... и с какой частотой?

Для низких частот на младших битах вы могли бы построить простой ШИМ или ЦАП с дельта-сигмой в ПЛИС и установить фильтр нижних частот на «внешнюю сторону» (извините, это должно быть настоящее аналоговое оборудование :). Этот пример может быть информативным

Не доберусь туда без некоторых внешних компонентов, хотя.

1 голос
/ 16 января 2013

Метод генерации чистых синусоидальных волн из ранее сохраненных сэмплов в памяти и считывания памяти с различной частотой / в разных местах памяти для изменения частоты и / или спектральной чистоты синусоидальной волны называется прямым цифровым синтезом.

Это позволяет генерировать широкий спектр синусоидальных частот с требуемой спектральной чистотой. Полезно в мобильных и программно-определяемых радиоприемниках и любых других подобных приложениях. DDS ASIC также доступны, но обычно стоят дорого.

ПЛИС являются более дешевой альтернативой. ПЛИС может генерировать только требуемый цифровой выход, но аналоговый сигнал не может быть создан без фильтра или ЦАП и некоторой базовой фильтрации.

Большинство поставщиков FPGA имеют бесплатное DDS IP Core со своей IDE (интегрированной средой разработки). Оформить заказ Actel / Xilinx / Altera IP's. Они бесплатны. Если вам не удается получить IP-адрес, вы можете извлечь функциональный блок DDS в Matlab и использовать сторонний инструмент ... (доступен для всех трех вышеперечисленных поставщиков) для синтеза DDS через интерфейс Matlab. DDS иногда также называют DDFS: прямой цифровой синтез частоты.

1 голос
/ 01 октября 2010

Вы можете посмотреть Прямой цифровой синтез .Он в основном использует ПЗУ для хранения выборок синусов и использует фазовый аккумулятор для индексации в ПЗУ для генерации выходного сигнала с желаемой частотой.Разрешение и максимальная частота зависят от частоты fpga и размера ПЗУ.

Однако вам все еще нужен фильтр восстановления журнала.

0 голосов
/ 09 октября 2015
library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.NUMERIC_STD.ALL;  
-- use this library as much as possible.

entity sinewave is

port (clk :in  std_logic;

      dataout : out real range -1.0 to 1.0);

end sinewave;

architecture Behavioral of sinewave is

signal i : integer range 0 to 77:=0;

type memory_type is array (0 to 71) of real range  -1.0000 to 1.0000 ;

--ROM for storing the sine values generated.

signal temp : memory_type :=(0.0,0.0872, 0.1736, 0.2588, 0.3420, 0.4226, 0.5000, 0.5736, 0.6428, 0.7071, 0.7660, 
                             0.8191, 0.8660, 0.9063, 0.9397, 0.9659, 0.9848, 0.9962, 1.0000,0.9962,0.9848,0.9659,
                             0.9397, 0.9063, 0.8660, 0.8191, 0.7660, 0.7071, 0.6428, 0.5000, 0.4226, 0.3420, 0.2588, 
                             0.1736, 0.0872,0.0, 0.0,-0.0872,-0.1736, -0.2588, -0.3420,-0.4226, -0.5000, -0.5736, 
                            -0.6428, -0.7071, -0.7660, -0.8191, -0.8660, -0.9063, -0.9397, -0.9659, -0.9848, -0.9962, 
                            -1.0000,-0.9962,-0.9848,-0.9659,-0.9397, -0.9063, -0.8660, -0.8191, 
                            -0.766, -0.7071, -0.6428, -0.5000, -0.4226, -0.3420, -0.2588, -0.1736, -0.0872,0.0);


begin

process(clk)

begin

  --to check the rising edge of the clock signal

if(rising_edge(clk)) then    

dataout <= temp(i);

i <= i+ 1;

if(i = 71) then

i <= 0;

end if;

end if;

end process;

end Behavioral;

Решите эту реализацию Это показывает ошибку, чем постоянное значение, ожидаемое для выражения 1.000

0 голосов
/ 06 июля 2010

За исключением очень немногих моделей со смешанным сигналом (например, некоторые продукты Actel), ПЛИС не имеют компонентов для требуемого аналогового фильтра восстановления.Они должны быть добавлены снаружи.

...