Перейти к содержанию
    

Синхронный дизайн и дополнительный клок от ft2232

Здравствуйте!

Возможно глупый вопрос, я только начинаю осваивать ПЛИС. Насколько понимаю из литературы и рекомендаций - самый идеальный вариант - когда вся система тактируется от одного источника глобального клока, и все события выполняются с привязкой к нему - так называемый "синхронный дизайн".

Есть у меня задача - для обмена данными с ПК - прицепить к ПЛИСине микросхему FT2232 (это конвертер с usb на параллельный fifo) , т.к. по текущему уровню знаний не готов ввязываться в запуск ethernet'а и т.п. Так вот у этой ft2232 максимальная скорость передачи данных достигается при использовании режима, когда запись и чтение из регистра делаются по фронту клока, который генерирует сам чип - и он там 60мгц.

Из этого следует два вопроса. Куда в плисину этот клок заводить? На специальные clk ножки, или можно на любую "gpio" ножку? Если на clk ножку, обязательно ли шину данных подключать к этой группе ножек к которой относится клок?

Второй вопрос - модуль работы с этим 2232 - я так понимаю что чтение/запись нужно делать по клоку с этой ножки, а дальше копировать регистр в некий буфер, который будет передаваться в другие модули по состоянию готовности, уже синхронно с глобальным клоком? Получается к аппаратному fifo нужно делать еще и программный fifo внутри плисины, для обеспечения синхронности работы всей системы?

Камень Virtex 4, язык Verilog, среда - ISE 14.7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, pzl104 сказал:

На специальные clk ножки

Желательно.

1 час назад, pzl104 сказал:

Если на clk ножку, обязательно ли шину данных подключать к этой группе ножек к которой относится клок?

Необязательно.

1 час назад, pzl104 сказал:

Второй вопрос - модуль работы с этим 2232 - я так понимаю что чтение/запись нужно делать по клоку с этой ножки, а дальше копировать регистр в некий буфер, который будет передаваться в другие модули по состоянию готовности, уже синхронно с глобальным клоком? Получается к аппаратному fifo нужно делать еще и программный fifo внутри плисины, для обеспечения синхронности работы всей системы?

Видео в помощь

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 hours ago, pzl104 said:

Куда в плисину этот клок заводить? На специальные clk ножки, или можно на любую "gpio" ножку?

Если на clk ножку, обязательно ли шину данных подключать к этой группе ножек к которой относится клок?

Второй вопрос - модуль работы с этим 2232 - я так понимаю что чтение/запись нужно делать по клоку с этой ножки, а дальше копировать регистр в некий буфер, который будет передаваться в другие модули по состоянию готовности, уже синхронно с глобальным клоком? Получается к аппаратному fifo нужно делать еще и программный fifo внутри плисины, для обеспечения синхронности работы всей системы?

Камень Virtex 4, язык Verilog, среда - ISE 14.7

1. Крайне желательно на спец. клоковый пин.

2. Подойдет любой клоковый пин.

3. Синхронности в любом случае вам уже не достичь, ибо два клока как минимум независимых вы уже имеете. Вместо обычного FIFO попробуйте использовать двухклоковый. Не забудьте что различные флажки привязаны к различным доменам клока когда будете делать автомат управления логикой работы всей системы. Управление переходами автомата сигналом из другого клокового домена - классическая ошибка. Вроде как бы всё и работает, но иногда улетает в непонятное состяние.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо большое! Буду пробовать.
Цикл лекций на Youtube интересный, не попадался он мне при поиске - за ссылку отдельное спасибо! Некоторые вещи стали более понятными )

 

6 часов назад, Bad0512 сказал:

Управление переходами автомата сигналом из другого клокового домена - классическая ошибка. Вроде как бы всё и работает, но иногда улетает в непонятное состяние.

 

Правильно ли я понимаю что автомат нужно тактировать об общего клока, а внутри него условно говоря такой алгоритм (псевдокод):

char state=1;
select case(state):
1: if (fifo_ready) state++;
2: read from fifo
    if (read_ok) state++;
