Пятница, 26.04.2024, 22:02
Вы вошли как Гость | Группа "Гости"Приветствую Вас Гость | RSS
Главная | Модуль цифрового осцилографа - Страница 5 - Форум | Мой профиль | Регистрация | Выход | Вход
Обитель RC-инженера
Форма входа
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Модератор форума: ВитГо  
Форум » Разработка электронных устройств » Разрабатываю ! » Модуль цифрового осцилографа (Пробуем свои силы в построении цифрового осциллографа)
Модуль цифрового осцилографа
ВитГоДата: Вторник, 18.09.2012, 23:30 | Сообщение # 61
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
Новая конфигурация для плис oscil1 писалось в Quartus 9.1 sp.2

добавлено:
- дешифрация команд интерфейса с управляющего контроллера (пока не все команды):
существующие регистры:
на запись
00 - младший байт адреса для чтения
01 - средний байт адреса для чтения
02 - старший байт адреса для чтения (биты 1:0), сюда будет добавлено управление входным делителем
03 - регистр преобразования - пока просто запускает преобразование, сюда будет добавлено задание вида старта для мультиканального варианта
на чтение
00 - младший байт (или канал 1 для двухканального варианта)
01 - старший байт (или канал 2 для двухканального варианта)
02 - пока не используется
03 - пока не используется

изменен:
- способ задания адреса для операций с SRAM - теперь этим занимается отдельный блок который в зависимости от того захватываем ли мы данные с АЦП или читаем память выставляет значение регистров ram_adr_write или ram_adr_read соответственно
поскольку адрес задаем в отдельном блоке потребовалось перенести инкрементирование адреса для записи с фазы 3 записи в фазу 2

после компиляции (ctrl + L) можно запускать симуляцию и смотреть что генерирует ПЛИС на выходах


Виталий (аka ВитГо)
 
ВитГоДата: Вторник, 18.09.2012, 23:35 | Сообщение # 62
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
Quote (Sergi)
В арбитре нужны сигналы: rd,wr,rs(команда/данные),bisy(занято/свободно)


в смысле в арбитре ? это где ?

Quote (Sergi)
шим для операционника смещения по вертикали в аналоговой части


так там ШИМ или DAC ?
шину для DAC из ПЛИС можно просто сделать (повесим ее на новый 4ый регистр и все !)

Quote (Sergi)
а зависать может ожидая синхронизации, а ее нету


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

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


Виталий (аka ВитГо)
 
SergiДата: Вторник, 18.09.2012, 23:50 | Сообщение # 63
Подполковник
Группа: Проверенные
Сообщений: 540
Репутация: 55
Статус: Offline
на прошлой странице осталось
В арбитре нужны сигналы: rd,wr,rs(команда/данные),bisy(занято/свободно) вот bisy надо на прерывание INT1PORTD.3 повесить-типа плис просится к мк
шим для операционника смещения по вертикали в аналоговой части
а зависать может ожидая синхронизации, а ее нету

вот неграмотный не bisy а busy
а еще линия cs - типа мк просится к плис. Итого 5 линий. RS =1 на шине адрес регистра назначения, RS=0 - данные для передачи

Добавлено (18.09.2012, 23:50)
---------------------------------------------
Ну графики красивые,14мс wr.это сколько процентов кристалла занято?

 
ВитГоДата: Вторник, 18.09.2012, 23:57 | Сообщение # 64
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
Quote (Sergi)
на прошлой странице осталось

так я уже отвечал вроде #62

Quote (Sergi)
В арбитре нужны сигналы: rd,wr,rs(команда/данные),


нам rd не нужен, достаточно wr (=1 чтение; =0 запись)
rs - не нужен - вместо него будет 3х битная шина EPM_ADR - для задания одного из 8ми регистров (сейчас 4 регистра) - так проще на плис.. в будущем (опытнее стану в плис) попробую написать с RS

