|
Ethernet to Е1, Переброс данных из MAC уровня Ethernet в Е1 |
|
|
|
Aug 17 2016, 12:40
|

Участник

Группа: Участник
Сообщений: 53
Регистрация: 14-11-10
Пользователь №: 60 881

|
Здравствуйте! Являюсь начинающим разработчиком на FPGA. Работаю с ПЛИС Xilinx Spartan 6. Среда разработки ISE 14.7. Стоит задача: переброс данных из МАС уровня Ethernet в Е1. Имеется ПЛИС Spartan6 xc6slx150t-2fgg900, PHY Marvell 88E1111, сконфигурированный на работу по оптическому каналу на скорости 1 Gbs, E1 микросхема ds21348, сконфигурированная с NRZE = 1 (не биполярные данные на RPOS и RNEG (TPOS, TNEG), а используются только ноги RPOS и TPOS). Обмен информацией по Е1 организован с помощью HDLC протокола. Алгоритм работы: 1) полностью принимается пакет с МАС уровня (в буфер), убирается флаг готовности приема данных с МАС уровня; 2) этот пакет передается по Е1 удаленному абоненту, в конце передачи выставляется флаг готовности приема данных с МАС уровня; 3) удаленный абонент, принимая данные по Е1 кладет, их в буфер для передачи в МАС уровень; 4) сразу после окончания приема по Е1 удаленный абонент выдает в МАС уровень принятый пакет. Используемом соединение: точка-точка, поэтому количество пакетов не очень большое и время между пакетами не превышает времени передачи одного пакета по Е1, следовательно буфер приема данных с МАС уровня не должен переполняться (пока писал, подумал что не плохо было бы все-таки поставить флаг попытки положить данные из МАС уровня в буфер во время передачи по Е1). Суть вопроса: так как я являюсь начинающим разработчиком на FPGA, я не могу понять почему у меня при разных попытках сборки при малых исправлениях кода (или даже если вовсе код не править) все ведет себя абсолютно непредсказуемо? Пример: собрал проект, загрузил на плату, смотрю в Wireshark пакеты, приходящие от другого устройства - они абсолютно битые, вовсе не похожи на то, что надо. Запускаю SmartXplorer, выбираю один из вариантов сборки, загружаю на плату, получаю пакеты с битым широковещательным МАС адресом (заместо FF:FF:FF:FF:FF:FF принимается FF:7F:FF:FF:FF:FF или FE:FF:FF:FF:FF:FF), выбираю какой-нибудь другой вариант сборки в результатах SmartXplorer, получаю боле-менее стабильный результат, но есть потери пакетов (каждые 5 секунд высылаю пакет, но, примерно каждые 50 секунд 1-3 пакета теряются). Части кода, связанные с HDLC и МАС тестировались отдельно, в том числе создавались testbanches. Может что-то в настройках проекта следует указывать или как-то задавать какие-то параметры и флаги портам? Может как-то надо более правильно относиться к тактовым? (Тактовую 2.048 МГц для Е1 получаю простым счетчиком из 32.768 МГц). В общем, хотелось бы получить какие либо рекомендации по разработке устройств на ПЛИС чтобы не получать непредсказуемого поведения)
|
|
|
|
|
 |
Ответов
|
Aug 24 2016, 13:01
|

Участник

Группа: Участник
Сообщений: 53
Регистрация: 14-11-10
Пользователь №: 60 881

