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

 
 
> Параллельно запись/чтение в/из памяти ?, Как сделать ?
Саша Z
сообщение Nov 28 2007, 21:06
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822



Есть задача: на входе идет поток и байтовых данных с rate скажем Х MHz (каждый clock - запись байта).
На выходе нужно дать строенные слова, т.е. 24 бита (паковать по 3 последовательно полученных байта и выдавать слово наружу), т.е. со скоростью Х/3 MHz.
Если предположим выходной (read) clock получен делением на 3 входного (write) clockа (значит есть небольшая задержка между edges входного и выходного clocks), можно ли каким-то образом использовать буфер из 3 байт по накоплении которого слово в 24 бита выдается наружу согласно read clock ?
Проблема (как я вижу) в том что по третьему write clockу когда третий байт только записался нужно сразу-же читать все слово (все три байта буфера параллельно) по read clockу, что может примерно совпасть с записью первого байта следующей тройки (т.е. четвертого по счету с streame).
Может ли тут помочь dual port ram ?

Если это не реально, какие более реальные идеи есть ? Может что-то врое ping-pong buffer (т.е. иметь 2 буфера по 3 байта каждый - как только первый заполнился со входа всеми тремя байтами - он тут-же асинхронно скидывается во второй и 24-битное слово считывается на выхом со второго, в то время как первый заполняется следующими 3мя байтами потока, и т.д.)...

Что скажем ?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
yuri_d
сообщение Nov 28 2007, 22:30
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 292
Регистрация: 28-01-05
Из: МО, Мытищи
Пользователь №: 2 274



Применить Dual Port RAM можно, но это напоминает стрельбу из пушки по воробьям.

Еще рекомендую отказаться от асинхронной установки регистров. Современные программируемые микросхемы (как CPLD, так и FPGA) плохо приспособлены для такого рода передачи данных.

И напоследок по поводу самой задачи. Можно обойтись двумя байтовыми регистрами и счетчиком до 3.
Порядок работы следующий:
1) если счетчик равен 0, то по входному тактовому импульсу записываем входные данные в первый регистр. увеличиваем счетчик на 1.
2) если счетчик равен 1, то по входному тактовому импульсу записываем данные во второй регистр. снова увеличивем счетчик на 1.
3) если счетчик равен 2, то по входному тактовому импульсу сбрасываем счетчик в 0. одновременно с этим передаем на выход тактовый импульс. выходным тактовым импульсом может быть равенство счетчика нулю.

Выходное 24-битное слово состоит из значений обоих регистров и байта входных данных.

напоследок хорошо бы отказаться от формирования тактовых импульсов подобным способом. Значительно лучше работают синхронные схемы, где имеется один тактовый сигнал и управлять сигналом clock enable для того, чтобы делать или не делать что либо.
Go to the top of the page
 
+Quote Post
skv
сообщение Nov 30 2007, 12:08
Сообщение #3


Участник
*

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



Цитата(yuri_d @ Nov 29 2007, 01:30) *
Применить Dual Port RAM можно, но это напоминает стрельбу из пушки по воробьям.

Еще рекомендую отказаться от асинхронной установки регистров. Современные программируемые микросхемы (как CPLD, так и FPGA) плохо приспособлены для такого рода передачи данных.

И напоследок по поводу самой задачи. Можно обойтись двумя байтовыми регистрами и счетчиком до 3.
Порядок работы следующий:
1) если счетчик равен 0, то по входному тактовому импульсу записываем входные данные в первый регистр. увеличиваем счетчик на 1.
2) если счетчик равен 1, то по входному тактовому импульсу записываем данные во второй регистр. снова увеличивем счетчик на 1.
3) если счетчик равен 2, то по входному тактовому импульсу сбрасываем счетчик в 0. одновременно с этим передаем на выход тактовый импульс. выходным тактовым импульсом может быть равенство счетчика нулю.

Выходное 24-битное слово состоит из значений обоих регистров и байта входных данных.

напоследок хорошо бы отказаться от формирования тактовых импульсов подобным способом. Значительно лучше работают синхронные схемы, где имеется один тактовый сигнал и управлять сигналом clock enable для того, чтобы делать или не делать что либо.


