|
Конвертер 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
|
|
|
|
|
Jan 28 2008, 18:47
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(MAXvaLL @ Jan 28 2008, 14:43)  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 ?) Это значит 4 канала Цитата strobe (есть. период = 8 БАЙТ если в слове 32 бита, либо 4БАЙТА, если в слове 16бит) 3) Управление pkt_switch (не понял  ) Нарезка на USB пакеты. Насколько я понял CY работает так: 1) Данные заливаются в FIFO CY 2) Выставляется PKTEND, текущее FIFO начинает выливаться в USB 3) Переключаемся на другое FIFO Цитата А как можно ОДНОВРЕМЕННО?  Этаж невозможно... Потоки-то льются одновременно, а FIFO на что? Как раз для разделения по времени. Последовательные входные и выходные потоки - одновременно, потоки в FIFO CY - по очереди Цитата Да, сложно получается. Я тут попробовал сделать на логике - получилось, но для одинаковых частот. 2 регистра сдвига, с промежуточными регистрами, счетчик и по мелочи: и, или, инверторы... Я думаю если хорошо подумать, то для кратных тоже можно сделать. А для разных частот, я пока даже не представляю что делать...  2 FIFO в FPGA + арбитер, выливающий данные из непустых FIFO в CY по очереди Цитата 4х битный serial Это как? Это последовательно/паралельный интерфейс - последовательно по 4 бита за раз. От 4х отдельных serial каналов отличается порядком битов в выходной последовательности Цитата А какая разница как передавать? Пихаем в буфер, а USB контроллер сам пусть разбирается  Боюсь, что не разберется. Похоже им надо управлять Что касается FPGA то подойдет практически любая из младшего семейства, например Spartan2 (E) или Spartan3 (E) от Xilinx (у Alter'ы не знаю - не работал)
|
|
|
|
|
Jan 28 2008, 21:41
|
Местный
  
Группа: Свой
Сообщений: 221
Регистрация: 26-12-07
Пользователь №: 33 639

|
У меня оказывается был старый даташит на CY. В котором непонятно было нехрена. Отсюда и недопонимание было.... Новый оказался куда лучше 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хами?
Сообщение отредактировал MAXvaLL - Jan 28 2008, 22:00
|
|
|
|
|
Jan 29 2008, 10:16
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(MAXvaLL @ Jan 29 2008, 00:41)  SLCS# там таки появился. Но его можно всегда на select Его можно вообще на землю Цитата Да, но есть еще авто режим, когда пакет отправляется, набрав 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
|
|
|
|
|
Jan 29 2008, 11:59
|
Местный
  
Группа: Свой
Сообщений: 221
Регистрация: 26-12-07
Пользователь №: 33 639

|
Цитата(XVR @ Jan 29 2008, 13:16)  Главное что бы скорость приема/передачи в CY была больше, чем у последовательных интерфейсов
А как надо биты из этих 4х каналов складавать в выходные байты в CY?
Кстати, а что делать с исчерпанием/переполнением FIFO в CY? Больше. Полюбому Надо байты последовательно (по номерам) Я думаю все же проще 1 канал скоросной. Там уже все само разложено как надо. Ну, переполнения не должно быть - ибо авто отправка =) Надо только Х с умом выбрать. Это надо для ручной отправки при помощи пакетенда, чтобы знать,что буфер уже забит. А пустой - буфер - значит читать больше нечего
|
|
|
|
|
Jan 29 2008, 15:09
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(MAXvaLL @ Jan 29 2008, 14:59)  Ну, переполнения не должно быть - ибо авто отправка =) Надо только Х с умом выбрать. Это надо для ручной отправки при помощи пакетенда, чтобы знать,что буфер уже забит. А пустой - буфер - значит читать больше нечего  А что делать для канала USB -> Serial если FIFO в CY пустое? Что передавать? Да и с одним каналом на 50 МГц скорее всего получится, хотя потребуется указать тайминги фитеру.
|
|
|
|
|
Jan 29 2008, 15:27
|
Местный
  
Группа: Свой
Сообщений: 221
Регистрация: 26-12-07
Пользователь №: 33 639

|
Цитата(XVR @ Jan 29 2008, 18:09)  А что делать для канала USB -> Serial если FIFO в CY пустое? Что передавать?
Да и с одним каналом на 50 МГц скорее всего получится, хотя потребуется указать тайминги фитеру. Ничего.  USB должен успевать подсовывать данные. Можно подробнее - ничего не понял
|
|
|
|
|
Jan 29 2008, 18:07
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(MAXvaLL @ Jan 29 2008, 18:27)  Ничего. USB должен успевать подсовывать данные. Можно подробнее - ничего не понял  Нужно будет указать программе разводки FPGA, что у тебя на сериальных клоках идет 50 MHz, и указать все времена установок/задержек последовательных данных относительно клоков. Для 13 MHz это не обязательно (но желательно), FPGA успеет в любом случае Ну в общем, если это все устраивает, то берешь ISE WebPack (если Xilinx) или что там у Alter'ы, пишешь схему в Verilog'е, разводишь и заливаешь через CY (ноги для заливки придется предусмотреть)
Сообщение отредактировал XVR - Jan 29 2008, 18:20
|
|
|
|
|
Jan 29 2008, 21:51
|
Местный
  
