Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Stratix II + Ethernet
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
Страницы: 1, 2
Azatot
Цитата
Теперь кратко по шагам.

Порядок действий нам известен. rolleyes.gif
Вопрос как у Вас подключена FPGA к LAN, физически какие контакты куда идут?
doom13
Цитата(Serhiy_UA @ Feb 2 2015, 09:42) *
В файле main.v. сигналы от LAN91C111, логически выводятся на внешние выводы ПЛИС.

Вот про это логическое подключение подробнее и расскажите. Какие порты для LAN должны быть в SOPC-системе и как они подключаются к физическим ногам микросхемы LAN91C111.

Со стандартными настройками компонента LAN91C111 в Qsys получаем только следующие порты для SOPC (есть возможность включить дополнительные сигналы):
Код
output wire [15:0] tristate_conduit_bridge_tcm_address_out,      // tristate_conduit_bridge.tcm_address_out
output wire [3:0]  tristate_conduit_bridge_tcm_byteenable_n_out, //                        .tcm_byteenable_n_out
output wire [0:0]  tristate_conduit_bridge_tcm_read_n_out,       //                        .tcm_read_n_out
output wire [0:0]  tristate_conduit_bridge_tcm_write_n_out,      //                        .tcm_write_n_out
output wire [0:0]  tristate_conduit_bridge_tcm_reset_out,        //                        .tcm_reset_out
inout  wire [31:0] tristate_conduit_bridge_tcm_data_out          //                        .tcm_data_out
Serhiy_UA
Цитата(Azatot @ Feb 2 2015, 09:49) *
Вопрос как у Вас подключена FPGA к LAN, физически какие контакты куда идут?
Все делать согласно принципиальной схеме на плату. Если Вы её не имеете, то это плохо...

Цитата(doom13 @ Feb 2 2015, 09:49) *
Вот про это логическое подключение подробнее и расскажите. Какие порты для LAN должны быть в SOPC-системе и как они подключаются к физическим ногам микросхемы LAN91C111.
Компонент LAN91C111 должен быть доступен из/в SOPC Buider, иначе он не будет сгенерирован и для него не создастся интерфейсный канал, т.е. не будет автоматом созданы цепи и они не будут увязаны с тактовой частотой NiosII, для корректного обращения к LAN91C111. Вручную это сделать не удастся...
По поводу логики подключения, здесь нужно знать про построение иерархических проектов из главного и подчиненных модулей, а так же, уже вручную, увязывать все по названиям цепи из модуля NiosII (подчиненный) и главного модуля проекта.
В части физического подключения - нужна принципиальная схема на ПЛИС и LAN91C111 и также ручная увязка контактов. Все делать с учетом названия цепей...
Azatot
Цитата
Все делать согласно принципиальной схеме на плату. Если Вы её не имеете, то это плохо...

Это все понятно, схема есть.
Вопрос в том, какие сигналы в Вашем проекте создал SOPC для связи с LAN91C111?
doom13
Цитата(Serhiy_UA @ Feb 2 2015, 10:21) *

Похоже, мы на разных языках разговариваем

Цитата(Serhiy_UA @ Feb 2 2015, 10:21) *
В части физического подключения - нужна принципиальная схема на ПЛИС и LAN91C111 и также ручная увязка контактов. Все делать с учетом названия цепей...

Где-то названия совпадают, а есть и такие пины на микросхеме, которых нет в сгенерированной SOPC системе.
Serhiy_UA
Цитата(Azatot @ Feb 2 2015, 10:24) *
Вопрос в том, какие сигналы в Вашем проекте создал SOPC для связи с LAN91C111?

Откройте прилагаемый файл, там почти в конце есть строка:
NiosII_stratixII_2s60_RoHS_small_sopc DUT
После неё все сигналы большого черного ящика, что создал SOPC, в том числе для работы с LAN91C111.
Это и есть та заготовка для подчиненного модуля, что вставляется в модуль верхнего уровня. Теперь нужные Вам сигналы перетягиваются на выход ПЛИС, а не нужные используются внутри главного модуля...

