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

 
 
 
Reply to this topicStart new topic
> Параллельная шина внутри ПЛИС, можно ли упростить?
ViKo
сообщение Jul 25 2016, 08:59
Сообщение #1


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Есть внешняя шина, подключенная к микроконтроллеру. Внутри ПЛИС к шине подключено несколько устройств. В ПЛИС они объединяются по "или", не смотря, что сигналы описаны с z-состоянием. Потому что внутри ПЛИС таких буферов нет (экзотику обсуждать не предлагаю). Представим 8 16-битовых устройств, и все по "или" объединить. Много логики отъедается. Кстати, я хочу так и описать эту шину, как она реально создается. Если проще не станет, так хотя бы, понятнее.
Нет ли иного способа прочитать устройства? Например, медленные читать последовательно? Точно, сковать всех одной цепью! rolleyes.gif И по SPI выбросить. А еще как...?
Go to the top of the page
 
+Quote Post
iosifk
сообщение Jul 25 2016, 09:05
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(ViKo @ Jul 25 2016, 11:59) *
Есть внешняя шина, подключенная к микроконтроллеру. Внутри ПЛИС к шине подключено несколько устройств. В ПЛИС они объединяются по "или", не смотря, что сигналы описаны с z-состоянием. Потому что внутри ПЛИС таких буферов нет (экзотику обсуждать не предлагаю). Представим 8 16-битовых устройств, и все по "или" объединить. Много логики отъедается. Кстати, я хочу так и описать эту шину, как она реально создается. Если проще не станет, так хотя бы, понятнее.
Нет ли иного способа прочитать устройства? Например, медленные читать последовательно? Точно, сковать всех одной цепью! rolleyes.gif И по SPI выбросить. А еще как...?

Да, шина в ПЛИС разделится на две. Одна - шина на запись пройдет ко всем абонентам в ПЛИС параллельно. А от этих абонентов соберется куча шин и пройдет через мультиплексор и далее на выход через трехстабильные буфера...
Но, поскольку клоки в ПЛИС на порядок быстрее, то дело можно упростить...
Сначала надо написать за сколько времени происходит обмен по шине "снаружи" ПЛИС и какова тактовая внутри ПЛИС? Возможно удастся сделать на "входе" в ПЛИС преобразователь из паралл. в послед (например хотя бы в тетрады или в байты). и внутри далее разрядность шины уменьшить...
И, кстати, при чтении из ПЛИС надо давать 1 такт задержки на открытие шинников из ПЛИС, иначе они греются сильно...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jul 25 2016, 09:19
Сообщение #3


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(iosifk @ Jul 25 2016, 12:05) *
Сначала надо написать за сколько времени происходит обмен по шине "снаружи" ПЛИС и какова тактовая внутри ПЛИС? Возможно удастся сделать на "входе" в ПЛИС преобразователь из паралл. в послед (например хотя бы в тетрады или в байты). и внутри далее разрядность шины уменьшить...

В микроконтроллере использую аппаратную мультиплексированную адрес-данные 16-битовую шину, там можно задать длительности в тактах (120 МГц) достаточно свободно. Сейчас у меня 11 тактов. Внутри ПЛИС есть 250 МГц, 125 МГц, 25 МГц. Сколько захочу. rolleyes.gif Для шины использую 125 МГц.
Как ни преобразовывай, при чтении биты придется объединять. И мне представляется, чем шире шина, тем проще это сделать.
Go to the top of the page
 
+Quote Post
des00
сообщение Jul 25 2016, 09:52
Сообщение #4


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(ViKo @ Jul 25 2016, 15:59) *
Нет ли иного способа прочитать устройства? Например, медленные читать последовательно? Точно, сковать всех одной цепью! rolleyes.gif И по SPI выбросить. А еще как...?

Xilinx -> шина DCR


--------------------
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jul 25 2016, 10:11
Сообщение #5


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(des00 @ Jul 25 2016, 12:52) *
Xilinx -> шина DCR

Спасибо! Направление задано, совпадает с желаемым. Буду мыслить для Altera сделать нечто такое.
Go to the top of the page
 
