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

Вопрос по Quartus II: замена real для CPLD семейства MAX7000

Доброго времени суток!

 

Изучаю ПЛИС в институте, научный руководитель поставил задачу сделать вольтметр на основе 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

 

и таблица преобразования из даташита ацп в приложении

post-58719-1298920172_thumb.png

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


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

На вашем месте я бы застрелился посмотрел документацию на микросхему http://www.altera.com/literature/ds/m7000.pdf

Сначала взглянул на первую страницу страницу, чтобы прочитать, что в ней 64 макроячейки, которые можно по пальцам рук сосчитать (в двоичном коде), потом на страницу 9 - там нарисована макроячейка и дальше по тексту.

Потом бы ужаснулся, понял, что это вообще-то не процессор, успокоился и подумал.

По сути, нужно сделать сдвиговый регистр на 12 бит, функцию преобразования и функцию отображения.

Не факт, что оно вообще влезет теоретически - ведь не сказано, куда отображать.

Про деление/умножение нужно забыть и придумать как обойтись степенями двойки.

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

Зачем вы так с преподавателем?

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


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

2Shtirlits

Ну да, 64 ячейки это мало. У меня блок индикации на 4 7-сегментрых дисплея занимает 18 ячеек, сдвиговый регистр с памятью - 30, остается еще 16. Если хитро извернуться, может и хватит, впритык.

В принципе, есть еще MAXII micro kit, в крайнем случае можно его заюзать. Но уже самому интересно, реально или нет сделать это на MAX7k.

Преподователь раньше занимался (и сейчас занимается) микроконтроллерами, с ПЛИС не работал. Поэтому у него свои представления о возможностях микросхем.

Как - так? :)

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


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

Под вечер туплю и никак не соображу, как сделать преобразование в десятичный код из этих ресурсов.

Придется вам думать самостоятельно или аргументированно доказать, почему невозможно.

Подсказка - все происходит очень медленно, еще в природе есть 7-ричный код.

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


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

Вы знаете, как перевести из двоичного 12-битного кода в десятичный 4-х значный?

Я что-то не соображу, как на таком количестве ресурсов реализовать деление на 1000, 100, 10.

Даже последовательное вычитание вместо деления реализованное исключительно через декремент не поместится, как я думаю.

 

А если в задании не сказано, как именно дложно отображаться напряжение, то можно не только в семиричном формате отображать, а тупо вывести содержимое сдвигового регистра на сегменты и отобразить это в описании.

 

PS: а если отображать динамически (а как сделано декодирование 4 бит в 7 сегментов?) и ужать все, что можно?

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


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

Если выводить содержимое сдвигового регистра, то тогда надо 12 индикаторов, не?

Руководитель хотел добиться отображения напряжения в вольтах с точностью до 3й цифры после запятой (диапазон от 0 до 5В). В перспективе еще и динамическое изменение диапазиона %)

Индикация динамическая, иначе пришлось бы угробить все выводы на подключение только 4х индикаторов (у меня чип в 44-PLCC корпусе).

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


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

- 4-битный счетчик для текущего разряда и декодер для индикатора

- 10-битный счетчик, он умеет уменьшаться на 1 и загружаться десятичными значениями 1000, 100, 10, 1 (по кругу сдвигаются)

- 12-битный сдвиговый регистр/декремент

- автомат управления всей этой хренью

 

Сначала данные задвигаются в 12-битный регистр, потом по единичке вычитаются пока не переполнится 10-битный счетчик или регистр. Тогда увеличивается на 1 счетчик данного разряда или меняется разряд.

 

PS: у вас есть 4*7=28 сегментов, на них можно отобразить сразу 28 бит (полезно при отладке)

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


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

Гораздо проще два счетчика - двоичный декремент и двоично/десятичный инкремент, считают вместе пока двоичный не станет равным нулю. Счетчики можно объединить с сдвиговым регистром и блоком динамической индикации, соответственно. Тогда есть шанс влезть.

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


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

почему "гораздо проще" ?

откуда возьмутся 1000, 100, 10, 1 ?

 

А зачем?На двоично-десятичном сразу получится код для отображения.Правда в 16 ячеек вряд ли это влезет.

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


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

Как из 12-ти битового двоичного получится двоично-десятичный?

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


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

Как из 12-ти битового двоичного получится двоично-десятичный?

Никак.Прочитайте внимательно пост от Alex11,нужно два счётчика.

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


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

понял.

 

PS: потом результат нужно проворачивать через декодер индикатора.

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


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

понял.

 

PS: потом результат нужно проворачивать через декодер индикатора.

Да,только вряд ли это поможет топик-стартеру.

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


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

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

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

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

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

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

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

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

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

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