Модуль цифрового осцилографа
|
|
ВитГо | Дата: Вторник, 18.09.2012, 23:30 | Сообщение # 61 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: 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
Статус: Offline
| Quote (Sergi) В арбитре нужны сигналы: rd,wr,rs(команда/данные),bisy(занято/свободно)
в смысле в арбитре ? это где ?
Quote (Sergi) шим для операционника смещения по вертикали в аналоговой части
так там ШИМ или DAC ? шину для DAC из ПЛИС можно просто сделать (повесим ее на новый 4ый регистр и все !)
Quote (Sergi) а зависать может ожидая синхронизации, а ее нету
ну плис не зависает.. она будет в каждом такте ожидать нужного уровня. плюс ко всему у меня при обращении плис со стороны контроллера любой процесс захвата прерывается... так что здесь подвоха не будет..
для контроллера же проще написать регулируемую паузу в зависимости от частоты захвата
Виталий (аka ВитГо)
|
|
| |
Sergi | Дата: Вторник, 18.09.2012, 23:50 | Сообщение # 63 |
Подполковник
Группа: Проверенные
Сообщений: 540
Статус: 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
Статус: 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
Статус: 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
Статус: 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
Статус: 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
Статус: 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
Статус: 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
Статус: Offline
| Quote (Sergi) про синхронизацию синхра может быть не только внутренняя- по уроню сигнала, но и внешняя по отдельному выводу (в двухканальном еще и по 2му каналу) в плисине такой выбор нужно как-то это разрулить старт по фронту - смогу сделать...
Виталий (аka ВитГо)
|
|
| |
ВитГо | Дата: Среда, 19.09.2012, 08:57 | Сообщение # 71 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| Quote (Sergi) И еще, у нас получается запись - чтение последовательно. Но так на медленных развертках получается не красиво. при развертке 20мС/дел и более нужно сразу данные каждого отсчета отправлять на МК для отрисовки а то сидишь,смотришь как светодиодик моргает а на экране еще старые данные, а потом резко хлоп- любуйся что все уже прошло!
да я об этом думал - может быть ограничивать еще максимальное количество захватов ?
либо нужно как то между записью делать еще чтение - но там ограничение самой SRAM - у нее адрес должен быть выставлен до WR на 2-3 нс- читал в интернетах что если адрес выставить одновременно то запись может произойти по старому адресу :-(
так что либо записываем либо читаем. а вот над количеством (временем) записи - нужно действительно подумать
Виталий (аka ВитГо)
|
|
| |
ВитГо | Дата: Среда, 19.09.2012, 09:00 | Сообщение # 72 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: 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
Статус: 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
Статус: Offline
| я тут с предделителем воюю.. пока не очень получается - из-за него очень сильно падает частота..
пока компрмисс это применение только 7ми битного счетчика предделителя (уже при 8ми битном операция вычитания не может выполняться с частотой 150 мгц)
Виталий (аka ВитГо)
|
|
| |
Sergi | Дата: Среда, 19.09.2012, 20:22 | Сообщение # 75 |
Подполковник
Группа: Проверенные
Сообщений: 540
Статус: Offline
| Это что то не так. Нужен синхронный счетчик. Если правильно собрать, задержка получится постоянная в пределах 2*tзад на все разряды. И вобще тактирование идет после него, какая там задержка не важно. Привязыватся нужно к его выходу как к отправной точке.
|
|
| |