Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Память на ПЛИС
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Sl.Hunter
Здравствуйте мне нужно для контролёра шины PCI организовать 64 байта памяти. Язык проектриования VHDL, ПЛИСы Altera MAX3000 или MAX7000.

Сначала я взял вот этот код: http://esd.cs.ucr.edu/labs/tutorial/RAM.vhd Немного изменил под себя, но тут оказалось, что даже 64 байта в ПЛИС не влазят там требуется больше 512 макроячеек, что с этим делать я не представляю, т.к. это только один из блоков контролёра. И ещё память по идее должна быть перезаписываемая, но как при старте записать начальные значения в какие-либо ячейки, которые потом можно будет изменить я не поинмаю!
EvgenyNik
Ничего удивительного, т.к. в CPLD (MAX3k, MAX7k, ну и MAXII в эту же кучу) 1 бит хранится в 1-ом триггере, а 1 триггер как раз и образуется силами 1-ой макроячейки. CPLD, или ПЛМ, сильны и востребованы как логические схемы, но малопригодны для хранения информации, как по объёму, так и по цене из расчёта $/Byte. Разве что - несколько регистров.
Обратите своё внимание на действительно ПЛИС (а не ПЛМ), где есть набортное ОЗУ. Из соображений перспективы, берите сразу CycloneIII - там и логики достаточно и ОЗУ немалое. При этом цена явно меньше MAX3512, которой Вам, всё равно, не хватает.
-Al-
Цитата(Евгений Николаев @ Jul 4 2008, 09:57) *
Ничего удивительного, т.к. в CPLD (MAX3k, MAX7k, ну и MAXII в эту же кучу) 1 бит хранится в 1-ом триггере, а 1 триггер как раз и образуется силами 1-ой макроячейки. CPLD, или ПЛМ, сильны и востребованы как логические схемы, но малопригодны для хранения информации, как по объёму, так и по цене из расчёта $/Byte. Разве что - несколько регистров.
Обратите своё внимание на действительно ПЛИС (а не ПЛМ), где есть набортное ОЗУ. Из соображений перспективы, берите сразу CycloneIII - там и логики достаточно и ОЗУ немалое. При этом цена явно меньше MAX3512, которой Вам, всё равно, не хватает.

CycloneIII (как и все предыдущие Cylclone) напрямую к PCI подключить нельзя, только через шинники. В таком случае можно посмотреть на относительно древнюю ACEX1K, она и напрямую подключается и память в ней есть smile.gif

@Sl.Hunter
Забудьте про память в серии MAX. Выход - менять CPLD на FPGA.
Sl.Hunter
Мда, вы меня обрадовали, учитывая, что ПЛИСы другие я взять не могу, т.к. в задании указаны именно эти это всё очень весело получаеться... Получаеться придёться использовать внешнюю память? или есть обходные пути?
-Al-
Цитата(Sl.Hunter @ Jul 4 2008, 12:04) *
Мда, вы меня обрадовали, учитывая, что ПЛИСы другие я взять не могу, т.к. в задании указаны именно эти это всё очень весело получаеться... Получаеться придёться использовать внешнюю память? или есть обходные пути?

А с какой целью Вам память нужна??
Sl.Hunter
Может сделать можно как то по другому, но в контролёре PCI должны присутсвовать 64 байта, в которых занесена информация об устройстве и информация для БИОСа, это часть PnP как я понял исходя из этой информации БИОС выделит мне адресс порта В/В и зансёт в один из этих регистров + там есть регистр стастуса и регистр команд в которых храниться статус и доступные команды. Эти регистры адресуемые и часть доступна и для чтения и дял записи. В некоторых из них должна изначальна храниться определённая комбинация, вместо которой впоследствии БИОС запишет адресс порта ввода вывода.
-Al-
Цитата(Sl.Hunter @ Jul 4 2008, 12:36) *
Может сделать можно как то по другому, но в контролёре PCI должны присутсвовать 64 байта, в которых занесена информация об устройстве и информация для БИОСа, это часть PnP как я понял исходя из этой информации БИОС выделит мне адресс порта В/В и зансёт в один из этих регистров + там есть регистр стастуса и регистр команд в которых храниться статус и доступные команды. Эти регистры адресуемые и часть доступна и для чтения и дял записи. В некоторых из них должна изначальна храниться определённая комбинация, вместо которой впоследствии БИОС запишет адресс порта ввода вывода.

