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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Конвертер serial->8b parallel, Хочу сделать на CPLD от Альтеры
MAXvaLL
сообщение Jan 23 2008, 10:16
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 221
Регистрация: 26-12-07
Пользователь №: 33 639



Суть-соль:
Необходимо сделать конвертер parallel<->serial
Может быть до 4х входных serial каналов, и до 4х выходных.
Тактирования 2. Одно для входных, другое для выходных каналов.
Скорость вх/вых могут быть только кратны.
Для serial интерфейса конвертор должен быть slave.
Макс. скорость до 12.3Мбит в каждую сторону по каждому serial каналу.
Параллельных интерфейсов 2, на вход и выход.
Сервисные: строб выдачи, вход для подтверждения получения, вход для строба чтения, сигнал переполнения, вход для сброса сигнала переполнения.

Примерно так:

>InSCK
>In1
>In2
>In3
>In4

<POut (8b)
<RD
>RDE

<OVFOut
>OVFOutRES

==============

>PIn (8b)
>WR

>OutSCK
<Out1
<Out2
<Out3
<Out4

<OVFIn
>OVFInRES

Вроде все...

Это возможно вообще? 05.gif
Есть желание сделать на CPLD от Альтеры. Какой лучьше пойдет для этой цели?
Если кто уже делал подобное, поделитесь пожалуйста.
Go to the top of the page
 
+Quote Post
XVR
сообщение Jan 23 2008, 11:47
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(MAXvaLL @ Jan 23 2008, 13:16) *
Суть-соль:
Необходимо сделать конвертер parallel<->serial
Может быть до 4х входных serial каналов, и до 4х выходных.
Тактирования 2. Одно для входных, другое для выходных каналов.
Скорость вх/вых могут быть только кратны.
Для serial интерфейса конвертор должен быть slave.
Макс. скорость до 12.3Мбит в каждую сторону по каждому serial каналу.
Параллельных интерфейсов 2, на вход и выход.
Сервисные: строб выдачи, вход для подтверждения получения, вход для строба чтения, сигнал переполнения, вход для сброса сигнала переполнения.

Примерно так:

>InSCK
>In1
>In2
>In3
>In4

<POut (8b)
<RD
>RDE

<OVFOut
>OVFOutRES

==============

>PIn (8b)
>WR

>OutSCK
<Out1
<Out2
<Out3
<Out4

<OVFIn
>OVFInRES

Вроде все...


Мда. Имеем - 4 клоковых домена + 2 FIFO. На этом фоне сериализатор и десериализатор уже практически незаметны 07.gif

Цитата
Это возможно вообще? 05.gif
Можно, но лучше не делать cranky.gif

Рекомендуется один клоковый домен и по возможности избавится от FIFO

Цитата
Есть желание сделать на CPLD от Альтеры. Какой лучьше пойдет для этой цели?
Очень толстый. Лучше на FPGA
Go to the top of the page
 
+Quote Post
MAXvaLL
сообщение Jan 23 2008, 12:38
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 221
Регистрация: 26-12-07
Пользователь №: 33 639



Цитата(XVR @ Jan 23 2008, 14:47) *
Рекомендуется один клоковый домен и по возможности избавится от FIFO


И что в итоге получится? (какие возможности потеряются?)

И откуда 4 кл. домена?! 2ж разных тактирования...

Сообщение отредактировал MAXvaLL - Jan 23 2008, 12:39
Go to the top of the page
 
+Quote Post
XVR
сообщение Jan 23 2008, 13:52
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(MAXvaLL @ Jan 23 2008, 15:38) *
И что в итоге получится? (какие возможности потеряются?)


А какие возможности нужны?

Получится так:

1) Один клок

2) Стробы записи (входные) в slave части конвертера

3) Стробы записи (выходные) из master частей конвертора

4) Master часть выдает ее данные сразу после приема из slave части

Требование п4. можно ослабить, введя (входной) строб чтения (это будет FIFO на 1 злемент)

Сигналы OVF* можно реализовать, но проще будет вывести сигналы Full/Empty/Ready (разные названия для одного и того же сигнала)