Цитата(doom13 @ Feb 2 2015, 10:28) *
Где-то названия совпадают, а есть и такие пины на микросхеме, которых нет в сгенерированной SOPC системе.

Бывыет, здесь надо разбираться...
Просто в моем случае, на готовом ките, все заработало...
В приложении схема кита.
Azatot
Цитата
Откройте прилагаемый файл, там почти в конце есть строка:
NiosII_stratixII_2s60_RoHS_small_sopc DUT

Получается, что сигналы все те же, только irq(видимо прерывание с LAN) добавился.
Serhiy_UA
Цитата(Azatot @ Feb 2 2015, 11:48) *
Получается, что сигналы все те же, только irq(видимо прерывание с LAN) добавился.

В моей программе прерывание от LAN, я не обрабатывал. Просто периодически опрашивал буфер LAN. Времени хватало. Хотя с прерыванием было бы лучше...
Azatot
Цитата
Проверил, так и есть, для Вас - это внешняя память и никаких драйверов в BSP нет. Регистры LAN пишете через указатель.

Кстати, драйвера то в BSP LAN91C111 есть таки. altera_avalon_lan91c111_regs.h и altera_avalon_lan91c111.h.
doom13
Цитата(Azatot @ Feb 2 2015, 10:48) *
Получается, что сигналы все те же, только irq(видимо прерывание с LAN) добавился.

Получили, что все ножки LAN91C111 заведены на FPGA. В получаемой Qsys-системе ног меньше (если смотреть на описание шин, с которыми может работать LAN91С111, то для любой из них сигналов в Qsys-системе должно быть намного больше). Из приведённого примера не понятно, что делать с остальными ножками микросхемы. Пробуйте на оставшиеся повесить '0' или '1' (что подходит, смотрите по даташиту).
Azatot
Цитата
Из приведённого примера не понятно, что делать с остальными ножками микросхемы. Пробуйте на оставшиеся повесить '0' или '1' (что подходит, смотрите по даташиту).

Да, в принципе, так уже и сделал. Жду пока программатор вернут, и буду пробовать.
doom13
Цитата(Azatot @ Feb 2 2015, 11:33) *
Кстати, драйвера то в BSP LAN91C111 есть таки. altera_avalon_lan91c111_regs.h и altera_avalon_lan91c111.h.

Да есть, я что-то не туда смотрел. Можете, когда всё подключите, попробовать читать/писать регистры с помощью макросов. Но, думаю, через указатель тут тоже должно всё работать.
На рисунке - используемые ножки в нашей схеме. AEN (если доку смотреть) - не ADDR0, а больше похож на чип-селект. С адресом смотрите, как там будет правильно.
Azatot
Цитата
AEN (если доку смотреть) - не ADDR0, а больше похож на чип-селект

Просто, тогда странно, что делать с ADDR0.
Azatot
Цитата
Но пока в Memory видите FFFFFF - не прокатит, смотрите, что писал выше.

А Nios точно должен распознать LAN, как память и видеть, что в регистрах через вкладку Memory в Eclipse?
Там все время FF, а если пишу через IOWR_ALTERA_AVALON_LAN91C111_BSR, а потом читаю IORD_ALTERA_AVALON_LAN91C111_BSR, то в переменной лежит, то что писал. Но, может это и не работает на самом деле.
doom13
Цитата(Azatot @ Feb 3 2015, 09:22) *
А Nios точно должен распознать LAN, как память и видеть, что в регистрах через вкладку Memory в Eclipse?
Там все время FF, а если пишу через IOWR_ALTERA_AVALON_LAN91C111_BSR, а потом читаю IORD_ALTERA_AVALON_LAN91C111_BSR, то в переменной лежит, то что писал. Но, может это и не работает на самом деле.

Думал, что да. Но если через макросы работает, значит ошибаюсь.
А если попробовать писать/читать через указатель?
Azatot
Цитата
Думал, что да. Но если через макросы работает, значит ошибаюсь.
А если попробовать писать/читать через указатель?

