|
Конвертер serial->8b parallel, Хочу сделать на CPLD от Альтеры |
|
|
|
Jan 23 2008, 10:16
|
Местный
  
Группа: Свой
Сообщений: 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 Вроде все... Это возможно вообще? Есть желание сделать на CPLD от Альтеры. Какой лучьше пойдет для этой цели? Если кто уже делал подобное, поделитесь пожалуйста.
|
|
|
|
|
Jan 23 2008, 11:47
|
Гуру
     
Группа: Свой
Сообщений: 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. На этом фоне сериализатор и десериализатор уже практически незаметны Цитата Это возможно вообще?  Можно, но лучше не делать Рекомендуется один клоковый домен и по возможности избавится от FIFO Цитата Есть желание сделать на CPLD от Альтеры. Какой лучьше пойдет для этой цели? Очень толстый. Лучше на FPGA
|
|
|
|
|
Jan 23 2008, 12:38
|
Местный
  
Группа: Свой
Сообщений: 221
Регистрация: 26-12-07
Пользователь №: 33 639

|
Цитата(XVR @ Jan 23 2008, 14:47)  Рекомендуется один клоковый домен и по возможности избавится от FIFO И что в итоге получится? (какие возможности потеряются?) И откуда 4 кл. домена?! 2ж разных тактирования...
Сообщение отредактировал MAXvaLL - Jan 23 2008, 12:39
|
|
|
|
|
Jan 23 2008, 13:52
|
Гуру
     
Группа: Свой
Сообщений: 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 каналов' - как они должны укладываться в один параллельный выходной?
|
|
|
|
|
Jan 23 2008, 16:06
|
Частый гость
 
Группа: Участник
Сообщений: 90
Регистрация: 14-09-05
Пользователь №: 8 553

|
во-первых если устройство единичное, то лучше взять побольше и подороже и то, что уже опробовано. если планируется массовое, то можно сначала закодировать, имплементировать и посмотреть частоты и устройства под логику.
для связи разных клоков использовать fifo довольно просто, но надо помнить, что fifo занимает память, кратную размеру блока, например по 9216 бит, для cycloneiii
|
|
|
|
|
Jan 23 2008, 20:05
|
Местный
  
Группа: Свой
Сообщений: 221
Регистрация: 26-12-07
Пользователь №: 33 639

