Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Конвертер serial->8b parallel
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
MAXvaLL
Суть-соль:
Необходимо сделать конвертер 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 от Альтеры. Какой лучьше пойдет для этой цели?
Если кто уже делал подобное, поделитесь пожалуйста.
XVR
Цитата(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
MAXvaLL
Цитата(XVR @ Jan 23 2008, 14:47) *
Рекомендуется один клоковый домен и по возможности избавится от FIFO


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

И откуда 4 кл. домена?! 2ж разных тактирования...
XVR
Цитата(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 каналов' - как они должны укладываться в один параллельный выходной?
maxfox2k
во-первых если устройство единичное, то лучше взять побольше и подороже и то, что уже опробовано.
если планируется массовое, то можно сначала закодировать, имплементировать и посмотреть частоты и устройства под логику.

для связи разных клоков использовать fifo довольно просто, но надо помнить, что fifo занимает память, кратную размеру блока, например по 9216 бит, для cycloneiii
MAXvaLL
Спасибо за ответы!
Извиняюсь что коряво объяснил задачу... 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 байт
клоки разные для разных направлений
XVR
Цитата(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
maxfox2k
Цитата(MAXvaLL @ Jan 23 2008, 23:05) *
что-то не понял.... 05.gif
FIFO достаточно на 1 байт
клоки разные для разных направлений

если используешь фифо не не логических елементах, а на memory блоках, то используется весь блок, даже если fifo на 1 байт.
XVR
Цитата(maxfox2k @ Jan 24 2008, 02:21) *
если используешь фифо не не логических елементах, а на memory блоках, то используется весь блок, даже если fifo на 1 байт.
В первом посте автор собирался делать это все на CPLD - ну нет в ней memory блоков crying.gif
MAXvaLL
Цитата(XVR @ Jan 23 2008, 23:36) *
Тут поподробнее - параллельные концы (прием/передача) будут подключаться к одному CY7C68013 или к разным? Если к одному, то тут еще добавляется арбитраж входных и выходных каналов.

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

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

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

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

Насчет FIFO не понял... Вы имеете ввиду аппаратный или программный буфер?
XVR
Цитата(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.
MAXvaLL
Цитата(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МБит Может так проще?
XVR
Цитата(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
призрак
Что мелочиться - пость возьмет чтото типа FLEX10K объем большой, можно наворотить все что угодно smile.gif
MAXvaLL
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
Конечно мы его настроим сначала... Скорее всего по изохрону.
XVR
Цитата(MAXvaLL @ Jan 28 2008, 14:43) *
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 ?)


Это значит 4 канала


Цитата
strobe (есть. период = 8 БАЙТ если в слове 32 бита, либо 4БАЙТА, если в слове 16бит)

3) Управление
pkt_switch (не понял 05.gif )


Нарезка на USB пакеты. Насколько я понял CY работает так:

1) Данные заливаются в FIFO CY

2) Выставляется PKTEND, текущее FIFO начинает выливаться в USB

3) Переключаемся на другое FIFO



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

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


Цитата
4х битный serial
Это как?
Это последовательно/паралельный интерфейс - последовательно по 4 бита за раз. От 4х отдельных serial каналов отличается порядком битов в выходной последовательности

Цитата
А какая разница как передавать? Пихаем в буфер, а USB контроллер сам пусть разбирается smile.gif
Боюсь, что не разберется. Похоже им надо управлять



Что касается FPGA то подойдет практически любая из младшего семейства, например Spartan2 (E) или Spartan3 (E) от Xilinx (у Alter'ы не знаю - не работал)
MAXvaLL
У меня оказывается был старый даташит на CY. В котором непонятно было нехрена. Отсюда и недопонимание было....
Новый оказался куда лучше smile.gif

SLCS# там таки появился. Но его можно всегда на select

Цитата(XVR @ Jan 28 2008, 21:47) *
Нарезка на USB пакеты. Насколько я понял CY работает так:
1) Данные заливаются в FIFO CY
2) Выставляется PKTEND, текущее FIFO начинает выливаться в USB
3) Переключаемся на другое FIFO

