реклама на сайте
подробности

 
 
> Процессор<-->ПЛИС. Асинхронный интерфейс, Как правильно сделать
winipuh
сообщение Nov 2 2012, 16:07
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 127
Регистрация: 31-10-12
Пользователь №: 74 189



Добрый вечер. Прошу помощи по следующим вопросам.

ПЛИС (циклон 3) подключается к процессору через интерфейс асинхронной SRAM. Процессор может читать/писать внтуренние регистры ПЛИС.
Тактовая в ПЛИС - около 98 МГц, клок внешней шины процессора - около 101 МГц.
Прикрепленное изображение

Сигнал wr_stb - это строб записи внутри ПЛИС (полученный после цепочки триггеров для предотвращения метастабильности).
Возникли сомнения по поводу того как правильно организовать запись в ПЛИС.

1. Можно ли завести данные на вход регистра напрямую и использовать wr_stb в качестве сигнала clock enable?
Может ли возникнeть метастабильное состояние триггера при смене данных и при неактивном CE? Или это полностью безопасно?

2. Можно ли формировать clock enable для триггера, объединяя через логику линии адреса и wr_stb? Или же это может вызвать глитч на выходе LUT при изменениях на шине адреса и как следствие метастабильное состояние (из-за нарушения требования по setup/hold на входе CE триггера)? Согласно документации, у LUT-а в режиме двух входов глитч на выходе исключен. Однако где гарантия, что так получится при синтезе и quartus не будет использовать, например, все 4 входа LUT-а для wr_wtb и линий адреса?

3. Может быть использование общего сигнала wr_stb является неверными, а для каждого регистра нужно формировать свой строб записи, объединяя через логику ADDR, nCS и nWR, а затем пропуская через цепочку триггеров?

Ответов на эти вопросы в альтеровской документации пока не нашел, в инете тоже.
Так что буду благодарен всем откликнувшимся. sm.gif

Сообщение отредактировал winipuh - Nov 2 2012, 16:10
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 20)
iosifk
сообщение Nov 2 2012, 18:11
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(winipuh @ Nov 2 2012, 20:07) *
Добрый вечер. Прошу помощи по следующим вопросам.

...
Ответов на эти вопросы в альтеровской документации пока не нашел, в инете тоже.
Так что буду благодарен всем откликнувшимся. sm.gif

У меня на сайте, в статьях "Краткий Курс", раздел CDC.
Удачи!


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
zomg
сообщение Nov 2 2012, 18:23
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 39
Регистрация: 12-05-10
Пользователь №: 57 219



Я так понимаю, что строб wr_stb формируется по срезу CS_n и WR_n. Тогда:

1. Строб wr_stb в качестве clock enable использовать можно. При неактивном CE триггер не перейдет в метастабильное состояние.

2. Нехороший подход

3. Делаете два регистра: по стробу wr_stb один защелкивает ADDR, другой DATA. На следующий такт в соответствии с полученным ADDR формируете строб (clock enable) на нужный регистр и записываете в него полученные DATA.
Go to the top of the page
 
+Quote Post
winipuh
сообщение Nov 2 2012, 18:58
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 127
Регистрация: 31-10-12
Пользователь №: 74 189



Спасибо, zomg.
Go to the top of the page
 
+Quote Post
Iptash
сообщение Nov 2 2012, 19:11
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 613
Регистрация: 2-09-08
Из: г.Набережные Челны
Пользователь №: 39 936



Цитата
Сигнал wr_stb - это строб записи внутри ПЛИС (полученный после цепочки триггеров для предотвращения метастабильности).
Возникли сомнения по поводу того как правильно организовать запись в ПЛИС.

Мне кажется излишне вырабатывать wr_stb.
Здесь вместе с дешифратором адреса и положительным фронтом WR записывать данные в буфер, а CS выбор устройства.
Go to the top of the page
 
+Quote Post
winipuh
сообщение Nov 2 2012, 21:27
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 127
Регистрация: 31-10-12
Пользователь №: 74 189



Цитата(Iptash @ Nov 2 2012, 23:11) *
Мне кажется излишне вырабатывать wr_stb.
Здесь вместе с дешифратором адреса и положительным фронтом WR записывать данные в буфер, а CS выбор устройства.

Нет, к сожалению изменение некоторых регистров должно выполнятся синхронно с клоком в ПЛИС.
Кроме того еще есть задача чтения данных (например, в случае чтения из FIFO также должен формироваться строб read, синхронный с клоком в ПЛИС). Просто я ее здесь не затронул (чтобы не плодить сущностей - она будет решаться аналогично sm.gif).
Go to the top of the page
 