+Quote Post
_pv
сообщение Jul 25 2016, 11:52
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



Цитата(des00 @ Jul 25 2016, 16:52) *
Xilinx -> шина DCR

daisy chain конечно здорово, но вот если устройств сильно много, частота работы не упрётся во время прохождения через всех подряд?

точнее вопрос даже: как именно это обычно делается в каких-нибудь процессорах когда есть куча memory maped регистров на шине памяти и без z состояния.
Go to the top of the page
 
+Quote Post
iosifk
сообщение Jul 25 2016, 13:23
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(_pv @ Jul 25 2016, 14:52) *
daisy chain конечно здорово, но вот если устройств сильно много, частота работы не упрётся во время прохождения через всех подряд?

точнее вопрос даже: как именно это обычно делается в каких-нибудь процессорах когда есть куча memory maped регистров на шине памяти и без z состояния.

В ПЛИС для этой цели есть "регистровый файл", который делается из "памяти"... Берем память с раздельными шинами на чтение и запись или двухпортовку, со стороны логики пишем (читаем), со стороны процессора - читаем (пишем)... Дешифрация памяти - встроенная, объем довольно большой...
Или скажем берем "двухпортовку", по одной стороне используем небольшую часть как регистры, по другой - используем как остальную память...
Или вот так...
У Ксайлинкса есть блоки памяти 16х1 из одной ячейки SRL... 16 таких блочков дадут поле 16х16... У более новых - это 64х1... Думаю что 16 регистров - вполне хватит для начала... И это всего 16 логических ячеек...
И к ним FSM, который из "регистров модулей" переносит информацию в "регистровый файл". Возможно что при записи потребуется несколько тактов. Но уж зато чтение - быстрое...

PS... Просто в этом случае "голову" надо перестроить с ASIC на FPGA... В ASIC там в одном блоке и обработка и регистры... И шин накрутить не проблема...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jul 25 2016, 13:37
Сообщение #8


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(iosifk @ Jul 25 2016, 16:23) *
В ПЛИС для этой цели есть "регистровый файл", который делается из "памяти"... Берем память с раздельными шинами на чтение и запись или двухпортовку, со стороны логики пишем (читаем), со стороны процессора - читаем (пишем)... Дешифрация памяти - встроенная, объем довольно большой...

Чтобы прочитать из памяти во внешний процессор, нужно в нее записать из логики. А шина данных для записи в память одна. Все равно нужен мультиплексор или по "или" объединять.
Go to the top of the page
 
+Quote Post
iosifk
сообщение Jul 25 2016, 13:46
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(ViKo @ Jul 25 2016, 16:37) *
Чтобы прочитать из памяти во внешний процессор, нужно в нее записать из логики. А шина данных для записи в память одна. Все равно нужен мультиплексор или по "или" объединять.

Вопрос в том, что либо быстро в память пишем и быстро читаем, либо медленно в память пишем, но быстро читаем... А оно надо писать быстро?
И что, неужели внешний процессор пишет по шине на 120 МГц? LVTTL или LVCMOS?



--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jul 25 2016, 13:58
Сообщение #10


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(iosifk @ Jul 25 2016, 16:46) *
Вопрос в том, что либо быстро в память пишем и быстро читаем, либо медленно в память пишем, но быстро читаем... А оно надо писать быстро?
И что, неужели внешний процессор пишет по шине на 120 МГц? LVTTL или LVCMOS?

Нет, за 11 тактов. По несколько тактов выдать адрес, сигнал защелки адреса, данные, запись / чтение. Я выбрал времена с гарантией, что не потеряю ничего.
Мне не время экономить надо, хотя его тоже терять не желательно. Не хочу тратить логику на мультиплексор данных при чтении. Чисто теоретически. rolleyes.gif

Всякие RAM и не на такой частоте молотят.
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Jul 25 2016, 14:31
Сообщение #11


Профессионал
*****

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



Приветствую!