|
Спасибо за ответы! Извиняюсь что коряво объяснил задачу... Цитата(XVR @ Jan 23 2008, 16:52)  А какие возможности нужны?
Требование п4. можно ослабить, введя (входной) строб чтения (это будет FIFO на 1 злемент)
В принципе, так как система состоит из 2х независимых частей, то можно сделать 2 разных клока, но нужно убедится, что CPLD позволяет использовать 2 клока (IMHO они все позволяют, но точно гарантировать не могу - с Alter'ой не работал, только с Xilinx, он позволяет)
И что понимается под фразой 'до 4х serial каналов' - как они должны укладываться в один параллельный выходной? Возможности нужны те что описал. Да, именно так и нужно - буфер на 1 байт (но для каждого канала отдельно) 2 клока необходимо, т.к. скоросте для входных и выходных потоков надо иметь возможность настраивать независимо (ну, почти независимо - они кратны у меня могут быть) А вот это самое интересное:  например для serial->parallel Считываем по 1 байту из каждого из 4х входных каналов (данные в них синхронные т.к. у них 1 клок, и непрерывные) Каждый байт пихаем в свой буфер (FIFO на 1 байт). Начинаем считывание следующего байта (для всех каналов) И в это время выводим один за другим принятые байты из буфера в паралл. интерфейс. т.е. время считывания 1 байта по посл. интерфейсу = времени выдачи 4х принятых байт. Делается для того, что бы загнать посл. потоки в CY7C68013. Если честно, то 4 потока это я взял по максимуму, в минимальном варианте может быть и 1 в каждую сторону. Цитата(maxfox2k @ Jan 23 2008, 19:06)  для связи разных клоков использовать fifo довольно просто, но надо помнить, что fifo занимает память, кратную размеру блока, например по 9216 бит, для cycloneiii что-то не понял.... FIFO достаточно на 1 байт клоки разные для разных направлений
|
|
|
|
|
Jan 23 2008, 20:36
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(MAXvaLL @ Jan 23 2008, 23:05)  Спасибо за ответы!
Да, именно так и нужно - буфер на 1 байт (но для каждого канала отдельно)
2 клока необходимо, т.к. скоросте для входных и выходных потоков надо иметь возможность настраивать независимо (ну, почти независимо - они кратны у меня могут быть) Тут поподробнее - параллельные концы (прием/передача) будут подключаться к одному CY7C68013 или к разным? Если к одному, то тут еще добавляется арбитраж входных и выходных каналов. Цитата А вот это самое интересное:  например для serial->parallel Считываем по 1 байту из каждого из 4х входных каналов (данные в них синхронные т.к. у них 1 клок, и непрерывные) Каждый байт пихаем в свой буфер (FIFO на 1 байт). Начинаем считывание следующего байта (для всех каналов) И в это время выводим один за другим принятые байты из буфера в паралл. интерфейс. т.е. время считывания 1 байта по посл. интерфейсу = времени выдачи 4х принятых байт. Это понятно, а по последовательному интерфейсу данные как-то управляются или льется непрерывная битовая последовательность? Если первое, то добавляется формирование фреймов и передача их в параллельный интерфейс. А если второе, то как предполагается управлять переключением FIFO в CY7C68013 - он же не будет отправлять данные из активного в данный момент FIFO, его надо сначала отключить от внешнего интерфейса. Цитата Делается для того, что бы загнать посл. потоки в CY7C68013. Если честно, то 4 потока это я взял по максимуму, в минимальном варианте может быть и 1 в каждую сторону. В общем, не совсем понятно с управлением всей этой штукой, но ничего принципиально нереализуемого пока не видно
|
|
|
|
|
Jan 23 2008, 23:21
|
Частый гость
 
Группа: Участник
Сообщений: 90
Регистрация: 14-09-05
Пользователь №: 8 553

|
Цитата(MAXvaLL @ Jan 23 2008, 23:05)  что-то не понял.... FIFO достаточно на 1 байт клоки разные для разных направлений если используешь фифо не не логических елементах, а на memory блоках, то используется весь блок, даже если fifo на 1 байт.
|
|
|
|
|
Jan 24 2008, 20:24
|
Местный
  
Группа: Свой
Сообщений: 221
Регистрация: 26-12-07
Пользователь №: 33 639

|
Цитата(XVR @ Jan 23 2008, 23:36)  Тут поподробнее - параллельные концы (прием/передача) будут подключаться к одному CY7C68013 или к разным? Если к одному, то тут еще добавляется арбитраж входных и выходных каналов.
Это понятно, а по последовательному интерфейсу данные как-то управляются или льется непрерывная битовая последовательность?
если второе, то как предполагается управлять переключением FIFO в CY7C68013 - он же не будет отправлять данные из активного в данный момент FIFO, его надо сначала отключить от внешнего интерфейса. К одному. А что есть такое арбитраж? Непрерывный поток. Насчет FIFO не понял... Вы имеете ввиду аппаратный или программный буфер?
|
|
|
|
|
Jan 25 2008, 07:13
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(MAXvaLL @ Jan 24 2008, 23:24)  К одному. А что есть такое арбитраж? Это есть полный абзац У CY7C68013 только один двунаправленный порт как на прием данный в ее FIFO, так и на чтение. У тебя с сериалайзера идет 2 потока - один на прием и один на передачу, так что их придется разделить по времени и засунуть в один параллельный порт CY7C68013. Цитата Непрерывный поток. Т.е можно нарезать по 8 бит не заботясь не о каких границах - это упрощает дело Цитата Насчет FIFO не понял... Вы имеете ввиду аппаратный или программный буфер? Я имею в виду буффер в CY7C68013. Насколько я понял для того, что бы передать блок по USB надо сделать следующее: 1) Подключить свободный блок памяти к внешнему интерфейсу 2) Закачать в него данные 3) Переключить блок на USB Engine 4) Стартовать передачу Т.е. одновременный прием с внешнего порта и передача ЭТОГО ЖЕ блока через USB невозможна (может быть я не прав - я глянул в datasheet по диагонали, но впечатление сложилось именно такое) Клоки на прием и передачу имеют кратные частоты? Если нет - то дело труба, придется делать внутренние FIFO и полноразмерный арбитр внешней шины Кстати, под такую задачу лучше подойдет FPGA - тригеров получается прилично, CLPD такой емкости будет стоить дороже аналогичной FPGA.
|
|
|
|
|
Jan 26 2008, 11:05
|
Местный
  
