NDPaw 0 Posted February 10, 2020 · Report post Здравствуйте, уважаемые форумчане! Я в PCI-e новичок. Встала передо мной такая задача: нужно преобразовать поток данных от двух PCI Express Gen3 устройств (каждое х8) в один поток данных Gen4 также по x8 линиям. То есть соединить два устройства со скоростями Gen3 в одно со скоростью Gen4. Можно ли это сделать в принципе без кастомных FPGA-узлов? Может есть спец микросхемы? Quote Ответить с цитированием Share this post Link to post Share on other sites
RobFPGA 0 Posted February 10, 2020 · Report post Приветствую! 41 minutes ago, NDPaw said: Я в PCI-e новичок. Встала передо мной такая задача: нужно преобразовать поток данных от двух PCI Express Gen3 устройств (каждое х8) в один поток данных Gen4 также по x8 линиям. Хорошее задание для новичка Ищите по словам "PCIe gen4 switch" У Broadcom вроде есть уже такие решения (вроде как PEX88000 семейство). Удачи! Rob. Quote Ответить с цитированием Share this post Link to post Share on other sites
NDPaw 0 Posted February 10, 2020 (edited) · Report post 6 minutes ago, RobFPGA said: Приветствую! Хорошее задание для новичка Ищите по словам "PCIe gen4 switch" У Broadcom вроде есть уже такие решения (вроде как PEX88000 семейство). Удачи! Rob. Я смотрел аналогичные от Microsemi (PM40100), но вопрос в том, можно ли с помощью свитча "упаковать" потоки со скоростями Gen3 в один поток со скоростью Gen4. Edited February 10, 2020 by NDPaw Quote Ответить с цитированием Share this post Link to post Share on other sites
RobFPGA 0 Posted February 10, 2020 · Report post Приветствую! 8 minutes ago, NDPaw said: но вопрос в том, можно ли с помощью свитча "упаковать" потоки со скоростями Gen3 в один поток со скоростью Gen4. Смотря что вы вкладываете в понятие "упаковать" - Физически они будут "упакованы" в один канал а вот логически так и останутся независимыми потоками. Хотите паковать в один логический? Тут конкретики более нужно. Удачи! Rob. Quote Ответить с цитированием Share this post Link to post Share on other sites
NDPaw 0 Posted February 10, 2020 · Report post 2 minutes ago, RobFPGA said: Приветствую! Смотря что вы вкладываете в понятие "упаковать" - Физически они будут "упакованы" в один канал а вот логически так и останутся независимыми потоками. Хотите паковать в один логический? Тут конкретики более нужно. Удачи! Rob. мне нужно именно физически, но хост должен распознать, что пришло от первого (ушло на первое), а что от второго (ушло на второе) устройства.. Quote Ответить с цитированием Share this post Link to post Share on other sites
RobFPGA 0 Posted February 10, 2020 · Report post Приветствую! 1 minute ago, NDPaw said: мне нужно именно физически, но хост должен распознать, что пришло от первого (ушло на первое), а что от второго (ушло на второе) устройства.. Так это без проблем - разные endpoint будут слать/получать на разные адреса физ. памяти хоста. Удачи! Rob. Quote Ответить с цитированием Share this post Link to post Share on other sites
NDPaw 0 Posted February 10, 2020 · Report post 1 minute ago, RobFPGA said: Приветствую! Так это без проблем - разные endpoint будут слать/получать на разные адреса физ. памяти хоста. Удачи! Rob. но как будет выглядеть содержимое "упаковки", что то типа - первый бит - это первый бит от первого устройства, второй бит - первый бит от второго, и т.д. просто все это не могу пока уложить в голове Quote Ответить с цитированием Share this post Link to post Share on other sites
RobFPGA 0 Posted February 10, 2020 · Report post Приветствую! 1 minute ago, NDPaw said: но как будет выглядеть содержимое "упаковки", что то типа - первый бит - это первый бит от первого устройства, второй бит - первый бит от второго, и т.д. просто все это не могу пока уложить в голове Тогда вам для начала надо бы почитать как вообще PCie работает - независимо от скорости. Удачи! Rob. Quote Ответить с цитированием Share this post Link to post Share on other sites
NDPaw 0 Posted February 10, 2020 · Report post 3 minutes ago, RobFPGA said: Приветствую! Тогда вам для начала надо бы почитать как вообще PCie работает - независимо от скорости. Удачи! Rob. да, так и сделаю! Спасибо! Quote Ответить с цитированием Share this post Link to post Share on other sites
NDPaw 0 Posted February 11, 2020 (edited) · Report post Почитал спецификацию PCI Express и даташит на свитч от Microsemi и все равно не понял как получить "смесь" из двух x8 Gen3 так, чтобы она была корректна, ведь там же весь протокол собьется. И как из этой "смеси" можно будет получить информацию о том какое устройство что шлёт. Может есть те, кто именно так делал? Edited February 11, 2020 by NDPaw Quote Ответить с цитированием Share this post Link to post Share on other sites
gosha-z 0 Posted February 11, 2020 · Report post Ну так у вас все равно будет видно на шине два устройства, просто они будут сидеть на разных шинах. Quote Ответить с цитированием Share this post Link to post Share on other sites
RobFPGA 0 Posted February 11, 2020 · Report post Приветствую! 18 minutes ago, NDPaw said: Почитал спецификацию PCI Express и даташит на свитч от Microsemi и все равно не понял как получить "смесь" из двух x8 Gen3 Когда вам по сети Ethernet приходят пакеты - вы же не мучаетесь вопросом как разобрать эту "кашу" ? Так же и на PCIe каждое устройство на шине (endpoint/switch/rootcomplex) имеет уникальный адрес на этой шине. Соответственно можно понять от кого пакет данных пришел и куда он будет отправлен. Ну а в хосте тем более - каждый endpoint будет имеет свой диапазон адресов (в памяти) для прямого чтения записи в endpoint. А если вы используете DMA то вы сами решаете для каждого endpoint - куда в памяти данные будут приняты и откуда из памяти посланы. Если вы сами не хотите ваять switch на FPGA вам в это вникать и не нужно. Удачи! Rob. Quote Ответить с цитированием Share this post Link to post Share on other sites
Flood 0 Posted February 11, 2020 · Report post 1 час назад, NDPaw сказал: Почитал спецификацию PCI Express и даташит на свитч от Microsemi и все равно не понял как получить "смесь" из двух x8 Gen3 так, чтобы она была корректна, ведь там же весь протокол собьется. И как из этой "смеси" можно будет получить информацию о том какое устройство что шлёт. Может есть те, кто именно так делал? Упрощенно: когда вы ставите два или более PCIe устройства в разъемы материнской платы, процессор же не сбивается, и никакой "смеси" не возникает. На шине видны несколько устройств и с каждым процессор работает отдельно. Примерно также и в случае внешнего коммутатора - на шине появится устройство-коммутатор, создающее одну, две или более новых шин, на каждой из которых появится по подключенному к коммутатору устройству. На самом деле, в чипсете материнской платы такой коммутатор уже есть (а может и не один), вам просто нужно добавить к нему еще. Quote Ответить с цитированием Share this post Link to post Share on other sites
NDPaw 0 Posted February 11, 2020 · Report post Большое спасибо за ваши ответы! Стало немного понятнее. Но все же остался вопрос: хост увидит эти два устройства и будет с ними работать, но с какой скоростью он будет это делать? С Gen3 (сами устройства Gen3) или все таки Gen4 ( нужно ли как то особенно сконфигурировать микросхему свитча)? Quote Ответить с цитированием Share this post Link to post Share on other sites
RobFPGA 0 Posted February 11, 2020 · Report post Приветствую! 22 minutes ago, NDPaw said: но с какой скоростью он будет это делать? С Gen3 (сами устройства Gen3) или все таки Gen4 ( нужно ли как то особенно сконфигурировать микросхему свитча)? Нужно ли конфигурировать и как именно будете читать в datasheet на конкретный свитч. PCIe физически это point-to-point коннект. Скорость физ. порта задается параметром (в пределах максимально поддерживаемого). Если свитч подерживает Gen4 то например порт к хосту будет работать на Gen4 а несколько портов к endpoint могут работать на Gen1/2/3/ На то от и свитч чтобы таким "непотребством" заниматься. Но вообще скорость PCIe (Gen1/2/3/4) определяет с какой максимальной скоростью может работать конкретный порт. А вот с какой реальной скоростью зависит от конкретной ситуации. При старте PCIe начинает работать на Gen1, x1 потом пытаясь поднять скорость и разрядность коннекта до заданного максимума который поддерживается удаленным партнером по физ. линку. Да и в процессе работы, если число ошибок передачи будет выше порога, скорость коннекта на порте может снизится. Удачи! Rob. Quote Ответить с цитированием Share this post Link to post Share on other sites