реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Fiber Channel + Running Disparity
ovs_pavel
сообщение Sep 24 2015, 10:44
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 275
Регистрация: 19-05-06
Пользователь №: 17 249



День добрый коллеги. Немного по сути вопроса.

ПЛИС - Virtex V
САПР - ISE 12.3

Используем RocketIO для построения канала fiber channel.

При использовании корки RocketIO выбираем 4-х байтовый интерфейс.

Собственно сам пакет:
IDLE: 32'hBC_95_B5_B5; (K28.5, D21.4, D21.5, D21.5).
SOFn : 32'hBC_B5_56_56; (K28.5, D21.5, D22.1, D22.1).
DATA:
...
CRC:
EOFn: 32'hBC_95_D5_D5; (K28.5, D21.4, D21.6, D21.6) либо (K28.5, D21.5, D21.6, D21.6).
IDLE: 32'hBC_95_B5_B5; (K28.5, D21.4, D21.5, D21.5).

Как видно символ окончания кадра может кодироваться 2-мя наборами. Вопрос состоит в том, какой выбрать EOFn. Видимо выбирается на основе текущего дисбаланса, но он вроде бы рассчитывается после схемы 8b/10b.
Можно ли его рассчитать на основе передаваемых данных?? Вообщем я что-то не до конца понял с этим дисбалансом.
Go to the top of the page
 
+Quote Post
Maverick
сообщение Sep 24 2015, 10:51
Сообщение #2


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(ovs_pavel @ Sep 24 2015, 13:44) *
День добрый коллеги. Немного по сути вопроса.

ПЛИС - Virtex V
САПР - ISE 12.3

уточните ПЛИС Virtex 4 или Virtex 6 ?


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
ovs_pavel
сообщение Sep 24 2015, 11:00
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 275
Регистрация: 19-05-06
Пользователь №: 17 249



Цитата(Maverick @ Sep 24 2015, 13:51) *
уточните ПЛИС Virtex 4 или Virtex 6 ?


ПЛИС именно virtex5 (сорри за V).

кристалл - XC5VFX70T-2FFG665I
Go to the top of the page
 
+Quote Post
krux
сообщение Sep 24 2015, 11:11
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596



http://www.seagate.com/staticfiles/support.../100293070a.pdf


--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post
ovs_pavel
сообщение Sep 24 2015, 12:27
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 275
Регистрация: 19-05-06
Пользователь №: 17 249



Цитата(krux @ Sep 24 2015, 14:11) *


Что то я здесь ничего не нашел по выбору EOF.
Go to the top of the page
 
+Quote Post
krux
сообщение Sep 24 2015, 18:36
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596



Цитата
Что то я здесь ничего не нашел по выбору EOF.

как это ничего?
на передачу - выбирается в зависимости от текущего running disparity (пересчитывается после каждого 40-битного блока).
на приеме ожидается любой.

дисбаланс считается непосредственно во время подстановки 8b/10b.
в этом смысле fibre channel - извращенцы, поскольку значение дисбаланса используется не только для выбора одного из двух вариантов кодирования следующего передаваемого символа, но и для выбора типа 4-символьного блока EOFn.


--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post
ovs_pavel
сообщение Sep 25 2015, 05:12
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 275
Регистрация: 19-05-06
Пользователь №: 17 249



Цитата(krux @ Sep 24 2015, 21:36) *
как это ничего?
на передачу - выбирается в зависимости от текущего running disparity (пересчитывается после каждого 40-битного блока).
на приеме ожидается любой.

дисбаланс считается непосредственно во время подстановки 8b/10b.
в этом смысле fibre channel - извращенцы, поскольку значение дисбаланса используется не только для выбора одного из двух вариантов кодирования следующего передаваемого символа, но и для выбора типа 4-символьного блока EOFn.


В том и дело, что Вы предлагаете рассчитывать после преобразования 8b/10b, а мне надо до этого преобразования (на основе передаваемых байт данных).
Go to the top of the page
 
+Quote Post
Timmy
сообщение Sep 25 2015, 06:11
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515



Цитата(ovs_pavel @ Sep 25 2015, 08:12) *
В том и дело, что Вы предлагаете рассчитывать после преобразования 8b/10b, а мне надо до этого преобразования (на основе передаваемых байт данных).