В принципе, так как система состоит из 2х независимых частей, то можно сделать 2 разных клока, но нужно убедится, что CPLD позволяет использовать 2 клока (IMHO они все позволяют, но точно гарантировать не могу - с Alter'ой не работал, только с Xilinx, он позволяет)



Цитата
И откуда 4 кл. домена?! 2ж разных тактирования...


InSCK

RD (пардон, он у тебя выходной, тогда 3 домена)

WR

OutSCK



И что понимается под фразой 'до 4х serial каналов' - как они должны укладываться в один параллельный выходной?
Go to the top of the page
 
+Quote Post
maxfox2k
сообщение Jan 23 2008, 16:06
Сообщение #5


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

Группа: Участник
Сообщений: 90
Регистрация: 14-09-05
Пользователь №: 8 553



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

для связи разных клоков использовать fifo довольно просто, но надо помнить, что fifo занимает память, кратную размеру блока, например по 9216 бит, для cycloneiii
Go to the top of the page
 
+Quote Post
MAXvaLL
сообщение Jan 23 2008, 20:05
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 221
Регистрация: 26-12-07
Пользователь №: 33 639



Спасибо за ответы!
Извиняюсь что коряво объяснил задачу... 01.gif

Цитата(XVR @ Jan 23 2008, 16:52) *
А какие возможности нужны?

Требование п4. можно ослабить, введя (входной) строб чтения (это будет FIFO на 1 злемент)

В принципе, так как система состоит из 2х независимых частей, то можно сделать 2 разных клока, но нужно убедится, что CPLD позволяет использовать 2 клока (IMHO они все позволяют, но точно гарантировать не могу - с Alter'ой не работал, только с Xilinx, он позволяет)

И что понимается под фразой 'до 4х serial каналов' - как они должны укладываться в один параллельный выходной?

Возможности нужны те что описал.

Да, именно так и нужно - буфер на 1 байт (но для каждого канала отдельно)

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

А вот это самое интересное: smile.gif например для serial->parallel
Считываем по 1 байту из каждого из 4х входных каналов (данные в них синхронные т.к. у них 1 клок, и непрерывные)
Каждый байт пихаем в свой буфер (FIFO на 1 байт).
Начинаем считывание следующего байта (для всех каналов)
И в это время выводим один за другим принятые байты из буфера в паралл. интерфейс.
т.е. время считывания 1 байта по посл. интерфейсу = времени выдачи 4х принятых байт.

Делается для того, что бы загнать посл. потоки в CY7C68013. laughing.gif
Если честно, то 4 потока это я взял по максимуму, в минимальном варианте может быть и 1 в каждую сторону.

Цитата(maxfox2k @ Jan 23 2008, 19:06) *
для связи разных клоков использовать fifo довольно просто, но надо помнить, что fifo занимает память, кратную размеру блока, например по 9216 бит, для cycloneiii

что-то не понял.... 05.gif
FIFO достаточно на 1 байт
клоки разные для разных направлений
Go to the top of the page
 
+Quote Post
XVR
сообщение Jan 23 2008, 20:36
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(MAXvaLL @ Jan 23 2008, 23:05) *
Спасибо за ответы!

Да, именно так и нужно - буфер на 1 байт (но для каждого канала отдельно)

2 клока необходимо, т.к. скоросте для входных и выходных потоков надо иметь возможность настраивать независимо (ну, почти независимо - они кратны у меня могут быть)
Тут поподробнее - параллельные концы (прием/передача) будут подключаться к одному CY7C68013 или к разным? Если к одному, то тут еще добавляется арбитраж входных и выходных каналов.

Цитата
А вот это самое интересное: smile.gif например для serial->parallel
Считываем по 1 байту из каждого из 4х входных каналов (данные в них синхронные т.к. у них 1 клок, и непрерывные)
Каждый байт пихаем в свой буфер (FIFO на 1 байт).
Начинаем считывание следующего байта (для всех каналов)
И в это время выводим один за другим принятые байты из буфера в паралл. интерфейс.
т.е. время считывания 1 байта по посл. интерфейсу = времени выдачи 4х принятых байт.
Это понятно, а по последовательному интерфейсу данные как-то управляются или льется непрерывная битовая последовательность? Если первое, то добавляется формирование фреймов и передача их в параллельный интерфейс. А если второе, то как предполагается управлять переключением FIFO в CY7C68013 - он же не будет отправлять данные из активного в данный момент FIFO, его надо сначала отключить от внешнего интерфейса.


Цитата
Делается для того, что бы загнать посл. потоки в CY7C68013. laughing.gif
Если честно, то 4 потока это я взял по максимуму, в минимальном варианте может быть и 1 в каждую сторону.

В общем, не совсем понятно с управлением всей этой штукой, но ничего принципиально нереализуемого пока не видно smile.gif
Go to the top of the page
 
+Quote Post
maxfox2k
сообщение Jan 23 2008, 23:21
Сообщение #8


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

Группа: Участник
Сообщений: 90
Регистрация: 14-09-05
Пользователь №: 8 553



Цитата(MAXvaLL @ Jan 23 2008, 23:05) *
что-то не понял.... 05.gif
FIFO достаточно на 1 байт
клоки разные для разных направлений

если используешь фифо не не логических елементах, а на memory блоках, то используется весь блок, даже если fifo на 1 байт.
Go to the top of the page
 
+Quote Post
XVR
сообщение Jan 24 2008, 07:53
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(maxfox2k @ Jan 24 2008, 02:21) *
если используешь фифо не не логических елементах, а на memory блоках, то используется весь блок, даже если fifo на 1 байт.
В первом посте автор собирался делать это все на CPLD - ну нет в ней memory блоков crying.gif
Go to the top of the page
 
+Quote Post
MAXvaLL
сообщение Jan 24 2008, 20:24
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 221
Регистрация: 26-12-07
Пользователь №: 33 639



Цитата(XVR @ Jan 23 2008, 23:36) *
Тут поподробнее - параллельные концы (прием/передача) будут подключаться к одному CY7C68013 или к разным? Если к одному, то тут еще добавляется арбитраж входных и выходных каналов.

Это понятно, а по последовательному интерфейсу данные как-то управляются или льется непрерывная битовая последовательность?

если второе, то как предполагается управлять переключением FIFO в CY7C68013 - он же не будет отправлять данные из активного в данный момент FIFO, его надо сначала отключить от внешнего интерфейса.

К одному.
А что есть такое арбитраж?

Непрерывный поток.

Насчет FIFO не понял... Вы имеете ввиду аппаратный или программный буфер?
Go to the top of the page
 
+Quote Post
XVR
сообщение Jan 25 2008, 07:13
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(MAXvaLL @ Jan 24 2008, 23:24) *
К одному.
А что есть такое арбитраж?


Это есть полный абзац crying.gif

У CY7C68013 только один двунаправленный порт как на прием данный в ее FIFO, так и на чтение. У тебя с сериалайзера идет 2 потока - один на прием и один на передачу, так что их придется разделить по времени и засунуть в один параллельный порт CY7C68013.



Цитата
Непрерывный поток.


Т.е можно нарезать по 8 бит не заботясь не о каких границах - это упрощает дело

Цитата
Насчет FIFO не понял... Вы имеете ввиду аппаратный или программный буфер?


Я имею в виду буффер в CY7C68013. Насколько я понял для того, что бы передать блок по USB надо сделать следующее:

1) Подключить свободный блок памяти к внешнему интерфейсу

2) Закачать в него данные