Группа: Свой
Сообщений: 221
Регистрация: 26-12-07
Пользователь №: 33 639

|
Цитата(XVR @ Jan 29 2008, 21:07)  Ну в общем, если это все устраивает, то берешь ISE WebPack (если Xilinx) или что там у Alter'ы, пишешь схему в Verilog'е, разводишь и заливаешь через CY (ноги для заливки придется предусмотреть) А насколько это геморно будет? Ну, по объему, примерно. Я тут видел конвертер SPI-I2C, шибко много кода.  Предусмотреть надо в CY? И сколько? Значит на FPGA полюбому лучше?
Сообщение отредактировал MAXvaLL - Jan 29 2008, 21:52
|
|
|
|
|
Jan 30 2008, 07:22
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(MAXvaLL @ Jan 30 2008, 00:51)  А насколько это геморно будет? Ну, по объему, примерно. Я тут видел конвертер SPI-I2C, шибко много кода.  Это будет больше, чем SPI-I2C конвертер  FIFO будут сгенерированны автоматически CoreGen'ом, остальное придется писать ручками в Verilog'е (строк 500-1000 примерно) Цитата Предусмотреть надо в CY? И сколько? 2 выделенных + 3 разделяемых с параллельным интерфейсом (причем 1 из них Open-drain)Цитата Значит на FPGA полюбому лучше? CPLD такой емкости, что бы туда влезла пара FIFO будет стоить на порядок больше. Кстати, понадобится синхронизация скорости потоков USB->FPGA и FPGA->Serial, иначе никаких FIFO не хватит. Т.е. еще как минимум нужен входной сигнал о непустом передающем буфере FIFO в CY
|
|
|
|
|
Jan 30 2008, 18:38
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(MAXvaLL @ Jan 30 2008, 21:18)  Еще вопросец: Есть разница на чем писать: AHDL/VHDL/Verilog? Что лучше начать изучать? Verilog, однозначно Цитата А что вы скажите по поводу графики? (ну, элементы там всякие клепать) Забыть, как страшный сон. Объемы современных схем таковы, что в графическом виде они займут не одну пачку бумаги Цитата А можно прописать логику, а ПЛИС выбрать потом, по потребностям того, что получилось? До некоторой степени можно. Для создания проекта в IDE всеравно придется выбрать какой то тип ПЛИС, потом можно его поменять.
|
|
|
|
|
Jan 30 2008, 20:41
|
Знающий
   
Группа: Свой
Сообщений: 654
Регистрация: 24-01-07
Из: Воронеж
Пользователь №: 24 737

|
Цитата(XVR @ Jan 30 2008, 21:38)  Verilog, однозначно  Не однозначно. Verilog и VHDL занимают примерно по 50% рынка. Исторически повелось, что Verilog чаще использовался для проектов в ASIC. Для проектов в ПЛИС чаще используют VHDL. Но оба этих языка примерно равны и являются лидерами. Перспективным считается SystemVerilog, но его рынок пока невелик.
|
|
|
|
|
Jan 30 2008, 22:02
|
Местный
  
Группа: Свой
Сообщений: 221
Регистрация: 26-12-07
Пользователь №: 33 639

|
Цитата(XVR @ Jan 30 2008, 21:38)  Забыть, как страшный сон. Объемы современных схем таковы, что в графическом виде они займут не одну пачку бумаги  Видал я тут: Цитата Ну вот например, как сделать грубо говоря, видеоплату? Интересен сам подход. Т.е. в моем девайсе есть два 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 во время записи.
А что бы мне тут дал верилог?? И как вам такое?
|
|
|
|
|
Jan 31 2008, 08:15
|
Гуру
     
Группа: Свой
Сообщений: 3 439
Регистрация: 29-12-04
Пользователь №: 1 741

|
Цитата(MAXvaLL @ Jan 31 2008, 01:02)  Видал я тут: И как вам такое?  удаление гланд через непредназначенное для этого отверстие. Полное отсутствие возможности пользоваться отлаженным сторонним кодом. @MAXvaLL Опишите функцию своего устройства, а то меня терзают смутные сомнения что городиться преобразователь I2S-шина CY7C68013 для аудиоустройства? Тгда всю проблему можно решить парой ссылок на opencores.
|
|
|
|
|
Jan 31 2008, 08:42
|
Местный
  
Группа: Свой
Сообщений: 221
Регистрация: 26-12-07
Пользователь №: 33 639

