|
|
  |
Народный осциллограф USB 3.0, Возможно ли создать общими услилиями? |
|
|
|
Apr 12 2015, 07:22
|
Профессионал
    
Группа: Участник
Сообщений: 1 075
Регистрация: 30-09-05
Пользователь №: 9 118

|
Схема 1. Концепт одного канала. В режиме логического пробника, на опорах постоянно поддерживается уровень "0" и "1" (например, 0.8 и 1.7В), получается 1.5-разрядный flash АЦП. В режиме аналогового пробника периодических сигналов, на одной опоре постоянно поддерживается требуемый уровень триггера (например, 1.5В), а на другой меняется с каждой "строкой", пробегая требуемый диапазон с нужным шагом (например, от 100мВ до 3100мВ с шагом 5мВ). Выход компаратора защелкивается в сдвиговом регистре (одной строки) с эквивалентной тактовой 2ГГц. Далее варианты, строки либо сразу выводятся (UART/VGA/...), либо пишутся во внутреннюю память ПЛИС для обработки ("цифровой фосфор" и тп). Опоры проще всего формировать RC цепочкой, недостаток - малое время хранения из-за больших утечек (2пина*30мкА/пин=60мкА по даташиту для CycloneV). Преимущество - простая пассивная обвязка позволяет сразу закладывать в дизайн скоп для отладки. Схема 2. Текущая для проверки концепта, навесной монтаж. Вход синхронизации отсутствует, тк тестовый сигнал генерируется внутри ПЛИС. Постоянный уровень сигнала задается потенциометром, мультиметром можно проконтролировать правильность отображения "нулевой" линии. Сейчас добавляю вход синхронизации, и меняю код - чтобы можно было смотреть сигналы с внешнего генератора. Исходники начну выкладывать, когда сделаю простой вывод на VGA. Но, у меня основная цель - практическая проверка своего "Си как HDL", а "скоп за 30 коп" - просто как одна из подходящих практических задачек для этого. Поэтому выкладывать буду только в том виде, каком использую для синтеза, те без ручного перевода в Верилог. Но тк это почти Си - алгоритм будет понятен. Модуль для захвата сигнала на 2Гвыб/сек с выдачей по 8бит на 250МГц написан на Верилоге, его сейчас выкладываю(как есть): Код module ser8 ( input clka, clkb, clkc, clkd, input din, output reg [7:0] q ); reg a, b, c, d, A, B, C, D, aa, ba, cb, dc, Ad, BA, CA, DC, aaa, baa, cba, dcb, Adc, BAc, CAc, DCA, DCAc;
always@(posedge clka) a <= din; always@(posedge clkb) b <= din; always@(posedge clkc) c <= din; always@(posedge clkd) d <= din; always@(negedge clka) A <= din; always@(negedge clkb) B <= din; always@(negedge clkc) C <= din; always@(negedge clkd) D <= din;
always@(posedge clka) aa <= a; always@(posedge clka) ba <= b; always@(posedge clkb) cb <= c; always@(posedge clkc) dc <= d; always@(posedge clkd) Ad <= A; always@(negedge clka) BA <= B; always@(negedge clka) CA <= C; always@(negedge clkc) DC <= D;
always@(posedge clka) aaa <= aa; always@(posedge clka) baa <= ba; always@(posedge clka) cba <= cb; always@(posedge clkb) dcb <= dc; always@(posedge clkc) Adc <= Ad; always@(posedge clkc) BAc <= BA; always@(posedge clkc) CAc <= CA; always@(negedge clka) DCA <= DC; always@(posedge clkc) DCAc <= DCA; always@(posedge clka) q <= { DCAc, aaa, baa, cba, dcb, Adc, BAc, CAc };
endmodule
Эскизы прикрепленных изображений
|
|
|
|
|
Apr 18 2015, 17:00
|
Профессионал
    
Группа: Участник
Сообщений: 1 075
Регистрация: 30-09-05
Пользователь №: 9 118

