indigo84 0 28 июля, 2009 Опубликовано 28 июля, 2009 · Жалоба Передо мной поставлена задача, на базе плис SPARTAN3 организовать генератор переменной частоты, с шагом 1Гц в частотном диапазоне от 1Гц до 15кГц, скважность 2. Как это сделать? Пытался сделать ничего не вышло. Для примера собрал в софте webpackise 8.2i схему на счетчике с паралельной загрузкой и аккумуляторе. С выхода счетчика частота меняется, но не линейно, а изменяется в 2 раза (примерно так в 1-2-4-8-16-32-64 и.д. что мне не подходит), линейно меняется только период. Проект во вложенном файле. Заранее благодарю! ACC_SCHET.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Beby 8 28 июля, 2009 Опубликовано 28 июля, 2009 · Жалоба Передо мной поставлена задача, на базе плис SPARTAN3 организовать генератор переменной частоты, с шагом 1Гц в частотном диапазоне от 1Гц до 15кГц, скважность 2. Как это сделать? Для любой скважности задача решается одинаково: 1. Строится управляемый делитель частоты, выходом которого является выходной перенос (COut) загружаемого счетчика. 2. COut подается на схему, формирующую импульсы заданной (или даже измиеняемой) скважности. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
indigo84 0 28 июля, 2009 Опубликовано 28 июля, 2009 · Жалоба Для любой скважности задача решается одинаково: 1. Строится управляемый делитель частоты, выходом которого является выходной перенос (COut) загружаемого счетчика. 2. COut подается на схему, формирующую импульсы заданной (или даже измиеняемой) скважности. Если посмотреть мой проект, то там есть счетчик с паралельной загрузкой! Проблема в том, что на выходе этого счетчика линейно меняется период (Т), а мне нужна линейно изменяющаяся частота (f). f=1/T! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 28 июля, 2009 Опубликовано 28 июля, 2009 · Жалоба занятно, раз в 2/3 месяца возникает на этом форуме вопрос "как сделать DDS". Пора уже выносить в FAQ :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 28 июля, 2009 Опубликовано 28 июля, 2009 · Жалоба Если посмотреть мой проект, то там есть счетчик с паралельной загрузкой! Проблема в том, что на выходе этого счетчика линейно меняется период (Т), а мне нужна линейно изменяющаяся частота (f). f=1/T! Совет: начните изучать языки описания (VHDL/Verilog)! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
indigo84 0 28 июля, 2009 Опубликовано 28 июля, 2009 · Жалоба занятно, раз в 2/3 месяца возникает на этом форуме вопрос "как сделать DDS". Пора уже выносить в FAQ :) Если это уже решенная задача, может подскажете что нибудь дельное. Совет: начните изучать языки описания (VHDL/Verilog)! А в схематике разьве нельзя эту задачу решить. В VHDL ничего не понимаю - литературы нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladimirB 1 28 июля, 2009 Опубликовано 28 июля, 2009 · Жалоба Если это уже решенная задача, может подскажете что нибудь дельное... Вам уже подсказали: занятно, раз в 2/3 месяца возникает на этом форуме вопрос "как сделать DDS". Пора уже выносить в FAQ :) Смотрите в сторону DDS (Direct Digital Synthesis). В ISE Core Generator есть готовое ядро DDS. Оно выдаёт синус произвольной частоты с шагом до 0.001Гц. Для преобразования в прямоугольник нужно просто после него компаратор цифровой поставить. В VHDL проще работать (особенно в ISE - там очень кривой Schematic-редактор). Ну и вообще для сложных проектов схемотехнический ввод годится разве что для top_levela. Кроме того модули на VHDL легко переносить из одного САПРа в другой и использовать для различных ПЛИС и моделировать в различных средах. А при схемотехническомм вводе возникают большие проблемы с переносимостью даже в одном САПРе разных версий: например при смене версии ISE ваш проект может уже не открыться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
petrov 8 28 июля, 2009 Опубликовано 28 июля, 2009 · Жалоба Если это уже решенная задача, может подскажете что нибудь дельное. А в схематике разьве нельзя эту задачу решить. В VHDL ничего не понимаю - литературы нет. Можно и в схематике, вы ведь в квартусе работаете? Берёте библиотечный компонент накпливающий сумматор разрядности N, выход обратно на один из его входов подаёте. На другой вход константу K котрая и будет задавать частоту. В качестве выходного сигнала используйте старший разряд с выхода накапливающего сумматора. На регистр накпливающего сумматора подаёте вашу тактовую частоту fclk. Выходная частота f=fclk*K/2^N Чем больше N тем более мелкий шаг частоты генератора можно получить df=fclk/2^N, и соответственно точнее получить нужную частоту. K= round(f*2^N/fclk) Ессно в общем случае будет джиттер определяемый fclk, без джиттера полностью в цифре сделать не получится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Beby 8 28 июля, 2009 Опубликовано 28 июля, 2009 · Жалоба Если посмотреть мой проект, то там есть счетчик с параллельной загрузкой! Проблема в том, что на выходе этого счетчика линейно меняется период (Т), а мне нужна линейно изменяющаяся частота (f). f=1/T! Ну так какая проблема (?!!) - создайте таблицу соответствия: такая-то частота = такому-то коэффициенту, и запишите её в Block RAM. В Вашу систему подавайте задание в виде кода желаемой частоты, из Block RAM по адресу = коду желаемой частоты считывайте коэффициент деления для загружаемого счетчика. А на досуге посчитайте, какая нужна базовая делимая частота для получения заказанной Вами сетки частот... и сравните её с максимальной частотой работы ПЛИС. Можно и в схематике, вы ведь в квартусе работаете? Altera Quartus вроде же не поддерживает Xilinx Spartan-3 (см. subj) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 28 июля, 2009 Опубликовано 28 июля, 2009 · Жалоба Если это уже решенная задача, может подскажете что нибудь дельное. поиском по форуму пройдитесь, ключевое слово я вам сказал. Там выкладывались и сорцы и материалы по этой теме. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
indigo84 0 28 июля, 2009 Опубликовано 28 июля, 2009 · Жалоба Ну так какая проблема (?!!) - создайте таблицу соответствия: такая-то частота = такому-то коэффициенту, и запишите её в Block RAM. В Вашу систему подавайте задание в виде кода желаемой частоты, из Block RAM по адресу = коду желаемой частоты считывайте коэффициент деления для загружаемого счетчика. А на досуге посчитайте, какая нужна базовая делимая частота для получения заказанной Вами сетки частот... и сравните её с максимальной частотой работы ПЛИС. Altera Quartus вроде же не поддерживает Xilinx Spartan-3 (см. subj) Работаю в webpack ise 8.2i. С Block RAM пробовал, интересно конечно, но кто загружать будет эту сетку - там же значений целая куча!!! Проект получиться негибким - необходимо чтобы пользователь вводил всего 3 величины -1) начальная частота работы в Гц, 2) конечная частота в Гц, 3) шаг частоты в Гц...... и пошло-поехало Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
indigo84 0 28 июля, 2009 Опубликовано 28 июля, 2009 · Жалоба Можно и в схематике, вы ведь в квартусе работаете? Берёте библиотечный компонент накпливающий сумматор разрядности N, выход обратно на один из его входов подаёте. На другой вход константу K котрая и будет задавать частоту. В качестве выходного сигнала используйте старший разряд с выхода накапливающего сумматора. На регистр накпливающего сумматора подаёте вашу тактовую частоту fclk. Выходная частота f=fclk*K/2^N Чем больше N тем более мелкий шаг частоты генератора можно получить df=fclk/2^N, и соответственно точнее получить нужную частоту. K= round(f*2^N/fclk) Ессно в общем случае будет джиттер определяемый fclk, без джиттера полностью в цифре сделать не получится. Работаю в webpack ise 8.2i. "накпливающий сумматор" - это аккумулятор? "На регистр накпливающего сумматора подаёте вашу тактовую частоту fclk" - это клоковый вход аккумулятора? "Выходная частота f=fclk*K/2^N" - поясните пожалуйста формулу подробнее, что-то не очень понятно. Почему частота входная делится на K/2^N? Сразу извиняюсь за, может быть, некорректные вопросы. Я только учусь... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
petrov 8 28 июля, 2009 Опубликовано 28 июля, 2009 · Жалоба Работаю в webpack ise 8.2i. "накпливающий сумматор" - это аккумулятор? "На регистр накпливающего сумматора подаёте вашу тактовую частоту fclk" - это клоковый вход аккумулятора? "Выходная частота f=fclk*K/2^N" - поясните пожалуйста формулу подробнее, что-то не очень понятно. Почему частота входная делится на K/2^N? Сразу извиняюсь за, может быть, некорректные вопросы. Я только учусь... Да аккумулятор, у альтеры есть такой библиотечный компонент, возможно и у ксилинкса есть, да и вручную элементарно нарисовать сумматор с регистром на выходе. fclk - да это клок регистра аккумулятора, ваш глобальный клок на котором всё вычисляется. f=fclk*K/2^N - эта формула показывает зависимость выходной частоты от константы на одном из входов аккумулятора. Аккумулятор генерирует линейно изменяющуюся фазу по модулю 2^N, считайте что 2^N - это 2*pi. Например K=1, на выходе аккумулятора получаем пилообразный сигнал с периодом 2^N/fclk, K=2 период 2^N/(2*fclk),... 2^N/(K*fclk). Так как нам пила не нужна берём старший разряд с регистра и получаем меандр, т к в первой половине периода пила меньше 2^(N-1) и старший разряд равен нулю, во второй половине периода пила больше 2^(N-1) и старший разряд равен 1. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 28 июля, 2009 Опубликовано 28 июля, 2009 · Жалоба В VHDL проще работать (особенно в ISE - там очень кривой Schematic-редактор). Ну и вообще для сложных проектов схемотехнический ввод годится разве что для top_levela. C Вами полностью согласен!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Beby 8 28 июля, 2009 Опубликовано 28 июля, 2009 · Жалоба С Block RAM пробовал, интересно конечно, но кто загружать будет эту сетку - там же значений целая куча!!! Конечно куча значений, а как Вы хотели... (можно и без кучи значений обойтись, но тогда надо городить вычислитель - с Block RAM обычно попроще выходит). А у Block RAM, есть атрибут начальной инициализации - INIT (читай: cgd.pdf, lib.pdf, xst.pdf), позволяющий использовать этот BRAM, как BROM. Конечно, заполнять начальными значениями удобнее на VHDL/Verilog,.. но можно и ручками поработать,.. да и были еще mem файлы - надо только поглядеть в сторону IP Core Generator - он достаточно хорошо работает с схемным вводом проекта. Проект получиться негибким - необходимо чтобы пользователь вводил всего 3 величины: 1) начальная частота работы в Гц, 2) конечная частота в Гц, 3) шаг частоты в Гц...... и пошло-поехало Наверное, Вы - студент... Я угадал ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться