|
|
  |
Хорошие/плохие идеи для ПЛИС. |
|
|
|
Dec 23 2010, 08:36
|
Профессионал
    
Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770

|
Цитата(Methane @ Dec 23 2010, 14:03)  Народ. Нужна книжка, или в общем хоть что-то про то как строить архитектуры. Как делать хорошо и как плохо. В закромах смотрели? Цитата(Methane @ Dec 23 2010, 14:03)  К примеру делать шины с Z состоянием - плохо. А как их делать? Без Z-состояния. Всегда ваш, К.О.  Цитата(Methane @ Dec 23 2010, 14:03)  НУ вот к примеру как по проекту раскидать кучу регистров, висящих на общей ША/ШД? Квартус ругается на Z состояния, и глобальные wor делать не дает. У меня идеи закончились. Мультиплексорами. Скачайте с Opencores Whishbone Conbus и Conmax и изучите их внутренности.
|
|
|
|
|
Dec 23 2010, 08:46
|

Гуру
     
Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230

|
Что смотреть в закромах? Что такое КО? Вот у меня ощущения что мультиплексор у меня тормозит больше всего. Код always_comb begin //always @(sel_tx) begin case (sel_tx) default: begin tx_dv = 'h0; tx_dfr = 'h0; tx_req = 'h0; tx_err = 'h0; tx_desc_l = 'h0; tx_data ={8{8'h8}};//'h0; end SEL_MEMIO: begin tx_dv = pcie_memio.tx_dv; tx_dfr = pcie_memio.tx_dfr; tx_req = pcie_memio.tx_req; tx_err = pcie_memio.tx_err; tx_desc_l = pcie_memio.tx_desc; tx_data = pcie_memio.tx_data; end SEL_INTS: begin tx_dv = pcie_ints.tx_dv; tx_dfr = pcie_ints.tx_dfr; tx_req = pcie_ints.tx_req; tx_err = pcie_ints.tx_err; tx_desc_l = pcie_ints.tx_desc; tx_data = pcie_ints.tx_data; end итд. Так, нормально?
|
|
|
|
|
Dec 23 2010, 08:53
|
Знающий
   
Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112

|
Цитата(Methane @ Dec 23 2010, 15:03)  Народ. Нужна книжка, или в общем хоть что-то про то как строить архитектуры... По ключевым словам Вашего вопроса, не вникая в его суть, т.к. вопрос до конца не понят: Книга Максфилд К. "Проектирование на ПЛИС. Архитектура, средства и методы. Курс молодого бойца", 2007,
|
|
|
|
|
Dec 23 2010, 09:44
|
Профессионал
    
Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770

|
Цитата(zzzzzzzz @ Dec 23 2010, 15:28)  Прогр. логика да, не "любит" Z-состояние. Она его не то что не любит, а оно на внутренних буферах FPGA просто не реализовано. Цитата(zzzzzzzz @ Dec 23 2010, 15:28)  В ASICах шины с третьим состоянием предпочтительнее. Я сколько видел библиотек - ни разу не встречал там внутреннего буфера с Z-состоянием. Поэтому думаю, что вы ошибаетесь.
|
|
|
|
|
Dec 23 2010, 09:45
|

я только учусь...
     
Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839

|
Цитата(zzzzzzzz @ Dec 23 2010, 14:28)  Так, на всякий случай, вставлю 5 копеек. Прогр. логика да, не "любит" Z-состояние. А при переводе проекта в ASIC это является неким минусом. Ибо реализация на мультиплексорах ГОРАЗДО более громоздкая и тормозная получается. В ASICах шины с третьим состоянием предпочтительнее. Стоит это учитывать в проектах, если есть перспектива реализации не только в ПЛИС. В ПЛИС семейства Virtex II (стр. 28) были внутренние шины с третьим состоянием, а потом Xilinx почему то отказался. Например синтезатор Xilinx автоматически переводит третье состояние в мултиплексоры...если логика размещается внутри кристала.
--------------------
If it doesn't work in simulation, it won't work on the board.
"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
|
|
|
|
|
Dec 23 2010, 09:57
|

Профессионал
    
Группа: Свой
Сообщений: 1 724
Регистрация: 1-05-05
Из: Нью Крыжопыль
Пользователь №: 4 641