Quote (Sergi)
вот bisy надо на прерывание INT1PORTD.3 повесить-типа плис просится к мк

ты это точно хочешь ?
в принципе подумаю.. тогда это не busy а чтото типа EPM_REQ или EPM_INT
а busy можно засунуть в регистр статуса (выделить для него номер какой нить и в нем сообщать что сейчас происходит)

Quote (Sergi)
Ну графики красивые,14мс wr.это сколько процентов кристалла занято?


да, я уже писал - память работает на 37.5 мгц.. в принципе можно до 50 легко погнать (будет we=10 нс).. - но тогда конфигурацию плис нужно думать как написать - у меня еще много всяких задержек которыми я не совсем понимаю как управлять..

логических элементов 89 из 240 (37%)
выводов 57 из 80 (71%)

так что еще есть куда развернуться :-)
если умещаться не будем перепрыгнем на EPM570 - у нее 570 логических элементов !


Виталий (аka ВитГо)
 
SergiДата: Среда, 19.09.2012, 00:00 | Сообщение # 65
Подполковник
Группа: Проверенные
Сообщений: 540
Репутация: 55
Статус: Offline
В общем нужно составить карту регистров плис.
Например по адресу 00 - регистр статуса
01,02,03 адрес озу
04,05 данные из озу
06,07 уровни триггера синхры
08 условия синхры(спад,фронт и тд)
ну еще какие надо и все это читается по 5 линиям

busy - типа данные прочитаны-забирайте ну или ready его назвать

на сегодня все. пока!


Сообщение отредактировал Sergi - Среда, 19.09.2012, 00:12
 