По данным очень просто посчитать - надо построить таблицу из 256 бит, показывающую, какие коды инвертируют disparity, а какие сохраняют. Ну и disparity_next <= disparity_table[char_code]^disparity; Таблица займёт всего один слайс.
Go to the top of the page
 
+Quote Post
ovs_pavel
сообщение Sep 25 2015, 10:00
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 275
Регистрация: 19-05-06
Пользователь №: 17 249



Цитата(Timmy @ Sep 25 2015, 09:11) *
По данным очень просто посчитать - надо построить таблицу из 256 бит, показывающую, какие коды инвертируют disparity, а какие сохраняют. Ну и disparity_next <= disparity_table[char_code]^disparity; Таблица займёт всего один слайс.


а таблицы построенной нет??
Go to the top of the page
 
+Quote Post
Timmy
сообщение Sep 25 2015, 11:22
Сообщение #10


Знающий
****

Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515



Цитата(ovs_pavel @ Sep 25 2015, 13:00) *
а таблицы построенной нет??

У меня нет, я работал с Lattice, и для гигабитного эзернета он сам умеет корректировать IDLE коды.
Таблицу можно надёжно построить, вставив в тестбенч какой-нибудь бесплатный энкодер, прогнав через него все коды, и посчитав паритет на 10-битном выходе. Или найти полную таблицу кодов в удобном для импорта виде, и опять же посчитать паритет.
Go to the top of the page
 
+Quote Post
ovs_pavel
сообщение Sep 25 2015, 11:53
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 275
Регистрация: 19-05-06
Пользователь №: 17 249



Цитата(Timmy @ Sep 25 2015, 14:22) *
У меня нет, я работал с Lattice, и для гигабитного эзернета он сам умеет корректировать IDLE коды.
Таблицу можно надёжно построить, вставив в тестбенч какой-нибудь бесплатный энкодер, прогнав через него все коды, и посчитав паритет на 10-битном выходе. Или найти полную таблицу кодов в удобном для импорта виде, и опять же посчитать паритет.


Нашел вот такое описание, сейчас с ним занимаюсь:

Description
How and when should I use the CRC in the RocketIO dedicated hardware?

Solution
Gigabit Ethernet:

Your design should generate only the /K28.5/D16.2/ idle sequence for transmission, never /K28.5/D5.6/. When the RocketIO CRC determines that the running disparity must be inverted to satisfy Gigabit Ethernet requirements, it will convert the first /K28.5/D16.2/ idle following a packet to /K28.5/D5.6/, performing the necessary inversion.

Fiber Channel:

Your design should generate only the EOF frame delimiter for a beginning running disparity (RD), which is negative; these are the frame delimiters that begin with /K28.5/D21.4/ or /K28.5/D10.4/. Never generate the EOF frame delimiter for a beginning RD (which is positive); these are the frame delimiters that begin with /K28.5/D21.5/ or /K28.5/D10.5/.

When the RocketIO CRC determines that the running disparity must be inverted to satisfy Fiber Channel requirements, it will convert the second byte of the EOF frame delimiter (D21.4 or D10.4) to the value that is required to invert the running disparity (D21.5 or D10.5).

This Fiber Channel symbol swapping is disabled when TX_CRC_USE is set to "FALSE."

If the CRC of the RocketIO transceiver block is not used, the end-of-packet ordered set (Fiber Channel) or idle (Ethernet) is not automatically changed to maintain the disparity required by the standard (see the RocketIO User Guide, Chapter 3, CRC section for details).

In this case, you must manually send the correct end-of-packet character to maintain the disparity required by Fiber Channel. This requires that you maintain the running disparity in the fabric and present the correct EOP character to the RocketIO transceiver.

Here is a VHDL code example to switch between the two IDLE code groups in Ethernet. The same logic can be used to switch between the two EOP characters in Fiber Channel.

-------------------------------------------------------------------------------
-- Tx Disparity Generation Support.
-------------------------------------------------------------------------------