Цитата(ViKo @ Jul 25 2016, 16:58) *
Мне не время экономить надо, хотя его тоже терять не желательно. Не хочу тратить логику на мультиплексор данных при чтении. Чисто теоретически. rolleyes.gif

Чисто теоретически (а также и практически) все равно придется терять ее родимую - в смысле логику. Так как при любой схеме придется выводит N выходов регистов на 1 выход. Как не крути. Можно только оптимизировать сам мультиплексор - по простоте написания RTL, по универсальности подключения кучи модулей, по времянке и простоте разводки в кристалле.

Если у Вас 16-64 регистров - то тут и заморачивается не стоит.
Вот если 200 - 1000. то тогда можно начинать экономить.

Удачи! Rob.
Go to the top of the page
 
+Quote Post
_pv
сообщение Jul 25 2016, 14:47
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



Цитата(iosifk @ Jul 25 2016, 20:23) *
В ПЛИС для этой цели есть "регистровый файл", который делается из "памяти"... Берем память с раздельными шинами на чтение и запись или двухпортовку, со стороны логики пишем (читаем), со стороны процессора - читаем (пишем)... Дешифрация памяти - встроенная, объем довольно большой...
Или скажем берем "двухпортовку", по одной стороне используем небольшую часть как регистры, по другой - используем как остальную память...
Или вот так...
У Ксайлинкса есть блоки памяти 16х1 из одной ячейки SRL... 16 таких блочков дадут поле 16х16... У более новых - это 64х1... Думаю что 16 регистров - вполне хватит для начала... И это всего 16 логических ячеек...

я про, например, регистры различной периферии, которой может быть довольно много, килобайты,
то есть наружу оно должно торчать как регистры, а процессору - как область памяти на общей шине с остальной нормальной памятью.
как тут поможет двух портовая память?
не будут же например два различных порта IO, или какой-нибудь уарт чтобы данные из своего регистра прочитать/записать драться за доступ к второму порту шине памяти которая к ним смотрит.
Go to the top of the page
 
+Quote Post
iosifk
сообщение Jul 25 2016, 15:46
Сообщение #13


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(RobFPGA @ Jul 25 2016, 17:31) *
Если у Вас 16-64 регистров - то тут и заморачивается не стоит.
Вот если 200 - 1000. то тогда можно начинать экономить.

Вот кусок софт-процессора... Это как раз шина данных "внутри"...

Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jul 25 2016, 16:00
Сообщение #14


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



В FLEX10 были цепи Cascade, позволяющие объединять по И / ИЛИ сигналы после LUT. А в Cyclone III нет подобного. crying.gif
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Jul 25 2016, 16:35
Сообщение #15


Профессионал
*****

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



Приветствую!

Цитата(ViKo @ Jul 25 2016, 19:00) *
В FLEX10 были цепи Cascade, позволяющие объединять по И / ИЛИ сигналы после LUT. А в Cyclone III нет подобного. crying.gif

Ну с это и надо начинать - с того чего нет sm.gif
Древовидный mux прост в написании и минимален в latency но при большом количестве входов возникают проблемы с трассировкой. Цепочечный mux больше размером, имеет большой latency но просто трассируется особенно на большом кристалле. Универсального решения нет.

Я у себя оптимизирую регистры на чтение так - если возможно без потери функциональности то в FPGA регистры параметров/ управления WriteOnly + soft зеркало в CPU. Если программист капризничает и не хочет (а говорит что не может) возится с зеркалами а хочет читать текущее значение из FPGA то ставлю память для ReadBаck + регистр. То есть пишу и в память и в регистр а читаю только из памяти. Естественно это работает когда нет изменений состояния регистра из логики FPGA. Ну и комбинация этих способов с обычными регистрами. Гемор с переносом состояния регистров в память выгоден в очень редких случаях. Опят же все это для Xilinx где локальная память для LUT просто прелесть какая для такого использования.

Цитата(iosifk)
Вот кусок софт-процессора... Это как раз шина данных "внутри"...

Спасибо! теперь я буду знать как выглядит шина данных biggrin.gif

Удачи! Rob.
Go to the top of the page
 
+Quote Post

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

 


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


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