Да, но есть еще авто режим, когда пакет отправляется, набрав X байт.
В моем случае это удобнее, т.к. пакеты постоянной длинны.
Соотв-но PKTEND не нужен.

Цитата
2 FIFO в FPGA + арбитер, выливающий данные из непустых FIFO в CY по очереди

А если скорости в несколько раз (до 4х) отличаются? Там ничего не зашкалит?

Цитата
Это последовательно/паралельный интерфейс - последовательно по 4 бита за раз.

Не, это не пойдет однозначно. Либо 4 канала. Либо 1 на скорости в 4 раза выше.

Цитата
Боюсь, что не разберется. Похоже им надо управлять

Ткните меня в даташит пожалуйста (параграф). Что-то не вижу чем надо управлять...

Цитата
Что касается FPGA то подойдет практически любая из младшего семейства, например Spartan2 (E) или Spartan3 (E) от Xilinx (у Alter'ы не знаю - не работал)

А насколько это дорого? По сравнению с теми же CPLDхами?
XVR
Цитата(MAXvaLL @ Jan 29 2008, 00:41) *
SLCS# там таки появился. Но его можно всегда на select


Его можно вообще на землю smile.gif


Цитата
Да, но есть еще авто режим, когда пакет отправляется, набрав X байт.
В моем случае это удобнее, т.к. пакеты постоянной длинны.
Соотв-но PKTEND не нужен.
Ок

Цитата
А если скорости в несколько раз (до 4х) отличаются? Там ничего не зашкалит?
Главное что бы скорость приема/передачи в CY была больше, чем у последовательных интерфейсов

Цитата
Не, это не пойдет однозначно. Либо 4 канала. Либо 1 на скорости в 4 раза выше.
А как надо биты из этих 4х каналов складавать в выходные байты в CY?

Цитата
Ткните меня в даташит пожалуйста (параграф). Что-то не вижу чем надо управлять...
Отбой, в datasheet'е было очень туманно описан процесс передачи буферов между SIE/CPU/Peripheral, скачал

Endpoint FIFO Architecture of EZ-USB FX1/FX2 - там вроде все проще, ничем управлять не надо.



Кстати, а что делать с исчерпанием/переполнением FIFO в CY?


Цитата
А насколько это дорого? По сравнению с теми же CPLDхами?


XC2S50E-PQ208C ~ $19

XC3S100E-4VQG100C ~ $12
MAXvaLL
Цитата(XVR @ Jan 29 2008, 13:16) *
Главное что бы скорость приема/передачи в CY была больше, чем у последовательных интерфейсов

А как надо биты из этих 4х каналов складавать в выходные байты в CY?

Кстати, а что делать с исчерпанием/переполнением FIFO в CY?

Больше. Полюбому smile.gif

Надо байты последовательно (по номерам)
Я думаю все же проще 1 канал скоросной. Там уже все само разложено как надо.

Ну, переполнения не должно быть - ибо авто отправка =) Надо только Х с умом выбрать.
Это надо для ручной отправки при помощи пакетенда, чтобы знать,что буфер уже забит.
А пустой - буфер - значит читать больше нечего smile.gif
XVR
Цитата(MAXvaLL @ Jan 29 2008, 14:59) *
Ну, переполнения не должно быть - ибо авто отправка =) Надо только Х с умом выбрать.
Это надо для ручной отправки при помощи пакетенда, чтобы знать,что буфер уже забит.
А пустой - буфер - значит читать больше нечего smile.gif


А что делать для канала USB -> Serial если FIFO в CY пустое? Что передавать?