|
Цитата(DmitryR @ Dec 23 2010, 15:44)  Она его не то что не любит, а оно на внутренних буферах FPGA просто не реализовано. Цитата(Maverick @ Dec 23 2010, 15:45)  В ПЛИС семейства Virtex II (стр. 28) были внутренние шины с третьим состоянием, а потом Xilinx почему то отказался. Например синтезатор Xilinx автоматически переводит третье состояние в мултиплексоры... Да, не реализовано. Это и есть моё "не любит". Но, варианты "обхода" для последующего ASIC-строительства есть. Отказался, скорее всего, из-за того, что есть зависимость между емкостью шины и мощностью требуемого буфера. Т.е. нет универсальности. А с мультиплексорами несколько более просто по нагрузкам, более просчитываемо. Цитата Я сколько видел библиотек - ни разу не встречал там внутреннего буфера с Z-состоянием. Поэтому думаю, что вы ошибаетесь. А я встречал. И сам их "рисовал". Поэтому, ошибаться не могу, пардон. А экономия получается весьма приличная. Отсюда и подход. Правда, многих этот момент мало интересует. Работает как-то, да и ладно. Тоже политика. Оффтопить не буду, завязываю.
|
|
|
|
|
Dec 23 2010, 09:58
|
не указал(а) ничего о себе.
     
Группа: Свой
Сообщений: 3 325
Регистрация: 6-04-06
Пользователь №: 15 887

|
Цитата(zzzzzzzz @ Dec 23 2010, 15:28)  Стоит это учитывать в проектах, если есть перспектива реализации не только в ПЛИС. Да тут перспектива скомпилить весьма туманна, а Вы!.. Цитата(Methane @ Dec 23 2010, 15:48)  Осмыслил. 8 портов. А если 50? Не подходит. Откуда цифры-то, елки-палки?
|
|
|
|
|
Dec 23 2010, 10:06
|
Знающий
   
Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112

|
Цитата(Methane @ Dec 23 2010, 16:48)  Осмыслил. 8 портов. А если 50? Не подходит. Если регистров много и их надо опросить все, например, последовательно, то хороший выход - сдвиговые регистры. То есть одновременная запись/опрос входов в регистры, а потом сдвиг между регистрами через цепочку типа "трамвай", таким образом удаляются ненавистные всем мультиплексоры. Как бы получается конвейер с очень большой итоговой скоростью. Если память не изменяет, то подобный архитектурный принцип реализован на матрицах ПЗС в цифровых фотокамерах.
|
|
|
|
|
Dec 23 2010, 10:18
|

Гуру
     
Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230

|
Цитата(vitan @ Dec 23 2010, 14:58)  Откуда цифры-то, елки-палки? Ну у меня из проекта. Ну вот хочу я кучу регистров, таймеров, каналов DMA. На каждый канал DMA нужен начало, конец, статус и контрол. Уже 4 штуки. На таймер - один. На одно прерывание (MSI-X) два. Вот и получается, что число 50, вполне реальное кол-во регистров на проект. Причем если DMA, то мне нужно чтобы какойнить сигнал говорил о том что произошла запись в определенный байт. А если чтение, то мне может понадобится чуть задержать чтение, выставив сигнал что данные не готовы. Плюс есть всякие внутренне сигналы которые хочется мониторить. Если делать так как в вишбоне написано, то ж-па получается гранзиозная. Решение красивое только с Z состоянием. Цитата(Serhiy_UA @ Dec 23 2010, 15:06)  Если регистров много и их надо опросить все, например, последовательно, то хороший выход - сдвиговые регистры. Не опросить. Ктонить микроконтроллер видел? Там к примеру UART. В нем несколько регистров через которые его можно сконфигурировать. Есть таймер, у него тоже есть несколько регистров. итд. Я что-то похожее хочу.
|
|
|
|
|
Dec 23 2010, 10:56
|
Знающий
   
Группа: Свой
Сообщений: 709
Регистрация: 3-05-05
Пользователь №: 4 693

|
"может быть, я сейчас скажу какую-нибудь глупость..."(С) Ну я, например, не парюсь, а пишу где ни попадя даже не считая сколько раз(но, однозначно больше 50) Код assign dataBus[7:0]=(addrBus[2]|decoder[0]|nrd|divSel)?8'hzz:result[7:0]; И не парюсь. Ну говорит мне Квартус, что мою шину он перекомпоновал через логическое "ор", а мне пофиг.
|
|
|
|
|
Dec 23 2010, 11:29
|