Да, похоже, что не работает и макросами, либо я что то не так делаю.
Через указатель пишу, потом читаю, во вкладке Variables в переменной reg показывает то, что писал. А в lan_reg (откуда считываю) всеравно лежит FF.
doom13
Цитата(Azatot @ Feb 3 2015, 09:39) *
Да, похоже, что не работает и макросами, либо я что то не так делаю.

Т.е. прочитать значение регистра с помощью макроса всё же не работает?
А куда повесили AEN?
Azatot
Цитата
Т.е. прочитать значение регистра с помощью макроса всё же не работает?

Да тут похоже, всетаки с сигналами что то не так.
AEN и на ADR0 вешал и CS на выводил. Потом смотрю осциллографом AEN, а он как стоит в 1, так и не шелохнется.
doom13
Покажите, что и куда подключаете (все ножки микросхемы).
Azatot
Цитата
Потом смотрю осциллографом AEN, а он как стоит в 1

Даже не в 1, а TriState.
Цитата
Покажите, что и куда подключаете (все ножки микросхемы).

В приложении.
doom13
Можно ещё подключение портов Nios к выводам FPGA (микросхемы LAN) и что на "лишних" ногах LAN.
Зачем используете двунаправленные порты там, где в этом нет необходимости (ADDR, AEN, BE[3:0],....)?
Azatot
Цитата
Зачем используете двунаправленные порты там, где в этом нет необходимости (ADDR, AEN, BE[3:0],....)?

Так Qsys сгенерировал.
Цитата
Можно ещё подключение портов Nios к выводам FPGA (микросхемы LAN) и что на "лишних" ногах LAN.

В файле, что я выложил, эти сигналы идут от Nios к выводам FPGA:
LAN_data
LAN_adr
LAN_byte
LAN_read
LAN_irq
LAN_AEn
LAN_write
Остальные ноги LAN:
LAN_RDYRTN<='1';
LAN_CYCLE<='1';
LAN_VLBUS<='1';
LAN_LCLK<='1';
Эти ноги LAN сидят на жесткую (либо земля, либо питание):
DATA_CS<='1';
IOCHRDY<='1';
LDEV<='0';
SRDY<='0';
W_R_N<='1';
doom13
Используйте inout только для шины DATA, всё остольное или input или output (не будет лишней возможности ошибиться).
Судя по pin-файлу LAN_AEn[0] вообще никуда не подключен.
LDEV<='0'; SRDY<='0'; вообще выходы микросхемы (если доку на LAN смотреть).
Azatot
Цитата
Используйте inout только для шины DATA, всё остольное или input или output (не будет лишней возможности ошибиться).

Хорошо, поменяю. Меня это тоже насторожило, но подумал раз Qsys так генерит, значит так и надо.
Цитата
Судя по pin-файлу LAN_AEn[0] вообще никуда не подключен.

LAN_AEn[0] я ввел, когда cs вывел из компонента. А сейчас на ADR[0] подключено, поэтому LAN_AEn[0] остался голый.
Цитата
LDEV<='0'; SRDY<='0'; вообще выходы микросхемы (если доку на LAN смотреть).

Эти пины подключены к ногам ПЛИС, которые являются GND ногами.

Смотрю осциллографом:
WR и RD оба в 0 лежат.
По адресной шине что то проскакивает.
На данных вообще пила какая то.
AEn в третьем состоянии будто бы.
doom13
Цитата(Azatot @ Feb 3 2015, 11:52) *
Хорошо, поменяю. Меня это тоже насторожило, но подумал раз Qsys так генерит, значит так и надо.

Так Qsys генерит inout только для шины данных:
Код
output wire [15:0] tristate_conduit_bridge_tcm_address_out,      // tristate_conduit_bridge.tcm_address_out
output wire [3:0]  tristate_conduit_bridge_tcm_byteenable_n_out, //                        .tcm_byteenable_n_out
output wire [0:0]  tristate_conduit_bridge_tcm_read_n_out,       //                        .tcm_read_n_out
output wire [0:0]  tristate_conduit_bridge_tcm_write_n_out,      //                        .tcm_write_n_out
output wire [0:0]  tristate_conduit_bridge_tcm_reset_out,        //                        .tcm_reset_out
inout  wire [31:0] tristate_conduit_bridge_tcm_data_out          //                        .tcm_data_out