MANUAL_DISPARITY: if (C_USE_MGT_CRC = false) generate
-- Since we are not allowing the MGT to insert the CRC value at the end of a
-- frame, the MGT will not be correcting for the disparity at the end of each
-- frame transmitted: we must track the disparity ourselves and insert either
-- /I1/ or /I2/ appropriately as the first Idle following a frame.
-- /I1/ and /I2/ are IDLE codes for PCS, with opposite disparities. The EOFs in FC should work in the same way.
-- The disparity function is defined in the IEEE Ethernet spec, clause 36.2.4.4.
-- This describes the function as operating on the 10-bit code groups. Since we
-- are using the MGT's, there is no access to these 10-bit code groups. Instead
-- the 8-bit code groups which cause a disparity change are here decoded. The CODE_GRP mentioned is a single byte of raw data.
-- purpose: Creates a Partial product to calculate the Running Disparity,
-- based on upper 3 bits.
-- type : combinatorial -- BIT(7) BIT(6) BIT(5)
DISP3 <= (not CODE_GRP(6) and not CODE_GRP(5)) or -- x 0 0
(CODE_GRP(7) and CODE_GRP(6) and CODE_GRP(5)); -- 1 1 1
-- purpose: Creates a Partial product to calculate the Running Disparity,
-- based on lower 5 bits.
-- type : combinatorial -- BIT(4) BIT(3) BIT(2) BIT(1) BIT(0)
DISP5 <= (not CODE_GRP(2) and not CODE_GRP(1) and not CODE_GRP(0)) or -- x x 0 0 0
(CODE_GRP(1) and CODE_GRP(0) and ( -- 1 1 x 1 1
(CODE_GRP(4) and CODE_GRP(3)) or -- 0 1 1 1 1
(CODE_GRP(2) and (CODE_GRP(4) xor CODE_GRP(3))))) or -- 1 0 1 1 1
(CODE_GRP(4) and CODE_GRP(3) and CODE_GRP(2) -- 1 1 1 0 1
and (CODE_GRP(1) xor CODE_GRP(0))) or -- 1 1 1 1 0
(not CODE_GRP(4) and not CODE_GRP(3) and ( -- 0 0 0 0 1
(not CODE_GRP(2) and (CODE_GRP(1) xor CODE_GRP(0))) or -- 0 0 0 1 0
(CODE_GRP(2) and not CODE_GRP(1) and not CODE_GRP(0)))); -- 0 0 1 0 0
-- purpose: Creates the Disparity value.
-- type : sequential
GEN_DISPARITY: process (TX_CLK)
begin
if TX_CLK'event and TX_CLK = '1' then
if RESET = '1' then
DISPARITY <= '1';
else
if (INSERT_IDLE and EVEN) = '1' then
DISPARITY <= '0';
elsif (DISP3 xor DISP5) = '1' or K28p5 = '1' then
DISPARITY <= not DISPARITY;
end if;
end if;
end if;
end process GEN_DISPARITY;
Go to the top of the page
 
+Quote Post
warrior-2001
сообщение Sep 28 2015, 07:43
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 375
Регистрация: 9-10-08
Из: Таганрог, Ростовская обл.
Пользователь №: 40 792



Для FC необходимо самому считать 8b/10b, а не пользоваться коркой высокоскоростного приемопередатчика. Тогда все встает на свои места.
Разрабатывал в свое время приемник и передатчик FC - проблем не возникло.


--------------------
Глупцы игнорируют сложность. Прагматики терпят ее. Некоторые могут избегать ее. Гении ее устраняют.
Go to the top of the page
 
+Quote Post
ovs_pavel
сообщение Sep 29 2015, 09:30
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 275
Регистрация: 19-05-06
Пользователь №: 17 249



Цитата(warrior-2001 @ Sep 28 2015, 10:43) *
Для FC необходимо самому считать 8b/10b, а не пользоваться коркой высокоскоростного приемопередатчика. Тогда все встает на свои места.
Разрабатывал в свое время приемник и передатчик FC - проблем не возникло.


Ну можно было и так сделать. Но я сделал по примеру свыше (правда все переписал на verilog) и все нормально заработало.
Go to the top of the page
 
+Quote Post
starley
сообщение Dec 16 2016, 20:01
Сообщение #14


Частый гость
**

Группа: Свой
Сообщений: 195
Регистрация: 9-01-09
Из: Москва
Пользователь №: 43 085



RocketIO для FC сам заменял EOF на правильный (по крайней мере в Virtex2Pro). С GTX/GTH уже надо свой кодек 8b/10b использовать, чтобы сделать данную замену.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th April 2024 - 02:18
Рейтинг@Mail.ru


Страница сгенерированна за 0.03132 секунд с 7
ELECTRONIX ©2004-2016