МАРСОХОД

Open Source Hardware Project

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

ТЕМА: Тайминги встроенной памяти Cyclone III Марсохода 2

Тайминги встроенной памяти Cyclone III Марсохода 2 3 года 7 мес. назад #3188

  • Chaosorg
  • Chaosorg аватар Автор темы
  • Не в сети
  • Завсегдатай
  • Завсегдатай
  • Сообщений: 311
  • Спасибо получено: 16
В связи с проектом цифрового осциллографа с имитацией фосфора на марсоходе 2 учусь использовать полную двухпортовую память.

Один канал только для записи точек оцифрованного сигнала. Тут все просто - wren постоянно активен, меняется только адрес. Тактируется вместе с АЦП. Все работает и пишется нормально.

Второй канал первоначально работал только на чтение, чтобы показывать осциллограмму на экране. wren был постоянно неактивен. Картинка выводилась хорошо.

Теперь надо прикрутить постепенное затухание точек. Я вычитаю яркость только что прочитанной из памяти очередной точки и пока она показывается на экране хочу успеть записать новое значение ее яркости обратно в память. Получаю черный экран или еще какие-то сбои. Почитал документацию от Altera. На диаграмах везде wren показывают какой-то долгий очень. Как бы для записи группы слов. А мне надо понять какова его минимально возможная длительность. Что читать или какой проект подсмотреть? Или может так просто подскажет кто-нибудь?

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

Тайминги встроенной памяти Cyclone III Марсохода 2 3 года 7 мес. назад #3189

  • Leka
  • Leka аватар
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 631
  • Спасибо получено: 51
Проект желательно делать полностью синхронным (с одним клоком), так существенно меньше проблем. Значение wren важно только в момент активного фронта клока, остальное - забота Квартуса.
Спасибо сказали: Chaosorg

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

Тайминги встроенной памяти Cyclone III Марсохода 2 3 года 7 мес. назад #3190

  • Chaosorg
  • Chaosorg аватар Автор темы
  • Не в сети
  • Завсегдатай
  • Завсегдатай
  • Сообщений: 311
  • Спасибо получено: 16
Заработало все как надо, но, к сожалению, все-таки не до конца понятно каким образом. У меня первоначально один клок и был. И были проблемы. Работоспособность удалось достичь тем, что изменение адреса записи сигнала осциллографа (т.е. то, что и так хорошо работало) я стал делать по ниспадающему клоку. Таким образом в момент прихода активного (положительного) фронта клока значение адреса стало стабильным. Точно так же уже было сделано раньше для второго канала, по которому читал, а теперь еще и пишет видеоконтроллер.

Как изменение момента адреса на одном канале "починило" процедуру записи другого канала - непонятно. Сигналы синхронизации или wren не трогал ведь. wren и так раньше менялся по ниспадающему клоку, чтобы иметь определенное значение к моменту нарастающего клока.

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

Такое впечатление, что контроллер памяти как-то реагирует на изменение адреса самого по себе.

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

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

Тайминги встроенной памяти Cyclone III Марсохода 2 3 года 7 мес. назад #3191

  • Leka
  • Leka аватар
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 631
  • Спасибо получено: 51
Квартус не гарантирует правильную работу блочной памяти при одинаковых адресах на разных каналах, это написано в handbook.

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

Тайминги встроенной памяти Cyclone III Марсохода 2 3 года 7 мес. назад #3192

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

Leka пишет: Квартус не гарантирует правильную работу блочной памяти при одинаковых адресах на разных каналах, это написано в handbook.


Да - это я читал. Но если осциллограф в отсутсвие сигнала и незапущенной развертке ждет триггера и чертит одну только точку внизу слева, а видеоадаптер сканирует все поле точек, то где же совпадение и конфликт адресов? Осциллограф занимает время памяти при этом, конечно, но по одному адресу вдали от остальной картинки. Для формируемой им картинки это настолько не критично, что я даже не отслеживаю эту ситуацию, как рекомендуется. Написано, что запишутся случайные данные - пусть.

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

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

Тайминги встроенной памяти Cyclone III Марсохода 2 3 года 7 мес. назад #3193

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

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