Схема и так синхронная,если в регистры писать по клоку.
Но я бы посоветовал сделать на шести регистрах. В первые три по счетчику писать входное слово побайтно. Когда счетчик будет равен 2 вырабатывать сигнал перезаписи в выходные три регистра и сбрасывать счетчик. Можно снова заполнять входной буфер. Ноль, вкачестве разрешения, использовать не рекомендую. Пока во входнм регистре ничего нет он так же равен нулю и схема все время будет вырабатывать сигнал перезаписи.
Сразу оговорюсь, что схема синхронная. Сигналы записи, чтения и перезаписи являются разрешающими, а пишем по клоку.
Go to the top of the page
 
+Quote Post
Саша Z
сообщение Nov 30 2007, 21:26
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822



Цитата(skv @ Nov 30 2007, 16:08) *
Схема и так синхронная,если в регистры писать по клоку.
Но я бы посоветовал сделать на шести регистрах. В первые три по счетчику писать входное слово побайтно. Когда счетчик будет равен 2 вырабатывать сигнал перезаписи в выходные три регистра и сбрасывать счетчик. Можно снова заполнять входной буфер. Ноль, вкачестве разрешения, использовать не рекомендую. Пока во входнм регистре ничего нет он так же равен нулю и схема все время будет вырабатывать сигнал перезаписи.
Сразу оговорюсь, что схема синхронная. Сигналы записи, чтения и перезаписи являются разрешающими, а пишем по клоку.


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

Может я вас неправильно понял, и вы имели ввиду входные 2 регистра для первого и второго байта, а третий (по третьему входному клоку) сразу-же пишеться вместе в выходами 2х входных регистров в выходной буфер (из 3х параллельных регистров). Но тогда мне нужно блокировать двум входным регистрам каждый третий клок.

Т.е. если я вас правильно понял, "алгоритм" такой:
1. Пишем 3 последовательных байт считаю их счетчиком. (1 -> 2-> 3)
2. По записи первых 2х байт - счетчик = 2.
3. По записи третьего байта, то бишь по третьему входному клоку - загружаем выходной буфер (3 параллельных регистра), но одновременно блокируем этот каждый третий клок двум входным регистрам.
Кроме того, клок выходного буфера по частоте = 1/3 входного клока и синхронизириван по входному.
Этот же клок выходного буфера идет наружу как клок считывания буфера, значит ежели буфер загружается по фронту выходного клока, значит данные можно читать по его спаду.

Я вас правильно понял ?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Саша Z   Параллельно запись/чтение в/из памяти ?   Nov 28 2007, 21:06
- - rezident   Вы вроде начинаете работать с ПЛИС? Вот и познаком...   Nov 28 2007, 21:37
- - Саша Z   Спасибо, это действительно вариант, вроде просто. ...   Nov 29 2007, 15:01
|- - sazh   Цитата(Саша Z @ Nov 29 2007, 18:01) Спаси...   Nov 29 2007, 15:42
|- - Саша Z   Цитата(sazh @ Nov 29 2007, 19:42) Обычно ...   Nov 29 2007, 22:15
|- - AlexB   Цитата(Саша Z @ Nov 30 2007, 02:15) Что и...   Nov 29 2007, 23:05
- - BSV   Что Вы все так рветесь прикрутить еще один тактовы...   Nov 30 2007, 21:46
|- - Саша Z   Цитата(BSV @ Dec 1 2007, 01:46) Что Вы вс...   Nov 30 2007, 21:58
|- - BSV   Цитата(Саша Z @ Dec 1 2007, 00:58) Значит...   Nov 30 2007, 22:04
|- - Саша Z   Цитата(BSV @ Dec 1 2007, 02:04) Верно, то...   Nov 30 2007, 22:20
- - BSV   Почитайте мой предыдущий пост - я его немного попр...   Nov 30 2007, 22:27
|- - Саша Z   Цитата(BSV @ Dec 1 2007, 02:27) Почитайте...   Nov 30 2007, 22:56
|- - Саша Z   Цитата(BSV @ Dec 1 2007, 02:27) Почитайте...   Dec 3 2007, 16:09
- - BSV   А с генерацией выходного клока разобрались? Кстати...   Dec 3 2007, 21:12
- - Саша Z   Цитата(BSV @ Dec 4 2007, 01:12) А с генер...   Dec 3 2007, 21:33


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

 


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


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