3: fifo_ready=0; (даем сигнал о том что прочитали данные и можно продолжать заполнять буфер)

переменная fifo_ready соответственно ставится в 1 внутри автомата который тактируется от отдельного клока ft2232, после того как буфер готов к чтению из top модуля.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 2/22/2023 at 1:59 PM, pzl104 said:

даем сигнал о том что прочитали данные и можно продолжать заполнять буфер

сигналы готовности FIFO (с обеих сторон - и со стороны приходящих данных, и со стороны, эти данные забирающей) - как я понимаю, должны  формироваться внутри этого FIFO в соответствующих клоковых доменах (управляющие потоком входящих данных - (входным) клоком, синхронным с этим потоком, а с "выходной" стороны FIFO - внутренним клоком FPGA), а не внешним автоматом. Т.к. внешний автомат не видит состояния FIFO - есть ли в нем место для приходящих данных, есть ли еще не "забранные" из него данные.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

18 минут назад, Yuri124 сказал:

сигналы готовности FIFO (с обеих сторон - и со стороны приходящих данных, и со стороны, эти данные забирающей) - как я понимаю, должны  формироваться внутри этого FIFO в соответствующих клоковых доменах (управляющие потоком входящих данных - (входным) клоком, синхронным с этим потоком, а с "выходной" стороны FIFO - внутренним клоком FPGA), а не внешним автоматом. Т.к. внешний автомат не видит состояния FIFO - есть ли в нем место для приходящих данных, есть ли еще не "забранные" из него данные.

 

Я думал сделать дополнительный wire, например fifo_ready который ставится в 1 внутри fifo'шного clock домена когда он готов к приему данных, и по критерию появления этой единицы автомат из глобального домена начинает записывать туда данные - так не правильно?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 2/22/2023 at 3:08 PM, pzl104 said:

внутри fifo'шного clock домена

FIFO имеет 2 клоковых домена - для входящих данные и исходящих данных. 

 

On 2/22/2023 at 3:08 PM, pzl104 said:

автомат из глобального домена начинает записывать туда данные

Глобальный домен - это что?
Записывать в FIFO данные должно устройство со стороны  входа FIFO, на входной частоте (клоковый домен входящих данных - т.е. Ваша FT2232), и сигнал готовности принять данные в FIFO логично формировать в этом домене - это должно делать само fifo. 

А сигнал наличия данных - уже формируется  на частоте того блока FPGA, который их должен забирать  - тоже самим FIFO.

Можно, конечно, формировать управляющие сигналы не теми клоками, но в таком случае придется их синхронизировать вне FIFO дополнительными синхронизаторами. Но логичнее, даже если писать FIFO самому, всё это (при необходимости наличия) впихнуть в само FIFO, чтобы внешние устройства имели уже готовый синхронный в своем клоковом домене сигнал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 2/22/2023 at 5:59 PM, pzl104 said:

Правильно ли я понимаю что автомат нужно тактировать об общего клока, а внутри него условно говоря такой алгоритм (псевдокод):

char state=1;
select case(state):
1: if (fifo_ready) state++;
2: read from fifo
    if (read_ok) state++;
3: fifo_ready=0; (даем сигнал о том что прочитали данные и можно продолжать заполнять буфер)

переменная fifo_ready соответственно ставится в 1 внутри автомата который тактируется от отдельного клока ft2232, после того как буфер готов к чтению из top модуля.

У вас в асинхронном ФИФО есть два клоковых домена - домен клока записи и домен клока чтения. Флажки(FULL,ALMOST_FULL,HALF_FULL), которые определяют заполненность фифошки привязаны к домену клока записи, а флажки(EMPTY,ALMOST_EMPTY,PROG_EMPTY), которые определяют наличие места в фифошке - привязаны к домену клока чтения. В принципе не очень важно на каком из этих двух клоков вы построите автомат управления, важно чтобы сигналы, которые управляют переходами в этом автомате были порождены от того же клока, на котором работает автомат. При необходимости эти сигналы надо пересинхронизировать на нужный клоковый домен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...