Пример (a - адрес, q - прочитанное значение, d - новое значение):
always@(posedge clk) if(en) begin
  a <= a+1;
  d <= q-1;  
end
Все по одному фронту одного клока, управление фазами/паузами/... - по сигналам разрешения клока.
Спасибо сказали: Chaosorg

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

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

Тайминги встроенной памяти Cyclone III Марсохода 2 3 года 7 мес. назад #3194

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

Leka пишет:

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

Пример (a - адрес, q - прочитанное значение, d - новое значение):
always@(posedge clk) if(en) begin
  a <= a+1;
  d <= q-1;  
end
Все по одному фронту одного клока, управление фазами/паузами/... - по сигналам разрешения клока.


Я хочу понять как решились сложности с wren. С тем, что Вы показали проблем не было. У меня достаточно времени, чтобы посчитать новый адрес и новое значение яркости, но адрес-то должен поменяться позже. Показанный Вами вариант похож на мои ранние версии и тогда у меня была бегущая строка :) Т.е. новое значение яркости попадало в точку справа.

Попробую сформулировать вопрос иначе. Есть некий видеоадаптер - он читает память и выводит ее на экран. Размер пикселей удвоен. Т.е. каждая точка на экране показывается два клока, а не один. Во время второго клока есть желание записать неким образом модифицированное значение той же (!) точки (а не a+1) обратно в память. В моем случае это было уменьшение яркости. Визуально это выглядит как постепенное затухание картинки.

Оно теперь у меня все работает, но... Я хочу понять, почему на работоспособность этого всего повлиял выбор момента смены адреса на соседнем канале двухпортовой памяти. Я черчю диаграммы и получается, что я активизирую wren за такт раньше, чем надо и тогда работает.

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

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

Тайминги встроенной памяти Cyclone III Марсохода 2 3 года 7 мес. назад #3196

  • Leka
  • Leka аватар
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 631
  • Спасибо получено: 51
Я понял, что надо, но привел неверный код. Адрес надо пропускать через дополнительный регистр, чтобы получить сдвиг на такт по отношению к данным:
always@(posedge clk) if(we) a <= a+1; 
always@* d = q-1;
Спасибо сказали: Chaosorg

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

Тайминги встроенной памяти Cyclone III Марсохода 2 3 года 7 мес. назад #3294

  • Chaosorg
  • Chaosorg аватар Автор темы
  • Не в сети
  • Завсегдатай
  • Завсегдатай
  • Сообщений: 311
  • Спасибо получено: 16
В процессе работы над своим процессором, работающим с двухпортовой памятью (второй канал использует видеоадаптер), я стал замечать всякие "мистические глюки". Например, на работу той или иной команды процессора может повлиять добавленное просто для тестовых целей неблокирующее присваивание единицы в регистр, связанный с светодиодом. Я так понимаю это влияет на количество потребителей у синхросигнала - чем их больше, тем "заваленнее" его фронт и событие происходит чуть позже. Долго мучился, а потом попробовал другую тактовую частоту для процессора и его канала памяти - уменьшил с 100 мегагерц до 20. И все заработало как надо.

Исходя из этого вопросы

1. какова максимальная скорость у двухпортовой памяти марсохода 2? Я так понимаю, что указанная в справочнике скорость 300 с лишним мегагерц относится к однопортовому варианту? или это действительно "честная" двухпортовая память?

2. надо ли как-то сдвигать относительно друг друга синхроимпульсы разных каналов памяти, чтобы их момент срабатывания не совпадал?

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

Тайминги встроенной памяти Cyclone III Марсохода 2 3 года 7 мес. назад #3296

  • Leka
  • Leka аватар
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 631
  • Спасибо получено: 51
Если память без дополнительного выходного регистра, то надо учитывать дополнительную задержку на распространение данных. Меняется логика в проекте --> меняются пути --> меняется задержка.
Проще всего делать один клок на весь проект (синхронный дизайн), и проверять максимальную частоту этого клока по отчету STA.

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

  • Страница:
  • 1
Время создания страницы: 0.186 секунд

facebook  GitHub  YouTube  Twitter
Вы здесь: Начало Forum Наш форум Вопросы о плате Марсоход Тайминги встроенной памяти Cyclone III Марсохода 2