ВитГоДата: Среда, 19.09.2012, 00:12 | Сообщение # 66
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
ОК, давай попробуем (в #61 был мой первый вариант (мне он тоже не очень нравился)

НОМЕР-------------- НА ЗАПИСЬ ---------------------------------------- НА ЧТЕНИЕ
0 -__________________________________________________ регистр статуса = принято !

1 ------------ младший байт адреса ОЗУ ____________________- младший байт из ОЗУ
2 ------------ средний байт адреса ОЗУ _____________________- старший байт из ОЗУ
3 ------------ старший байт адреса ОЗУ _____________________- пусто = принято

4, 5 не принято !
фактически регистры 1 и 2 на запись будут работать для установки младшего и среднего байта адреса, а на чтение из них будут читаться данные озу !

6 --------- уровень синхронизации канала 1 _________________- пусто
7 --------- уровень синхронизации канала 2 _________________- пусто

Осталось:
- 3 регистра на запись (0, 4, 5)
- 5 регистров на чтение (3, 4, 5, 6, 7)

что дальше ?


Виталий (аka ВитГо)
 
ВитГоДата: Среда, 19.09.2012, 00:48 | Сообщение # 67
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
в общем переписал я модуль взаимодействия с управляющим контроллером !!!
на работу с сигналом RS (как ты и предлагал)

обработка идет по сигналу CS=0
RS=0 - передача номера регистра
RS=1 - запись (WR=0)\чтение регистра(WR=1)

регистров получилось 16 (!), число линий уменьшилось до 11 (D7:D0, WR, RS, CS)

пока быстродействие плис удается удержать на уровне 170 мгц

выкладывать модуль в этом варианте пока не буду (там бардак)


Виталий (аka ВитГо)
 
SergiДата: Среда, 19.09.2012, 08:02 | Сообщение # 68
Подполковник
Группа: Проверенные
Сообщений: 540
Репутация: 55
Статус: Offline
Логика работы шины примерно такая:
плис чем-то занимается
мы хотим ей чего-то сказать(записать//прочитать)
выдаем сигнал CS=0
ждем пока ответит ready=0
при этом она отключается(останавливается) от обработки данных из озу, переводит ненужные выводы в Zсостояние и еще чего там надо будет
выставляем на шине адрес нужного регистра, RS=0, WR=0
в плисине это записывается в адресный регистр, дешифрируется и по WR=0 ноги нужного регистра подключаются к шине
дальше МК выставляет на шину данные, RS=1 и по WR=0 записывает их в регистр плис
или RS=1 и по RD=0 сохраняет в свой регистр данные с шины
если больше ничего не пишем CS=1
если плисина закончит запись памяти и хочет доложить о готовности
плисина выдает READY=0, перед этим переводит выводы в нужное состояние (см выше)
на МК приходит запрос прерывания INT1-значит останавливаемся от вывода на экран,что-то там еще перестаем делать
выставляем сигнал CS=0
выставляем на шине 0х00,RS=0 и по WR=0 записываем в регистр плис(адрес статус регистра),
RS=1 и по RD=0 сохраняем статус в МК, потом анализируем побитно что хотела плис и далее по плану

я бы все таки оставил регистры адреса озу отдельно
структура такая:
0бит 1го регистра - указатель на банк памяти (старший/младший байт данных)
1бит-7бит = бита адреса озу adr0-adr6,
2й и 3й регистры = продолжение адреса со смещением
так мы при линейности адресации будем получать данные из H/L шины озу по очереди
и еще можно предусмотреть авто инкремент этих регистров при последовательном обращении к чтению данных (перепаду RD)
при этом не нужно на шину МК все время выставлять адрес, просто читаем один регистр данных, а плисина сама данные туда последовательно подсовавает

про синхронизацию
синхра может быть не только внутренняя- по уроню сигнала, но и внешняя по отдельному выводу (в двухканальном еще и по 2му каналу)
в плисине такой выбор нужно как-то это разрулить

И еще, у нас получается запись - чтение последовательно. Но так на медленных развертках получается не красиво.
при развертке 20мС/дел и более нужно сразу данные каждого отсчета отправлять на МК для отрисовки
а то сидишь,смотришь как светодиодик моргает а на экране еще старые данные, а потом резко хлоп- любуйся что все уже прошло!

про ноги Мк
если применить дисплей 5230 ему можно отдать PORTB для данных а С0-С3 под управление
смещение по вертикали формировать в плис
так ноги меги все заняты, а можно на общую шину с плис, отдельно только CS_LCD. Управлять эти будет посложнеее


Сообщение отредактировал Sergi - Среда, 19.09.2012, 08:33
 
ВитГоДата: Среда, 19.09.2012, 08:48 | Сообщение # 69
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
ты все усложняешь :-)

ПЛИС работает на частоте 150 мгц... и она успеет за один такт стм32 работающей на частоте 72 мгц дважды обработать ее команду !! так что сигнал ready от плис просто не нужен - не она медленное звено в цепи :-)

алгоритм такой:

сначала выставляем на линию EPM_WR вид операции (=0 запись, =1 чтение)
Плис по своему такту (150 мгц) переведет линии порта в состояние чтение (для WR=0) или запись (для WR=1)
скорость плис такова - что микроконтроллер не успеет еще выполнить вторую команду как линии порта уже будут переключены
далее, если у нас операция запись в плис - то выставляем на шину EPM_DATA нужный нам байт
как выставили, дергаем строб EPM_CS - по его нулевому значению происходит запись (ну или чтение)
сейчас описываем запись: поэтому когда дернули строб EPM_CS плис со своими 150 мгц, берет байт с EPM_DATA и делает то что с ним нужно..

поскольку еще участвует сигнал EPM_RS - то действие на запись происходит либо в регистр (при EPM_RS=0) - тогда EPM_DATA дешифруется как номер регистра, либо (при EPM_RS=1) как значение регистра

при чтении EPM_RS - игнорируется, происходит чтение из установленного ранее регистра

по адресации сейчас еще подумаю.. если бы был один канал - то я делал просто 19ти битную адресацию.. но поскольку у нас 2 канала - то нужно чтото универсальное.. сейчас подумаю


Виталий (аka ВитГо)
 