Группа: Свой
Сообщений: 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 и полноразмерный арбитр внешней шины Кстати, под такую задачу лучше подойдет FPGA - тригеров получается прилично, CLPD такой емкости будет стоить дороже аналогичной FPGA. Да, вы совершенно правы, там одна (8/16 Б) шина, так что изначальная постановка задачи идет в жжж, а я балда Ну, как сказать... Нарезать-то можно по 8 (или 16) бит, но надо правильно нарезать - т.е. резать по началу байта Насколько я понял - там все аппаратно (для EP2-8). Надо только выбирать - пишем мы в шину, или читаем из нее. Пока клоки кратны, но по хорошему их надо вообще разделить. Пусть будет FPGA. Я уже на все согласен =) PS Кстати, то что я писал про 4 serial канала - это бред.  Можно сделать 1, но скорость там будет ~50МБит Может так проще?
|
|
|
|
|
Jan 26 2008, 11:51
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(MAXvaLL @ Jan 26 2008, 14:05)  Да, вы совершенно правы, там одна (8/16 Б) шина, так что изначальная постановка задачи идет в жжж, а я балда  Итого, переформулируем задачу: 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) бит, но надо правильно нарезать - т.е. резать по началу байта  Угу, осталось это начало найти - нужна фреймовая синхронизация Цитата Насколько я понял - там все аппаратно (для EP2-8). Надо только выбирать - пишем мы в шину, или читаем из нее. Да, но насколько я понял мы должны одновременно читать и писать в нее (в разные FIFO), т.к. последовательные потоки льются одновременно в обе стороны Цитата Пока клоки кратны, но по хорошему их надо вообще разделить. Если их совсем разделить, то получится 3 клоковых домена и 2 внутренних FIFO, на CPLD такое уже не сделать Цитата Пусть будет FPGA. Я уже на все согласен =) Пусть будет Цитата PS Кстати, то что я писал про 4 serial канала - это бред.  Можно сделать 1, но скорость там будет ~50МБит Может так проще? До некоторой степени проще, но еще проще будет если serial канал будет 1 но 4х битный Изложите, какие вообще требования к сериалным интерфейсам и как их данные нужно передовать по USB, а то я тут занимаюсь игрой в угадайку, так можно долго обсуждать
Сообщение отредактировал XVR - Jan 26 2008, 11:52
|
|
|
|
|
Jan 28 2008, 11:43
|
Местный
  
Группа: Свой
Сообщений: 221
Регистрация: 26-12-07
Пользователь №: 33 639

|
XVR, спасибо вам за помощь! Цитата Итого, переформулируем задачу: ..... 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 (не понял  ) Надо выбирать кол-во бит в слове. Вроде все. Цитата Угу, осталось это начало найти - нужна фреймовая синхронизация Есть - strobe. Отдельно для входа и выхода. Цитата Да, но насколько я понял мы должны одновременно читать и писать в нее (в разные FIFO), т.к. последовательные потоки льются одновременно в обе стороны А как можно ОДНОВРЕМЕННО?  Этаж невозможно... Потоки-то льются одновременно, а FIFO на что? Как раз для разделения по времени. Цитата Если их совсем разделить, то получится 3 клоковых домена и 2 внутренних FIFO, на CPLD такое уже не сделать Да, сложно получается. Я тут попробовал сделать на логике - получилось, но для одинаковых частот. 2 регистра сдвига, с промежуточными регистрами, счетчик и по мелочи: и, или, инверторы... Я думаю если хорошо подумать, то для кратных тоже можно сделать. А для разных частот, я пока даже не представляю что делать... Цитата До некоторой степени проще, но еще проще будет если serial канал будет 1 но 4х битный  Это как? Цитата Изложите, какие вообще требования к сериалным интерфейсам и как их данные нужно передовать по USB Требования... Скорость необходимую надо обеспечить (до 50Мбит на канал, если делать по 1 serial в одну сторону) Правильно байты разделить. Вот и все... А какая разница как передавать? Пихаем в буфер, а USB контроллер сам пусть разбирается Конечно мы его настроим сначала... Скорее всего по изохрону.
Сообщение отредактировал MAXvaLL - Jan 28 2008, 11:46
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|