Гуру
     
Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230

|
Цитата(vitan @ Dec 23 2010, 15:19)  Ж-па - величина комплЕксная. У нее есть мнимая и действительная части. В вашем случае она равна i.
А что, трудно поделить шину не между 50 регистрами, а между 5 блоками, в каждом из которых по 10 регистров??? Плодить сущности. И не красиво. Цитата(mse @ Dec 23 2010, 15:56)  "может быть, я сейчас скажу какую-нибудь глупость..."(С) Ну я, например, не парюсь, а пишу где ни попадя даже не считая сколько раз(но, однозначно больше 50) Код assign dataBus[7:0]=(addrBus[2]|decoder[0]|nrd|divSel)?8'hzz:result[7:0]; И не парюсь. Ну говорит мне Квартус, что мою шину он перекомпоновал через логическое "ор", а мне пофиг. Мне тоже пофиг. Но он недавно стал говорить еще и timing requirement not met, а это мне уже не пофиг.
|
|
|
|
|
Dec 23 2010, 13:47
|
Профессионал
    
Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770

|
Цитата(Methane @ Dec 23 2010, 17:29)  И не красиво. А вам что, шашечки надо или уже поехать наконец? Вы спрашивали, как архитекутрно правильно организовать дизайн. Вам ответили: надо создать шину, на нее повесить крупные блоки (DMA - блок, таймер - блок, etc.), у каждого блока его регистры внутри. Тот факт, что коммутаторы Wishbone c Opencores сделаны под 8 агентов тоже неиллюзорно намекает именно на такую реализацию. Таким образом вы во-первых получаете декомпозированный и внятный дизайн, а во-вторых разбиваете свой пятидесятивходовой мультиплексор (выбирающий, какой из пятидесяти регистров подать мастеру на вход) на два уровня: в шине и в каждом блоке. Это дает вам возможность внутри блоков поставить на входе триггеры, что даст возможность получить приемлемую частоту работы схемы. А делать Z-состояния, надеясь на компилятор, или объединять все регистры разных блоков в один кирпич - вот это действительно некрасиво. И намекать, что авторы Wishbone Conbus сделали убожество какое-то на 8 блоков, когда вам хочется 50 регистров каждый отдельным агентом на шину сделать - тоже некрасиво. Ну откройте на Conbus тикет, скажите чтоб сделали срочно на 64 агента, смотришь - может проймет их ваша аргументация.
|
|
|
|
|
Dec 23 2010, 14:36
|

Гуру
     
Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230

|
Цитата(DmitryR @ Dec 23 2010, 18:47)  А вам что, шашечки надо или уже поехать наконец? Вы спрашивали, как архитекутрно правильно организовать дизайн. Вам ответили: надо создать шину, на нее повесить крупные блоки (DMA - блок, таймер - блок, etc.), у каждого блока его регистры внутри. Тот факт, что коммутаторы Wishbone c Opencores сделаны под 8 агентов тоже неиллюзорно намекает именно на такую реализацию. Таким образом вы во-первых получаете декомпозированный и внятный дизайн, а во-вторых разбиваете свой пятидесятивходовой мультиплексор (выбирающий, какой из пятидесяти регистров подать мастеру на вход) на два уровня: в шине и в каждом блоке. Это дает вам возможность внутри блоков поставить на входе триггеры, что даст возможность получить приемлемую частоту работы схемы. И заодно длинный, запутаный pipeline. Цитата А делать Z-состояния, надеясь на компилятор, или объединять все регистры разных блоков в один кирпич - вот это действительно некрасиво. И намекать, что авторы Wishbone Conbus сделали убожество какое-то на 8 блоков, когда вам хочется 50 регистров каждый отдельным агентом на шину сделать - тоже некрасиво. Ну откройте на Conbus тикет, скажите чтоб сделали срочно на 64 агента, смотришь - может проймет их ваша аргументация. А какая-то есть литература на по этому поводу? НУ там 8, нормально, а 64 уже перебор? И у меня подозрение что не в моей писанине дело.
|
|
|
|
|
Dec 23 2010, 15:47
|
Знающий
   
Группа: Свой
Сообщений: 709
Регистрация: 3-05-05
Пользователь №: 4 693

