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