Да и с одним каналом на 50 МГц скорее всего получится, хотя потребуется указать тайминги фитеру.
MAXvaLL
Цитата(XVR @ Jan 29 2008, 18:09) *
А что делать для канала USB -> Serial если FIFO в CY пустое? Что передавать?

Да и с одним каналом на 50 МГц скорее всего получится, хотя потребуется указать тайминги фитеру.

Ничего. smile.gif
USB должен успевать подсовывать данные.

Можно подробнее - ничего не понял 05.gif
XVR
Цитата(MAXvaLL @ Jan 29 2008, 18:27) *
Ничего. smile.gif
USB должен успевать подсовывать данные.

Можно подробнее - ничего не понял 05.gif


Нужно будет указать программе разводки FPGA, что у тебя на сериальных клоках идет 50 MHz, и указать все времена установок/задержек последовательных данных относительно клоков. Для 13 MHz это не обязательно (но желательно), FPGA успеет в любом случае smile.gif



Ну в общем, если это все устраивает, то берешь ISE WebPack (если Xilinx) или что там у Alter'ы, пишешь схему в Verilog'е, разводишь и заливаешь через CY (ноги для заливки придется предусмотреть)
MAXvaLL
Цитата(XVR @ Jan 29 2008, 21:07) *
Ну в общем, если это все устраивает, то берешь ISE WebPack (если Xilinx) или что там у Alter'ы, пишешь схему в Verilog'е, разводишь и заливаешь через CY (ноги для заливки придется предусмотреть)

А насколько это геморно будет? Ну, по объему, примерно.
Я тут видел конвертер SPI-I2C, шибко много кода. 05.gif

Предусмотреть надо в CY? И сколько?

Значит на FPGA полюбому лучше?
XVR
Цитата(MAXvaLL @ Jan 30 2008, 00:51) *
А насколько это геморно будет? Ну, по объему, примерно.
Я тут видел конвертер SPI-I2C, шибко много кода. 05.gif
Это будет больше, чем SPI-I2C конвертер smile.gif FIFO будут сгенерированны автоматически CoreGen'ом, остальное придется писать ручками в Verilog'е (строк 500-1000 примерно)
Цитата
Предусмотреть надо в CY? И сколько?
2 выделенных + 3 разделяемых с параллельным интерфейсом (причем 1 из них Open-drain)
Цитата
Значит на FPGA полюбому лучше?
CPLD такой емкости, что бы туда влезла пара FIFO будет стоить на порядок больше.



Кстати, понадобится синхронизация скорости потоков USB->FPGA и FPGA->Serial, иначе никаких FIFO не хватит. Т.е. еще как минимум нужен входной сигнал о непустом передающем буфере FIFO в CY
MAXvaLL
Еще вопросец:
Есть разница на чем писать: AHDL/VHDL/Verilog? Что лучше начать изучать?

А что вы скажите по поводу графики? (ну, элементы там всякие клепать)

А можно прописать логику, а ПЛИС выбрать потом, по потребностям того, что получилось?
XVR
Цитата(MAXvaLL @ Jan 30 2008, 21:18) *
Еще вопросец:
Есть разница на чем писать: AHDL/VHDL/Verilog? Что лучше начать изучать?
Verilog, однозначно smile.gif
Цитата
А что вы скажите по поводу графики? (ну, элементы там всякие клепать)
Забыть, как страшный сон. Объемы современных схем таковы, что в графическом виде они займут не одну пачку бумаги cranky.gif
Цитата
А можно прописать логику, а ПЛИС выбрать потом, по потребностям того, что получилось?
До некоторой степени можно. Для создания проекта в IDE всеравно придется выбрать какой то тип ПЛИС, потом можно его поменять.
dvladim
Цитата(XVR @ Jan 30 2008, 21:38) *
Verilog, однозначно smile.gif

Не однозначно.

