Перейти к содержанию
    

переход на другую ширину шины с сохранением пропускной способности

Есть шина 40 бит, тикает на частоте 257.8125 МГц, нужно перейти на 66 бит на частоту 156.25 МГц. Ну наверно понятно откуда это.

Как это делается? И как это называется, в смысле, что вбить в гугл, чтобы почитать теорию? На Gearbox выдает не то...

 

Так то я бы поставил двухклоковое фифо с разной шириной шины, но хочется узнать как это делается внутри.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Самый очевидный, вроде, вариант - обработка на повышенной скорости, кратной каждой из двух - НОК(257.8125, 156.25) = 515.625 МГц:

соответственно упаковывать исходные 40-битовые в промежуточную память кратного размера - НОК(44, 60) = 1320, потом оттуда вычитывать уже по 66. Но в этом примере частота получается, мягко говоря, высоковатая.... Так что должен быть, возможно, менее элегантный, но более эффективный способ, что-то типа такого : делаем буфер разрядности N*1320, пишем в него, циклически, с некой задержкой начинаем вычитывать. Так, как в момент чтения данные будут статические, то проблем с метастабильностью не будет. Равенство скоростей потоков гарантирует то, что мы никогда не залезем на пишущуюся область.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть шина 40 бит, тикает на частоте 257.8125 МГц, нужно перейти на 66 бит на частоту 156.25 МГц. Ну наверно понятно откуда это.

Это что за экзотика? Почему 66 бит? У вас контроль чётности? Почему не 64 бита, например хотя бы? я не спец в этих шинах просто интересно...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть шина 40 бит, тикает на частоте 257.8125 МГц, нужно перейти на 66 бит на частоту 156.25 МГц. Ну наверно понятно откуда это.

Как это делается? И как это называется, в смысле, что вбить в гугл, чтобы почитать теорию? На Gearbox выдает не то...

 

Так то я бы поставил двухклоковое фифо с разной шириной шины, но хочется узнать как это делается внутри.

на частоте 257... ставите 3 регистра по 40 бит + банальную логику

 

wire data_rdy = (data_cnt >= 66);

always_ff @(posedge iclk) begin
  val = val40;
  if (val40) begin
    data[119:0] <= (data[79:0], data40};
    if (sop40)
      data_cnt <= 40;
    else
      data_cnt <= data_rdy ? (data_cnt - 66 + 40) : (data_cnt + 40);
  end
  //
  val60 <= val & data_rdy;
  case (data_cnt)
    80 : dat66 <= data[79 -: 66]; // 40 + 40      -> 80 - 66 -> 14
    94 : dat66 <= data[93 -: 66]; // 14 + 40 + 40 -> 94 - 66 = 28
    68 : dat66 <= data[67 -: 66]; // 28 + 40      -> 68 - 66 = 2
    //bla-bla-bla
  endcase
end

а дальше все тривиально.

 

ЗЫ. Проблема будет только в большом мультиплексоре на lcm(40,66) = 1320/66 = 20 входов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это что за экзотика? Почему 66 бит? У вас контроль чётности? Почему не 64 бита, например хотя бы? я не спец в этих шинах просто интересно...

Это, наверное, какой-нибудь 40G/100G Ethernet.

 

 

The traditional ASIC gearbox architecture is to fill a bit FIFO at one clock rate and

drain it at another. If the clock ratio is carefully controlled this will have the desired

functionality. This method is prohibitively expensive in an FPGA due to the relative

scarcity of clock resources...

 

Да, видимо FIFO для такой решения такой задачи слишком затратно.

 

Вот документ с полным описание, даже пример есть в архивчике, глава Gearbox (стр 11-5):

https://www.altera.com/content/dam/altera-w...tx_cookbook.pdf

 

Очень похоже на то, что des00 описал.

 

P.S. архив cookbook.zip довольно интересный, не знал, что у альтеры такое есть)

Изменено пользователем Inanity

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это что за экзотика? Почему 66 бит? У вас контроль чётности? Почему не 64 бита, например хотя бы? я не спец в этих шинах просто интересно...

Это из 10G ethernet, потом из 66 бит делается 64 бит декодером.

 

Вот документ с полным описание, даже пример есть в архивчике, глава Gearbox (стр 11-5):

https://www.altera.com/content/dam/altera-w...tx_cookbook.pdf

 

Очень похоже на то, что des00 описал.

 

P.S. архив cookbook.zip довольно интересный, не знал, что у альтеры такое есть)

Спасибо большое за пдф и архив, самое то, буду разбираться. :smile3046:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Работал с gearbox на 10G на kintex-7 - скреиблирование/дескремблирование работало нормально - возможно стоит почитать гайд по трансиверу и заставить работать то что уже написано нежели реализовывать свой велосипед(если я понял правильно вопрос - я про то, что gearbox выдает не то); может ibert-ом канал потестить, а еще там есть возможность лупбеков разных уровней - можно ими покрутить

Изменено пользователем Lutovid

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...