

Drakonof
Участник-
Content Count
42 -
Joined
-
Last visited
-
10G Ethernet, как послать данные?
Drakonof replied to Drakonof's topic in Работаем с ПЛИС, области применения, выбор
Спасибо, начал парсить сгенерированный пример, и вроде картинка начинается складываться. А вот другими примерами не монго сложнее, может я не правильно их ищу? Но пока в принципе хватает vivado'вского. Думаю вытащих из него чекер и воткнуть его в проект клиента, а в хосте оставить генератор и поробовать таким образом слать данные и смотреть их в ILA. -
10G Ethernet, как послать данные?
Drakonof replied to Drakonof's topic in Работаем с ПЛИС, области применения, выбор
Спасибо, да Вы правы, 10GBase-R. Я использую отладочную плату zc706и в частности ПЛИС xc7z045, по этому IP ядро поддерживает только стандарт 10GBase-R. Частоту проверяют диодом на плате (heart_beat module). Когда разбирался с 1Гбит изернетом всё было немного проще, там у меня выступал как mac сам zynq, поэтому было достаточно запустить lwip пример в sdk и порадоваться как всё здорово и легко. В данном случае mac'ом выступает отдельное ядро. Если честно я собрал только pl часть и понял что делать дальше не знаю. Мне кажется что нужно ставить некую память (возможно bram) и принимать туда пакеты , затем dma будет забирать их в zynq, но при этом mac будет отдавать команду на ожидание для передачи новых пакетов. Но как складывать в bram пакеты, не могу сообразить и вообще как управлять этим ядром? -
Drakonof started following помогите разобраться с AXI lite, 10G Ethernet, как послать данные? and zc706 xilinx kit sfp
-
Всем привет! Подскажите как организовать передачу данных в 10G изернете. Мне подсказали что нужен flow control module, это модуль самописный или его где-то можно взять? Я полагаю нужны разные как для сервера так и клиента. Подскажите пожалуйста куда дальше копать) Частота поднимается Zynq'ом, 156МГц, работает. Vivado 2018.4, zc706 Dev Kit (проект собран относительно ПЛИС xc7z045, а не платы). Спасибо! PL.pdf
-
zc706 xilinx kit sfp
Drakonof replied to Drakonof's topic in Работаем с ПЛИС, области применения, выбор
в общем нужно было ножки тактирования настроить на SI5324_OUT (а не на SMA_MGT) и установить константу 3 на порт phyaddres. Всё заработало. -
zc706 xilinx kit sfp
Drakonof posted a topic in Работаем с ПЛИС, области применения, выбор
Всем привет. Не могу понять как поднять sfp на zc706 dev kit. Vivado 2018.3 В общем есть кит zc706 и sfp (1Gbps) модуль d-link DEV-310T. Для начала нужно просто запустить в internal loopback режиме. Как я понял этот режим работы конфигурируется через configuration_vector порт ip ядра 1G/2.5G Ethernet PCS/PMA or SGMII, поставил const ip на 5 разрядов со значением 2 (1G/2.5G Ethernet PCS/PMA or SGMII v16.0 LogiCORE IP Product Guide стр. 62), вроде никаких больше установок для этого вектора не нужны (в тч Auto-Negotiation Enable). Ядро настроенно как Tri-Mode Ethernet MAC, стандарт 1000BASEX, Receive GMII Clock Source: TXOUTCLK. после сборки и портированрия бинарника и hw файла в sdk, запустил в нём lwIP Echo server пример в котром проследил что тактовый генератор (SI5324) запрограммировался (если верить статусам драйвера i2c), но сам phy изернета проходит только пару шагов инициализации по I2С и начинает слать статус ошибки. Коллега мне объяснил что phy не нужно инитить и он должен работать по дефолту, я функцию закоментировал. пример шлёт в терминал: -----lwIP TCP echo server ------ Start PHY autonegotiation Waiting for PHY to complete autonegotiation. autonegotiation complete link speed for phy address 0: 1000 DHCP Timeout Configuring default IP of 192.168.1.10 Board IP: 192.168.1.10 Netmask : 255.255.255.0 Gateway : 192.168.1.1 TCP echo server started @ port 7 и повисает, при этом после строчки "link speed for phy address 0: 1000" пример секунд 10 ждет. Не очень понимаю, это ошибка сборки моего проекта или он ждёт каких то действий) Народ подскажите куда копать что бы sfp начало что то слать в loopback. xlconstant_1[0:0] == 1 xlconstant_2[4:0] == 2 (loopback control == 1) status_vector порт ethernet ip идущий на vio == 0, что говорит: бит 0 и 1 -> нет линка (1G/2.5G Ethernet PCS/PMA or SGMII v16.0 LogiCORE IP Product Guide стр. 64), а loopback он должен быть? Еще уточнение, sfp заткнут заглушкой, те без патчкорда, но на сколько я понимаю в данном режиме это не важно. Заранее спасибо за советы. design_1.pdf -
помогите разобраться с AXI lite
Drakonof replied to Drakonof's topic in Работаем с ПЛИС, области применения, выбор
Заработало) спасибо Пока конечно костыльно, в данном случае не работалоизза цинка, каким то образом мешал передаче данных, цинк убрал, буду разбираться -
помогите разобраться с AXI lite
Drakonof replied to Drakonof's topic in Работаем с ПЛИС, области применения, выбор
Каким стимулятором пользоваться? -
Всем привет, друзья помогите разобраться с AXI lite. Vivado 2018.3, linux mint Для начала, думаю можно просто зажечь диоды(их всего 4) на платке с помощью axi_gpio ip и моего контроллера, который пока не работает. Кто знает, может подскажет где ошибка. Диоды исправные, назначены верно, частота подается. Спасибо `timescale 1 ns / 1 ps module project_1 # ( parameter integer C_M_AXI_ADDR_WIDTH = 32, parameter integer C_M_AXI_DATA_WIDTH = 32 ) ( input wire CLK, input wire A_RESET_N, output wire [C_M_AXI_ADDR_WIDTH-1 : 0] M_AXI_AWADDR, output wire [2 : 0] M_AXI_AWPROT, output wire M_AXI_AWVALID, input wire M_AXI_AWREADY, output wire [C_M_AXI_DATA_WIDTH-1 : 0] M_AXI_WDATA, output wire [C_M_AXI_DATA_WIDTH/8-1 : 0] M_AXI_WSTRB, output wire M_AXI_WVALID, input wire M_AXI_WREADY, input wire [1 : 0] M_AXI_BRESP, input wire M_AXI_BVALID, output wire M_AXI_BREADY, output wire [C_M_AXI_ADDR_WIDTH-1 : 0] M_AXI_ARADDR, output wire [2 : 0] M_AXI_ARPROT, output wire M_AXI_ARVALID, input wire M_AXI_ARREADY, input wire [C_M_AXI_DATA_WIDTH-1 : 0] M_AXI_RDATA, input wire [1 : 0] M_AXI_RRESP, input wire M_AXI_RVALID, output wire M_AXI_RREADY ); reg axi_awvalid; reg axi_wvalid; reg [C_M_AXI_DATA_WIDTH-1 : 0] axi_ardata; reg start_single_read; reg start_resp_read; reg axi_arvalid; reg axi_rready; reg axi_bready; assign M_AXI_BREADY = axi_bready; assign M_AXI_RREADY = axi_rready; // адрес на axi, он же регистр данных порта 1 axi_gpio assign M_AXI_AWADDR = 32'h40000000; // записать в регистр данных порта gpio 1 данные, значение должно загореться на диодах assign M_AXI_WDATA = 32'h0000000A; assign M_AXI_AWPROT = 3'b000; assign M_AXI_AWVALID = axi_awvalid; assign M_AXI_WVALID = axi_wvalid; assign M_AXI_WSTRB = 4'b1111; always @(posedge CLK) begin if (A_RESET_N == 0) begin axi_awvalid <= 1'b0; axi_wvalid <= 1'b0; end else begin axi_awvalid <= 1'b1; axi_wvalid <= 1'b1; if (M_AXI_AWREADY && axi_awvalid) begin axi_awvalid <= 1'b0; start_single_read <= 1'b1; end if (M_AXI_WREADY && axi_wvalid) begin axi_wvalid <= 1'b0; end end end always @(posedge CLK) begin if (A_RESET_N == 0) begin axi_bready <= 1'b0; end else if (M_AXI_BVALID && ~axi_bready) begin axi_bready <= 1'b1; end else if (axi_bready) begin axi_bready <= 1'b0; end ; end assign M_AXI_ARADDR = 32'h40000008; assign M_AXI_ARPROT = 3'b001; assign M_AXI_ARVALID = axi_arvalid; always @(posedge CLK) begin if (A_RESET_N == 0) begin axi_arvalid <= 1'b0; end else if (start_single_read) begin axi_arvalid <= 1'b1; end else if (M_AXI_ARREADY && axi_arvalid) begin axi_arvalid <= 1'b0; end end always @(posedge CLK) begin if (M_AXI_RVALID && ~axi_arvalid) begin axi_ardata <= M_AXI_RDATA; end end always @(posedge CLK) begin if (A_RESET_N == 0 ) begin axi_rready <= 1'b0; end else if (M_AXI_RVALID && ~axi_rready) begin axi_rready <= 1'b0; end else if (axi_rready) begin axi_rready <= 1'b0; end end endmodule
-
DMA без NIOS II
Drakonof replied to Drakonof's topic in Работаем с ПЛИС, области применения, выбор
я думаю, если бы она была не доступна в lite, то qsys не сгенерировался бы, плюс из ниоса эта ip работает. я так же про данный dma думал)))) да, всё еще будет актуально) спасибо. Почитал про дескрипторы и sg режим, мне понравилось, мне кажется лучше её поставить, хорошенько в ней разобраться и тогда можно её к pcie прикрутить. -
DMA без NIOS II
Drakonof replied to Drakonof's topic in Работаем с ПЛИС, области применения, выбор
В любом случае большое спасибо, что стараетесь помочь) это приятно) -
DMA без NIOS II
Drakonof replied to Drakonof's topic in Работаем с ПЛИС, области применения, выбор
спасибо. Но разве там сигнал write_n не инверсный? те для записи регистра нужно ставить 0, а не 1. Простите, не будет нагло попросить у Вас пример для sgdma? думаю лучше ставить ту ip по которой совершенно точно можно проконсультироваться) -
DMA без NIOS II
Drakonof replied to Drakonof's topic in Работаем с ПЛИС, области применения, выбор
я могу его поставить, но боюсь что никогда не работал с дескрипторами и плохо представляю что это. Можно попробовать.. Вы этим ip из стэй машины управляете или из Nios? -
DMA без NIOS II
Drakonof replied to Drakonof's topic in Работаем с ПЛИС, области применения, выбор
С этим разобрался. Ширина 3 бита, следовательно адресация регистров 1,2 и тд. Там единственная ссылка на документацию в которой всё взаимодействие с ядром идет через ниос и следовательно через api драйвера. Не хочу программно делать, слишком затратно ради одного dma ставить ниос.. Хотя повторюсь, что пробовал программно это сделать и оно работало. Как через стэйт машин заставить его работать не понимаю, может не предназначено, но это было бы странно -
DMA без NIOS II
Drakonof replied to Drakonof's topic in Работаем с ПЛИС, области применения, выбор
да это он. это возможности dma, те какими размерностями "слов" можно трансферить данные. На сколько я понял просто выбираешь один или несколько или все размерности и доопределяешь уже в регистре контроля перед трансфером. у меня основная проблема в том что я не могу записать регистры. я сильно начинающий разработчик, но с хорошим опытом системного программирования, поэтому возможно изначально не правильно выбрал подход работы с dma ip. -
DMA без NIOS II
Drakonof replied to Drakonof's topic in Работаем с ПЛИС, области применения, выбор
Дело в том что из QSYS DMA даёт мне только такие выводы .dma_control_port_slave_address (address), // dma_control_port_slave.address .dma_control_port_slave_chipselect (1'b1), // .chipselect .dma_control_port_slave_readdata (readdata), // .readdata .dma_control_port_slave_write_n (write_n), // .write_n .dma_control_port_slave_writedata (writedata) Подскажите пожалуйста как правильно сделать. Вся идея в том что бы просто перекинуть из одного on-chip в другой с помощью dma и стэйт машины.