Azatot
Цитата
Так Qsys генерит inout только для шины данных:

Беру из вкладки HDL Example Qsys'а (в VHDL):
Код
component Nios1_proc is
        port (
            clk_0                                                            : in    std_logic                     := 'X';             -- clk
            reset_n                                                          : in    std_logic                     := 'X';             -- reset_n
            out_port_from_the_pio_0                                          : out   std_logic_vector(7 downto 0);                     -- export
            tri_state_bridge_0_bridge_0_out_select_n_to_the_cfi_flash_0      : inout std_logic_vector(0 downto 0)  := (others => 'X'); -- select_n_to_the_cfi_flash_0
            tri_state_bridge_0_bridge_0_out_write_n_to_the_cfi_flash_0       : inout std_logic_vector(0 downto 0)  := (others => 'X'); -- write_n_to_the_cfi_flash_0
            tri_state_bridge_0_bridge_0_out_read_n_to_the_cfi_flash_0        : inout std_logic_vector(0 downto 0)  := (others => 'X'); -- read_n_to_the_cfi_flash_0
            tri_state_bridge_0_bridge_0_out_data_to_and_from_the_cfi_flash_0 : inout std_logic_vector(7 downto 0)  := (others => 'X'); -- data_to_and_from_the_cfi_flash_0
            tri_state_bridge_0_bridge_0_out_address_to_the_cfi_flash_0       : inout std_logic_vector(23 downto 0) := (others => 'X'); -- address_to_the_cfi_flash_0
            tristate_conduit_bridge_0_out_tcm_byteenable_n_out               : inout std_logic_vector(3 downto 0)  := (others => 'X'); -- tcm_byteenable_n_out
            tristate_conduit_bridge_0_out_tcm_irq_in_in                      : in    std_logic_vector(0 downto 0)  := (others => 'X'); -- tcm_irq_in_in
            tristate_conduit_bridge_0_out_tcm_data_out                       : inout std_logic_vector(31 downto 0) := (others => 'X'); -- tcm_data_out
            tristate_conduit_bridge_0_out_tcm_write_n_out                    : inout std_logic_vector(0 downto 0)  := (others => 'X'); -- tcm_write_n_out
            tristate_conduit_bridge_0_out_tcm_reset_out                      : inout std_logic_vector(0 downto 0)  := (others => 'X'); -- tcm_reset_out
            tristate_conduit_bridge_0_out_tcm_chipselect_n_out               : inout std_logic_vector(0 downto 0)  := (others => 'X'); -- tcm_chipselect_n_out
            tristate_conduit_bridge_0_out_tcm_address_out                    : inout std_logic_vector(15 downto 0) := (others => 'X'); -- tcm_address_out
            tristate_conduit_bridge_0_out_tcm_read_n_out                     : inout std_logic_vector(0 downto 0)  := (others => 'X')  -- tcm_read_n_out
        );
doom13
Взято с форума Альтеры:
Цитата
Connect pins #BE0, #BE1 to the same named module port pins.
Connect pins A1,A2,A3 to module pins A2,A3,A4.
Tie pins A8,A9 high, all remaining address pins low.
IRQ and Reset connected to obvious pins.
#IOR, #IOW to #RD,#WR.
#ADS, AEN low, LCLK, #BE2,#BE3 high.

With the address lines connected as described, your registers should be on 32bit boundaries: BASE+0,BASE+4,BASE+8,etc.

As a test try to read the BSR:
write 0x0003 to BASE+0xE, then you should read something like 0x339n from BASE+0xA. You may have to use 0x1C,0x14 instead of 0xE,0xA depending on if you have used any of the built-in macros to do the job. Once this works, you will know what kind of changes will be needed to the driver - mainly shift and mask.
Azatot
Цитата
Взято с форума Альтеры:

