МАРСОХОД

Open Source Hardware Project

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

ТЕМА: Счетчик с асинхронным сбросом по фронту.

Счетчик с асинхронным сбросом по фронту. 2 года 4 мес. назад #6129

  • birst
  • birst аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 2
  • Спасибо получено: 0
Здравствуйте,
заранее извиняюсь за может быть элементарный вопрос, но только начал осваивать верилог и плис, а спросить просто не у кого.

Хочу реализовать счетчик с асинхронным сбросом по фронту.
Набросал вот такое
module addr_counter (PCLK, RESET, HREF, ADDR);
input PCLK;
input RESET;
input HREF;
output [10:0] ADDR;
reg [10:0] ADDR = 11'd0;
always @(posedge PCLK, posedge RESET, posedge HREF)
begin
 if(RESET || HREF)
  ADDR = 11'd0;
 else 
  ADDR <= ADDR + 11'b1;
end
endmodule
Но ! счет должен идти по клоку PCLK, а сброс только по фронту (переключении с 0 в 1). В моем примере сброс происходит все время когда HREF высокий, что естественно мне не надо.
Написать
if(RESET || posedge HREF)
пробовал, компилятор ругается.
Заранее спасибо.

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

Счетчик с асинхронным сбросом по фронту. 2 года 4 мес. назад #6130

Давайте оставим в покое верилог и для начала разберемся с постановкой задачи.
Для какой цели понадобился именно "асинхронный сброс по фронту"?
Во первых, асинхронные сигналы бывают только "потенциалом",
во вторых , я не рекомендую вообще в проектах использовать асинхронные сигналы. Их наличие
усложняет временной анализ и могут привести к непредсказуемому поведению схемы.
Поверьте мне на слово, любой проект, какой бы вы не придумали ,можно(и нужно) реализовать только на синхронной логике.

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

Счетчик с асинхронным сбросом по фронту. 2 года 4 мес. назад #6131

  • birst
  • birst аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 2
  • Спасибо получено: 0
Спасибо за ответ. Задача следующая. У меня есть видеокамера ov7670. Конечная задача передача обработаного(сжатого) видео на комп по уарт. Подчеркну это конечная задача, но иду от простого к сложному, сначала передача не сжатого. Однако т.к. в будущем предполагается обработка(сжатие) видео, я буду предерживаться конечной архитектуры, пусть даже некоторые модули будут пустышки(без функционала). Итак.
Вот тут есть описание работы. Ключевая идея: камера работает на 24 МГц, на входе плис стоит RAM буфер (размером на 16 строк пикселов, 2-PORT). Камера(вернее модуль который я сейчас и пишу) ложит туда данные с частотой 24МГц, а т.к. я пока буду вытягивать только канал яркости без цвета, то по факту на 12 МГц. Модуль дальнейшей обработки будет вытягивать на более высокой частоте эти данные и дальше уже обработка/передача.
Т.е. я сейчас пишу модуль, который получая сигналы с камеры будет это ложить в буфер. Т.к. камера выдает данные построчно, задача модуля - считать и положить первые 8 строк пикселов в память, подать сигнал о готовности первой партии данных на модуль дальнейшей обработки, а самому заполнять память дальше, после заполнения вторых 8 строк, подаем сигнал о готовности второй партии и начинаем все заново - запись в буфер с 0.

А вот две ключевые схемы с таймингами. Раз и два .

Падающий фронт сигнала VSYNC означает начало фрейма(кадра). После этого при высоком HREF идет передача пикселов строки.
Таким образом мне нужно в модуле иметь счетчик адреса (куда записывать пришедшее значение), счетчик строк ( что бы поднимать сигналы готовности первой и второй партии, на 8 и 16 строках) и счетчик смещения (это фактически то же что и счетчик строк).
Счетчик строк считает до 16 (при чем сигнал тактовый сигнал у него HREF а не CLK), скидывается при падающем VSYNC и при достижении 16. На 8 и 16 поднимает высокий уровень на выходах готовности партии данных. Счетчик смещения считает смещение так же как и счетчик строк только, шаг у него 640 (т.к. разрешение фрейма 640х480). Счетчик адреса обнуляется по нарастающему фронту HREF , т.е. каждую новую строку. И мы записываем данные в буфер, по адресу "счетчик адреса + счетчик смещения".
Т.е. сигналы обнуления счетчика у меня HREF и VSYNC и как видно по таймингам они не синхронны с тактовым сигналом.
Старался описать подробно и ясно, пожалуйста спрашивайте если что не понятно. И буду рад любым советам, пожеланиям, идеям, ибо начал изучать плис недавно, до этого работал только с микроконтроллерами. Спасибо.

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

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

Счетчик с асинхронным сбросом по фронту. 2 года 4 мес. назад #6132

Весь процесс нужно делать по "PCLK".
Из сигналов "HREF" и "VSYNC" выделить спады.
Как это сделать описано здесь - marsohod.org/verilog/157-verilogedges
Сигнал "HREF" подать на "count_enable" а его спад на синхронный сброс счетчика пикселов.
Спад "HREF" подать на "count_enable" счетчика строк,Спад "VSYNC" на синхронный сброс счетчика строк.
О счетчиках здесь - marsohod.org/verilog/158-verilogpictcnt
Спасибо сказали: birst

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

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

facebook  GitHub  YouTube  Twitter
Вы здесь: Начало Forum Наш форум Языки программирования Счетчик с асинхронным сбросом по фронту.