+Quote Post
Shamil
сообщение Nov 3 2012, 04:00
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 160
Регистрация: 23-12-04
Из: Уфа
Пользователь №: 1 631



Цитата(zomg @ Nov 3 2012, 00:23) *
3. Делаете два регистра: по стробу wr_stb один защелкивает ADDR, другой DATA. На следующий такт в соответствии с полученным ADDR формируете строб (clock enable) на нужный регистр и записываете в него полученные DATA.

Надо только не забыть предпринять меры, чтобы следующая запись от процессора не наложилась на Ваш такт перезаписи в нужный регистр.
Go to the top of the page
 
+Quote Post
Iptash
сообщение Nov 3 2012, 04:13
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 613
Регистрация: 2-09-08
Из: г.Набережные Челны
Пользователь №: 39 936



Цитата(winipuh @ Nov 3 2012, 01:27) *
Нет, к сожалению изменение некоторых регистров должно выполнятся синхронно с клоком в ПЛИС.
Кроме того еще есть задача чтения данных (например, в случае чтения из FIFO также должен формироваться строб read, синхронный с клоком в ПЛИС). Просто я ее здесь не затронул (чтобы не плодить сущностей - она будет решаться аналогично sm.gif).

Асинхронные данные пишутся в буфер, а буфер уже синхронизируется с клоком ПЛИС, а CS выбор устройства, пока допустим CS=0. то внешнее устройство пишет в буфер, а ПЛИС
в это время не должно считывать буфер.
Или нет?
Go to the top of the page
 
+Quote Post
zomg
сообщение Nov 3 2012, 08:37
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 39
Регистрация: 12-05-10
Пользователь №: 57 219



2 Shamil: а как следующая запись наложится, если я имел ввиду конвейер ?
Go to the top of the page
 
+Quote Post
Shamil
сообщение Nov 3 2012, 11:40
Сообщение #10


Частый гость
**

Группа: Свой
Сообщений: 160
Регистрация: 23-12-04
Из: Уфа
Пользователь №: 1 631



Цитата(zomg @ Nov 3 2012, 14:37) *
2 Shamil: а как следующая запись наложится, если я имел ввиду конвейер ?

По условиям задачи, тактовая частота шины процессора асинхронна и выше чем тактовая частота ПЛИС.
Хотя, наверное, если цикл записи занимает не менее 3-х тактов шины, ничего страшного и не будет...
Go to the top of the page
 
+Quote Post
mihalevski
сообщение Nov 3 2012, 16:45
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 100
Регистрация: 20-05-10
Из: Omsk
Пользователь №: 57 391



Цитата(winipuh @ Nov 3 2012, 04:27) *
Нет, к сожалению изменение некоторых регистров должно выполнятся синхронно с клоком в ПЛИС.
Кроме того еще есть задача чтения данных (например, в случае чтения из FIFO также должен формироваться строб read, синхронный с клоком в ПЛИС). Просто я ее здесь не затронул (чтобы не плодить сущностей - она будет решаться аналогично sm.gif).

