Добро пожаловать, Гость
Логин: Пароль: Запомнить меня

ТЕМА: Запоминающий осциллограф

Запоминающий осциллограф 9 года 8 мес. назад #3366

Если кто попробует - просьба сообщить, что получилось, работает/не работает. У CycloneV и CycloneIII/IV разные pll, поэтому вносил изменения в исходники.


Попробовал проект на живом генераторе.
У меня на Cyclone IV E проект в общем работает.
Теперь по порядку:
1. На мой взгляд в схему аналоговой части надо ввести следующие изменения:
вместо делителей 2 по 10 кОм поставить подстроечники на 22 кОм для коррекции нулевой линии по вертикали (при фиксированных резисторах у меня нулевая линия была немного выше центра симметрии), выводы подстроечников идущие на +3.3V подключить через дроссели 100 мкГн или более.
Разделительную емкость я уменьшил до 22 пФ, если у Вас источник сигнала с 50 омным выходом резистор 75 Ом заменить на 50 Ом (я работал на 50 Ом).
2. Посмотрел полосу концепта от 1 до 50 МГц, выше не имело смысла (слишком много периодов сигнала), хотя на синусоиду очень похоже.
К сожалению оценить качество формы сигнала на частотах выше 30 МГц не удалось по этой же причине.
3. Максимальная амплитуда входного сигнала составила 2.5В, при большей амплитуде - ограничение.
На экране различимо изменение амплитуды входного сигнала на 10 мВ.
4. Теперь о непонятном...
Во всей полосе наблюдал "пораженные точки" вблизи (+/-5 кГц) и на частотах 5,10,15...МГц на фоне осциллограммы сигнала наблюдались артефакты в виде "мусора"по всему окну, выделенному для отображения осциллограммы (я так понимаю - это срыв синхронизации).
Такой же "мусор" наблюдается и на частотах ниже 3,5 МГц, выше по частоте он пропадает и остается только на "пораженных точках".
Может это связано с особенностью PLL Cyclone IVE, или в схеме есть какойто "звон", возможно четвертый циклон не тянет проект.
5. На рисунке представлена осциллограмма на опорном конденсаторе. Непонятен второй период длительностью 5 мс (может ошибка?).



Если удастся разобраться с этими явлениеми, концепт можно смело использовать.
Вложения:
Спасибо сказали: Leka

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Alvich.

Запоминающий осциллограф 9 года 8 мес. назад #3367

  • Leka
  • Leka аватар
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54

Alvich пишет: Попробовал проект на живом генераторе.

Большое спасибо за эксперименты!

Во всей полосе наблюдал "пораженные точки" вблизи (+/-5 кГц) и на частотах 5,10,15...МГц на фоне осциллограммы сигнала наблюдались артефакты в виде "мусора"по всему окну, выделенному для отображения осциллограммы (я так понимаю - это срыв синхронизации).

Причина "пораженных точек" - именно "срыв синхронизации". Отдельное спасибо за это наблюдение, буду разбираться, где ошибся в алгоритме (думал, что удалось избежать подобных артефактов).

На рисунке представлена осциллограмма на опорном конденсаторе. Непонятен второй период длительностью 5 мс

Напряжение на опорном конденсаторе формируется по 9 младшим битам адреса строки.
Старший бит адреса строки игнорируется, этим обусловлено наличие второго (нерабочего) периода длительностью 5мс. Кстати, первый период д/б не 6мс, а 9мс. Но почему амплитуда пилы 2,5В вместо 3,1В, мне непонятно, конденсатор должен заряжаться до 93% от питания банка. Буду разбираться.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Leka.

Запоминающий осциллограф 9 года 8 мес. назад #3368

  • Leka
  • Leka аватар
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54
Ошибок в алгоритме пока не вижу, в этом случае "пораженные точки" м/б обусловлены тем, что Квартус не обучен выравнивать пути от входного пина до триггеров в разных LAB. Модуль захвата rx4.v оптимизирован для CycloneV, для CycloneIII/IV он неоптимален. Из-за этого порядок отсчетов м/б нарушен, что приводит к появлению ложных "иголок" на крутых фронтах. Тк модуль синхронизации "обучен" игнорировать подобные "иголки", то на кратных частотах происходит "срыв" синхронизации из-за того, что иголки оказываются на всех фронтах во время "захвата" сигнала (по 3мкс в каждой строке). Если не удастся оптимизировать модуль захвата, можно использовать стандартный входной DDR на триггерах в IO, для DE0-nano(С6) это даст 1Гвыб/сек, для марсохода2(С8 ) - 800Мвыб/сек. Но хотелось-бы побольше Гвыб/сек...

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Leka.

Запоминающий осциллограф 9 года 8 мес. назад #3369

Leka пишет:

Но почему амплитуда пилы 2,5В вместо 3,1В, мне непонятно, конденсатор должен заряжаться до 93% от питания