Verilog и VHDL занимают примерно по 50% рынка.
Исторически повелось, что Verilog чаще использовался для проектов в ASIC. Для проектов в ПЛИС чаще используют VHDL. Но оба этих языка примерно равны и являются лидерами.
Перспективным считается SystemVerilog, но его рынок пока невелик.
MAXvaLL
Цитата(XVR @ Jan 30 2008, 21:38) *
Забыть, как страшный сон. Объемы современных схем таковы, что в графическом виде они займут не одну пачку бумаги cranky.gif

Видал я тут:
Цитата
Ну вот например, как сделать грубо говоря, видеоплату? Интересен сам подход. Т.е. в моем девайсе есть два SRAMа по 1Мбайт каждый. Есть видеоцап (ADV7123), в альтере сидит загружаемая таблица - палитра. И того имеем 256 цветов из палитры 2^24. Надо разворачивать видеобуфер сквозь эту таблицу в ЦАП, причем SRAM читаем с интерливом (т.к. они 10 нс, а максимальная частота на выходе - 200МГц). А еще надо уметь в SRAM записывать, желательно во время чтения. А еще там болтается SPI DataFlash на 1Мбайт, из которой надо уметь вытащить данные, разжать из RLE и сунуть в SRAM. Да, а тактируется это все от PLL, которая умеет давать частоты от 2 до 200МГц с шагом 1 КГц, снаружи только ГУН. Ну и само собой, должны быть счетчики синхронизации. Вот примерно такой девайс. Добавлю, что он у меня сейчас стоит на столе, а справа стоит монитор, на котором светится картинка, формируемая этим девайсом 100% схемного ввода... Тактовая сейчас 135, разрешение 1280*1024@75Hz (больше LCD монитор не тянет), работает превосходно (после долгих мучений), распаковывает картинку за 0.12 секунды, правда с монопольным доступом к SRAM во время записи.

А что бы мне тут дал верилог??

И как вам такое? smile.gif
RHnd
Проект не видел, но с верояностью 99% verilog/vhdl при достаточных навыках его использования сократил бы время разработки, существенно упростил бы отладку и дальнейшую поддержку изделия. Это знаете, у меня тут баланс предприятия лежит, посчитанный на арифмомитре, и нафига бух. программы осваивать?
khach
Цитата(MAXvaLL @ Jan 31 2008, 01:02) *
Видал я тут:

И как вам такое? smile.gif

удаление гланд через непредназначенное для этого отверстие. Полное отсутствие возможности пользоваться отлаженным сторонним кодом.
@MAXvaLL
Опишите функцию своего устройства, а то меня терзают смутные сомнения что городиться преобразователь I2S-шина CY7C68013 для аудиоустройства? Тгда всю проблему можно решить парой ссылок на opencores.
MAXvaLL
Цитата(khach @ Jan 31 2008, 11:15) *
Опишите функцию своего устройства, а то меня терзают смутные сомнения что городиться преобразователь I2S-шина CY7C68013 для аудиоустройства? Тгда всю проблему можно решить парой ссылок на opencores.

Вы как всегда правы smile.gif
I2S или LeftJustified
Но есть желание поддержки TDM (это когда до 4х устройств висит на одной шине, и посылки разделены по времени. скорость соотв. выше)

Буду признателен за помощь. Я в плис еще ЧАЙНЕГ... ( эмалированный biggrin.gif )

PS Verilog тут глянул - прикольная тема! Мне, как Си программисту очень близко smile.gif
XVR
Цитата(dvladim @ Jan 30 2008, 23:41) *
Не однозначно.

Verilog и VHDL занимают примерно по 50% рынка.
Исторически повелось, что Verilog чаще использовался для проектов в ASIC. Для проектов в ПЛИС чаще используют VHDL. Но оба этих языка примерно равны и являются лидерами.
Перспективным считается SystemVerilog, но его рынок пока невелик.
Verilog соотносится с VHDL примерно как C с ADA. Еще можно взглянуть на одинаковые тестовые проекты, сделанные в Verilog и VHDL, посчитать строки кода и прикинуть, что проще изучить smile.gif

