Перейти к содержанию
    

Хорошие/плохие идеи для ПЛИС.

Стоит это учитывать в проектах, если есть перспектива реализации не только в ПЛИС.

Да тут перспектива скомпилить весьма туманна, а Вы!..

 

Осмыслил. 8 портов. А если 50? Не подходит.

Откуда цифры-то, елки-палки?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Осмыслил. 8 портов. А если 50? Не подходит.
Если регистров много и их надо опросить все, например, последовательно, то хороший выход - сдвиговые регистры. То есть одновременная запись/опрос входов в регистры, а потом сдвиг между регистрами через цепочку типа "трамвай", таким образом удаляются ненавистные всем мультиплексоры. Как бы получается конвейер с очень большой итоговой скоростью.

Если память не изменяет, то подобный архитектурный принцип реализован на матрицах ПЗС в цифровых фотокамерах.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Откуда цифры-то, елки-палки?

Ну у меня из проекта. Ну вот хочу я кучу регистров, таймеров, каналов DMA. На каждый канал DMA нужен начало, конец, статус и контрол. Уже 4 штуки. На таймер - один. На одно прерывание (MSI-X) два. Вот и получается, что число 50, вполне реальное кол-во регистров на проект. Причем если DMA, то мне нужно чтобы какойнить сигнал говорил о том что произошла запись в определенный байт. А если чтение, то мне может понадобится чуть задержать чтение, выставив сигнал что данные не готовы. Плюс есть всякие внутренне сигналы которые хочется мониторить. Если делать так как в вишбоне написано, то ж-па получается гранзиозная. Решение красивое только с Z состоянием.

 

Если регистров много и их надо опросить все, например, последовательно, то хороший выход - сдвиговые регистры.

Не опросить. Ктонить микроконтроллер видел? Там к примеру UART. В нем несколько регистров через которые его можно сконфигурировать. Есть таймер, у него тоже есть несколько регистров. итд. Я что-то похожее хочу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Ж-па - величина комплЕксная. У нее есть мнимая и действительная части.

В вашем случае она равна i.

 

А что, трудно поделить шину не между 50 регистрами, а между 5 блоками, в каждом из которых по 10 регистров???

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

"может быть, я сейчас скажу какую-нибудь глупость..."(С)

Ну я, например, не парюсь, а пишу где ни попадя даже не считая сколько раз(но, однозначно больше 50)

assign dataBus[7:0]=(addrBus[2]|decoder[0]|nrd|divSel)?8'hzz:result[7:0];

И не парюсь. Ну говорит мне Квартус, что мою шину он перекомпоновал через логическое "ор", а мне пофиг.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ж-па - величина комплЕксная. У нее есть мнимая и действительная части.

В вашем случае она равна i.

 

А что, трудно поделить шину не между 50 регистрами, а между 5 блоками, в каждом из которых по 10 регистров???

Плодить сущности. И не красиво.

 

"может быть, я сейчас скажу какую-нибудь глупость..."(С)

Ну я, например, не парюсь, а пишу где ни попадя даже не считая сколько раз(но, однозначно больше 50)

assign dataBus[7:0]=(addrBus[2]|decoder[0]|nrd|divSel)?8'hzz:result[7:0];

И не парюсь. Ну говорит мне Квартус, что мою шину он перекомпоновал через логическое "ор", а мне пофиг.

Мне тоже пофиг. Но он недавно стал говорить еще и timing requirement not met, а это мне уже не пофиг.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Плодить сущности.

Давно я этим не занимался, конечно, но припоминаю, что это называется по другому, а именно буквами RTL. Со всей вытекающей теорией и практикой, в которой, кстати, все "timing constraints are met" почему-то...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Но он недавно стал говорить еще и timing requirement not met, а это мне уже не пофиг.

Можно сделать мультиплексор с конвейером. В первом такте декодировать старшие разряды адреса, а во втором младшие. Будет задержка на такт. Читать данные с учетом этой задержки.

Аналогично при записи с шины. Нужно сформировать сигналы выбора и записи. Тоже можно конвейером.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кое что проясняется. ПОчему-то он ругается, только на те сигналы, которые расположены возле "железной" корки. В ПЛИСине есть PCIe, квартус ругается что не успевает только на те сигналы, которые идут непосредственно от "последних" регистров расположенных в LCELL к "железной" PCIe. Кажется это нужно крутить настройки оптимизатора. Только я не могу понять какие.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И не красиво.

