Jump to content

    

Recommended Posts

Здравствуйте мне нужно для контролёра шины PCI организовать 64 байта памяти. Язык проектриования VHDL, ПЛИСы Altera MAX3000 или MAX7000.

 

Сначала я взял вот этот код: http://esd.cs.ucr.edu/labs/tutorial/RAM.vhd Немного изменил под себя, но тут оказалось, что даже 64 байта в ПЛИС не влазят там требуется больше 512 макроячеек, что с этим делать я не представляю, т.к. это только один из блоков контролёра. И ещё память по идее должна быть перезаписываемая, но как при старте записать начальные значения в какие-либо ячейки, которые потом можно будет изменить я не поинмаю!

Share this post


Link to post
Share on other sites

Ничего удивительного, т.к. в CPLD (MAX3k, MAX7k, ну и MAXII в эту же кучу) 1 бит хранится в 1-ом триггере, а 1 триггер как раз и образуется силами 1-ой макроячейки. CPLD, или ПЛМ, сильны и востребованы как логические схемы, но малопригодны для хранения информации, как по объёму, так и по цене из расчёта $/Byte. Разве что - несколько регистров.

Обратите своё внимание на действительно ПЛИС (а не ПЛМ), где есть набортное ОЗУ. Из соображений перспективы, берите сразу CycloneIII - там и логики достаточно и ОЗУ немалое. При этом цена явно меньше MAX3512, которой Вам, всё равно, не хватает.

Share this post


Link to post
Share on other sites
Ничего удивительного, т.к. в CPLD (MAX3k, MAX7k, ну и MAXII в эту же кучу) 1 бит хранится в 1-ом триггере, а 1 триггер как раз и образуется силами 1-ой макроячейки. CPLD, или ПЛМ, сильны и востребованы как логические схемы, но малопригодны для хранения информации, как по объёму, так и по цене из расчёта $/Byte. Разве что - несколько регистров.

Обратите своё внимание на действительно ПЛИС (а не ПЛМ), где есть набортное ОЗУ. Из соображений перспективы, берите сразу CycloneIII - там и логики достаточно и ОЗУ немалое. При этом цена явно меньше MAX3512, которой Вам, всё равно, не хватает.

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

 

@Sl.Hunter

Забудьте про память в серии MAX. Выход - менять CPLD на FPGA.

Share this post


Link to post
Share on other sites

Мда, вы меня обрадовали, учитывая, что ПЛИСы другие я взять не могу, т.к. в задании указаны именно эти это всё очень весело получаеться... Получаеться придёться использовать внешнюю память? или есть обходные пути?

Share this post


Link to post
Share on other sites
Мда, вы меня обрадовали, учитывая, что ПЛИСы другие я взять не могу, т.к. в задании указаны именно эти это всё очень весело получаеться... Получаеться придёться использовать внешнюю память? или есть обходные пути?

А с какой целью Вам память нужна??

Share this post


Link to post
Share on other sites

Может сделать можно как то по другому, но в контролёре PCI должны присутсвовать 64 байта, в которых занесена информация об устройстве и информация для БИОСа, это часть PnP как я понял исходя из этой информации БИОС выделит мне адресс порта В/В и зансёт в один из этих регистров + там есть регистр стастуса и регистр команд в которых храниться статус и доступные команды. Эти регистры адресуемые и часть доступна и для чтения и дял записи. В некоторых из них должна изначальна храниться определённая комбинация, вместо которой впоследствии БИОС запишет адресс порта ввода вывода.

Share this post


Link to post
Share on other sites
Может сделать можно как то по другому, но в контролёре PCI должны присутсвовать 64 байта, в которых занесена информация об устройстве и информация для БИОСа, это часть PnP как я понял исходя из этой информации БИОС выделит мне адресс порта В/В и зансёт в один из этих регистров + там есть регистр стастуса и регистр команд в которых храниться статус и доступные команды. Эти регистры адресуемые и часть доступна и для чтения и дял записи. В некоторых из них должна изначальна храниться определённая комбинация, вместо которой впоследствии БИОС запишет адресс порта ввода вывода.

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

 

Пример (на 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;

Share this post


Link to post
Share on other sites

А как это адресовать?

 

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

 

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

 

Большое спасибо! )

Share this post


Link to post
Share on other sites
Мда, вы меня обрадовали, учитывая, что ПЛИСы другие я взять не могу, т.к. в задании указаны именно эти это всё очень весело получаеться...

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

 

Что же касается прямого вопроса, то таки-да, для конфигурационного пространства PCI вам придется ставить внешнюю память, и это вилы, потому что либо ставить простую статику, но тогда не сохранить начальную конфигурацию и много ножек надо, либо ставить EEPROM, но тогда надо дополнительную логику для обработки протокола 3-wire, которой и так негусто.

Share this post


Link to post
Share on other sites
Что же касается прямого вопроса, то таки-да, для конфигурационного пространства PCI вам придется ставить внешнюю память, и это вилы, потому что либо ставить простую статику, но тогда не сохранить начальную конфигурацию и много ножек надо, либо ставить EEPROM, но тогда надо дополнительную логику для обработки протокола 3-wire, которой и так негусто.

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

 

PS да и MAXII 1270 стоит 30$, а не 50$ как Вы указали...

Share this post


Link to post
Share on other sites

Задание я не выбирал)) Что сказали то и делаю!

 

P.S. Это так работает современное Российское образование... нам дали 15 дней, что бы разобраться со всей этой фигнёй при том, что о ПЛИСах и VHDL я имею довольно слабое представление... Объяснить нам объяснили но в общих чертах, щас поробую кстати на счёт фиремнного альтеровского контролёра, это то что лежит по адресу: altera\80\ip\pci_compiler так?

Share this post


Link to post
Share on other sites
Чушь не несите, пожалуйста... Простой PCI-target без проблем влезет даже в столь древнюю CPLD без какой-либо внешней памяти.

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

 

PS да и MAXII 1270 стоит 30$, а не 50$ как Вы указали...

Согласен, потому что я указал для MAX3000A на 512 макроячеек.

Share this post


Link to post
Share on other sites
Ну вот влезет когда (заработает) - тогда посмотрим...

Только что для интереса попытался развести свой модуль PCI-target в EPM3512:

Family : MAX3000A
Device : EPM3512AQC208-10
Timing Models : Final
Total macrocells : 170 / 512 ( 33 % )
Total pins : 121 / 172 ( 70 % )

BAR0, обработка прерываний, контроль четности присутствуют.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this