bmangust 0 28 февраля, 2011 Опубликовано 28 февраля, 2011 · Жалоба Доброго времени суток! Изучаю ПЛИС в институте, научный руководитель поставил задачу сделать вольтметр на основе CPLD MAX7064 и АЦП ads7816. Эта ацп выводит данные с помощью последовательного интерфейса (12 бит). Сдвиговый регистр с памятью и блок индикации я написал. Но для того, чтобы преобразовать двоичный код с ацп в значение напряжения хотел использовать константы, операции возведения в степень и умножения. Оказалось, квартус не воспринимает переменные типа real, а для выполнения умножения или возведения в степень надо воспользоваться мегафункциями, которые недоступны для данного семейства ПЛИС. Как поступить в этом случае - менять алгоритм преобразования (не представляю на какой) или еще что-то? Вот алгоритм преобразования, для справки: parameter LSB = 1.22; begin : multiplection integer i; result = 0; for (i = 0; i < 12; i = i + 1) result = result + (data_in[i]*(2**i)*LSB); end и таблица преобразования из даташита ацп в приложении Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Shtirlits 0 28 февраля, 2011 Опубликовано 28 февраля, 2011 · Жалоба На вашем месте я бы застрелился посмотрел документацию на микросхему http://www.altera.com/literature/ds/m7000.pdf Сначала взглянул на первую страницу страницу, чтобы прочитать, что в ней 64 макроячейки, которые можно по пальцам рук сосчитать (в двоичном коде), потом на страницу 9 - там нарисована макроячейка и дальше по тексту. Потом бы ужаснулся, понял, что это вообще-то не процессор, успокоился и подумал. По сути, нужно сделать сдвиговый регистр на 12 бит, функцию преобразования и функцию отображения. Не факт, что оно вообще влезет теоретически - ведь не сказано, куда отображать. Про деление/умножение нужно забыть и придумать как обойтись степенями двойки. Вообще, не все так плохо если мозг не лопнет, после программирования последовательных процессоров вполне можно научиться делать параллельно живущие схемы. Зачем вы так с преподавателем? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bmangust 0 28 февраля, 2011 Опубликовано 28 февраля, 2011 · Жалоба 2Shtirlits Ну да, 64 ячейки это мало. У меня блок индикации на 4 7-сегментрых дисплея занимает 18 ячеек, сдвиговый регистр с памятью - 30, остается еще 16. Если хитро извернуться, может и хватит, впритык. В принципе, есть еще MAXII micro kit, в крайнем случае можно его заюзать. Но уже самому интересно, реально или нет сделать это на MAX7k. Преподователь раньше занимался (и сейчас занимается) микроконтроллерами, с ПЛИС не работал. Поэтому у него свои представления о возможностях микросхем. Как - так? :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Shtirlits 0 28 февраля, 2011 Опубликовано 28 февраля, 2011 · Жалоба Под вечер туплю и никак не соображу, как сделать преобразование в десятичный код из этих ресурсов. Придется вам думать самостоятельно или аргументированно доказать, почему невозможно. Подсказка - все происходит очень медленно, еще в природе есть 7-ричный код. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bmangust 0 28 февраля, 2011 Опубликовано 28 февраля, 2011 · Жалоба 2Shtirlits причем тут семиричный код? о_О Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Shtirlits 0 28 февраля, 2011 Опубликовано 28 февраля, 2011 · Жалоба Вы знаете, как перевести из двоичного 12-битного кода в десятичный 4-х значный? Я что-то не соображу, как на таком количестве ресурсов реализовать деление на 1000, 100, 10. Даже последовательное вычитание вместо деления реализованное исключительно через декремент не поместится, как я думаю. А если в задании не сказано, как именно дложно отображаться напряжение, то можно не только в семиричном формате отображать, а тупо вывести содержимое сдвигового регистра на сегменты и отобразить это в описании. PS: а если отображать динамически (а как сделано декодирование 4 бит в 7 сегментов?) и ужать все, что можно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bmangust 0 28 февраля, 2011 Опубликовано 28 февраля, 2011 · Жалоба Если выводить содержимое сдвигового регистра, то тогда надо 12 индикаторов, не? Руководитель хотел добиться отображения напряжения в вольтах с точностью до 3й цифры после запятой (диапазон от 0 до 5В). В перспективе еще и динамическое изменение диапазиона %) Индикация динамическая, иначе пришлось бы угробить все выводы на подключение только 4х индикаторов (у меня чип в 44-PLCC корпусе). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Shtirlits 0 28 февраля, 2011 Опубликовано 28 февраля, 2011 · Жалоба - 4-битный счетчик для текущего разряда и декодер для индикатора - 10-битный счетчик, он умеет уменьшаться на 1 и загружаться десятичными значениями 1000, 100, 10, 1 (по кругу сдвигаются) - 12-битный сдвиговый регистр/декремент - автомат управления всей этой хренью Сначала данные задвигаются в 12-битный регистр, потом по единичке вычитаются пока не переполнится 10-битный счетчик или регистр. Тогда увеличивается на 1 счетчик данного разряда или меняется разряд. PS: у вас есть 4*7=28 сегментов, на них можно отобразить сразу 28 бит (полезно при отладке) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex11 3 28 февраля, 2011 Опубликовано 28 февраля, 2011 · Жалоба Гораздо проще два счетчика - двоичный декремент и двоично/десятичный инкремент, считают вместе пока двоичный не станет равным нулю. Счетчики можно объединить с сдвиговым регистром и блоком динамической индикации, соответственно. Тогда есть шанс влезть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Shtirlits 0 28 февраля, 2011 Опубликовано 28 февраля, 2011 · Жалоба почему "гораздо проще" ? откуда возьмутся 1000, 100, 10, 1 ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 1 марта, 2011 Опубликовано 1 марта, 2011 · Жалоба почему "гораздо проще" ? откуда возьмутся 1000, 100, 10, 1 ? А зачем?На двоично-десятичном сразу получится код для отображения.Правда в 16 ячеек вряд ли это влезет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Shtirlits 0 1 марта, 2011 Опубликовано 1 марта, 2011 · Жалоба Как из 12-ти битового двоичного получится двоично-десятичный? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 1 марта, 2011 Опубликовано 1 марта, 2011 · Жалоба Как из 12-ти битового двоичного получится двоично-десятичный? Никак.Прочитайте внимательно пост от Alex11,нужно два счётчика. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Shtirlits 0 1 марта, 2011 Опубликовано 1 марта, 2011 · Жалоба понял. PS: потом результат нужно проворачивать через декодер индикатора. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 1 марта, 2011 Опубликовано 1 марта, 2011 · Жалоба понял. PS: потом результат нужно проворачивать через декодер индикатора. Да,только вряд ли это поможет топик-стартеру. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться