ZED 0 20 февраля, 2009 Опубликовано 20 февраля, 2009 · Жалоба Пока никакого интерфейса я не проектировал, считал, что данные уже лежат в одном из ОЗУ (Точнее в двух - для реальной и мнимой части). Опыт разработки у меня очень маленький, был отдаленно знаком с Ise WebPack, но уже все забыл. С квартусом да не очень знаком, ибо иногда не подозреваю что он выкинет в RTL на тот или иной участок кода. Схема получается довольно-таки громоздкая из-за мультиплексирования, переключения шин, да и задержек с адресами. Так что не уверен, что она будет понятна. У меня в принципе основной вопрос как масштабировать результаты после бабочки и домножения на поворачивающие множители, т. е. все упирается в реализацию бабочки и домножения и масштабирования. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sefo 0 20 февраля, 2009 Опубликовано 20 февраля, 2009 (изменено) · Жалоба Я не спроста предложил Вам пройти путь создания БПФ своими руками от самого начала. Почитав вашу переписку я пришел к выводу, что проблема масштабирования коэффициентов совсем не единственная. Фактически я предложил показать Вам как работать с Квартусом, как писать на VHDL и как проектировать нетривиальные вещи. Пришлите ту блок-схему которая у Вас есть - уверен, она может быть значительно упрощена. И в результате этого упрощения упростится и реализация. Я бы даже сказал, что это подозрительно, что она у Вас слишком громоздкая. P.S. Поймите, если Вы реализуете БПФ кое-как, потратив немеряно времени на отладку и накладывая одну заплату на другую - Вы ничему не научитесь. Я сталкивался с глюками Квартуса, видел как он делает некоторые вещи нерационально, но... я не могу сказать про него, что я "иногда не подозреваю что он выкинет в RTL на тот или иной участок кода". На правильно написанный код действия Квартуса всегда предсказуемы. Изменено 20 февраля, 2009 пользователем Sefo Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZED 0 20 февраля, 2009 Опубликовано 20 февраля, 2009 · Жалоба Вот пожалуйста, мои инсинуации: http://ifolder.ru/10661141 ___________ |D Q | |___CLK____| Это задержка на несколько тактов (на 3, если бабочка выполняется за один такт, т.к. из памяти данные поступают через 2 такта после подачи адреса) Mux - соответственно мультиплексоры Остальные коммутаторы, которые в соответствии с управляющим сигналом направляют данные по той или иной шине. Подразумевается, что все адреса и управляющие сигналы генерит драйвер. Ну это вкратце. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sefo 0 21 февраля, 2009 Опубликовано 21 февраля, 2009 (изменено) · Жалоба Первые комментарии такие. Это не блок схема, а схема электрическая принципиальная. Но поскольку она не полностью дорисована, то она с практической точки зрения безполезна - из нее с трудом видна структура устройства и она недостаточно детальна, чтобы по ней кодировать (к тому же если ее один в один перенести в VHDL, то получится не самое лечшее использование возможностей языка). Непонятно назначение блока на входе памяти данных с одним входом D, двумя выходами Q и сигналом Sel (Sel_demux). Какую функцию они выполняют? Ведь если D, по вашей задумке должно подаваться только на один из Q, то что тогда что будет на другом??? :) Еще непонятно назначение мультиплексоров на выходе из памяти. Получается, что данные, которые всегда являются вещественной частью (согласно схеме), могут (и будут) попадать на вход бабочки, куда должна подаваться мнимая часть и наоборот. Похоже баг. Изменено 21 февраля, 2009 пользователем Sefo Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZED 0 21 февраля, 2009 Опубликовано 21 февраля, 2009 · Жалоба Непонятно назначение блока на входе памяти данных с одним входом D, двумя выходами Q и сигналом Sel (Sel_demux). Какую функцию они выполняют? Ведь если D, по вашей задумке должно подаваться только на один из Q, то что тогда что будет на другом??? smile.gif Это переключатель шины, он выдает сигнал со входа D на выход Q_1 или Q_2, в зависимости от сигнала sel_demux У нас базовая операция (БО) бабочка должна сначала брать данные из памяти 1, а потом из памяти 2, поэтому нужны мультиплексоры в том числе и на выходе из памяти. Получается, что данные, которые всегда являются вещественной частью (согласно схеме), могут (и будут) попадать на вход бабочки, куда должна подаваться мнимая часть и наоборот. Похоже баг. Да тут я просто перепутал, там в бабочке по-другому расположены сигналы? должно быть так: http://ifolder.ru/10668100 Это не блок схема, а схема электрическая принципиальная. Но поскольку она не полностью дорисована, то она с практической точки зрения безполезна - из нее с трудом видна структура устройства и она недостаточно детальна, чтобы по ней кодировать (к тому же если ее один в один перенести в VHDL, то получится не самое лечшее использование возможностей языка). Тогда просто не совсем уверен, что должно называться блок-схемой Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sefo 0 21 февраля, 2009 Опубликовано 21 февраля, 2009 · Жалоба Но что подается на Q2 когда D подается на Q1? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZED 0 21 февраля, 2009 Опубликовано 21 февраля, 2009 · Жалоба На Q2 подается Z, когда D подается на Q1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sefo 0 21 февраля, 2009 Опубликовано 21 февраля, 2009 · Жалоба :) Это ножки ПЛИС можно физически перевести в третье состояние, а внутри ПЛИС увы, такого сделать нельзя. Но самое главное, бессмысленно. Таким образом, если Вы не позаботетесь о том, чтобы память, в которую резутьтаты бабочки в данный момент писать не надо, была заблокирована для записи соответствующим сигналом, ваша схема работать не будет. Выходы бабочки нужно подсоединить одновременно к обеим блокам памяти (и не мудрить с "демультиплексорами" :) ) и разрешать запись только в ту память, которая в данный момент является приемником. Кроме блок схемы я просил Вас еще нарисовать схему алгоритма БПФ, причем, раз уж мы решили делать с помощью 4-х и 2-х Т.Б., то имеется ввиду именно эта схема (конечно-же не надо расписывать "честно" все 2048 точек :)). Вы ее уже нарисовали? Блок-схема должна отражать основные блоки и потоки данных и управления. На блок схеме нет смысла расписывать, что, например, память состоит из двух блоков - как ее реализовать мы решим позже. Сначала нужно понять какими свойствами должно обладать память, что ей нужно на вход, какое управление и что у нее быдет на выходе. Между прочим, нет особой необходимости вещественную и мнимую части хранить строго в разных блоках памяти. Можно и в одном блоке - решить, что n старших разрядов это Re, а n младших разрядов Im. Когда мы нарисуем хорошую блок-схему мы поймем какие блоки нам нужны и как они будут взаимодействовать. После этого можно будет прорабатывать внутренности каждого блока по-отдельности. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZED 0 21 февраля, 2009 Опубликовано 21 февраля, 2009 (изменено) · Жалоба Это ножки ПЛИС можно физически перевести в третье состояние, а внутри ПЛИС увы, такого сделать нельзя. Но самое главное, бессмысленно. Таким образом, если Вы не позаботетесь о том, чтобы память, в которую резутьтаты бабочки в данный момент писать не надо, была заблокирована для записи соответствующим сигналом, ваша схема работать не будет. Выходы бабочки нужно подсоединить одновременно к обеим блокам памяти (и не мудрить с "демультиплексорами" smile.gif ) и разрешать запись только в ту память, которая в данный момент является приемником. Согласен, можно шину подключить к 1-ой и 2-ой ОЗУ, нам ведь все равно, сигнал WE в принципе все разреши (когда можно записывать, а когда нет) Кроме блок схемы я просил Вас еще нарисовать схему алгоритма БПФ, причем, раз уж мы решили делать с помощью 4-х и 2-х Т.Б., то имеется ввиду именно эта схема (конечно-же не надо расписывать "честно" все 2048 точек smile.gif). Вы ее уже нарисовали? Не не нарисовал, т.к. не особо понимаю как делать с помощью 2-х бабочек (2-х ТБ и 4-х ТБ) какие там нужны поворачивающие множители. Может вы что подскажите? Блок-схема должна отражать основные блоки и потоки данных и управления. На блок схеме нет смысла расписывать, что, например, память состоит из двух блоков - как ее реализовать мы решим позже. Сначала нужно понять какими свойствами должно обладать память, что ей нужно на вход, какое управление и что у нее быдет на выходе. Между прочим, нет особой необходимости вещественную и мнимую части хранить строго в разных блоках памяти. Можно и в одном блоке - решить, что n старших разрядов это Re, а n младших разрядов Im. Память должна быть двухпортовая, должна иметь сигнал разрешения записи WE, соответственно она должна тактироваться (CLK). Изменено 21 февраля, 2009 пользователем ZED Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sefo 0 22 февраля, 2009 Опубликовано 22 февраля, 2009 · Жалоба Поскольку мы выбрали схему пин-понг, то двухпортовая память нам здесь вообще не нужна. У нас на каждом этапе каждый модуль памяти используется либо на запись, либо на чтение. Так что нужна самая обычная память. Схему алгоритма я нарисую, но, видимо, к вечеру понедельника или во вторник. Вы же, попробуйте, всетаки, нарисовать блок-схему и продумайте интерфейс БПФ с внешним миром. Как-то же надо данные туда загрузить, а результаты выгрузить :). Или для Вас БПФ это совсем учебный пример, который и в ПЛИС никода в реальности прошиваться не будет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZED 0 22 февраля, 2009 Опубликовано 22 февраля, 2009 · Жалоба Не, это не учебный, ну я думаю там отсчеты будут поступать через АЦП в буферную внешнюю ОЗУ, а оттуда загружаться внутрь ПЛИС в ОЗУ-1, но я не селен в ПЛИСах, поэтому не могу продумать сей интерфейс, может подскажите где прочитать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sefo 0 22 февраля, 2009 Опубликовано 22 февраля, 2009 · Жалоба Все внешние интерфейсы всегда определяются тем, к чему вы подсоединяете свое. В данном случае, есть 2 варианта. 1) Отсчеты АЦП нужны только для БПФ 2) Только некоторая часть отсчетов АЦП "идет" в БПФ. В 1) подключите АЦП напрямую к ПЛИС и к памяти БПФ. Вам останется только перед БПФ поставить небольшой блок управления, который будет определять когда можно загружать данные АЦП в БПФ (т.е. когда оно их "ждет") и формировать адрес для памяти БПФ и пару управляющих сигналов. Во 2-м случае, нужно либо "честно" в нужные моменты времени перекачивать данные из буферного внешнего ОЗУ в память БПФ, либо попытаться свести все к варианту 1), т.е подсоединить выход АЦП и к ПЛИС и к внешнему ОЗУ параллельно и по каки-нибудь сигналам внешней синхронизации "выхватывать" нужные порции данных АЦП из потока. Раз задача реальная, то расскажите мне по-подробнее, какую роль в ней играет ПЛИС и БПФ и тогда я смогу подсказать как лучше организовать интерфейсы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZED 0 23 февраля, 2009 Опубликовано 23 февраля, 2009 · Жалоба Не, у меня первый вариант, я так понимаю, что блок должен генерить сигнал ClockEnable для ОЗУ-1... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sefo 0 24 февраля, 2009 Опубликовано 24 февраля, 2009 · Жалоба Только не ClockEnable, а Write_Enable. Он так же должен следить за состоянием БПФ и когда тот освободится стартовать очередную закачку данных в БПФ. Вот обещанная схема алгоритма БПФ http://ifolder.ru/10719475. Каждый этап я нарисовал на отдельном листе (за исключением 5-го и 6-го - они на одном листе). На схеме номера точек, это адрес памяти, при этом на 1-ом этапе, слева, адрес памяти соответствует также порядковому номеру входного отсчета. Я пока не нарисовал как переставлены выходные гармоники - в ближайшее время дорисую. В качестве упражнения для Вас на 4, 5 и 6 этапах я оставил незаполненными поворачивающие коэффициенты. Вам нужно, посмотрев как W образуются на 1, 2 и 3 этапах, распространить эту же логику на оставшиеся. На 6-м этапе будьте внимательны - там есть небольшой подвох (т.е. все очень логично, но можно по "инерции" ошибиться). Итак: с Вас блок схема БПФ и недостающие коэффициенты на схеме алгоритма БПФ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sefo 0 27 февраля, 2009 Опубликовано 27 февраля, 2009 · Жалоба Куда же Вы пропали? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться