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

Частый гость
 
Группа: Участник
Сообщений: 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, а затем пропуская через цепочку триггеров? Ответов на эти вопросы в альтеровской документации пока не нашел, в инете тоже. Так что буду благодарен всем откликнувшимся.
Сообщение отредактировал winipuh - Nov 2 2012, 16:10
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 20)
|
Nov 2 2012, 18:11
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(winipuh @ Nov 2 2012, 20:07)  Добрый вечер. Прошу помощи по следующим вопросам. ... Ответов на эти вопросы в альтеровской документации пока не нашел, в инете тоже. Так что буду благодарен всем откликнувшимся.  У меня на сайте, в статьях "Краткий Курс", раздел CDC. Удачи!
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Nov 2 2012, 18:23
|
Участник

Группа: Участник
Сообщений: 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.
|
|
|
|
|
Nov 2 2012, 19:11
|
Профессионал
    
Группа: Свой
Сообщений: 1 613
Регистрация: 2-09-08
Из: г.Набережные Челны
Пользователь №: 39 936

|
Цитата Сигнал wr_stb - это строб записи внутри ПЛИС (полученный после цепочки триггеров для предотвращения метастабильности). Возникли сомнения по поводу того как правильно организовать запись в ПЛИС. Мне кажется излишне вырабатывать wr_stb. Здесь вместе с дешифратором адреса и положительным фронтом WR записывать данные в буфер, а CS выбор устройства.
|
|
|
|
|
Nov 2 2012, 21:27
|

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

|
Цитата(Iptash @ Nov 2 2012, 23:11)  Мне кажется излишне вырабатывать wr_stb. Здесь вместе с дешифратором адреса и положительным фронтом WR записывать данные в буфер, а CS выбор устройства. Нет, к сожалению изменение некоторых регистров должно выполнятся синхронно с клоком в ПЛИС. Кроме того еще есть задача чтения данных (например, в случае чтения из FIFO также должен формироваться строб read, синхронный с клоком в ПЛИС). Просто я ее здесь не затронул (чтобы не плодить сущностей - она будет решаться аналогично  ).
|
|
|
|
|
Nov 3 2012, 04:00
|
Частый гость
 
Группа: Свой
Сообщений: 160
Регистрация: 23-12-04
Из: Уфа
Пользователь №: 1 631

|
Цитата(zomg @ Nov 3 2012, 00:23)  3. Делаете два регистра: по стробу wr_stb один защелкивает ADDR, другой DATA. На следующий такт в соответствии с полученным ADDR формируете строб (clock enable) на нужный регистр и записываете в него полученные DATA. Надо только не забыть предпринять меры, чтобы следующая запись от процессора не наложилась на Ваш такт перезаписи в нужный регистр.
|
|
|
|
|
Nov 3 2012, 04:13
|
Профессионал
    
Группа: Свой
Сообщений: 1 613
Регистрация: 2-09-08
Из: г.Набережные Челны
Пользователь №: 39 936

|
Цитата(winipuh @ Nov 3 2012, 01:27)  Нет, к сожалению изменение некоторых регистров должно выполнятся синхронно с клоком в ПЛИС. Кроме того еще есть задача чтения данных (например, в случае чтения из FIFO также должен формироваться строб read, синхронный с клоком в ПЛИС). Просто я ее здесь не затронул (чтобы не плодить сущностей - она будет решаться аналогично  ). Асинхронные данные пишутся в буфер, а буфер уже синхронизируется с клоком ПЛИС, а CS выбор устройства, пока допустим CS=0. то внешнее устройство пишет в буфер, а ПЛИС в это время не должно считывать буфер. Или нет?
|
|
|
|
|
Nov 3 2012, 08:37
|
Участник

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

|
2 Shamil: а как следующая запись наложится, если я имел ввиду конвейер ?
|
|
|
|
|
Nov 3 2012, 11:40
|
Частый гость
 
Группа: Свой
Сообщений: 160
Регистрация: 23-12-04
Из: Уфа
Пользователь №: 1 631

|
Цитата(zomg @ Nov 3 2012, 14:37)  2 Shamil: а как следующая запись наложится, если я имел ввиду конвейер ? По условиям задачи, тактовая частота шины процессора асинхронна и выше чем тактовая частота ПЛИС. Хотя, наверное, если цикл записи занимает не менее 3-х тактов шины, ничего страшного и не будет...
|
|
|
|
|
Nov 3 2012, 16:45
|
Частый гость
 
Группа: Участник
Сообщений: 100
Регистрация: 20-05-10
Из: Omsk
Пользователь №: 57 391

|
Цитата(winipuh @ Nov 3 2012, 04:27)  Нет, к сожалению изменение некоторых регистров должно выполнятся синхронно с клоком в ПЛИС. Кроме того еще есть задача чтения данных (например, в случае чтения из FIFO также должен формироваться строб read, синхронный с клоком в ПЛИС). Просто я ее здесь не затронул (чтобы не плодить сущностей - она будет решаться аналогично  ). Как то я делал проект на ПЛИСине, где необходимо было синхронно управлять большим количеством DDS, синхронно загружать коэффициенты в FIR фильтры и стартовать FIFO и все под управлением от внешнего медленного процессора. Для решения этой задачи я оснастил интерфейс 31 разрядным счетчиком, тактируемым от клока ПЛИСины. В систему команд ввел параметр времени выполнения - момент загрузки регистров фазы и частоты DDS, коэффициентов FIR, (начало записи (считывания ) FIFO от состояния этого самого 31 счетчика. При это сами параметры загружались в ПЛИСину посредствам времянезависимых команд. Таким образом, обеспечивалось синхронное управление несколькими сотнями устройств размещенными на ПЛИсине. Была одна проблема с трассировкой 31 шины до всех устройств так как частота тактирования счетчика была 200 МГц. .
|
|
|
|
|
Nov 6 2012, 08:25
|
Частый гость
 
Группа: Участник
Сообщений: 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
|
|
|
|
|
Nov 7 2012, 20:18
|

Частый гость
 
Группа: Участник
Сообщений: 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-а во время чтения может испортиться содержимое памяти? А как это? Может мне кто-нибудь объяснить?
|
|
|
|
|
Nov 8 2012, 07:56
|
Частый гость
 
Группа: Участник
Сообщений: 75
Регистрация: 25-07-04
Из: Rostov-on-Don
Пользователь №: 382

|
Цитата(winipuh @ Nov 8 2012, 00:18)  Т.е. при нарушении требований по setup/hold для rdaddress-а во время чтения может испортиться содержимое памяти? А как это? Может мне кто-нибудь объяснить? Ну такие требования есть для работы с любой памятью, вы ж не можете работать с памятью 10ns статикой на 200mhz, например-)) У вас же данные на адресах должны появиться раньше минимум на сетап тайм до строба записи и быть не менее холд тайм... Я вообще тоже не могу понять зачем вам wr_wtb, зачем через него клок пускать... Записали данные и команду в статус - у вас появился сигнал (flag_start как пример в моих аттачах), по клоку плис если этот сигнал есть отрабатываете то что вам нужно и потом сбрасываете его. Если в данном случае так сильно боитесь метастабильности - ну пропусите этот сигнал через тригеры и ваш клок плис...
|
|
|
|
|
Nov 8 2012, 10:46
|

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

|
Цитата(MSL @ Nov 8 2012, 11:56)  Если в данном случае так сильно боитесь метастабильности - ну пропусите этот сигнал через тригеры и ваш клок плис... Да нет, я уже кое-как в теме освоился, спасибо. Заданный вопрос - вообщем-то простое любопытство, не более. Цитата(MSL @ Nov 8 2012, 11:56)  Ну такие требования есть для работы с любой памятью, вы ж не можете работать с памятью 10ns статикой на 200mhz, например-)) У вас же данные на адресах должны появиться раньше минимум на сетап тайм до строба записи и быть не менее холд тайм... Логично, что при нарушении времянок могут неправильно считаться данные. Но как при чтении содержимое памяти может испортиться? У меня, что называется, "разрыв шаблона"...
|
|
|
|
|
Nov 8 2012, 17:55
|
Местный
  
Группа: Участник
Сообщений: 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.
|
|
|
|
|
Nov 8 2012, 19:39
|

Частый гость
 
Группа: Участник
Сообщений: 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.  Вопрос изначально был такой: Цитата(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-а во время чтения может испортиться содержимое памяти? А как это? Может мне кто-нибудь объяснить? (Cyclone-III Handbook, vol.1 , p 3-14) Вообщем-то я из чистого любопыства пытаюсь понять физический принцип этого прибабаха. Сам додуматься не могу (где прочитать - тоже пока не нашел), поэтому и спросил здесь...
|
|
|
|
|
Nov 8 2012, 20:53
|
Частый гость
 
Группа: Участник
Сообщений: 75
Регистрация: 25-07-04
Из: Rostov-on-Don
Пользователь №: 382

|
Цитата(winipuh @ Nov 8 2012, 23:39)  Вообщем-то я из чистого любопыства пытаюсь понять физический принцип этого прибабаха. Сам додуматься не могу (где прочитать - тоже пока не нашел), поэтому и спросил здесь...  -)) Какой тут "физический" смысл? Я думаю что они просто странно сформулировали свою мысль про "повреждение контента" для всех операций. При нарушении сетап/холд требований при чтении просто могут быть данные с другого адреса (ну защелкнулся 0 вместо 1-)). При записи может случиться запись не по тому адресу и не тех данных, вот и разрушится ваш контент-)))
|
|
|
|
|
Nov 9 2012, 03:35
|
Местный
  
Группа: Участник
Сообщений: 313
Регистрация: 2-07-11
Пользователь №: 66 023

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

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

|
Цитата(maksimp @ Nov 9 2012, 07:35)  Мультиплексор кратковременно открывается по фронту тактового сигнала специальным генератором коротких импульсов (он там нарисован на структурной схеме). А это Вы о какой структурной схеме?  В handbook-е смог найти только вот это:
|
|
|
|
|
Nov 9 2012, 19:26
|
Местный
  
Группа: Участник
Сообщений: 313
Регистрация: 2-07-11
Пользователь №: 66 023

|
Цитата(winipuh @ Nov 9 2012, 13:09)  А это Вы о какой структурной схеме?  В handbook-е смог найти только вот это: Действительно, её там нет. Но она есть в описании циклона 2, рисунок 8-13. На ней есть "Write Pulse Generator". К циклону 2 тоже относится это предупреждение про возможность порчи при чтении.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|