Sl.Hunter 0 4 июля, 2008 Опубликовано 4 июля, 2008 · Жалоба Здравствуйте мне нужно для контролёра шины PCI организовать 64 байта памяти. Язык проектриования VHDL, ПЛИСы Altera MAX3000 или MAX7000. Сначала я взял вот этот код: http://esd.cs.ucr.edu/labs/tutorial/RAM.vhd Немного изменил под себя, но тут оказалось, что даже 64 байта в ПЛИС не влазят там требуется больше 512 макроячеек, что с этим делать я не представляю, т.к. это только один из блоков контролёра. И ещё память по идее должна быть перезаписываемая, но как при старте записать начальные значения в какие-либо ячейки, которые потом можно будет изменить я не поинмаю! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EvgenyNik 0 4 июля, 2008 Опубликовано 4 июля, 2008 · Жалоба Ничего удивительного, т.к. в CPLD (MAX3k, MAX7k, ну и MAXII в эту же кучу) 1 бит хранится в 1-ом триггере, а 1 триггер как раз и образуется силами 1-ой макроячейки. CPLD, или ПЛМ, сильны и востребованы как логические схемы, но малопригодны для хранения информации, как по объёму, так и по цене из расчёта $/Byte. Разве что - несколько регистров. Обратите своё внимание на действительно ПЛИС (а не ПЛМ), где есть набортное ОЗУ. Из соображений перспективы, берите сразу CycloneIII - там и логики достаточно и ОЗУ немалое. При этом цена явно меньше MAX3512, которой Вам, всё равно, не хватает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-Al- 0 4 июля, 2008 Опубликовано 4 июля, 2008 · Жалоба Ничего удивительного, т.к. в CPLD (MAX3k, MAX7k, ну и MAXII в эту же кучу) 1 бит хранится в 1-ом триггере, а 1 триггер как раз и образуется силами 1-ой макроячейки. CPLD, или ПЛМ, сильны и востребованы как логические схемы, но малопригодны для хранения информации, как по объёму, так и по цене из расчёта $/Byte. Разве что - несколько регистров. Обратите своё внимание на действительно ПЛИС (а не ПЛМ), где есть набортное ОЗУ. Из соображений перспективы, берите сразу CycloneIII - там и логики достаточно и ОЗУ немалое. При этом цена явно меньше MAX3512, которой Вам, всё равно, не хватает. CycloneIII (как и все предыдущие Cylclone) напрямую к PCI подключить нельзя, только через шинники. В таком случае можно посмотреть на относительно древнюю ACEX1K, она и напрямую подключается и память в ней есть :) @Sl.Hunter Забудьте про память в серии MAX. Выход - менять CPLD на FPGA. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sl.Hunter 0 4 июля, 2008 Опубликовано 4 июля, 2008 · Жалоба Мда, вы меня обрадовали, учитывая, что ПЛИСы другие я взять не могу, т.к. в задании указаны именно эти это всё очень весело получаеться... Получаеться придёться использовать внешнюю память? или есть обходные пути? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-Al- 0 4 июля, 2008 Опубликовано 4 июля, 2008 · Жалоба Мда, вы меня обрадовали, учитывая, что ПЛИСы другие я взять не могу, т.к. в задании указаны именно эти это всё очень весело получаеться... Получаеться придёться использовать внешнюю память? или есть обходные пути? А с какой целью Вам память нужна?? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sl.Hunter 0 4 июля, 2008 Опубликовано 4 июля, 2008 · Жалоба Может сделать можно как то по другому, но в контролёре PCI должны присутсвовать 64 байта, в которых занесена информация об устройстве и информация для БИОСа, это часть PnP как я понял исходя из этой информации БИОС выделит мне адресс порта В/В и зансёт в один из этих регистров + там есть регистр стастуса и регистр команд в которых храниться статус и доступные команды. Эти регистры адресуемые и часть доступна и для чтения и дял записи. В некоторых из них должна изначальна храниться определённая комбинация, вместо которой впоследствии БИОС запишет адресс порта ввода вывода. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-Al- 0 4 июля, 2008 Опубликовано 4 июля, 2008 · Жалоба Может сделать можно как то по другому, но в контролёре 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; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sl.Hunter 0 4 июля, 2008 Опубликовано 4 июля, 2008 · Жалоба А как это адресовать? Ой сории код не увидел щас изучу! ООО Кстати а откуда это? Я сколько не искал такого не находил! Большое спасибо! ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DmitryR 0 4 июля, 2008 Опубликовано 4 июля, 2008 · Жалоба Мда, вы меня обрадовали, учитывая, что ПЛИСы другие я взять не могу, т.к. в задании указаны именно эти это всё очень весело получаеться... Довольно странное задание: IMHO проще купить готовый PLX90xx, они с мастером стоят столько же, сколько MAX3000A на 512 макроячеек (а вы, держу пари, в 512 не влезете: фирменный альтеровский контроллер лезет только в MAXII-1270) (~$50), а target-only - еще дешевле. При этом ничего разрабатывать не надо. Да и вообще, с учетом того, сколько понаделано контроллеров PCI, в том числе и свободных, делать еще один, да на CPLD, да на старой - смысла, извините, не видно. Что же касается прямого вопроса, то таки-да, для конфигурационного пространства PCI вам придется ставить внешнюю память, и это вилы, потому что либо ставить простую статику, но тогда не сохранить начальную конфигурацию и много ножек надо, либо ставить EEPROM, но тогда надо дополнительную логику для обработки протокола 3-wire, которой и так негусто. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-Al- 0 4 июля, 2008 Опубликовано 4 июля, 2008 · Жалоба Что же касается прямого вопроса, то таки-да, для конфигурационного пространства PCI вам придется ставить внешнюю память, и это вилы, потому что либо ставить простую статику, но тогда не сохранить начальную конфигурацию и много ножек надо, либо ставить EEPROM, но тогда надо дополнительную логику для обработки протокола 3-wire, которой и так негусто. Чушь не несите, пожалуйста... Простой PCI-target без проблем влезет даже в столь древнюю CPLD без какой-либо внешней памяти. Да и не припомню, чтоб какому-либо фирменному контроллеру PCI вообще нужна была память для конфигурационного пространства, если и нужна то только для реализации FIFO в PCI-master. PS да и MAXII 1270 стоит 30$, а не 50$ как Вы указали... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sl.Hunter 0 4 июля, 2008 Опубликовано 4 июля, 2008 · Жалоба Задание я не выбирал)) Что сказали то и делаю! P.S. Это так работает современное Российское образование... нам дали 15 дней, что бы разобраться со всей этой фигнёй при том, что о ПЛИСах и VHDL я имею довольно слабое представление... Объяснить нам объяснили но в общих чертах, щас поробую кстати на счёт фиремнного альтеровского контролёра, это то что лежит по адресу: altera\80\ip\pci_compiler так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DmitryR 0 4 июля, 2008 Опубликовано 4 июля, 2008 · Жалоба Чушь не несите, пожалуйста... Простой PCI-target без проблем влезет даже в столь древнюю CPLD без какой-либо внешней памяти. Ну вот влезет когда (заработает) - тогда посмотрим... PS да и MAXII 1270 стоит 30$, а не 50$ как Вы указали... Согласен, потому что я указал для MAX3000A на 512 макроячеек. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-Al- 0 4 июля, 2008 Опубликовано 4 июля, 2008 · Жалоба Ну вот влезет когда (заработает) - тогда посмотрим... Только что для интереса попытался развести свой модуль PCI-target в EPM3512: Family : MAX3000A Device : EPM3512AQC208-10 Timing Models : Final Total macrocells : 170 / 512 ( 33 % ) Total pins : 121 / 172 ( 70 % ) BAR0, обработка прерываний, контроль четности присутствуют. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sl.Hunter 0 4 июля, 2008 Опубликовано 4 июля, 2008 · Жалоба А откуда вы эти модули берёте? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-Al- 0 4 июля, 2008 Опубликовано 4 июля, 2008 · Жалоба А откуда вы эти модули берёте? Пару лет назад сам писал :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться