Jump to content

    

AlphaMil

Участник
  • Content Count

    135
  • Joined

  • Last visited

Everything posted by AlphaMil


  1. Но ведь выходом PCIE ядра является интерфейс AXI (как на прием, так и на передачу), я не подключаю ядро к процессору (синтезированному, или аппаратному), я сделал автомат состояний, который приняв транзакцию делает парсинг и, например, пишет или читает данные в/из блочной памяти. Это и есть аналог DMA (если я правильно понимаю). Так вот даже на этом этапе количество двойных слов ограничено одним. Т.е. хост не может даже запросить у меня более чем одно двойное слово. А не может запросить - как ему просто отдать больше, тупо посылкой на запись в память, инициированной с железки?
  2. Я может не совсем правильно понимаю, но для DMA нужен процессор, я же подключаю модули приема-передачи из примера непосредственно к блочной памяти (тестово, конечно), т.е. никакого процессора нет. Заполнение полей смотрю непосредственно на шине AXI. Или DMA-корка как-то особо настраивает всю связку (контроллер PCIE<->хост). Если не трудно, скажите номер ref design (или ссылку на него). Кстати платка KC705. Спасибо.
  3. Использую сгенерированное ядро PCIE от Xilinx. Для приема и отправки данных используются модули из примера для этого ядра. С помощью ChipScope смотрю содержимое поля Lenght в TLP (на шине AXI). Оно всегда равно 0x001. Перерыл инет, кто говорит, что это ограничение самого ядра, кто - на шине висит устройство, которое может обмениваться только по одному двойному слову (у меня - точно не висит такого устройства). Может уже кто сталкивался и решил эту проблему? Может порекомендуете другое какое ядра (ПЛИС Kintex7, использую аппаратный блок).
  4. У меня в проекте, да и на отладочной плате один клок 100МГц. И этого достаточно... Из него можно получить все частоты, которые мне нужны. Возможно Вы меня не поняли - клоковый вход корки ДОЛЖЕН быть подключен к клоковому пину, там даже IBUFG сразу стоит... По этому пришлось менять код ядра, т.е. добавлять внутрь цепи сброса.
  5. А зачем тогда секция initial??? Получается сброс нужно назначать на один из пинов и делать внешним. Или как я делать - корректировать файлы ядра что бы добавить туда код для сброса. Т.к. вход ядра сразу подключается на клоковый пин ПЛИС и выход хоть какого клока есть только после сбрасываемого PLL!!!! Так как делать в этом случае, если хилые сами этого не сделали? И даже в UG об этом не написали????
  6. SYSCK это скорее всего частота обмена Вашей логики с ядром (т.е. частота которую Вы можете использовать в своем проекте). Она может выбираться исходя из Ваших требований.
  7. Почему не хватает??? Он мирно находится в неактивном состоянии, а я считаю что после включения питания контроллер памяти находится в состоянии как после сброса (т.е. исходном)... И дело там не в том что сигнал сброшен, просто они ошиблись в схемотехнике и требуют дополнительного сброса для правильного запуска тактирующих цепей.
  8. Полностью согласен с Wic. Мне что бы разобраться в ошибке именно ХИЛЫХ, а не моей пришлось потратить кучу времени и перерыть много литературы. Почему информации по этой проблеме нет в ug388????
  9. Возможно заявляется аппаратное ядро??? Без крепостного ядра запустить возможно и можно будет, но например ч меньшей тактовой частотой. Плюс расход ресурсов плис.
  10. Проблема решена. Все дело оказалось именно в том, что сигнал сброса нельзя кидать на 0. Через счетчик сделал сброс и все заработало.
  11. Проверил, все сигналы такие, какие должны быть. Проблема в сигнале сброса всего ядра. Читаю AR#35976, там эта проблема описывается. Если в проекте хилых сброс тоже сразу на 0 замкнуть - не работает.
  12. Извините, но что значит правильный? Контроллер сбросить надо после включения? У меня сразу сброс контроллера на 0 подключен.
  13. Попробовал залить во влешку и перезапустить с выключением питания, не спасло. Вообще плата рабочая - дефолтный проект идет, а память там используется.
  14. Т.е, alexr22b, надо заливать во флешку и тогда при включении питания должно работать??? А что хилые по этому поводу говорят? Информации нет??
  15. Виноват, конечно 32'hFFFFFFFF. Примерне проверял. Понадеялся на симуляцию. Завтра обязательно проверю. Сигнал We не забыл - при симуляции все работает отлично.
  16. Сигнал калибровки в 1. Все транзакции происходят после этого. Интересно, что внутреннее фифо заполняется чем-то. Т.е. этими 16hFFFF наверное. Файл ucf уже кучу раз перебирал...
  17. Ориентируюсь на ug388. Код скорее всего ни при чем - при моделировании все работает, все констрейны выполняются. Использую отладочную плату Avnet Spartan-6 LX150T Development Board. Проекты для нее есть только для EDK. Может там сопротивления какие надо указывать. Вообще, что может привести к такому результату???
  18. Блок MCB Spartan6 выдает при чтении всегда 32'hFFFF. Все сделал по руководству пользователя. Данные читаются из внутреннего для MCB FIFO на 64 слова. Информация в память пишется по другому каналу. При функциональном моделировании все работает на ура.... Подскажите, где копать. Спасибо.
  19. К сожалению опыта использования Synplify нет. Да и Ethernet - это только капля всего проекта. Основная и главная часть совсем в другом... Пока мучаюсь и пишу свой контроллер с урезанными функциями.
  20. Очень интересно. Жаль написано на SV и под Альтеру... Вот бы под Xilinx....
  21. Народ, пробую использовать MAC http://www.opencores.org/projects.cgi/web/ethernet_tri_mode, думаю здешний народ сталкивался... При симуляции все нормально и синтезируется все. Но после маппинга остается только несколько регистров - т.е. логика вся обрезается. Не пойму никак почему... Выкладываю модуль, все частоты заведены, ресет заведен, внешние сигналы тоже подключены. `timescale 1ns / 1ps `include "d:/PROJECTS/UOSON-2/VideoDevKit/Tests/LAN/LANController/EMAC/header.v" ////////////////////////////////////////////////////////////////////////////////// // Company: // Engineer: // // Create Date: 12:56:02 12/02/2011 // Design Name: // Module Name: LANController // Project Name: // Target Devices: // Tool versions: // Description: // // Dependencies: // // Revision: // Revision 0.01 - File Created // Additional Comments: // ////////////////////////////////////////////////////////////////////////////////// module LANController(Clck125M, Clck100M, Rst, GTxClck, RxClck, RxDV, RxD, RxEr, TxClck, TxEn, TxEr, TxD, LANRst, Crs, Col, MDIO, MDClck, TestOut); input Clck125M; input Clck100M; input Rst; output GTxClck; input RxClck; input RxDV; input [7:0] RxD; input RxEr; input TxClck; output TxEn; output TxEr; output [7:0] TxD; output LANRst; input Crs; input Col; inout MDIO; output MDClck; output [7:0] TestOut; //Ввод-вывод интерфейса управления wire MDI; wire MDO; wire MDIOEn; //assign MDIO = MDIOEn ? MDO : MDI; IOBUF #( .DRIVE(12), // Specify the output drive strength .IOSTANDARD("DEFAULT"), // Specify the I/O standard .SLEW("SLOW") // Specify the output slew rate ) MDIOBUF ( .O(MDI), // Buffer output .IO(MDIO), // Buffer inout port (connect directly to top-level port) .I(MDO), // Buffer input .T(MDIOEn) // 3-state enable input, high=input, low=output ); reg [7:0] TestOut; assign LANRst = Rst; //Управление ядром wire [2:0] Speed; reg Rd; wire RA; wire [31:0] Data; reg [15:0] Cntr; wire MACWA; reg MACWr; initial begin Cntr = 0; end always @(posedge Clck100M) begin if (RA) TestOut <= Data[7:0]; Rd <= RA; end always @(posedge Clck100M) begin if (MACWA) Cntr <= Cntr + 1; if ((Cntr > 100)&&(Cntr < 2000)) MACWr <= 1; else MACWr <= 0; end MAC_top MAC ( .Reset(!Rst), .Clk_125M(Clck125M), .Clk_user(Clck100M), .Clk_reg(Clck100M), .Speed(Speed), .Rx_mac_ra(RA), .Rx_mac_rd(Rd), .Rx_mac_data(Data), .Rx_mac_BE(), .Rx_mac_pa(), .Rx_mac_sop(), .Rx_mac_eop(), .Tx_mac_wa(MACWA), .Tx_mac_wr(MACWr), .Tx_mac_data({16'h0000, Cntr}), .Tx_mac_BE(2'b00), .Tx_mac_sop(1'b0), .Tx_mac_eop(1'b0), .Pkg_lgth_fifo_rd(Pkg_lgth_fifo_rd), .Pkg_lgth_fifo_ra(Pkg_lgth_fifo_ra), .Pkg_lgth_fifo_data(Pkg_lgth_fifo_data), .Gtx_clk(GTxClck), .Rx_clk(RxClck), .Tx_clk(TxClck), .Tx_er(TxEr), .Tx_en(TxEn), .Txd(TxD), .Rx_er(RxEr), .Rx_dv(RxDV), .Rxd(RxD), .Crs(Crs), .Col(Col), .CSB(1'b0), .WRB(1'b0), .CD_in(16'h0000), .CD_out(), .CA(8'h00), .Mdo(MDO), .MdoEn(MDOEn), .Mdi(MDI), .Mdc(MDClck) ); endmodule
  22. Плата sp605 также начинаю работать с сетью, у меня вообще нет скрипта для конфигурирования марвелла. После включения сразу начинаю принимать пакеты. Но вот отправлять не получается. На выходе плис сигналы все нормальные, но хост фрейм не принимает.
  23. Уважаемые, вроде все сделал - ARP пакеты принимаются и разбираются. Но вот отправка не работает - смотрю с помощью WiresShark. Контрольные суммы уже руками считал... Всю структуру отправляемого пакета проверил много раз. Через GMII все передается нормально. Может надо Marvell настроить как-то. У меня горит 1Gbit. Если задать со стороны хоста жестко 100Mbit, данные принимаются не правильно - смотрю ChipScop-ом...
  24. AndreiUS, Вы не могли бы выложить часть проекта хоть какого, где используется ядро Ethernet 1000BASE-X PCS/PMA or SGMII, я пытался с ним разобраться, но так и не понял, что там за интерфейсы и куда их подключать. Да и как управлять им???