|
Память на ПЛИС |
|
|
|
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, 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;
|
|
|
|
Сообщений в этой теме
Sl.Hunter Память на ПЛИС Jul 4 2008, 05:33 Евгений Николаев Ничего удивительного, т.к. в CPLD (MAX3k, MAX7k, н... Jul 4 2008, 05:57 -Al- Цитата(Евгений Николаев @ Jul 4 2008, 09... Jul 4 2008, 06:34 Sl.Hunter Мда, вы меня обрадовали, учитывая, что ПЛИСы други... Jul 4 2008, 08:04 -Al- Цитата(Sl.Hunter @ Jul 4 2008, 12:04) Мда... Jul 4 2008, 08:29 DmitryR Цитата(Sl.Hunter @ Jul 4 2008, 12:04) Мда... Jul 4 2008, 08:56  -Al- Цитата(DmitryR @ Jul 4 2008, 12:56) Что ж... Jul 4 2008, 09:01   DmitryR Цитата(-Al- @ Jul 4 2008, 13:01... Jul 4 2008, 09:15    -Al- Цитата(DmitryR @ Jul 4 2008, 13:15) Ну во... Jul 4 2008, 09:29 Sl.Hunter А как это адресовать?
Ой сории код не увидел щас ... Jul 4 2008, 08:43 Sl.Hunter Задание я не выбирал)) Что сказали то и делаю... Jul 4 2008, 09:07 Sl.Hunter А откуда вы эти модули берёте? Jul 4 2008, 09:46 -Al- Цитата(Sl.Hunter @ Jul 4 2008, 13:46) А о... Jul 4 2008, 09:47 Евгений Николаев ЦитатаЭто так работает современное Российское обра... Jul 4 2008, 09:50 Sl.Hunter А с чего Вы решили что мне это не надо? Один из ра... Jul 4 2008, 10:00 -Al- Цитата(Sl.Hunter @ Jul 4 2008, 14:00) P.S... Jul 4 2008, 10:03 Sl.Hunter Да мне собственно хоть что, то я попытаюсь разобра... Jul 4 2008, 19:42
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|