Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Процессор<-->ПЛИС. Асинхронный интерфейс
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
winipuh
Добрый вечер. Прошу помощи по следующим вопросам.

ПЛИС (циклон 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
iosifk
Цитата(winipuh @ Nov 2 2012, 20:07) *
Добрый вечер. Прошу помощи по следующим вопросам.

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

У меня на сайте, в статьях "Краткий Курс", раздел CDC.
Удачи!
zomg
Я так понимаю, что строб wr_stb формируется по срезу CS_n и WR_n. Тогда:

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

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

3. Делаете два регистра: по стробу wr_stb один защелкивает ADDR, другой DATA. На следующий такт в соответствии с полученным ADDR формируете строб (clock enable) на нужный регистр и записываете в него полученные DATA.
winipuh
Спасибо, zomg.
Iptash
Цитата
Сигнал wr_stb - это строб записи внутри ПЛИС (полученный после цепочки триггеров для предотвращения метастабильности).
Возникли сомнения по поводу того как правильно организовать запись в ПЛИС.

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

Нет, к сожалению изменение некоторых регистров должно выполнятся синхронно с клоком в ПЛИС.
Кроме того еще есть задача чтения данных (например, в случае чтения из FIFO также должен формироваться строб read, синхронный с клоком в ПЛИС). Просто я ее здесь не затронул (чтобы не плодить сущностей - она будет решаться аналогично sm.gif).
Shamil
Цитата(zomg @ Nov 3 2012, 00:23) *
3. Делаете два регистра: по стробу wr_stb один защелкивает ADDR, другой DATA. На следующий такт в соответствии с полученным ADDR формируете строб (clock enable) на нужный регистр и записываете в него полученные DATA.

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

Асинхронные данные пишутся в буфер, а буфер уже синхронизируется с клоком ПЛИС, а CS выбор устройства, пока допустим CS=0. то внешнее устройство пишет в буфер, а ПЛИС
в это время не должно считывать буфер.
Или нет?
zomg
2 Shamil: а как следующая запись наложится, если я имел ввиду конвейер ?
Shamil
Цитата(zomg @ Nov 3 2012, 14:37) *
2 Shamil: а как следующая запись наложится, если я имел ввиду конвейер ?

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

Как то я делал проект на ПЛИСине, где необходимо было синхронно управлять большим количеством DDS, синхронно загружать коэффициенты в FIR фильтры и стартовать FIFO и все под управлением от внешнего медленного процессора. Для решения этой задачи я оснастил интерфейс 31 разрядным счетчиком, тактируемым от клока ПЛИСины. В систему команд ввел параметр времени выполнения - момент загрузки регистров фазы и частоты DDS, коэффициентов FIR, (начало записи (считывания ) FIFO от состояния этого самого 31 счетчика. При это сами параметры загружались в ПЛИСину посредствам времянезависимых команд. Таким образом, обеспечивалось синхронное управление несколькими сотнями устройств размещенными на ПЛИсине. Была одна проблема с трассировкой 31 шины до всех устройств так как частота тактирования счетчика была 200 МГц. .
MSL
Прикручивал когда-то макс2 к ARMу, чтобы к максу можно было обращаться как 32х-битным регистрам, частота шины процессора 100мег. Я прикрепил 2 файла наскоро отредактированных из проекта для квартуса полностью рабочего, посмотрите. У меня проблемы возникли сначала из-за ошибок данных на двунаправленной шине, потому что те примеры (и их по-моему большинство) , которые я видел были написаны неверно. Т.е. посмотрите как шина описана в файле max2. Так же проблемы могут принести неправильные сетапы в регистрах ARM для доступа к статитке (задержки, тип записи/чтения...), хотя у меня все это работает и с 0-wait states, на шине данных еще есть память и пр. Как будут отрабатываться флаги и команды внутри - дело ваше уже, я например выводил сигналы бизи и пр. в регистр статуса, т.е, перед записью читать регистр статуса...
winipuh
Попутно возник вопрос по блочной памяти в циклоне-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
А как это? Может мне кто-нибудь объяснить?
MSL
Цитата(winipuh @ Nov 8 2012, 00:18) *
Т.е. при нарушении требований по setup/hold для rdaddress-а во время чтения может испортиться содержимое памяти? blink.gif
А как это? Может мне кто-нибудь объяснить?


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

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

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

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

Логично, что при нарушении времянок могут неправильно считаться данные.
Но как при чтении содержимое памяти может испортиться?
У меня, что называется, "разрыв шаблона"... sad.gif
maksimp
Цитата(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.
winipuh
Цитата(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
MSL
Цитата(winipuh @ Nov 8 2012, 23:39) *
Вообщем-то я из чистого любопыства пытаюсь понять физический принцип этого прибабаха.
Сам додуматься не могу (где прочитать - тоже пока не нашел), поэтому и спросил здесь... sm.gif


-)) Какой тут "физический" смысл? Я думаю что они просто странно сформулировали свою мысль про "повреждение контента" для всех операций. При нарушении сетап/холд требований при чтении просто могут быть данные с другого адреса (ну защелкнулся 0 вместо 1-)). При записи может случиться запись не по тому адресу и не тех данных, вот и разрушится ваш контент-)))
maksimp
Цитата(winipuh @ Nov 8 2012, 22:39) *
Вообщем-то я из чистого любопыства пытаюсь понять физический принцип этого прибабаха.

Гипотеза:
Выбор данных по нужному адресу при чтении производится КМОП мультиплексором. Мультиплексор сделан на двунаправленных ключах. Мультиплексор кратковременно открывается по фронту тактового сигнала специальным генератором коротких импульсов (он там нарисован на структурной схеме). При изменении адреса одновременно с импульсом чтения два или более ключей мультиплексора могут кратковременно открыться одновременно. Триггеры памяти то есть оказываются соединёнными между собой. Видимо дополнительных буферов, обеспечивающих однонаправленность передачи информации, там нет. Триггеры могут поэтому влиять друг на друга.
winipuh
Цитата(maksimp @ Nov 9 2012, 07:35) *
Мультиплексор кратковременно открывается по фронту тактового сигнала специальным генератором коротких импульсов (он там нарисован на структурной схеме).

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

Действительно, её там нет. Но она есть в описании циклона 2, рисунок 8-13. На ней есть "Write Pulse Generator".
К циклону 2 тоже относится это предупреждение про возможность порчи при чтении.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.