3) Переключить блок на USB Engine

4) Стартовать передачу

Т.е. одновременный прием с внешнего порта и передача ЭТОГО ЖЕ блока через USB невозможна (может быть я не прав - я глянул в datasheet по диагонали, но впечатление сложилось именно такое)



Клоки на прием и передачу имеют кратные частоты? Если нет - то дело труба, придется делать внутренние FIFO и полноразмерный арбитр внешней шины wacko.gif



Кстати, под такую задачу лучше подойдет FPGA - тригеров получается прилично, CLPD такой емкости будет стоить дороже аналогичной FPGA.
Go to the top of the page
 
+Quote Post
MAXvaLL
сообщение Jan 26 2008, 11:05
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 221
Регистрация: 26-12-07
Пользователь №: 33 639



Цитата(XVR @ Jan 25 2008, 10:13) *
У CY7C68013 только один двунаправленный порт как на прием данный в ее FIFO, так и на чтение. У тебя с сериалайзера идет 2 потока - один на прием и один на передачу, так что их придется разделить по времени и засунуть в один параллельный порт CY7C68013.

Т.е можно нарезать по 8 бит не заботясь не о каких границах - это упрощает дело

Я имею в виду буффер в CY7C68013. Насколько я понял для того, что бы передать блок по USB надо сделать следующее:
1) Подключить свободный блок памяти к внешнему интерфейсу
2) Закачать в него данные
3) Переключить блок на USB Engine
4) Стартовать передачу
Т.е. одновременный прием с внешнего порта и передача ЭТОГО ЖЕ блока через USB невозможна (может быть я не прав - я глянул в datasheet по диагонали, но впечатление сложилось именно такое)

Клоки на прием и передачу имеют кратные частоты? Если нет - то дело труба, придется делать внутренние FIFO и полноразмерный арбитр внешней шины wacko.gif

Кстати, под такую задачу лучше подойдет FPGA - тригеров получается прилично, CLPD такой емкости будет стоить дороже аналогичной FPGA.

Да, вы совершенно правы, там одна (8/16 Б) шина, так что изначальная постановка задачи идет в жжж, а я балда 01.gif

Ну, как сказать... Нарезать-то можно по 8 (или 16) бит, но надо правильно нарезать - т.е. резать по началу байта smile.gif

Насколько я понял - там все аппаратно (для EP2-8). Надо только выбирать - пишем мы в шину, или читаем из нее.

Пока клоки кратны, но по хорошему их надо вообще разделить.

Пусть будет FPGA. Я уже на все согласен =)

PS Кстати, то что я писал про 4 serial канала - это бред. 01.gif Можно сделать 1, но скорость там будет ~50МБит Может так проще?
Go to the top of the page
 
