|
Память на ПЛИС |
|
|
|
Jul 4 2008, 05:33
|
Участник

Группа: Новичок
Сообщений: 27
Регистрация: 29-06-08
Из: Москва
Пользователь №: 38 628

|
Здравствуйте мне нужно для контролёра шины PCI организовать 64 байта памяти. Язык проектриования VHDL, ПЛИСы Altera MAX3000 или MAX7000. Сначала я взял вот этот код: http://esd.cs.ucr.edu/labs/tutorial/RAM.vhd Немного изменил под себя, но тут оказалось, что даже 64 байта в ПЛИС не влазят там требуется больше 512 макроячеек, что с этим делать я не представляю, т.к. это только один из блоков контролёра. И ещё память по идее должна быть перезаписываемая, но как при старте записать начальные значения в какие-либо ячейки, которые потом можно будет изменить я не поинмаю!
|
|
|
|
|
Jul 4 2008, 05:57
|

Знающий
   
Группа: Свой
Сообщений: 597
Регистрация: 24-05-06
Из: г. Чебоксары
Пользователь №: 17 402

|
Ничего удивительного, т.к. в CPLD (MAX3k, MAX7k, ну и MAXII в эту же кучу) 1 бит хранится в 1-ом триггере, а 1 триггер как раз и образуется силами 1-ой макроячейки. CPLD, или ПЛМ, сильны и востребованы как логические схемы, но малопригодны для хранения информации, как по объёму, так и по цене из расчёта $/Byte. Разве что - несколько регистров. Обратите своё внимание на действительно ПЛИС (а не ПЛМ), где есть набортное ОЗУ. Из соображений перспективы, берите сразу CycloneIII - там и логики достаточно и ОЗУ немалое. При этом цена явно меньше MAX3512, которой Вам, всё равно, не хватает.
--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
|
|
|
|
|
Jul 4 2008, 06:34
|

Местный
  
Группа: Свой
Сообщений: 330
Регистрация: 10-06-05
Из: Россия, Москва
Пользователь №: 5 894

|
Цитата(Евгений Николаев @ Jul 4 2008, 09:57)  Ничего удивительного, т.к. в CPLD (MAX3k, MAX7k, ну и MAXII в эту же кучу) 1 бит хранится в 1-ом триггере, а 1 триггер как раз и образуется силами 1-ой макроячейки. CPLD, или ПЛМ, сильны и востребованы как логические схемы, но малопригодны для хранения информации, как по объёму, так и по цене из расчёта $/Byte. Разве что - несколько регистров. Обратите своё внимание на действительно ПЛИС (а не ПЛМ), где есть набортное ОЗУ. Из соображений перспективы, берите сразу CycloneIII - там и логики достаточно и ОЗУ немалое. При этом цена явно меньше MAX3512, которой Вам, всё равно, не хватает. CycloneIII (как и все предыдущие Cylclone) напрямую к PCI подключить нельзя, только через шинники. В таком случае можно посмотреть на относительно древнюю ACEX1K, она и напрямую подключается и память в ней есть  @Sl.Hunter Забудьте про память в серии MAX. Выход - менять CPLD на FPGA.
|
|
|
|
|
Jul 4 2008, 08:04
|
Участник

Группа: Новичок
Сообщений: 27
Регистрация: 29-06-08
Из: Москва
Пользователь №: 38 628

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

Группа: Новичок
Сообщений: 27
Регистрация: 29-06-08
Из: Москва
Пользователь №: 38 628

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

Местный
  
Группа: Свой
Сообщений: 330
Регистрация: 10-06-05
Из: Россия, Москва
Пользователь №: 5 894

|
Цитата(Sl.Hunter @ Jul 4 2008, 12:36)  Может сделать можно как то по другому, но в контролёре 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;
|
|
|
|
|
Jul 4 2008, 08:43
|
Участник

Группа: Новичок
Сообщений: 27
Регистрация: 29-06-08
Из: Москва
Пользователь №: 38 628