smile.gif И накой Вам память нужна??? Просто добавляете регистры, которые меняются и все, что не меняется - вбиваете константами, в CPLD это все без проблем влезет smile.gif

Пример (на AHDL):
Код
-- PCI Configuration space read
when s_cfg_read =>
  case access_address[ ( PCI_INT_ADDRESS_SIZE - 1 )..0 ] is
    when ADDRESS_00H =>
      ad_out_data[ 31..16 ] = PCI_DEVICE_ID;
      ad_out_data[ 15..0 ] = PCI_VENDOR_ID;
    when ADDRESS_04H =>
      -- Status Reg
      ad_out_data[ 31..24 ] = B"00000000";
      if( PCI_FAST_BACK_TO_BACK == "ON" ) generate
        ad_out_data[ 23 ] = B"1";
      else generate
        ad_out_data[ 23 ] = B"0";
      end generate;
      ad_out_data[ 22..16 ] = B"0000000";
      -- Command Reg
      ad_out_data[ 15..10 ] = B"000000";
      if( PCI_FAST_BACK_TO_BACK == "ON" ) generate
        ad_out_data[ 9 ] = command_fb2b.q;
      else generate
        ad_out_data[ 9 ] = B"0";
      end generate;
      ad_out_data[ 8..0 ] = ( B"00000000", command_io.q );
    when ADDRESS_08H =>
      ad_out_data[ 31..8 ] = PCI_CLASS_CODE;
      ad_out_data[ 7..0 ] = PCI_REVISION;
    when ADDRESS_10H =>
      ad_out_data[ 31..16 ] = 0;
      ad_out_data[ 15..PCI_BAR0_WIDTH ] = bar0[];
      for i in 1 to ( PCI_BAR0_WIDTH - 1 ) generate
        ad_out_data[ i ] = B"0";
      end generate;
      ad_out_data[ 0 ] = B"1";
    when ADDRESS_3CH =>
      if( PCI_INT != "OFF" ) generate
        ad_out_data[ 31..16 ] = H"0000";
        if( PCI_INT == "A" ) generate
          ad_out_data[ 15..8 ] = PCI_INTA_PIN;
        end generate;
        if( PCI_INT == "B" ) generate
          ad_out_data[ 15..8 ] = PCI_INTB_PIN;
        end generate;
        if( PCI_INT == "C" ) generate
          ad_out_data[ 15..8 ] = PCI_INTC_PIN;
        end generate;
        if( PCI_INT == "D" ) generate
          ad_out_data[ 15..8 ] = PCI_INTD_PIN;
        end generate;
        ad_out_data[ 7..0 ] = int_line_reg[];
      else generate
        ad_out_data[] = 0;
      end generate;
    when others =>
      ad_out_data[] = 0;
  end case;

-- PCI Configuration space write
when s_cfg_write =>
  if( !irdy ) then
    case access_address[ ( PCI_INT_ADDRESS_SIZE - 1 )..0 ] is
      when ADDRESS_04H =>
        command_io.( d, ena ) = ( ad[ 0 ], B"1" );
        if( PCI_FAST_BACK_TO_BACK == "ON" ) generate
          command_fb2b.( d, ena ) = ( ad[ 9 ], B"1" );
        end generate;
      when ADDRESS_10H =>
        bar0[] = ad[ 15..PCI_BAR0_WIDTH ];
        bar0[].ena = vcc;
      when ADDRESS_3CH =>
        if( PCI_INT != "OFF" ) generate
          int_line_reg[] = ad[ 7..0 ];
          int_line_reg[].ena = vcc;
        end generate;
    end case;
  end if;
Sl.Hunter
А как это адресовать?

Ой сории код не увидел щас изучу!

ООО Кстати а откуда это? Я сколько не искал такого не находил!

Большое спасибо! )
DmitryR
Цитата(Sl.Hunter @ Jul 4 2008, 12:04) *
Мда, вы меня обрадовали, учитывая, что ПЛИСы другие я взять не могу, т.к. в задании указаны именно эти это всё очень весело получаеться...

Довольно странное задание: IMHO проще купить готовый PLX90xx, они с мастером стоят столько же, сколько MAX3000A на 512 макроячеек (а вы, держу пари, в 512 не влезете: фирменный альтеровский контроллер лезет только в MAXII-1270) (~$50), а target-only - еще дешевле. При этом ничего разрабатывать не надо. Да и вообще, с учетом того, сколько понаделано контроллеров PCI, в том числе и свободных, делать еще один, да на CPLD, да на старой - смысла, извините, не видно.