|
Цитата(khach @ Jan 31 2008, 11:15)  Опишите функцию своего устройства, а то меня терзают смутные сомнения что городиться преобразователь I2S-шина CY7C68013 для аудиоустройства? Тгда всю проблему можно решить парой ссылок на opencores. Вы как всегда правы I2S или LeftJustified Но есть желание поддержки TDM (это когда до 4х устройств висит на одной шине, и посылки разделены по времени. скорость соотв. выше) Буду признателен за помощь. Я в плис еще ЧАЙНЕГ... ( эмалированный  ) PS Verilog тут глянул - прикольная тема! Мне, как Си программисту очень близко
|
|
|
|
|
Jan 31 2008, 10:14
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(dvladim @ Jan 30 2008, 23:41)  Не однозначно.
Verilog и VHDL занимают примерно по 50% рынка. Исторически повелось, что Verilog чаще использовался для проектов в ASIC. Для проектов в ПЛИС чаще используют VHDL. Но оба этих языка примерно равны и являются лидерами. Перспективным считается SystemVerilog, но его рынок пока невелик. Verilog соотносится с VHDL примерно как C с ADA. Еще можно взглянуть на одинаковые тестовые проекты, сделанные в Verilog и VHDL, посчитать строки кода и прикинуть, что проще изучить  Например, примеры конструкций, синтезируемых в примитивы (Xilinx, XST) занимают Verilog - 2200 строк VHDL - 2800 строк Так что для изучения с нуля и последующего использования Verilog явно предпочтительней (хотя рекомендуется знать оба)
|
|
|
|
|
Feb 1 2008, 11:44
|
Местный
  
Группа: Свой
Сообщений: 221
Регистрация: 26-12-07
Пользователь №: 33 639

|
Цитата(XVR @ Feb 1 2008, 12:14)  Собственно I2S Interface состоит из сдвигового регистра  Для стыковки с CY понадобится еще куча всего, так что сам по себе он практически бесполезен. Что касается использования готовых VHDL корок в проекте на Verilog'е, то это вполне возможно - практически все синтезаторы и системы моделирования допускают смесь этих языков. Только это вряд ли оправдано для I2S Interface core  Это понятно Но не все так просто там. Там уже есть FIFO, и LRCK сам разбирает.
|
|
|
|
|
Feb 1 2008, 14:56
|
Местный
  
Группа: Свой
Сообщений: 221
Регистрация: 26-12-07
Пользователь №: 33 639

|
Смотрю тут сорец один: Код ... 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 Честно говоря не очень ясно еще: при 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...
Сообщение отредактировал MAXvaLL - Feb 1 2008, 15:05
|
|
|
|
|
Feb 1 2008, 15:33
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(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, и то не факт Цитата И вообще, как-то через Ж... сделано. Это точно Цитата 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...  Автор предполагал именно так, но более правильно было бы записать Код always @(posedge clk) begin if(fd==7) fd<=0; else fd<=fd+1; if(fd<4) bclk<=0; else bclk<=1; end
Сообщение отредактировал XVR - Feb 1 2008, 15:34
|
|
|
|
|
Feb 1 2008, 15:48
|
Местный
  
Группа: Свой
Сообщений: 221
Регистрация: 26-12-07
Пользователь №: 33 639

|
Цитата(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 Тогда автар дурак! Ладно бы на 6, но причем тут 7, если надо на 12?! Причем типо устройство и типа работает. Железно
|
|
|
|
|
Feb 3 2008, 15:58
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(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)
Сообщение отредактировал XVR - Feb 3 2008, 16:00
|
|
|
|
|
Feb 3 2008, 20:04
|
Местный
  
Группа: Свой
Сообщений: 221
Регистрация: 26-12-07
Пользователь №: 33 639

|
Цитата(XVR @ Feb 3 2008, 18:58)  Поставить физический элемент I/O буфера c 3мя состояниями. У него наружу (на выводы FPGA) идет сигнал типа inout, а внутрь (к схеме) - 2 разделенных сигнала на ввод и вывод.
Для Xilinx это IOBUF, порты: Это библиотечный элемент? А описать его включение на верилоге можно? Или только в редакторе производителя?
|
|
|
|
|
Feb 4 2008, 16:41
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(MAXvaLL @ Feb 3 2008, 23:04)  Это библиотечный элемент? Да Цитата А описать его включение на верилоге можно? Да Код
IOBUF my_3state_buffer(.I(input_line),.O(output_line),.IO(pad_line),.T(tristate_line));
|
|
|
|
|
Feb 4 2008, 18:19
|
Местный
  
Группа: Свой
Сообщений: 221
Регистрация: 26-12-07
Пользователь №: 33 639

|
Цитата(XVR @ Feb 4 2008, 19:41)  IOBUF my_3state_buffer(.I(input_line),.O(output_line),.IO(pad_line),.T(tristate_line)) ; Понял. Спасибо!
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|