А вам что, шашечки надо или уже поехать наконец? Вы спрашивали, как архитекутрно правильно организовать дизайн. Вам ответили: надо создать шину, на нее повесить крупные блоки (DMA - блок, таймер - блок, etc.), у каждого блока его регистры внутри. Тот факт, что коммутаторы Wishbone c Opencores сделаны под 8 агентов тоже неиллюзорно намекает именно на такую реализацию. Таким образом вы во-первых получаете декомпозированный и внятный дизайн, а во-вторых разбиваете свой пятидесятивходовой мультиплексор (выбирающий, какой из пятидесяти регистров подать мастеру на вход) на два уровня: в шине и в каждом блоке. Это дает вам возможность внутри блоков поставить на входе триггеры, что даст возможность получить приемлемую частоту работы схемы.

А делать Z-состояния, надеясь на компилятор, или объединять все регистры разных блоков в один кирпич - вот это действительно некрасиво. И намекать, что авторы Wishbone Conbus сделали убожество какое-то на 8 блоков, когда вам хочется 50 регистров каждый отдельным агентом на шину сделать - тоже некрасиво. Ну откройте на Conbus тикет, скажите чтоб сделали срочно на 64 агента, смотришь - может проймет их ваша аргументация.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вам что, шашечки надо или уже поехать наконец? Вы спрашивали, как архитекутрно правильно организовать дизайн. Вам ответили: надо создать шину, на нее повесить крупные блоки (DMA - блок, таймер - блок, etc.), у каждого блока его регистры внутри. Тот факт, что коммутаторы Wishbone c Opencores сделаны под 8 агентов тоже неиллюзорно намекает именно на такую реализацию. Таким образом вы во-первых получаете декомпозированный и внятный дизайн, а во-вторых разбиваете свой пятидесятивходовой мультиплексор (выбирающий, какой из пятидесяти регистров подать мастеру на вход) на два уровня: в шине и в каждом блоке. Это дает вам возможность внутри блоков поставить на входе триггеры, что даст возможность получить приемлемую частоту работы схемы.

И заодно длинный, запутаный pipeline.

А делать Z-состояния, надеясь на компилятор, или объединять все регистры разных блоков в один кирпич - вот это действительно некрасиво. И намекать, что авторы Wishbone Conbus сделали убожество какое-то на 8 блоков, когда вам хочется 50 регистров каждый отдельным агентом на шину сделать - тоже некрасиво. Ну откройте на Conbus тикет, скажите чтоб сделали срочно на 64 агента, смотришь - может проймет их ваша аргументация.

А какая-то есть литература на по этому поводу? НУ там 8, нормально, а 64 уже перебор?

 

И у меня подозрение что не в моей писанине дело.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Плодить сущности. И не красиво.

 

 

Мне тоже пофиг. Но он недавно стал говорить еще и timing requirement not met, а это мне уже не пофиг.

Т.е. вы хотите сказать, что в свои регистры вы укладываете данные по шине за время, ну например, 5-10нс? Имею в виду время между появлением данных и активным фронтом сигнала WR.

ИМХО, даже самые наворочаные ДСПшки не имеют цикл шины такого порядка.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Т.е. вы хотите сказать, что в свои регистры вы укладываете данные по шине за время, ну например, 5-10нс? Имею в виду время между появлением данных и активным фронтом сигнала WR.

ИМХО, даже самые наворочаные ДСПшки не имеют цикл шины такого порядка.

Есть подозрение, что там желание прямо с PCI Express писать во все регистры в реальном времени...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть подозрение, что там желание прямо с PCI Express писать во все регистры в реальном времени...

Ну, опять-же ИМХО, там всё равно не десятые нан. У меня в проекте под сотню регистров и на дохлом Cyclone2-8 частота проекта 65МГц. И ограничена совсем не шиной.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть подозрение, что там желание прямо с PCI Express писать во все регистры в реальном времени...

Подозреваю, что вы хотели написать "читать".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...