ВитГоДата: Среда, 19.09.2012, 08:55 | Сообщение # 70
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
Quote (Sergi)
про синхронизацию
синхра может быть не только внутренняя- по уроню сигнала, но и внешняя по отдельному выводу (в двухканальном еще и по 2му каналу)
в плисине такой выбор нужно как-то это разрулить

старт по фронту - смогу сделать...


Виталий (аka ВитГо)
 
ВитГоДата: Среда, 19.09.2012, 08:57 | Сообщение # 71
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
Quote (Sergi)
И еще, у нас получается запись - чтение последовательно. Но так на медленных развертках получается не красиво.
при развертке 20мС/дел и более нужно сразу данные каждого отсчета отправлять на МК для отрисовки
а то сидишь,смотришь как светодиодик моргает а на экране еще старые данные, а потом резко хлоп- любуйся что все уже прошло!


да я об этом думал - может быть ограничивать еще максимальное количество захватов ?

либо нужно как то между записью делать еще чтение - но там ограничение самой SRAM - у нее адрес должен быть выставлен до WR на 2-3 нс- читал в интернетах что если адрес выставить одновременно то запись может произойти по старому адресу :-(

так что либо записываем либо читаем.
а вот над количеством (временем) записи - нужно действительно подумать


Виталий (аka ВитГо)
 
ВитГоДата: Среда, 19.09.2012, 09:00 | Сообщение # 72
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
Quote (Sergi)
про ноги Мк
если применить дисплей 5230 ему можно отдать PORTB для данных а С0-С3 под управление
смещение по вертикали формировать в плис
так ноги меги все заняты, а можно на общую шину с плис, отдельно только CS_LCD. Управлять эти будет посложнеее

ну в принципе можно объединить шину данных с плис...
и держать в неактивном состоянии линию EPM_WR=0 (при EPM_CS=1) - в этом случае плис переведет линии EPM_DATA в Z состояние и не будет мешать дисплею

ну и опять таки я уже сократил число линий для плис - теперь нужно не 13 линий, а 11 ! (при увеличении количества регистров)


Виталий (аka ВитГо)
 
SergiДата: Среда, 19.09.2012, 09:24 | Сообщение # 73
Подполковник
Группа: Проверенные
Сообщений: 540
Репутация: 55
Статус: Offline
Я думал сигнал READY нужен для того чтобы дождаться когда плисина запишет(закончит) страницу озу,
по нему на больших развертках индицировать готовность одного отсчета- в это время stm значительно быстрее опроса (работает на 120МГц)
при 20мС/дел 400 отсчетов = 50мкС/отсчет = 6000 тактов, можно успеть и опросить и записать и обсчитать и отобразить

если объединить дисплей и плис всеравно нужен RD. Там WR,RD,CS,RS


Сообщение отредактировал Sergi - Среда, 19.09.2012, 09:39
 
ВитГоДата: Среда, 19.09.2012, 15:18 | Сообщение # 74
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
я тут с предделителем воюю.. пока не очень получается - из-за него очень сильно падает частота..

пока компрмисс это применение только 7ми битного счетчика предделителя (уже при 8ми битном операция вычитания не может выполняться с частотой 150 мгц)


Виталий (аka ВитГо)
 
SergiДата: Среда, 19.09.2012, 20:22 | Сообщение # 75
Подполковник
Группа: Проверенные
Сообщений: 540
Репутация: 55
Статус: Offline
Это что то не так. Нужен синхронный счетчик. Если правильно собрать, задержка получится постоянная в пределах 2*tзад на все разряды.
И вобще тактирование идет после него, какая там задержка не важно. Привязыватся нужно к его выходу как к отправной точке.
 
Форум » Разработка электронных устройств » Разрабатываю ! » Модуль цифрового осцилографа (Пробуем свои силы в построении цифрового осциллографа)
Поиск:


Copyright MyCorp © 2024
Сделать бесплатный сайт с uCoz