Например, примеры конструкций, синтезируемых в примитивы (Xilinx, XST) занимают

Verilog - 2200 строк

VHDL - 2800 строк

Так что для изучения с нуля и последующего использования Verilog явно предпочтительней (хотя рекомендуется знать оба)
MAXvaLL
Нашел I2S Interface core.
Но он на VHDL, а я уж взялся за Verilog, и даж продвинулся неплохо... Не хочу пока голову забивать!
Что-то слышал про конвертеры...
Да, там еще шина паралл. хз какя.
Так что вопрос актуален пока!
XVR
Цитата(MAXvaLL @ Feb 1 2008, 02:36) *
Нашел I2S Interface core.
Но он на VHDL, а я уж взялся за Verilog, и даж продвинулся неплохо... Не хочу пока голову забивать!
Что-то слышал про конвертеры...
Да, там еще шина паралл. хз какя.
Так что вопрос актуален пока!


Собственно I2S Interface состоит из сдвигового регистра smile.gif Для стыковки с CY понадобится еще куча всего, так что сам по себе он практически бесполезен.

Что касается использования готовых VHDL корок в проекте на Verilog'е, то это вполне возможно - практически все синтезаторы и системы моделирования допускают смесь этих языков. Только это вряд ли оправдано для I2S Interface core biggrin.gif
MAXvaLL
Цитата(XVR @ Feb 1 2008, 12:14) *
Собственно I2S Interface состоит из сдвигового регистра smile.gif Для стыковки с CY понадобится еще куча всего, так что сам по себе он практически бесполезен.

Что касается использования готовых VHDL корок в проекте на Verilog'е, то это вполне возможно - практически все синтезаторы и системы моделирования допускают смесь этих языков. Только это вряд ли оправдано для I2S Interface core biggrin.gif

Это понятно
Но не все так просто там. Там уже есть FIFO, и LRCK сам разбирает.
XVR
Цитата(MAXvaLL @ Feb 1 2008, 14:44) *
Это понятно
Но не все так просто там. Там уже есть FIFO, и LRCK сам разбирает.
FIFO лучше взять от производителя FPGA - оно будет оптимизированно на данный конкретный кристал.
MAXvaLL
Смотрю тут сорец один:
Код
...
reg bclk;
reg [3:0]fd;
...
initial begin fd=0;end
...
always @(posedge clk)
begin
    fd<=fd+1;
    if(fd==7) fd<=0;
    if(fd<4) bclk<=0;
    else  bclk<=1;
        
end

И что-то никак не врубаю - как эта хрень работать будет?
Заявленно, что clk=16.9344 MHz и что получится bck=1.4112 MHz (делим на 12)
Я что-то не верю! И вообще, как-то через Ж... сделано.

bclk не инитится. оно 0 будет?

Понимаю так: (clk сначала остановлен)
0 0 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 :clk
0 0 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 0 0 :fd
0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0:bclk

Получается, что делится на 8 07.gif

Честно говоря не очень ясно еще: при fd==7, в него одновременно пихается 0 и 8 (fd+1)
fd<=fd+1 и if(fd==7) fd<=0 выполняются параллельно или последовательно? <= неблок. - значит вроде паралл.

может так?
fd установится в 7, и сразу сбросится в 0
0 0 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 clk
0 0 0 0 1 1 2 2 3 3 4 4 5 5 6 6 0 0 1 1 2 2 3 3 4 4 5 5 6 6 0 0 fd
0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 bclk
тогда делится на 7... crying.gif
XVR
Цитата(MAXvaLL @ Feb 1 2008, 17:56) *
Смотрю тут сорец один:
Код
...
reg bclk;
reg [3:0]fd;
...
initial begin fd=0;end
...
always @(posedge clk)
begin
    fd<=fd+1;
    if(fd==7) fd<=0;
    if(fd<4) bclk<=0;
    else  bclk<=1;
        