В Вашем файле top.pin для четвертого циклона указаны напряжения выводов 2.5В, Циклон их честно отработал :)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Запоминающий осциллограф 9 года 8 мес. назад #3370

  • Leka
  • Leka аватар
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54

Alvich пишет: В Вашем файле top.pin для четвертого циклона указаны напряжения выводов 2.5В, Циклон их честно отработал :)

Сомнительно, вроде как нет аппаратных средств для этого. Какое напряжение подано на VCCIO, такое и будет на выходах, независимо от того, что прописано в top.pin.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Запоминающий осциллограф 9 года 8 мес. назад #3373

Leka пишет:

Кстати, первый период д/б не 6мс, а 9мс. Но почему амплитуда пилы 2,5В вместо 3,1В, мне непонятно, конденсатор должен заряжаться до 93% от питания банка


вопрос о напряжении на опорном конденсаторе можно снять, там действительно максимальный уровень "пилы" около 3,1 В, длительность 9 мс. (предыдущие мои измерения на опорном конденсаторе некорректны).
Спасибо сказали: Leka

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Запоминающий осциллограф 9 года 8 мес. назад #3384

  • Chaosorg
  • Chaosorg аватар Автор темы
  • Не в сети
  • Завсегдатай
  • Завсегдатай
  • Сообщений: 312
  • Спасибо получено: 18
Пытаюсь в своем осциллографе доделать измеритель частоты и длительности импульсов на втором (цифровом, а не через АЦП) входе. Такое впечатление, что столкнулся с явлением похожим на дребезг, только без кнопок - если к изучаемому сигналу подключено несколько входов (и цифровой и АЦП или, например, вход монитора) и, видимо, их емкость значительна, то измеренная частота вырастает. Т.е. я сделал асинхронный всей остальной схеме счетчик, чтобы считать фронты сигнала на частотах больших, чем скорость работы всего остального осциллографа, но он срабатывает на что-то еще. Наверное на искажение фронтов. Осциллографом с частотой семплирования 20 МГц этого не увидеть.

Если бороться с этим защелкой на входе, то сильно падают возможности схемы. Пытаюсь выйти из положения всякими счетчиками с асинхронными сбросами и установками и у меня возникло ощущение, подкрепленное просмотром схем в RTL viewer-е, что у меня нет возможности выразить средствами языка Verilog то, что я хочу. В always я указываю, например, posedge какого-то сигнала для асинхронного сброса, но соответствующий ему if внутри always блока срабатывает потом и на положительную площадку сигнала тоже, а не только на фронт. "Честен" ли в таких ситуациях VHDL-овский 'event и каков его полный аналог в Verilog? Мне надо чтобы счетчик сбросился положительным фронтом асинхронного сигнала сброса, а потом продолжил считать несмотря на положительную площадку этого самого сигнала сброса. Выделить фронт самому через логику, сравнивая с задержанным значением сигнала я рассматриваю как крайнюю меру, так как неясно чем синхронизировать саму эту задержку. Можно, конечно, тем, что произойдет раньше всего, но это уж очень как-то запутанно. Неужели язык Verilog не позволяет отличить фронт от площадки в полной мере?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Запоминающий осциллограф 9 года 8 мес. назад #3385

  • Leka
  • Leka аватар
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54
Фронт можно попробовать выделить через триггер:
module pulse(
	output reg q,
	input d
);
	always@(posedge d or posedge q)
		if(q) q<=0;
		else q<=1;	
endmodule
Спасибо сказали: Chaosorg

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Запоминающий осциллограф 9 года 8 мес. назад #3386

  • Chaosorg
  • Chaosorg аватар Автор темы
  • Не в сети
  • Завсегдатай
  • Завсегдатай
  • Сообщений: 312
  • Спасибо получено: 18

Leka пишет: Фронт можно попробовать выделить через триггер:

т.е. значит я правильно понял, что always @(posedge что-то_но_не_clk ... не имеет такого смысла: "схема реагирует на положительный фронт чего-то_но_не_clk", а имеет смысл: "схема реагирует начиная с положительного фронта и далее"? Причем этот нюанс верен именно для сброса и установки, а для clk верно именно мое первое понимание, при котором если внутри блока always @(posedge clk) есть if(clk) ... , то он физически воплотиться в схему срабатывающую только по фронту?

Видимо поэтому внутри таких блоков нет явного if(clk), а он оформляется как последний вариант в ветвлении через else?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Chaosorg.

Запоминающий осциллограф 9 года 8 мес. назад #3387

  • Leka
  • Leka аватар
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54
Нет, с точки зрения синтеза, это просто заранее оговоренный способ синтезируемого описания стандартного триггера 1) без асинхронного сброса, 2) с асинхронным сбросом.
"always @(posedge d)...;" просто означает, что сигнал "d" будет заведен на клоковый вход триггера.
"always @(posedge c or posedge d) if(c) ...; else ...;" просто означает, что сигнал "d" будет заведен на клоковый вход триггера, а сигнал "c" - на вход асинхронной установки/сброса.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Время создания страницы: 0.168 секунд
Работает на Kunena форум