|
Код 0000000000000000 0000000000000000 0000000011000000 0000000011000000 0000000111000000 0000000101000000 0000001111000000 0000001001000000 0000011111000000 0000010001000000 0000111111000000 0000100001000000 0001111111000000 0001000001000000 1111111111111111 1110000000111111 1111111111111111 0000000000000000 Данные компаратора представляют собой "заливку" областей "выше" и "ниже" сигнала, см. левый рисунок. Нужно выделить линию. Реализованный алгоритм: обнуляются все "1", граничащие по ортогоналям только с "1" (диагональные соседи не учитываются), см правый рисунок. По такому алгоритму нужно хранить в буфере 3 видео-строки, что м/б накладно. Предложит кто другой алгоритм? По поводу полосы - судя по-всему, ограничена большими паразитными емкостями платы (Cyclone V GX Starter Kit), а не LVDS-приемниками, и померить не удастся. 62,5МГц меандр (получаю от независимого генератора 125МГц на плате) видится, как пила с острыми зубьями (вывожу 500*1000 точек на VGA@70Гц, выборки уменьшил до 1.2Гвыб/сек, чтобы проще было согласовать с 75МГц VGA). Если кто захочет поэкспериментировать со своей платой - выкладывайте qsf с пинами, попробую синтезировать (исходники выложу, но они не на Верилоге). Текущая схема:
Сообщение отредактировал Leka - Apr 18 2015, 17:06
Эскизы прикрепленных изображений
|
|
|
|
|
Apr 19 2015, 02:49
|

Профессионал
    
Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718

|
Цитата Реализованный алгоритм: обнуляются все "1", граничащие по ортогоналям только с "1" (диагональные соседи не учитываются), см правый рисунок. 1. берём колонку 2. сдвиг вниз(по рисунку) 3. побитовая инверсия 4. побитовое-И с исходной колонкой --------------------- Также на рис. колонка размером в 9 бит, хотя разрешение сигнала <=4 бит. Может сразу паковать: хранить номер бита, в котором единица? А если использовать структуру, которая считает количество единиц, то она может выполнить обе, описанные выше операции.
|
|
|
|
|
Apr 19 2015, 13:19
|
Профессионал
    
Группа: Участник
Сообщений: 1 075
Регистрация: 30-09-05
Пользователь №: 9 118

|
Такое пришло в голову: для рисования можно принять, что под "1" всегда "1" (хотя это не так для стробоскопа из-за шумов и сбоях синхронизации, когда за период уровень триггера пересекается несколько раз). В этом случае линию можно рисовать по 2 строкам, а не 3. Делать "классический" осциллограф не имеет никакого смысла, причины уже приводились в этой ветке, можно еще добавить. Имеет смысл делать простой "осциллограф" в рамках освоения новой технологии, например - ПЛИС. Имхо. Цитата(smalcom @ Apr 19 2015, 06:49)  Также на рис. колонка размером в 9 бит, хотя разрешение сигнала <=4 бит. Это только на рисунке, реально сигнал 9разрядный, и в колонке 512 отсчетов.
|
|
|
|
|
Apr 19 2015, 18:43
|
Профессионал
    
Группа: Участник
Сообщений: 1 075
Регистрация: 30-09-05
Пользователь №: 9 118

|
1). Чтобы АЦП использовать в режиме стробоскопа, нужна а) схема измерения временного сдвига отсчетов относительно момента синхронизации, б) схема добавления случайной фазы в клок. От точности этого измерения зависит максимальная эквивалентная частота выборок, а от скорости этого измерения - максимальная частота осциллограмм. Хороший клок, это сложно и дорого, а точное измерение временных интервалов, это медленно. 2). Чтобы по-максимуму использовать внешний компаратор, придется либо городить внешний клок на эквивалентную частоту выборок, и внешний десериализатор, либо добавлять все то-же самое, что и для АЦП (измерение времени + изменение фазы).
В качестве примера, предлагаю продумать снятие осциллограммы для коротких повторяющихся(те постоянной формы), но непериодических(с большим джиттером) импульсов. Например, длительность импульсов 5нс, период повторения - 5мкс с джиттером 500нс.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|