|
Цитата(andrew_b @ Aug 24 2016, 11:44)  Ставить BUFG на сигналы, которые идут только на выход, смысла нет. Вам надо триггеры CLKOUT_E1 расположить в IOB. Сделал вот так: Код e1t1_mclk0 <= CLKOUT_E1; e1t1_tclk0 <= CLKOUT_E1; В параметрах Map процесса стоит Pack I/O Registers/Latches into IOBs: For Inputs and Outputs. Этого достаточно чтобы "триггеры CLKOUT_E1 расположить в IOB"? Или следует написать констрейн вида Код INST "CLKOUT_E1" IOB =TRUE; Я так понимаю что после сборки можно посмотреть лежат ли в IOB эти триггеры в FPGA Editor'e. Только вот я не нашел где... После добавления строки Код OFFSET = IN 122070 ps VALID 200 ns BEFORE "e1t1_rclk0"; процесс Place & Route стал очень долгим и выводится следующее сообщение: Код Unusually high hold time violation detected among 24 connections. The top 20 such instances are printed below. The router will continue and try to fix it e1t1_rpos0:I -> ethmac/e1_1_rx/TR_FLAG:A6 -165406 e1t1_rpos0:I -> ethmac/e1_1_rx/hdlc_bit_get.byte<6>:B6 -165117 e1t1_rpos0:I -> ethmac/e1_1_rx/hdlc_bit_get.byte<6>:D6 -165030 e1t1_rpos0:I -> ethmac/e1_1_rx/hdlc_bit_get.one_cnt<1>:D2 -165025 e1t1_rpos0:I -> ethmac/e1_1_rx/hdlc_bit_get.byte<6>:C6 -164960 e1t1_rpos0:I -> ethmac/e1_1_rx/hdlc_bit_get.byte<6>:A6 -164895 e1t1_rpos0:I -> ethmac/e1_1_rx/hdlc_bit_get.byte<2>:C6 -164845 ethmac/e1_1_rx/SIZE_TO_READ<10>:C -> ethmac/e1_1_rx/SIZE_TO_READ<10>:CE -164835 e1t1_rpos0:I -> ethmac/e1_1_rx/SIZE_TO_READ<10>:C4 -164835 e1t1_rpos0:I -> ethmac/e1_1_rx/hdlc_bit_get.byte<2>:D6 -164824 e1t1_rpos0:I -> ethmac/e1_1_rx/hdlc_bit_get.byte<7>:A6 -164818 e1t1_rpos0:I -> lut11048_1737:D1 -164809 ethmac/e1_1_rx/hdlc_bit_get.byte<6>:B -> ethmac/e1_1_rx/Mram_REC_DATA:DIA4 -164767 ethmac/e1_1_rx/hdlc_bit_get.byte<6>:D -> ethmac/e1_1_rx/Mram_REC_DATA:DIA6 -164745 e1t1_rpos0:I -> ethmac/e1_1_rx/hdlc_bit_get.byte<2>:A1 -164709 ethmac/e1_1_rx/hdlc_bit_get.byte<2>:AMUX -> ethmac/e1_1_rx/Mram_REC_DATA:DIA0 -164709 e1t1_rpos0:I -> ethmac/e1_1_rx/SYNC_LOCAL:A5 -164704 ethmac/e1_1_rx/hdlc_bit_get.byte<6>:C -> ethmac/e1_1_rx/Mram_REC_DATA:DIA5 -164663 ethmac/e1_1_rx/hdlc_bit_get.byte<2>:C -> ethmac/e1_1_rx/Mram_REC_DATA:DIA1 -164638 ethmac/e1_1_rx/hdlc_bit_get.byte<2>:AMUX -> ethmac/e1_1_rx/hdlc_bit_get.byte<2>:AX -164632 Из-за чего это может происходить?
|
|
|
|
|
Aug 24 2016, 13:33
|
Профессионал
    
Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757

|
Цитата(Tolas @ Aug 24 2016, 16:01)  В параметрах Map процесса стоит Pack I/O Registers/Latches into IOBs: For Inputs and Outputs. Этого достаточно чтобы "триггеры CLKOUT_E1 расположить в IOB"? В принципе должно быть достаточно. Но поскольку в коде триггер описан один, а в FPGA их надо два, возможно, придётся немного пошаманить. Разрешить дупликацию триггеров. Или наоборот: в коде описать два триггера, а синтезатору запретить их объединение. Цитата Я так понимаю что после сборки можно посмотреть лежат ли в IOB эти триггеры в FPGA Editor'e. Только вот я не нашел где... Можно, конечно, и FPGA Editor, но можно и проще. Смотрите Pinout Report. Там в таблице есть колонка "IO Register".
|
|
|
|
Сообщений в этой теме
Tolas Ethernet to Е1 Aug 17 2016, 12:40 Lutovid Вообще поведение похоже на проблемы с времянкой - ... Aug 17 2016, 19:31 Tolas Цитатаповедение похоже на проблемы с времянкой
Про... Aug 18 2016, 07:08 BackEnd Цитата(Tolas @ Aug 17 2016, 12:40) я не м... Aug 18 2016, 11:44 des00 Цитата(BackEnd @ Aug 18 2016, 18:44) К та... Aug 23 2016, 02:04  Lutovid Цитата(des00 @ Aug 23 2016, 05:04) Давая ... Aug 23 2016, 20:21 Tolas Цитата(BackEnd @ Aug 18 2016, 14:44) К та... Aug 22 2016, 13:26 wolfman Цитата(Tolas @ Aug 22 2016, 22:56) И еще ... Aug 24 2016, 04:44 Lutovid Можно попробовать работать через clock enable, есл... Aug 22 2016, 14:18 Волощенко Цитата(Tolas @ Aug 17 2016, 16:40) Стоит ... Aug 23 2016, 04:47 Alex11 Для гигабитного интерейса обычно нужно не просто б... Aug 23 2016, 09:05 Tolas Цитата(Alex11 @ Aug 23 2016, 12:05) Для г... Aug 23 2016, 09:47  iosifk Цитата(Tolas @ Aug 23 2016, 12:47) Да, дл... Aug 23 2016, 09:54 Tolas Цитата(Lutovid @ Aug 23 2016, 23:21) Судя... Aug 24 2016, 08:31 andrew_b Цитата(Tolas @ Aug 24 2016, 11:31) Сейчас... Aug 24 2016, 08:44 Tolas Изменил констрейн, добавил слово FALLING в конце, ... Aug 24 2016, 13:37 Tolas Итак, пока я переписываю проект и упрощаю его чтоб... Aug 30 2016, 08:49 andrew_b Цитата(Tolas @ Aug 30 2016, 11:49) 1) Пол... Aug 30 2016, 09:01 BackEnd Цитата(Tolas @ Aug 22 2016, 13:26) В стан... Aug 30 2016, 14:18 andrew_b Кстати говоря, в Spartan6 есть специальные буферы ... Aug 31 2016, 11:32 Tolas Благодарю пользователя BackEnd за развернутый отве... Sep 13 2016, 08:31
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|