Перейти к содержанию
    

Генератор синусоидальных сигналов метод прямого цифрового синтеза

Мне надо организовать Генератор синусоидальных сигналов методом прямого цифрового синтеза. Нашел несколько кодов на VHDL, но в одном и кодов(1) нет входа выбора тактовой частоты. Можно ли его как нибудь туда добавить. С другим кодом(2) никак не могу разобраться, есть ли в нём этот вход или нет. Ещё не могу понять что нужно подавать на входа(когда делаю симуляцию в quartus 9.0).

(1)- dds_sin.vhd

(2)-(

constants.vhd

cos_rom.vhd

dds.vhd

sin_rom.vhd

)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробую вам помочь, хотя и не силен я в VHDL.

 

Вот вы говорите, что " в одном из кодов(1) нет входа выбора тактовой частоты. Можно ли его как нибудь туда добавить."

 

Имеется в виду что? Тактирование схемы? В портах модуля описан тактовый вход.

CLK : in std_logic; -- Вход тактовой частоты.

 

Может вы имели ввиду ввод частоты полученного колебания?

В том же коде(1) при асинхронном сбросе схемы описана строка с комментарием:

 

freq_reg <= X"0CCC_CCCD"; -- 2 МГц, при тактовой 40МГц Fout = FREQ_REG*Fs/2^32; FREQ_REG = Fout*2^32/Fs

 

Собственно значением этого регистра и задается частота синусоиды на выходе.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Препод сказал что в этом коде нет входа выбора частоты. Я уже долго себе голову ломаю над этим входом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Препод сказал что в этом коде нет входа выбора частоты. Я уже долго себе голову ломаю над этим входом.

Попробуйте

вывести наружу регистр

freq_reg <= X"0CCC_CCCD";

 

или/и

 

выбор частоты в простейшем случае это связка счетчик + мультиплексор. Выход мультиплексора это и есть тактовая частота для Вашего модуля... Счетчик это делитель Вашей тактовой частоты. Управление осуществляется через мультиплексор (PS при переключении частоты возможны глитчи, чтобы их не было нужна доп. схема для управления мультиплексором.)

Более сложный и правильный вариант это использовать динамически реконфигурируемый PLL

(подробнее здесь)

 

Описанное нужно сделать и добавить в проект

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот здесь про генераторы с изменяемой частотой

http://kanyevsky.kpi.ua/Studentam/labexercise%201.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Весь синтезатор делается на двух регистрах, сумматоре и ПЗУ синуса. Объем ПЗУ определяется требованиями по точности и искажениям. Набортного ОЗУ циклона-3 хватает даже на 16-разрядные семплы.

post-41263-1324910392_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Весь синтезатор делается на двух регистрах, сумматоре и ПЗУ синуса. Объем ПЗУ определяется требованиями по точности и искажениям. Набортного ОЗУ циклона-3 хватает даже на 16-разрядные семплы.

Вот бы ещё код к этому блоку был... Было бы супер!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот бы ещё код к этому блоку был... Было бы супер!

а что именно вы не понимаете в описании взятого с сайта

 

там вроде все очень подробно описано...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Там то всё норм, всё работает, всё отлично! Принес преподу, он сказал что в том коде не хватает входа который задает частоту. Может что то я не могу понять, или мой препод что то не понял... Посмотрите по точнее есть ли этот вход?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Там то всё норм, всё работает, всё отлично! Принес преподу, он сказал что в том коде не хватает входа который задает частоту. Может что то я не могу понять, или мой препод что то не понял... Посмотрите по точнее есть ли этот вход?

Вы внимательно прочитайте 5 сообщение Maverick.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А кто нибудь может вывести этот регистр наружу? (в vhdl я не очень понимаю)

 

signal freq_reg: unsigned(0 to Nph_reg-1); - эту строчку комментируете.

а там где port(xxxx);

Добавляете freq_reg: in unsigned(0 to Nph_reg-1);

 

Ну и читаете соответствующую литературу. Иначе нифига вы курсовик не сдадите.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

signal freq_reg: unsigned(0 to Nph_reg-1); - эту строчку комментируете.

а там где port(xxxx);

Добавляете freq_reg: in unsigned(0 to Nph_reg-1);

 

Ну и читаете соответствующую литературу. Иначе нифига вы курсовик не сдадите.

Не получается, при компиляции ошибку выдаёт. Можно по подробнее написать как сделать это?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не получается, при компиляции ошибку выдаёт. Можно по подробнее написать как сделать это?

чем то, ваша тема мне напоминает старый мультфильм про двоих из ларца, одинаковых с лица. Дать вам еды, ложку, поднести ко рту, а теперь еще и прожевать. При таком подходе предлагаю переместить вашу тему в подфорум "Предлагаю работу". Т.к. он больше подходит тематически к вашей теме.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...