|
А как это адресовать?
Ой сории код не увидел щас изучу!
ООО Кстати а откуда это? Я сколько не искал такого не находил!
Большое спасибо! )
|
|
|
|
|
Jul 4 2008, 08:56
|
Профессионал
    
Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770

|
Цитата(Sl.Hunter @ Jul 4 2008, 12:04)  Мда, вы меня обрадовали, учитывая, что ПЛИСы другие я взять не могу, т.к. в задании указаны именно эти это всё очень весело получаеться... Довольно странное задание: IMHO проще купить готовый PLX90xx, они с мастером стоят столько же, сколько MAX3000A на 512 макроячеек (а вы, держу пари, в 512 не влезете: фирменный альтеровский контроллер лезет только в MAXII-1270) (~$50), а target-only - еще дешевле. При этом ничего разрабатывать не надо. Да и вообще, с учетом того, сколько понаделано контроллеров PCI, в том числе и свободных, делать еще один, да на CPLD, да на старой - смысла, извините, не видно. Что же касается прямого вопроса, то таки-да, для конфигурационного пространства PCI вам придется ставить внешнюю память, и это вилы, потому что либо ставить простую статику, но тогда не сохранить начальную конфигурацию и много ножек надо, либо ставить EEPROM, но тогда надо дополнительную логику для обработки протокола 3-wire, которой и так негусто.
|
|
|
|
|
Jul 4 2008, 09:01
|

Местный
  
Группа: Свой
Сообщений: 330
Регистрация: 10-06-05
Из: Россия, Москва
Пользователь №: 5 894

|
Цитата(DmitryR @ Jul 4 2008, 12:56)  Что же касается прямого вопроса, то таки-да, для конфигурационного пространства PCI вам придется ставить внешнюю память, и это вилы, потому что либо ставить простую статику, но тогда не сохранить начальную конфигурацию и много ножек надо, либо ставить EEPROM, но тогда надо дополнительную логику для обработки протокола 3-wire, которой и так негусто. Чушь не несите, пожалуйста... Простой PCI-target без проблем влезет даже в столь древнюю CPLD без какой-либо внешней памяти. Да и не припомню, чтоб какому-либо фирменному контроллеру PCI вообще нужна была память для конфигурационного пространства, если и нужна то только для реализации FIFO в PCI-master. PS да и MAXII 1270 стоит 30$, а не 50$ как Вы указали...
|
|
|
|
|
Jul 4 2008, 09:07
|
Участник

Группа: Новичок
Сообщений: 27
Регистрация: 29-06-08
Из: Москва
Пользователь №: 38 628

|
Задание я не выбирал)) Что сказали то и делаю!
P.S. Это так работает современное Российское образование... нам дали 15 дней, что бы разобраться со всей этой фигнёй при том, что о ПЛИСах и VHDL я имею довольно слабое представление... Объяснить нам объяснили но в общих чертах, щас поробую кстати на счёт фиремнного альтеровского контролёра, это то что лежит по адресу: altera\80\ip\pci_compiler так?
|
|
|
|
|
Jul 4 2008, 09:15
|
Профессионал
    
Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770

|
Цитата(-Al- @ Jul 4 2008, 13:01)  Чушь не несите, пожалуйста... Простой PCI-target без проблем влезет даже в столь древнюю CPLD без какой-либо внешней памяти. Ну вот влезет когда (заработает) - тогда посмотрим... Цитата(-Al- @ Jul 4 2008, 13:01)  PS да и MAXII 1270 стоит 30$, а не 50$ как Вы указали... Согласен, потому что я указал для MAX3000A на 512 макроячеек.
|
|
|
|
|
Jul 4 2008, 09:29
|

Местный
  
Группа: Свой
Сообщений: 330
Регистрация: 10-06-05
Из: Россия, Москва
Пользователь №: 5 894

|
Цитата(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, обработка прерываний, контроль четности присутствуют.
|
|
|
|
|
Jul 4 2008, 09:46
|
Участник

Группа: Новичок
Сообщений: 27
Регистрация: 29-06-08
Из: Москва
Пользователь №: 38 628

|
А откуда вы эти модули берёте?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|