Как то я делал проект на ПЛИСине, где необходимо было синхронно управлять большим количеством DDS, синхронно загружать коэффициенты в FIR фильтры и стартовать FIFO и все под управлением от внешнего медленного процессора. Для решения этой задачи я оснастил интерфейс 31 разрядным счетчиком, тактируемым от клока ПЛИСины. В систему команд ввел параметр времени выполнения - момент загрузки регистров фазы и частоты DDS, коэффициентов FIR, (начало записи (считывания ) FIFO от состояния этого самого 31 счетчика. При это сами параметры загружались в ПЛИСину посредствам времянезависимых команд. Таким образом, обеспечивалось синхронное управление несколькими сотнями устройств размещенными на ПЛИсине. Была одна проблема с трассировкой 31 шины до всех устройств так как частота тактирования счетчика была 200 МГц. .
Go to the top of the page
 
+Quote Post
MSL
сообщение Nov 6 2012, 08:25
Сообщение #12


Частый гость
**

Группа: Участник
Сообщений: 75
Регистрация: 25-07-04
Из: Rostov-on-Don
Пользователь №: 382



Прикручивал когда-то макс2 к ARMу, чтобы к максу можно было обращаться как 32х-битным регистрам, частота шины процессора 100мег. Я прикрепил 2 файла наскоро отредактированных из проекта для квартуса полностью рабочего, посмотрите. У меня проблемы возникли сначала из-за ошибок данных на двунаправленной шине, потому что те примеры (и их по-моему большинство) , которые я видел были написаны неверно. Т.е. посмотрите как шина описана в файле max2. Так же проблемы могут принести неправильные сетапы в регистрах ARM для доступа к статитке (задержки, тип записи/чтения...), хотя у меня все это работает и с 0-wait states, на шине данных еще есть память и пр. Как будут отрабатываться флаги и команды внутри - дело ваше уже, я например выводил сигналы бизи и пр. в регистр статуса, т.е, перед записью читать регистр статуса...
Прикрепленные файлы
Прикрепленный файл  MAXII.vhd ( 956 байт ) Кол-во скачиваний: 47
Прикрепленный файл  SRegs.vhd ( 1.62 килобайт ) Кол-во скачиваний: 44
 
Go to the top of the page
 
+Quote Post
winipuh
сообщение Nov 7 2012, 20:18
Сообщение #13


Частый гость
**

Группа: Участник
Сообщений: 127
Регистрация: 31-10-12
Пользователь №: 74 189



Попутно возник вопрос по блочной памяти в циклоне-3. В хэндбуке написано:
Цитата
Violating the setup or hold time on the memory block input registers might corrupt
the memory contents. This applies to both read and write operations.

Т.е. при нарушении требований по setup/hold для rdaddress-а во время чтения может испортиться содержимое памяти? blink.gif
А как это? Может мне кто-нибудь объяснить?
Go to the top of the page
 
+Quote Post
MSL
сообщение Nov 8 2012, 07:56
Сообщение #14


Частый гость
**

Группа: Участник
Сообщений: 75
Регистрация: 25-07-04
Из: Rostov-on-Don
Пользователь №: 382



Цитата(winipuh @ Nov 8 2012, 00:18) *
Т.е. при нарушении требований по setup/hold для rdaddress-а во время чтения может испортиться содержимое памяти? blink.gif
А как это? Может мне кто-нибудь объяснить?


Ну такие требования есть для работы с любой памятью, вы ж не можете работать с памятью 10ns статикой на 200mhz, например-)) У вас же данные на адресах должны появиться раньше минимум на сетап тайм до строба записи и быть не менее холд тайм...

Я вообще тоже не могу понять зачем вам wr_wtb, зачем через него клок пускать... Записали данные и команду в статус - у вас появился сигнал (flag_start как пример в моих аттачах), по клоку плис если этот сигнал есть отрабатываете то что вам нужно и потом сбрасываете его. Если в данном случае так сильно боитесь метастабильности - ну пропусите этот сигнал через тригеры и ваш клок плис...
Go to the top of the page
 
+Quote Post
winipuh
сообщение Nov 8 2012, 10:46
Сообщение #15


Частый гость
**

Группа: Участник
Сообщений: 127
Регистрация: 31-10-12
Пользователь №: 74 189



Цитата(MSL @ Nov 8 2012, 11:56) *
Если в данном случае так сильно боитесь метастабильности - ну пропусите этот сигнал через тригеры и ваш клок плис...

Да нет, я уже кое-как в теме освоился, спасибо.
Заданный вопрос - вообщем-то простое любопытство, не более. sm.gif

Цитата(MSL @ Nov 8 2012, 11:56) *
Ну такие требования есть для работы с любой памятью, вы ж не можете работать с памятью 10ns статикой на 200mhz, например-)) У вас же данные на адресах должны появиться раньше минимум на сетап тайм до строба записи и быть не менее холд тайм...

Логично, что при нарушении времянок могут неправильно считаться данные.
Но как при чтении содержимое памяти может испортиться?
У меня, что называется, "разрыв шаблона"... sad.gif
Go to the top of the page
 
+Quote Post
maksimp
сообщение Nov 8 2012, 17:55
Сообщение #16


Местный
***

Группа: Участник
Сообщений: 313
Регистрация: 2-07-11
Пользователь №: 66 023



Цитата(winipuh @ Nov 8 2012, 13:46) *
Но как при чтении содержимое памяти может испортиться?

Это такой особый прибабах циклона:

"Violating the setup or hold time on the memory block input registers might corrupt
the memory contents. This applies to both read and write operations."

Даташит на циклон 3, "Chapter 3: Memory Blocks in the Cyclone III Device Family", раздел "Clocking Modes", страница 3-15.
Go to the top of the page
 
+Quote Post
winipuh
сообщение Nov 8 2012, 19:39
Сообщение #17


Частый гость
**

