Jump to content

    

Drakonof

Участник
  • Content Count

    34
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Drakonof

  • Rank
    Участник

Информация

  • Город
    Array

Recent Profile Visitors

323 profile views
  1. я думаю, если бы она была не доступна в lite, то qsys не сгенерировался бы, плюс из ниоса эта ip работает. я так же про данный dma думал)))) да, всё еще будет актуально) спасибо. Почитал про дескрипторы и sg режим, мне понравилось, мне кажется лучше её поставить, хорошенько в ней разобраться и тогда можно её к pcie прикрутить.
  2. В любом случае большое спасибо, что стараетесь помочь) это приятно)
  3. спасибо. Но разве там сигнал write_n не инверсный? те для записи регистра нужно ставить 0, а не 1. Простите, не будет нагло попросить у Вас пример для sgdma? думаю лучше ставить ту ip по которой совершенно точно можно проконсультироваться)
  4. я могу его поставить, но боюсь что никогда не работал с дескрипторами и плохо представляю что это. Можно попробовать.. Вы этим ip из стэй машины управляете или из Nios?
  5. С этим разобрался. Ширина 3 бита, следовательно адресация регистров 1,2 и тд. Там единственная ссылка на документацию в которой всё взаимодействие с ядром идет через ниос и следовательно через api драйвера. Не хочу программно делать, слишком затратно ради одного dma ставить ниос.. Хотя повторюсь, что пробовал программно это сделать и оно работало. Как через стэйт машин заставить его работать не понимаю, может не предназначено, но это было бы странно
  6. да это он. это возможности dma, те какими размерностями "слов" можно трансферить данные. На сколько я понял просто выбираешь один или несколько или все размерности и доопределяешь уже в регистре контроля перед трансфером. у меня основная проблема в том что я не могу записать регистры. я сильно начинающий разработчик, но с хорошим опытом системного программирования, поэтому возможно изначально не правильно выбрал подход работы с dma ip.
  7. Дело в том что из 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 и стэйт машины.
  8. Для начала задача простая, данные из проинитенной первой on-chip переложить данные во вторую с помощью dma. Я не знаю другого способа задать начальный и конечный адреса, размер данных и запустить передачу как не через регистры. По честному я не особо умею работать с авалон. Вот весь автамат always @(posedge clk or negedge rst_n) begin if(~rst_n) begin state <= 8'd0; chip_select <= 0; writedata <= 0; end else begin case(state) 8'd0: begin address <= 3'd1; // регистр адреса откуда читать данные write_n <= 1'b0; writedata <= 18'h30000; // адресс буфера 0 state <= 8'd1; chip_select <= 1'b1; end 8'd1: begin state <= 8'd2; end 8'd2: begin address <= 3'd2; // регистр адреса куда читать данные writedata <= 18'h31000; // адресс буфера 1 state <= 8'd3; end 8'd3: begin state <= 8'd4; end 8'd4: begin address <= 3'd3; // регистр адреса сколько передавать данныхъ writedata <= 18'h100; // передавать 256 байт state <= 8'd5; end 8'd5: begin state <= 8'd6; end 8'd6: begin address <= 3'd6; // контрольный регистр writedata <= 18'h9; state <= 8'd7; end 8'd7: begin state <= 8'd8; end 8'd8: begin address <= 3'd0; write_n <= 1'b1; state <= 8'd9; end 8'd9: begin if(readdata == 18'h00010) begin led[3:0] <= 4'h7; // просто зачечь семерочку на диодах как индикатор state <= 8'd10; end end 8'd10: begin if(readdata == 18'h00001) begin led[7:4] <= 4'h7; address <= 3'd1; state <= 8'd11; end end 8'd11: begin if(readdata == 18'h30000) begin led[7] <= 1'h1; chip_select <= 1'b0; end end endcase end
  9. Да, Вы правы, это я скинул код с ошибкой, извините. Без этой строчки тоже не работает... 8'd3: begin address <= 8'd6; // контрольный регистр writedata <= 32'h9; // читать данные байтами и запуск передачи данных end
  10. Спасибо за ответ. НЕ совсем понял откуда его выпиливать) Так я подключил DMA, два буфера и сам контроллер. Это сигналы из qsys для slave порта DMA .dma_control_port_slave_address (<connected-to-dma_control_port_slave_address>), .dma_control_port_slave_chipselect (<connected-to-dma_control_port_slave_chipselect>), .dma_control_port_slave_readdata (<connected-to-dma_control_port_slave_readdata>), .dma_control_port_slave_write_n (<connected-to-dma_control_port_slave_write_n>), .dma_control_port_slave_writedata (<connected-to-dma_control_port_slave_writedata>) Так я пытаюсь передать данные из буфера 0 в буфер 1 reg [31:0] address; reg[7:0] readdata, writedata; reg write; registrator_bd registrator_bd_inst ( .clk_clk (clk), // clk.clk .reset_reset_n (rst_n),// reset.reset_n .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) ); always @(posedge clk) begin case(state) 8'd0: begin address <= 8'd1; // регистр адреса откуда читать данные write_n <= 1'b0; writedata <= 32'h30000; // адресс буфера 0 state <= 8'd1; end 8'd1: begin address <= 8'd2; // регистр адреса куда читать данные writedata <= 32'h31000; // адресс буфера 1 state <= 8'd2; end 8'd2: begin address <= 8'd3; // регистр адреса сколько передавать данныхъ writedata <= 32'h100; // передавать 256 байт state <= 8'd3; end 8'd3: begin address <= 8'd6; // контрольный регистр write_n <= 1'b1; writedata <= 32'h9; // читать данные байтами и запуск передачи данных end endcase end Но данные не пересылаются. Статусный регистр по нулям, что говорит о том что контроллер не сработал. Тут появляется вопрос, правильно ли я задаю смещения регистров? в даташите написано просто 0,1,2,3,6, но передавая эти цифры нужно ли их домнажать на 4? или контроллер принимает их в таком виде и сам уже разбирается? этой информации я не нашел. Пробовал так и так, не работает. Второй вопрос, который у меня появился, нужно ли выдерживать паузу несколько тактов после записи каждого регистра? этого в спецификации я тоже не нашел..
  11. нет, данные будут идти по специфической шине в плис, машина состояний должна декодировать поток и декодированные данные сложить в память, как только один пакет будет декодирован, машина принимается сразу за другой и начинает его складывать во второй буфер при этом давая команду DMA на пересылку первого буфера в DDR. Потом так же со вторым и с переходом на первый буфер.
  12. Всем привет! Cyclone IV Quartus Lite 18 DMA Controller Intel FPGA IP On-chip memory Есть задача, по пути к которой нужно научиться управлять DMA (соответственно гонять данные из одного блока памяти в другой) . Через Ниос с помощью api от intela всё хорошо работает, но мне хочется научиться управлять DMA через машину состояний, но пока не получается даже регистр адреса назначения записать) Кто нибудь делал что то подобное?
  13. Не могу разобраться с ошибкой [DRC REQP-49] connects_GTGREFCLK0_ACTIVE_connects_GTGREFCLK1_ACTIVE: GTPE2_COMMON cell xdma_p_i/xdma_0/inst/xdma_p_xdma_0_0_pcie2_to_pcie3_wrapper_i/pcie2_ip_i/inst/inst/gt_top_i/pipe_wrapper_i/pipe_lane[0].pipe_quad.gt_common_enabled.gt_common_int.gt_common_i/qpll_wrapper_i/gtp_common.gtpe2_common_i: Use of the GTGREFCLK is reserved for test purposes only. This has the lowest performance of the available clocking methods and can degrade transceiver performance. при этом critical warnings [Common 17-55] 'set_property' expects at least one object. ["C:/workspace_vivado_2019_1/xdma_p.srcs/constrs_1/new/pin.xdc":6] [Common 17-55] 'set_property' expects at least one object. ["C:/workspace_vivado_2019_1/xdma_p.srcs/constrs_1/new/pin.xdc":8] [Common 17-55] 'set_property' expects at least one object. ["C:/workspace_vivado_2019_1/xdma_p.srcs/constrs_1/new/pin.xdc":10] [Common 17-55] 'set_property' expects at least one object. ["C:/workspace_vivado_2019_1/xdma_p.srcs/constrs_1/new/pin.xdc":12] [Common 17-55] 'set_property' expects at least one object. ["C:/workspace_vivado_2019_1/xdma_p.srcs/constrs_1/new/pin.xdc":15] [Vivado 12-2285] Cannot set LOC property of instance 'xdma_p_i/refclk_ibuf'... xdma_p_i/refclk_ibuf is not a leaf level instance ["C:/workspace_vivado_2019_1/xdma_p.srcs/constrs_1/new/pin.xdc":19] set_property IOSTANDARD LVCMOS33 [get_ports sys_rst_n] set_property LOC M20 [get_ports sys_rst_n] set_property PULLUP true [get_ports sys_rst_n] # PCIe Lane 0 set_property LOC GTPE2_CHANNEL_X0Y7 [get_cells {xdma_p_i/xdma_0/inst/gt_top_i/pipe_wrapper_i/pipe_lane[0].gt_wrapper_i/gtp_channel.gtpe2_channel_i}] # PCIe Lane 1 set_property LOC GTPE2_CHANNEL_X0Y6 [get_cells {xdma_p_i/xdma_0/inst/gt_top_i/pipe_wrapper_i/pipe_lane[1].gt_wrapper_i/gtp_channel.gtpe2_channel_i}] # PCIe Lane 2 set_property LOC GTPE2_CHANNEL_X0Y5 [get_cells {xdma_p_i/xdma_0/inst/gt_top_i/pipe_wrapper_i/pipe_lane[2].gt_wrapper_i/gtp_channel.gtpe2_channel_i}] # PCIe Lane 3 set_property LOC GTPE2_CHANNEL_X0Y4 [get_cells {xdma_p_i/xdma_0/inst/gt_top_i/pipe_wrapper_i/pipe_lane[3].gt_wrapper_i/gtp_channel.gtpe2_channel_i}] # GTP Common Placement set_property LOC GTPE2_COMMON_X0Y1 [get_cells {xdma_p_i/xdma_0/inst/gt_top_i/pipe_wrapper_i/pipe_lane[0].pipe_quad.gt_common_enabled.gt_common_int.gt_common_i/qpll_wrapper_i/gtp_common.gtpe2_common_i}] мой xdc set_property LOC IBUFDS_GTE2_X0Y3 [get_cells xdma_p_i/refclk_ibuf] set_property LOC F11 [get_ports sys_clk_p] set_property LOC E11 [get_ports sys_clk_n] set_property LOC C12 [get_ports {pcie_rx_n[0]}] set_property LOC D12 [get_ports {pcie_rx_p[0]}] set_property LOC C10 [get_ports {pcie_tx_n[0]}] set_property LOC D10 [get_ports {pcie_tx_p[0]}] set_property LOC A13 [get_ports {pcie_rx_n[1]}] set_property LOC B13 [get_ports {pcie_rx_p[1]}] set_property LOC A9 [get_ports {pcie_tx_n[1]}] set_property LOC B9 [get_ports {pcie_tx_p[1]}] set_property LOC C14 [get_ports {pcie_rx_n[2]}] set_property LOC D14 [get_ports {pcie_rx_p[2]}] set_property LOC C8 [get_ports {pcie_tx_n[2]}] set_property LOC D8 [get_ports {pcie_tx_p[2]}] set_property LOC A11 [get_ports {pcie_rx_n[3]}] set_property LOC B11 [get_ports {pcie_rx_p[3]}] set_property LOC A7 [get_ports {pcie_tx_n[3]}] set_property LOC B7 [get_ports {pcie_tx_p[3]}] #0 set_property PACKAGE_PIN M26 [get_ports calib_led] set_property IOSTANDARD LVCMOS33 [get_ports calib_led] #1 set_property PACKAGE_PIN T24 [get_ports link_led] set_property IOSTANDARD LVCMOS33 [get_ports link_led] При этом если сделать open ip example design и прописать в .xdc set_property IOSTANDARD LVCMOS33 [get_ports sys_rst_n] set_property LOC M20 [get_ports sys_rst_n] set_property PULLUP true [get_ports sys_rst_n] set_property LOC IBUFDS_GTE2_X0Y3 [get_cells refclk_ibuf] set_property LOC F11 [get_ports sys_clk_p] set_property LOC E11 [get_ports sys_clk_n] то пример собирается, не могу понять что моему проекту нужно. xdma_p.pdf
  14. Нет что Вы) просто разбираться с новыми трудностями вместо старых которые всё равно никуда не денутся очень не охота. Буду пытаться через xdma что то сделать, хотя проект даже еще не собрался. Но а вообще, есть вероятность что AC701 сама по себе не позволяет работать через dma с хостом? (вопрос конечно может показаться глупым, но, если позволите, я сошлюсь на неопытность) Спасибо что Вы еще здесь.
  15. не могу понять, у xdma можно поставить частоту 250 или 125МГц, но на плате только 200 для ядра. Даже относительно AC701 проект не собирается.. может попробуем разобраться с моей конфигурацией? если честно я был бы очень рад не начинать всё с начала и довести до конца то что уже есть