end

И что-то никак не врубаю - как эта хрень работать будет?
Заявленно, что clk=16.9344 MHz и что получится bck=1.4112 MHz (делим на 12)
Я что-то не верю!
И правильно - будет делить на 7, и то не факт smile.gif



Цитата
И вообще, как-то через Ж... сделано.
Это точно


Цитата
bclk не инитится. оно 0 будет?
Оно будет X до первого присваивания. В реальной железке будет чем то, неизвестно чем (скорее всего 0)


Цитата
Честно говоря не очень ясно еще: при fd==7, в него одновременно пихается 0 и 8 (fd+1)
fd<=fd+1 и if(fd==7) fd<=0 выполняются параллельно или последовательно? <= неблок. - значит вроде паралл.
Параллельно. Симулятор имеет право обругаться.


Цитата
может так?
fd установится в 7, и сразу сбросится в 0
0 0 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 clk
0 0 0 0 1 1 2 2 3 3 4 4 5 5 6 6 0 0 1 1 2 2 3 3 4 4 5 5 6 6 0 0 fd
0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 bclk
тогда делится на 7... crying.gif
Автор предполагал именно так, но более правильно было бы записать
Код
always @(posedge clk)
begin
    if(fd==7) fd<=0;
    else fd<=fd+1;
    if(fd<4) bclk<=0;
    else  bclk<=1;        
end
MAXvaLL
Цитата(XVR @ Feb 1 2008, 18:33) *
Автор предполагал именно так, но более правильно было бы записать

Код
always @(posedge clk)
begin
    if(fd==7) fd<=0;
    else fd<=fd+1;
    if(fd<4) bclk<=0;
    else  bclk<=1;        
end

Тогда автар дурак! cranky.gif
Ладно бы на 6, но причем тут 7, если надо на 12?!
Причем типо устройство и типа работает.

Железно smile.gif
MAXvaLL
Тут при реализации вопрос возник:
параллельная шина у нас двунаправленная.
А я не пойму, как это описать на верилоге?
Создать 2 шины input и output и физически конектить к одним пинам?
Или ода шина может быть i/o? И как это описать?
XVR
Цитата(MAXvaLL @ Feb 3 2008, 15:32) *
Тут при реализации вопрос возник:
параллельная шина у нас двунаправленная.
А я не пойму, как это описать на верилоге?
Создать 2 шины input и output и физически конектить к одним пинам?
Или ода шина может быть i/o? И как это описать?
Поставить физический элемент I/O буфера c 3мя состояниями. У него наружу (на выводы FPGA) идет сигнал типа inout, а внутрь (к схеме) - 2 разделенных сигнала на ввод и вывод.

Для Xilinx это IOBUF, порты:

IO - двунаправленная внешняя шина
I - Вход
O - Выход
T - Разрешение передачи (лог. 0)
MAXvaLL
Цитата(XVR @ Feb 3 2008, 18:58) *
Поставить физический элемент I/O буфера c 3мя состояниями. У него наружу (на выводы FPGA) идет сигнал типа inout, а внутрь (к схеме) - 2 разделенных сигнала на ввод и вывод.

Для Xilinx это IOBUF, порты:

Это библиотечный элемент?
А описать его включение на верилоге можно? Или только в редакторе производителя?
XVR
Цитата(MAXvaLL @ Feb 3 2008, 23:04) *
Это библиотечный элемент?
Да
Цитата
А описать его включение на верилоге можно?
Да

Код


IOBUF my_3state_buffer(.I(input_line),.O(output_line),.IO(pad_line),.T(tristate_line));
MAXvaLL
Цитата(XVR @ Feb 4 2008, 19:41) *
IOBUF my_3state_buffer(.I(input_line),.O(output_line),.IO(pad_line),.T(tristate_line))
;

Понял. Спасибо!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.