Группа: Участник
Сообщений: 127
Регистрация: 31-10-12
Пользователь №: 74 189



Цитата(maksimp @ Nov 8 2012, 21:55) *
Это такой особый прибабах циклона:

"Violating the setup or hold time on the memory block input registers might corrupt
the memory contents. This applies to both read and write operations."

Даташит на циклон 3, "Chapter 3: Memory Blocks in the Cyclone III Device Family", раздел "Clocking Modes", страница 3-15.

sm.gif

Вопрос изначально был такой:
Цитата(winipuh @ Nov 8 2012, 00:18) *
Попутно возник вопрос по блочной памяти в циклоне-3. В хэндбуке написано:
Цитата
Violating the setup or hold time on the memory block input registers might corrupt
the memory contents. This applies to both read and write operations.

Т.е. при нарушении требований по setup/hold для rdaddress-а во время чтения может испортиться содержимое памяти? blink.gif
А как это? Может мне кто-нибудь объяснить?
(Cyclone-III Handbook, vol.1 , p 3-14)

Вообщем-то я из чистого любопыства пытаюсь понять физический принцип этого прибабаха.
Сам додуматься не могу (где прочитать - тоже пока не нашел), поэтому и спросил здесь... sm.gif
Go to the top of the page
 
+Quote Post
MSL
сообщение Nov 8 2012, 20:53
Сообщение #18


Частый гость
**

Группа: Участник
Сообщений: 75
Регистрация: 25-07-04
Из: Rostov-on-Don
Пользователь №: 382



Цитата(winipuh @ Nov 8 2012, 23:39) *
Вообщем-то я из чистого любопыства пытаюсь понять физический принцип этого прибабаха.
Сам додуматься не могу (где прочитать - тоже пока не нашел), поэтому и спросил здесь... sm.gif


-)) Какой тут "физический" смысл? Я думаю что они просто странно сформулировали свою мысль про "повреждение контента" для всех операций. При нарушении сетап/холд требований при чтении просто могут быть данные с другого адреса (ну защелкнулся 0 вместо 1-)). При записи может случиться запись не по тому адресу и не тех данных, вот и разрушится ваш контент-)))
Go to the top of the page
 
+Quote Post
maksimp
сообщение Nov 9 2012, 03:35
Сообщение #19


Местный
***

Группа: Участник
Сообщений: 313
Регистрация: 2-07-11
Пользователь №: 66 023



Цитата(winipuh @ Nov 8 2012, 22:39) *
Вообщем-то я из чистого любопыства пытаюсь понять физический принцип этого прибабаха.

Гипотеза:
Выбор данных по нужному адресу при чтении производится КМОП мультиплексором. Мультиплексор сделан на двунаправленных ключах. Мультиплексор кратковременно открывается по фронту тактового сигнала специальным генератором коротких импульсов (он там нарисован на структурной схеме). При изменении адреса одновременно с импульсом чтения два или более ключей мультиплексора могут кратковременно открыться одновременно. Триггеры памяти то есть оказываются соединёнными между собой. Видимо дополнительных буферов, обеспечивающих однонаправленность передачи информации, там нет. Триггеры могут поэтому влиять друг на друга.
Go to the top of the page
 
+Quote Post
winipuh
сообщение Nov 9 2012, 10:09
Сообщение #20


Частый гость
**

Группа: Участник
Сообщений: 127
Регистрация: 31-10-12
Пользователь №: 74 189



Цитата(maksimp @ Nov 9 2012, 07:35) *
Мультиплексор кратковременно открывается по фронту тактового сигнала специальным генератором коротких импульсов (он там нарисован на структурной схеме).

А это Вы о какой структурной схеме? sm.gif
В handbook-е смог найти только вот это:
Прикрепленное изображение
Go to the top of the page
 
+Quote Post
maksimp
сообщение Nov 9 2012, 19:26
Сообщение #21


Местный
***

Группа: Участник
Сообщений: 313
Регистрация: 2-07-11
Пользователь №: 66 023



Цитата(winipuh @ Nov 9 2012, 13:09) *
А это Вы о какой структурной схеме? sm.gif
В handbook-е смог найти только вот это:

Действительно, её там нет. Но она есть в описании циклона 2, рисунок 8-13. На ней есть "Write Pulse Generator".
К циклону 2 тоже относится это предупреждение про возможность порчи при чтении.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 13:12
Рейтинг@Mail.ru


Страница сгенерированна за 0.01573 секунд с 7
ELECTRONIX ©2004-2016