+Quote Post
XVR
сообщение Jan 26 2008, 11:51
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(MAXvaLL @ Jan 26 2008, 14:05) *
Да, вы совершенно правы, там одна (8/16 Б) шина, так что изначальная постановка задачи идет в жжж, а я балда 01.gif
Итого, переформулируем задачу:

1) Параллельный интерфейс (8 или 16 бит) к CY7C68013

FD[0-15]

IFCLK

SLCS#

SLRD (SLOE)

SLWR

PKTEND

FIFOADDR[0-1]

2) Последовательный интерфейс (2 шт)

clk

dat[0-3]

strobe (?)

3) Управление (?)

pkt_switch

?



Цитата
Ну, как сказать... Нарезать-то можно по 8 (или 16) бит, но надо правильно нарезать - т.е. резать по началу байта smile.gif
Угу, осталось это начало найти - нужна фреймовая синхронизация

Цитата
Насколько я понял - там все аппаратно (для EP2-8). Надо только выбирать - пишем мы в шину, или читаем из нее.
Да, но насколько я понял мы должны одновременно читать и писать в нее (в разные FIFO), т.к. последовательные потоки льются одновременно в обе стороны

Цитата
Пока клоки кратны, но по хорошему их надо вообще разделить.
Если их совсем разделить, то получится 3 клоковых домена и 2 внутренних FIFO, на CPLD такое уже не сделать
Цитата
Пусть будет FPGA. Я уже на все согласен =)
Пусть будет
Цитата
PS Кстати, то что я писал про 4 serial канала - это бред. 01.gif Можно сделать 1, но скорость там будет ~50МБит Может так проще?
До некоторой степени проще, но еще проще будет если serial канал будет 1 но 4х битный smile.gif



Изложите, какие вообще требования к сериалным интерфейсам и как их данные нужно передовать по USB, а то я тут занимаюсь игрой в угадайку, так можно долго обсуждать wacko.gif

Сообщение отредактировал XVR - Jan 26 2008, 11:52
Go to the top of the page
 
+Quote Post
призрак
сообщение Jan 28 2008, 06:12
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 216
Регистрация: 12-12-06
Из: Москва
Пользователь №: 23 439



Что мелочиться - пость возьмет чтото типа FLEX10K объем большой, можно наворотить все что угодно smile.gif
Go to the top of the page
 
+Quote Post
MAXvaLL
сообщение Jan 28 2008, 11:43
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 221
Регистрация: 26-12-07
Пользователь №: 33 639



XVR, спасибо вам за помощь! smile.gif

Цитата
Итого, переформулируем задачу:
.....


1) Параллельный интерфейс 8бит к CY7C68013 (8 должно хватить по скорости, а ноги нужны свободные у МП)
FD[0-7]
IFCLK
SLOE (SLCS я не видал, есть CS, но это к памяти. А SLOE надо отдельно)
SLRD
SLWR
PKTEND
FIFOADDR[0-1]

2) Последовательный интерфейс (2 шт)
clk
dat[0-3] (что значит 0-3 ?)
strobe (есть. период = 8 БАЙТ если в слове 32 бита, либо 4БАЙТА, если в слове 16бит)

3) Управление
pkt_switch (не понял 05.gif )
Надо выбирать кол-во бит в слове.

Вроде все.

Цитата
Угу, осталось это начало найти - нужна фреймовая синхронизация

Есть - strobe. Отдельно для входа и выхода.

Цитата
Да, но насколько я понял мы должны одновременно читать и писать в нее (в разные FIFO), т.к. последовательные потоки льются одновременно в обе стороны

А как можно ОДНОВРЕМЕННО? 07.gif Этаж невозможно...
Потоки-то льются одновременно, а FIFO на что? Как раз для разделения по времени.

Цитата
Если их совсем разделить, то получится 3 клоковых домена и 2 внутренних FIFO, на CPLD такое уже не сделать

Да, сложно получается. Я тут попробовал сделать на логике - получилось, но для одинаковых частот.
2 регистра сдвига, с промежуточными регистрами, счетчик и по мелочи: и, или, инверторы...
Я думаю если хорошо подумать, то для кратных тоже можно сделать.
А для разных частот, я пока даже не представляю что делать... crying.gif

Цитата
До некоторой степени проще, но еще проще будет если serial канал будет 1 но 4х битный smile.gif

Это как?

Цитата
Изложите, какие вообще требования к сериалным интерфейсам и как их данные нужно передовать по USB

Требования...
Скорость необходимую надо обеспечить (до 50Мбит на канал, если делать по 1 serial в одну сторону)
Правильно байты разделить.
Вот и все...
А какая разница как передавать? Пихаем в буфер, а USB контроллер сам пусть разбирается smile.gif
Конечно мы его настроим сначала... Скорее всего по изохрону.

Сообщение отредактировал MAXvaLL - Jan 28 2008, 11:46
Go to the top of the page
 
+Quote Post

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

 


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


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