|
Цитата(Methane @ Dec 23 2010, 17:29)  Плодить сущности. И не красиво.
Мне тоже пофиг. Но он недавно стал говорить еще и timing requirement not met, а это мне уже не пофиг. Т.е. вы хотите сказать, что в свои регистры вы укладываете данные по шине за время, ну например, 5-10нс? Имею в виду время между появлением данных и активным фронтом сигнала WR. ИМХО, даже самые наворочаные ДСПшки не имеют цикл шины такого порядка.
|
|
|
|
|
Dec 24 2010, 01:10
|

Гуру
     
Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230

|
Цитата(mse @ Dec 23 2010, 20:47)  Т.е. вы хотите сказать, что в свои регистры вы укладываете данные по шине за время, ну например, 5-10нс? Имею в виду время между появлением данных и активным фронтом сигнала WR. ИМХО, даже самые наворочаные ДСПшки не имеют цикл шины такого порядка. 10нс это 100 мегагерц. 5 это 200. Куча DSP и быстрее будут. Вообще, где данные появились? Цитата(mse @ Dec 23 2010, 21:19)  Ну, опять-же ИМХО, там всё равно не десятые нан. У меня в проекте под сотню регистров и на дохлом Cyclone2-8 частота проекта 65МГц. И ограничена совсем не шиной. И читать и писать, прямо из PC через PCIe.
|
|
|
|
|
Dec 24 2010, 04:55
|
Знающий
   
Группа: Свой
Сообщений: 709
Регистрация: 3-05-05
Пользователь №: 4 693

|
Цитата(Methane @ Dec 24 2010, 07:10)  10нс это 100 мегагерц. 5 это 200. Куча DSP и быстрее будут. Вообще, где данные появились?
И читать и писать, прямо из PC через PCIe. То, что есть куча ДСП с тактовой, куда большей, чем 100-200МГц, я знаю. Только это не говорит о том, что у них цикл внешней шины хотя-бы 100-200МГц. У тех-же Блэкфинов, даже без готовности, обращение к внешним устройствам занимает несколько циклов периферийного клока и, в реальности, сильно не превышает 50МГц.
|
|
|
|
|
Dec 24 2010, 05:08
|

Гуру
     
Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230

|
Цитата(mse @ Dec 24 2010, 09:55)  То, что есть куча ДСП с тактовой, куда большей, чем 100-200МГц, я знаю. Только это не говорит о том, что у них цикл внешней шины хотя-бы 100-200МГц. У тех-же Блэкфинов, даже без готовности, обращение к внешним устройствам занимает несколько циклов периферийного клока и, в реальности, сильно не превышает 50МГц. При чем тут внешняя шина? Я что-то писал про внешнюю?
|
|
|
|
|
Dec 24 2010, 05:17
|
Профессионал
    
Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770

|
Цитата(Methane @ Dec 24 2010, 10:12)  Могу. Но не хочу. Не думаю, что в этом разделе форума вам смогут дать дельный совет по мотивации. Цитата(Methane @ Dec 24 2010, 10:12)  ... и все равно получится КРИВО. А если вы не начнете что-то делать - у вас никак не получится. Вы находитесь в ситуации ложного выбора - думаете, что есть легкий и красивый способ решить вашу проблему. А такого способа похоже не существует, и выбор, который у вас есть - решить задачу некрасиво (с вашей точки зрения) или не решить ее никак.
|
|
|
|
|
Dec 24 2010, 05:29
|

Гуру
     
Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230

|
Цитата(DmitryR @ Dec 24 2010, 10:17)  А если вы не начнете что-то делать - у вас никак не получится. Вы находитесь в ситуации ложного выбора - думаете, что есть легкий и красивый способ решить вашу проблему. А такого способа похоже не существует, и выбор, который у вас есть - решить задачу некрасиво (с вашей точки зрения) или не решить ее никак. Я сейчас, не могу понять, почему квартус ругается на тайминги совсем в другом месте. К примеру из железной корки выходят сигналы, обрабатываются очень простенькой обработкой (которую писали в альтере, и которую я не трогал) и уходят сразу обратно в железную корку. Вот на эти тайминги квартус и ругается. А иногда на другие. Но в любом случае это сигналы между корокй и первыми регистрами за пределами "железной" корки.
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|