Попробовал так.
Подключил, как написано, пишу 0х0003, читаю 0х3.
Ради интереса записал 0х0007 и 0х0123, прочитал 0х7 и 0х123. По моему, не работает.
А ссылку не кинете на тему альтеровского форума откуда взяли этот текст?
doom13
Цитата(Azatot @ Feb 3 2015, 16:13) *
А ссылку не кинете на тему альтеровского форума откуда взяли этот текст?

Тут смотрите.


Цитата(Azatot @ Feb 3 2015, 16:13) *
Попробовал так.
Подключил, как написано, пишу 0х0003, читаю 0х3.
Ради интереса записал 0х0007 и 0х0123, прочитал 0х7 и 0х123. По моему, не работает.

Что-то не понял, почему не работает, что записали то и прочитали. Что не так?
Azatot
Цитата
Что-то не понял, почему не работает, что записали то и прочитали. Что не так?

Да что то не понятно мне.
Пишу:
Код
for(i=0;i<20;i++)
            {
                IOWR_16DIRECT(LAN_BASE_ADDRESS+0xE, 14, 0x0003);
                reg[i]=IORD_16DIRECT(LAN_BASE_ADDRESS+i, 14);
            }

Хочу записывая один регистр, посмотреть, что в других, включая и записанный.
В reg[] после выхода из for какая то ерунда лежит. В том числе и в BASE_ADR+0xA.
Пишу:
Код
   IOWR_16DIRECT(LAN_BASE_ADDRESS+0xE, 14, 0x0003);
            reg2=IORD_16DIRECT(LAN_BASE_ADDRESS+0xA, 14);

            IOWR_16DIRECT(LAN_BASE_ADDRESS+0xE, 14, 0x0003);
            reg3=IORD_16DIRECT(LAN_BASE_ADDRESS+0xB, 14);

            IOWR_16DIRECT(LAN_BASE_ADDRESS+0xE, 14, 0x0003);
            reg4=IORD_16DIRECT(LAN_BASE_ADDRESS+0xC, 14);

            IOWR_16DIRECT(LAN_BASE_ADDRESS+0xE, 14, 0x0003);
            reg5=IORD_16DIRECT(LAN_BASE_ADDRESS+0xD, 14);

Так же, по идее, как и с for, но в результате выдает:
reg2=0х3
reg3=0х300
reg4=0х3
reg5=0х0
Azatot
Цитата
Исходный проект на DK-NIOS-2S60N и тексты для NiosII от 2009 года в среде QII-7.2 имеются.

Serhiy_UA А Вы бы не могли поделиться этим проектом, если, конечно есть такая возможность.
Я бы попробовал проц в Qsys открыть и посмотреть что куда идет. Да и ethernet софт на Ниос тоже пригодился бы.
Alexey_Rostov
Цитата(Azatot @ Feb 4 2015, 14:43) *
Serhiy_UA А Вы бы не могли поделиться этим проектом, если, конечно есть такая возможность.
Я бы попробовал проц в Qsys открыть и посмотреть что куда идет. Да и ethernet софт на Ниос тоже пригодился бы.


около года назад делал проект на аналогичной плате с ethernet'ом. Среда была насколько помню 9.1 для сборки системы использовал SOPC а не qsys.
С платой шли примеры для ethernet (tcp/ip и web). В качестве основы взял пример tcp/ip, в примере через командную строку можно было светодиоды зажигать на плате Далее в SOPC разобрал этот пример. Нашел функции записи/чтения буфера и отправления пакетов. Так собрал свой проект.
если еще актуально могу поднять проект и посмотреть
Azatot
Цитата
около года назад делал проект на аналогичной плате с ethernet'ом. Среда была насколько помню 9.1 для сборки системы использовал SOPC а не qsys.
С платой шли примеры для ethernet (tcp/ip и web). В качестве основы взял пример tcp/ip, в примере через командную строку можно было светодиоды зажигать на плате Далее в SOPC разобрал этот пример. Нашел функции записи/чтения буфера и отправления пакетов. Так собрал свой проект.
если еще актуально могу поднять проект и посмотреть

Был бы очень благодарен, если бы могли поднять проект. Просто примеров на плату у меня не было, а найти рабочий не получается.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.