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

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

 

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

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


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

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

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

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


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

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

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

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

 

@Sl.Hunter

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

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


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

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

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


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

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

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

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


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

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

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


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

Может сделать можно как то по другому, но в контролёре 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;

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


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

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

 

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

 

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

 

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

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


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

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

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

 

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

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


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

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

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

 

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

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


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

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

 

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

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


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

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

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

 

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

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

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


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

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

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

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

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

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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