Jump to content

    

Drakonof

Участник
  • Content Count

    42
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Drakonof

  • Rank
    Участник

Информация

  • Город
    Array

Recent Profile Visitors

650 profile views
  1. Спасибо, начал парсить сгенерированный пример, и вроде картинка начинается складываться. А вот другими примерами не монго сложнее, может я не правильно их ищу? Но пока в принципе хватает vivado'вского. Думаю вытащих из него чекер и воткнуть его в проект клиента, а в хосте оставить генератор и поробовать таким образом слать данные и смотреть их в ILA.
  2. Спасибо, да Вы правы, 10GBase-R. Я использую отладочную плату zc706и в частности ПЛИС xc7z045, по этому IP ядро поддерживает только стандарт 10GBase-R. Частоту проверяют диодом на плате (heart_beat module). Когда разбирался с 1Гбит изернетом всё было немного проще, там у меня выступал как mac сам zynq, поэтому было достаточно запустить lwip пример в sdk и порадоваться как всё здорово и легко. В данном случае mac'ом выступает отдельное ядро. Если честно я собрал только pl часть и понял что делать дальше не знаю. Мне кажется что нужно ставить некую память (возможно bram) и принимать туда пакеты , затем dma будет забирать их в zynq, но при этом mac будет отдавать команду на ожидание для передачи новых пакетов. Но как складывать в bram пакеты, не могу сообразить и вообще как управлять этим ядром?
  3. Всем привет! Подскажите как организовать передачу данных в 10G изернете. Мне подсказали что нужен flow control module, это модуль самописный или его где-то можно взять? Я полагаю нужны разные как для сервера так и клиента. Подскажите пожалуйста куда дальше копать) Частота поднимается Zynq'ом, 156МГц, работает. Vivado 2018.4, zc706 Dev Kit (проект собран относительно ПЛИС xc7z045, а не платы). Спасибо! PL.pdf
  4. в общем нужно было ножки тактирования настроить на SI5324_OUT (а не на SMA_MGT) и установить константу 3 на порт phyaddres. Всё заработало.
  5. Всем привет. Не могу понять как поднять 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
  6. Заработало) спасибо Пока конечно костыльно, в данном случае не работалоизза цинка, каким то образом мешал передаче данных, цинк убрал, буду разбираться
  7. Всем привет, друзья помогите разобраться с 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
  8. я думаю, если бы она была не доступна в lite, то qsys не сгенерировался бы, плюс из ниоса эта ip работает. я так же про данный dma думал)))) да, всё еще будет актуально) спасибо. Почитал про дескрипторы и sg режим, мне понравилось, мне кажется лучше её поставить, хорошенько в ней разобраться и тогда можно её к pcie прикрутить.
  9. В любом случае большое спасибо, что стараетесь помочь) это приятно)
  10. спасибо. Но разве там сигнал write_n не инверсный? те для записи регистра нужно ставить 0, а не 1. Простите, не будет нагло попросить у Вас пример для sgdma? думаю лучше ставить ту ip по которой совершенно точно можно проконсультироваться)
  11. я могу его поставить, но боюсь что никогда не работал с дескрипторами и плохо представляю что это. Можно попробовать.. Вы этим ip из стэй машины управляете или из Nios?
  12. С этим разобрался. Ширина 3 бита, следовательно адресация регистров 1,2 и тд. Там единственная ссылка на документацию в которой всё взаимодействие с ядром идет через ниос и следовательно через api драйвера. Не хочу программно делать, слишком затратно ради одного dma ставить ниос.. Хотя повторюсь, что пробовал программно это сделать и оно работало. Как через стэйт машин заставить его работать не понимаю, может не предназначено, но это было бы странно
  13. да это он. это возможности dma, те какими размерностями "слов" можно трансферить данные. На сколько я понял просто выбираешь один или несколько или все размерности и доопределяешь уже в регистре контроля перед трансфером. у меня основная проблема в том что я не могу записать регистры. я сильно начинающий разработчик, но с хорошим опытом системного программирования, поэтому возможно изначально не правильно выбрал подход работы с dma ip.
  14. Дело в том что из 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 и стэйт машины.