Что же касается прямого вопроса, то таки-да, для конфигурационного пространства PCI вам придется ставить внешнюю память, и это вилы, потому что либо ставить простую статику, но тогда не сохранить начальную конфигурацию и много ножек надо, либо ставить EEPROM, но тогда надо дополнительную логику для обработки протокола 3-wire, которой и так негусто.
-Al-
Цитата(DmitryR @ Jul 4 2008, 12:56) *
Что же касается прямого вопроса, то таки-да, для конфигурационного пространства PCI вам придется ставить внешнюю память, и это вилы, потому что либо ставить простую статику, но тогда не сохранить начальную конфигурацию и много ножек надо, либо ставить EEPROM, но тогда надо дополнительную логику для обработки протокола 3-wire, которой и так негусто.

Чушь не несите, пожалуйста... Простой PCI-target без проблем влезет даже в столь древнюю CPLD без какой-либо внешней памяти. Да и не припомню, чтоб какому-либо фирменному контроллеру PCI вообще нужна была память для конфигурационного пространства, если и нужна то только для реализации FIFO в PCI-master.

PS да и MAXII 1270 стоит 30$, а не 50$ как Вы указали...
Sl.Hunter
Задание я не выбирал)) Что сказали то и делаю!

P.S. Это так работает современное Российское образование... нам дали 15 дней, что бы разобраться со всей этой фигнёй при том, что о ПЛИСах и VHDL я имею довольно слабое представление... Объяснить нам объяснили но в общих чертах, щас поробую кстати на счёт фиремнного альтеровского контролёра, это то что лежит по адресу: altera\80\ip\pci_compiler так?
DmitryR
Цитата(-Al- @ Jul 4 2008, 13:01) *
Чушь не несите, пожалуйста... Простой PCI-target без проблем влезет даже в столь древнюю CPLD без какой-либо внешней памяти.

Ну вот влезет когда (заработает) - тогда посмотрим...

Цитата(-Al- @ Jul 4 2008, 13:01) *
PS да и MAXII 1270 стоит 30$, а не 50$ как Вы указали...

Согласен, потому что я указал для MAX3000A на 512 макроячеек.
-Al-
Цитата(DmitryR @ Jul 4 2008, 13:15) *
Ну вот влезет когда (заработает) - тогда посмотрим...

Только что для интереса попытался развести свой модуль PCI-target в EPM3512:
Код
Family : MAX3000A
Device : EPM3512AQC208-10
Timing Models : Final
Total macrocells : 170 / 512 ( 33 % )
Total pins : 121 / 172 ( 70 % )

BAR0, обработка прерываний, контроль четности присутствуют.
Sl.Hunter
А откуда вы эти модули берёте?
-Al-
Цитата(Sl.Hunter @ Jul 4 2008, 13:46) *
А откуда вы эти модули берёте?

Пару лет назад сам писал smile.gif
EvgenyNik
Цитата
Это так работает современное Российское образование...

Вот только не надо :-) Вам хотя бы не надо, чтобы это работало в серии, в диапазонах от -40 и держало ЭМИ наносекундные.
Одно дело проблема с курсачём и совсем другое: "аллё, это с другого конца страны, у нас тут импульсы какие-то с вашей платы пишутся и целый промышленный объект отрубает..."
Sl.Hunter
А с чего Вы решили что мне это не надо? Один из разделов рассмотреть ПЛИСы для работы в условиях радиации и температур до -40 )) Короче условия космоса))(т.е. конечно эти работать не должны, а вот какие могут мне надо узнать!!!) Только вопрос в том, что вы этим занимаетесь я думаю уже не один год а я этим занимаюсь от силы неделю, но мне надо сделать всё! От проектирования в Квартусе до разводки платы и изучения поставщиков деталей и производителей ПП и это в достаточно сжатые сроки! Но это офтопик, совсем офотопик.

P.S. Если я попрошу код, это будет наглостью? ))
-Al-
Цитата(Sl.Hunter @ Jul 4 2008, 14:00) *
P.S. Если я попрошу код, это будет наглостью? ))

У меня он на AHDL, и консультровать по нему не смогу, некогда, но поделиться смогу smile.gif
Sl.Hunter
Да мне собственно хоть что, то я попытаюсь разобраться)) КОнсультации не нужны если не пойму то не пойму, если пойму то хорошо, не думаю, что AHDL глобольно чем то отличаеться... можно на мыло 808[at}mail.ru

Вы и так достаточно помогли) Я щас буду пробовать делать блок этот ))
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.