|
MicroBlaze + DDR3 + my_IP на AXI, подключение к AXI |
|
|
|
 |
Ответов
|
Jun 20 2013, 18:41
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Да я что-то уже путаюсь. Мне кажется что топикстартер где то еще что-то подобное уже обсуждал, а может это кто-то другой. То есть задача раскинута по нескольким топикам, или я ошибаюсь... Если есть данные которые надо просто передать по езернету, и скорость входа их меньше, то естественно тут даже микроблайз по хорошему не нужен. Но что-то мне подсказывает что когда говорят езернет, то имеют ввиду чтобы в компьютер включить и в виндусе получить. А это уже значит IP, а то и ТСР, UDP - край. Но даже по UDP задача решаема, есть модули которые напрямую формируют пакеты UDP с контрольной суммой и так далее.... Но я так понимаю речь идет о полной системе, которая нормально видится в сети, и с нее можно забрать какие то намеренные показания, отсюда и строю свое понимание, а именно что надо взять микроблайз с DDR и LwIP, сделать нормальный серверочек данных с протоколом, а то и что-то стандартное выше уровнем типа ФТП, ХТТП... а к этой системе уже прикрутить модуль сбора, первичной обработки данных, который их уложит аккуратными стопочками в память. Я бы конечно бы их из модуля в память перекладывал бы Микроблайзом, но ТС хочет его освободить от этого как я понял, и потому фактически старается написать свой модуль ДМА, а я предлагаю взять готовый... Вот такое мое понимание задачи, хотя я признаю может я все и перепутал  ...
|
|
|
|
|
Jun 24 2013, 05:43
|
Частый гость
 
Группа: Участник
Сообщений: 115
Регистрация: 21-03-07
Пользователь №: 26 368

|
Цитата(Golikov A. @ Jun 20 2013, 22:41)  Да я что-то уже путаюсь. Мне кажется что топикстартер где то еще что-то подобное уже обсуждал, а может это кто-то другой. То есть задача раскинута по нескольким топикам, или я ошибаюсь... да, я начал обсуждение на первый вариант. там не получилось сделать. но потом нашел уже начатое обсуждение здесь. если кто-то подскажет почему, буду очень признателен. Цитата Если есть данные которые надо просто передать по езернету, и скорость входа их меньше, то естественно тут даже микроблайз по хорошему не нужен. Но что-то мне подсказывает что когда говорят езернет, то имеют ввиду чтобы в компьютер включить и в виндусе получить. А это уже значит IP, а то и ТСР, UDP - край. про скорость было здесь. изначально - байт под 66МГц. нужно распознать, определить что и куда и получается 32р под16МГц. т.е. 0.6Гбита.далее 2 варианта оба нужны ТСР и UDP. почему UDP край? я то думал, что как раз он возможен без микроблэйза. и все обсуждение было для ТСР. Цитата что надо взять микроблайз с DDR и LwIP, сделать нормальный серверочек данных с протоколом, а то и что-то стандартное выше уровнем типа ФТП, ХТТП... а к этой системе уже прикрутить модуль сбора, первичной обработки данных, который их уложит аккуратными стопочками в память. так и есть. Цитата Я бы конечно бы их из модуля в память перекладывал бы Микроблайзом, но ТС хочет его освободить от этого как я понял, и потому фактически старается написать свой модуль ДМА, а я предлагаю взять готовый... я интернетом пока не занимался. но почитал на форуме. и вычитал , что если микроблэйз будет заниматься подготовкой данных , то гигабит не получить. плата спартан6. поэтому и хотелось его исключить. и еще я не очень понимаю- данные о том, куда записывать и сколько, есть только во внешнем блоке. как микроблэйз будет управлять куда и сколько без получения этих данных. ведь он знает откуда и сколько брать для передачи и не более. Цитата и есть ДМА контроллер, уже готовый ксалинксом написанный, который соединит выход вашего фифо и ДДР микроблэйз уже (это значит, что когда я указываю плату , то эта связь изначально присутствует)соединен с DDR по AXI4 через порт P0 MCB_DDR3 и далее на DDR3. почему нельзя наш компонент с фифо и выходом на axi соединить сразу с входом порта P1 MCB_DDR3. у него есть арбитр и он для этого служит. или не так? и нужна связь компонент -> ДМА -> MCB_DDR3 -> DDR3 Цитата(akorud @ Jun 20 2013, 19:51)  IP/UDP надо по условию задачи? Скорость поступления данных? Если данные поступают медленнее чем их высылает сеть, то такая задача решается за полдня, делал недавно и думаю вполне смогу поделится кодом. скорость менее 1Г. изначально думал просто выдывать по UDP .без микроблэйза и без любого IP Ethernet. плата спартан 6 SP605. просто через М88Е1111. но не смог найти информацию для инициализации этой м\с(MDIO). вроде находилась информация, что функциональный аналог DP83865 и можно воспользоваться. в стандарте больно много всего. т.е. в какие именно регистры нужна запись? но такая передача собственно и сейчас интересует. так что буду рад, если можно поделиться кодом. Цитата(akorud @ Jun 21 2013, 10:58)  А чем вы его смотрите? Если микроблейз - то и не увидите, т.к. он устанавливается только на один цикл и сам сбрасывается. Смотреть на регистр статуса. в XPS создан микроблейз с компонентом. далее в ISE его правлю . делаю выходы в user_ligic для my_wrce ,my_Bus2IP_Data , my_Bus2IP_BE завожу их обратно . записываю нужную мне инф. в mst_reg в 0..14, в 15 там не записывается. потом выполняю все условия для выполнения mst_go <= '1'; в MASTER_WRITE_GO_PORT и в ISim смотрю. и хочу увидеть запуск чтения из фифо.
Сообщение отредактировал serg_k1 - Jun 24 2013, 07:19
|
|
|
|
|
Jun 24 2013, 10:03
|
Местный
  
Группа: Свой
Сообщений: 203
Регистрация: 12-11-10
Из: Poland
Пользователь №: 60 842

|
Как то все очень запутано - кажется ТС пробует "объять необъятное" причем все и сразу. Цитата(serg_k1 @ Jun 24 2013, 07:43)  скорость менее 1Г. изначально думал просто выдывать по UDP .без микроблэйза и без любого IP Ethernet. плата спартан 6 SP605. просто через М88Е1111. Я бы сделал (и уже делал) так: 1. берем IP Ethernet стандартный. У него вход данных AXI-stream, проще некуда; 2. Насколько я помню ничего в PHY изменять не надо, он сам стартует в режиме 1Gb Autoneg, я правда делал на KC705 но даже не интересовался какой там PHY. 3. Пишем свой модуль который будет генерировать фиксированный заголовок Ethernet перед каждыми N (например 1500) байтами полезных данных и высылать по AXI-stream. 4. На PC запускаем простейшую программку под Linux принимающую все это через raw socket и далее можно делать что душе угодно - хоть в файл, хоть в UDP, хоть в TCP. На все - день работы. Все усложнения (микроблейз например) должны ясно следовать из условий ТЗ, ну или если поиграться хочется и бюджет есть
|
|
|
|
|
Jun 24 2013, 14:03
|
Частый гость
 
Группа: Участник
Сообщений: 115
Регистрация: 21-03-07
Пользователь №: 26 368

|
Цитата(akorud @ Jun 24 2013, 14:03)  Как то все очень запутано - кажется ТС пробует "объять необъятное" причем все и сразу.
Я бы сделал (и уже делал) так: 1. берем IP Ethernet стандартный. У него вход данных AXI-stream, проще некуда; я нашел только Tri_mod_Eth с AXI-stream и в нем там масса модулей...? и если это он , то можно поподробней.
|
|
|
|
|
Jun 24 2013, 14:38
|
Местный
  
Группа: Свой
Сообщений: 203
Регистрация: 12-11-10
Из: Poland
Пользователь №: 60 842

|
Цитата(serg_k1 @ Jun 24 2013, 16:03)  я нашел только Tri_mod_Eth с AXI-stream и в нем там масса модулей...? и если это он , то можно поподробней. Да, он. Простой рабочий пример (только на передачу). Сигналы ETHERNET_* - прямо на пины PHY. Не забудьте phy_reset_n установить в 1 так он active low. clk_125M_tx - ваша забота; clk_125M_rx - придет от PHY. Код //---------------------------------------------------------------------------- // Ethernet //----------------------------------------------------------------------------
//---------------------------------------------------------------------------- // TX PHY physical interface interface //----------------------------------------------------------------------------
wire [7:0] gmii_txd; wire gmii_tx_en; wire gmii_tx_er;
always @(posedge clk_125M_tx) begin ETHERNET_TXD <= gmii_txd; ETHERNET_TX_EN <= gmii_tx_en; ETHERNET_TX_ER <= gmii_tx_er; end
ODDR #( .DDR_CLK_EDGE("OPPOSITE_EDGE"), .INIT(1'b0), .SRTYPE("SYNC") ) ODDR_inst ( .Q(ETHERNET_TX_CLK), .C(clk_125M_tx), .CE(1'b1), .D1(1'b0), .D2(1'b1), .R(1'b0), .S(1'b0) );
//---------------------------------------------------------------------------- // RX PHY physical interface interface //----------------------------------------------------------------------------
wire clk_125M_rx_io;
BUFIO BUFIO_inst (.I(ETHERNET_RX_CLK), .O(clk_125M_rx_io)); BUFG BUFG_inst (.I(ETHERNET_RX_CLK), .O(clk_125M_rx));
reg [7:0] gmii_rxd; reg gmii_rx_dv; reg gmii_rx_er;
always @(posedge clk_125M_rx_io) begin gmii_rxd <= ETHERNET_RXD; gmii_rx_dv <= ETHERNET_RX_DV; gmii_rx_er <= ETHERNET_RX_ER; end
//---------------------------------------------------------------------------- // Core itself //----------------------------------------------------------------------------
wire mac_tx_reset; reset_sync rsync_mac_tx(.clk(clk_125M_tx), .areset(1'b0), .reset(mac_tx_reset), .resetn());
wire mac_rx_reset; reset_sync rsync_mac_rx(.clk(clk_125M_rx), .areset(1'b0), .reset(mac_rx_reset), .resetn());
wire [79:0] tx_mac_config_vector = {64'b0, 15'b0010_0000_0000_001, mac_tx_reset}; wire [79:0] rx_mac_config_vector = {64'b0, 15'b0010_0000_0000_001, mac_rx_reset};
tri_mode_eth_mac tri_mode_eth_mac ( .glbl_rstn(1'b1), .rx_axi_rstn(1'b1), .tx_axi_rstn(1'b1), .rx_axi_clk(clk_125M_rx), .rx_reset_out(), .rx_axis_mac_tdata(), .rx_axis_mac_tvalid(), .rx_axis_mac_tlast(), .rx_axis_mac_tuser(), .rx_statistics_vector(), .rx_statistics_valid(), .tx_axi_clk(clk_125M_tx), .tx_reset_out(), .tx_axis_mac_tdata(eth_axis_tdata), .tx_axis_mac_tvalid(eth_axis_tvalid), .tx_axis_mac_tlast(eth_axis_tlast), .tx_axis_mac_tuser(1'b0), .tx_axis_mac_tready(eth_axis_tready), .tx_ifg_delay(8'b0), .tx_statistics_vector(), .tx_statistics_valid(), .pause_req(1'b0), .pause_val(16'b0), .speed_is_100(), .speed_is_10_100(), .gmii_txd(gmii_txd), .gmii_tx_en(gmii_tx_en), .gmii_tx_er(gmii_tx_er), .gmii_rxd(gmii_rxd), .gmii_rx_dv(gmii_rx_dv), .gmii_rx_er(gmii_rx_er), .rx_mac_config_vector(rx_mac_config_vector), // input [79 : 0] rx_mac_config_vector .tx_mac_config_vector(tx_mac_config_vector) // input [79 : 0] tx_mac_config_vector );
|
|
|
|
|
Jun 25 2013, 11:14
|
Частый гость
 
Группа: Участник
Сообщений: 115
Регистрация: 21-03-07
Пользователь №: 26 368

|
Цитата(akorud @ Jun 24 2013, 18:38)  Да, он. Простой рабочий пример (только на передачу). Сигналы ETHERNET_* - прямо на пины PHY. Не забудьте phy_reset_n установить в 1 так он active low. clk_125M_tx - ваша забота; clk_125M_rx - придет от PHY. в примере IP Core головной файл core_eth_example_design.v, связанный с PHY и с core_eth_fifo_block.v , который включает в себя core_eth_ten_100_1g_eth_fifo.v , включающий core_eth_tx_client_fifo.v и core_eth_rx_client_fifo.v, и связанный с pat_gen. в вашем примере как бы часть core_eth_fifo_block.v который стал головным и связан с PHY и он должен включать в себя core_eth_tx_client_fifo.v и core_eth_rx_client_fifo.v . это нужно сделать? и вместо pat_gen по axi stream через .tx_axi_clk(clk_125M_tx), .tx_axis_mac_tdata(eth_axis_tdata), .tx_axis_mac_tvalid(eth_axis_tvalid), .tx_axis_mac_tlast(eth_axis_tlast), .tx_axis_mac_tuser(1'b0), .tx_axis_mac_tready(eth_axis_tready), нужно подключить пакет для передачи? пакет это преамбула ? , разделитель?, адрес приемника(4 или 6 ?), адрес передатчика(4 или 6 ?), длина , данные, crc. или это самодостаточный модуль как бы core_eth.v, открываемый из core_eth.xco. и к нему подключаться также по axi stream по тем же сигналам. и еще вопрос по axi stream. данные записываются пока не появится tready под каждый клок новый байт.если не успеваю сформировать новый байт , то выдавать tvalid. а tlast - конец пакета и если нет tready можно писать следующий.
Сообщение отредактировал serg_k1 - Jun 25 2013, 11:44
|
|
|
|
|
Jun 25 2013, 13:28
|
Местный
  
Группа: Свой
Сообщений: 203
Регистрация: 12-11-10
Из: Poland
Пользователь №: 60 842

|
Цитата(serg_k1 @ Jun 25 2013, 13:14)  .tx_axi_clk(clk_125M_tx), .tx_axis_mac_tdata(eth_axis_tdata), .tx_axis_mac_tvalid(eth_axis_tvalid), .tx_axis_mac_tlast(eth_axis_tlast), .tx_axis_mac_tuser(1'b0), .tx_axis_mac_tready(eth_axis_tready), нужно подключить пакет для передачи? пакет это преамбула ? , разделитель?, адрес приемника(4 или 6 ?), адрес передатчика(4 или 6 ?), длина , данные, crc. или это самодостаточный модуль как бы core_eth.v, открываемый из core_eth.xco. и к нему подключаться также по axi stream по тем же сигналам. и еще вопрос по axi stream. данные записываются пока не появится tready под каждый клок новый байт.если не успеваю сформировать новый байт , то выдавать tvalid. а tlast - конец пакета и если нет tready можно писать следующий. Я пример не смотрел, так что там не помогу. Пакет - все что угодно, что выглядит как более-менее правильный Ethernet frame. Начинается от destination MAC (6). Т.е. 14 байт заголовка и свои данные. Я заголовок просто делал 0 1 2 3 ... 0xd - проходило. Про AXI-stream - вообще-то спецификация открытая, но вкратце - байт считается переданным если tvalid = 1 и tready = 1. Если приемник не готов принимать - он выставит tready = 0, если вы не готовы передавать - устанавливаете tvalid = 0. tlast - означает последний байт пакета (устанавливается вами).
|
|
|
|
Сообщений в этой теме
zuuuuk MicroBlaze + DDR3 + my_IP на AXI May 5 2013, 15:44 akorud Цитата(zuuuuk @ May 5 2013, 17:44) Добрый... May 5 2013, 18:47 serg_k1 Цитата(akorud @ May 5 2013, 22:47) Лучше ... Jun 7 2013, 10:11  aabmail Цитата(serg_k1 @ Jun 7 2013, 14:11) если ... Jun 7 2013, 12:19   serg_k1 Цитата(aabmail @ Jun 7 2013, 16:19) Могу ... Jun 10 2013, 06:33    aabmail Цитата(serg_k1 @ Jun 10 2013, 10:33) было... Jun 11 2013, 08:01     serg_k1 Цитата(aabmail @ Jun 11 2013, 12:01) Откр... Jun 11 2013, 09:35      aabmail Цитата(serg_k1 @ Jun 11 2013, 13:35) все ... Jun 11 2013, 09:54       akorud Цитата(aabmail @ Jun 11 2013, 11:54) Ваш ... Jun 11 2013, 10:52        aabmail Цитата(akorud @ Jun 11 2013, 14:52) Подде... Jun 11 2013, 16:42         serg_k1 Цитата500 слов раз в секунду или чаще?
32р 400 сло... Jun 13 2013, 05:36          aabmail Цитата(serg_k1 @ Jun 13 2013, 09:36) 32р ... Jun 13 2013, 09:56           serg_k1 Цитата(aabmail @ Jun 13 2013, 13:56) Разъ... Jun 13 2013, 11:52            aabmail Цитата(serg_k1 @ Jun 13 2013, 15:52) 32р ... Jun 13 2013, 15:34             serg_k1 Цитата(aabmail @ Jun 13 2013, 19:34) 3. к... Jun 14 2013, 06:42       serg_k1 Цитата(aabmail @ Jun 11 2013, 13:54) Ваш ... Jun 11 2013, 12:11 Golikov A. А что если так.
Делаете микроблайз
в нем включае... Jun 10 2013, 10:44 serg_k1 Цитата(Golikov A. @ Jun 10 2013, 14:44) А... Jun 10 2013, 12:24 Golikov A. так вы что хотите написать свой акси конектор что ... Jun 10 2013, 14:07 serg_k1 Цитата(Golikov A. @ Jun 10 2013, 18:07) т... Jun 11 2013, 06:43 Golikov A. я делаю визардом из XPS компонент, обычно с верило... Jun 12 2013, 07:42 Golikov A. на гигабитном езернете, в крайне не оптимальном ре... Jun 13 2013, 17:19 Golikov A. такс...
ФИФО
это компонент с входом и выходом пар... Jun 14 2013, 07:00 serg_k1 Цитата(Golikov A. @ Jun 14 2013, 11:00) Д... Jun 14 2013, 07:54  akorud Цитата(serg_k1 @ Jun 14 2013, 09:54) созд... Jun 16 2013, 20:54   aabmail Цитата(akorud @ Jun 17 2013, 00:54) Ну та... Jun 17 2013, 10:09    akorud Цитата(aabmail @ Jun 17 2013, 12:09) Обыч... Jun 17 2013, 13:26 aabmail ЦитатаКогда на входе строба записи появляется един... Jun 14 2013, 08:04 Golikov A. то данные из data_in на этом же цикле записываются... Jun 14 2013, 10:36 serg_k1 Цитата(Golikov A. @ Jun 14 2013, 14:36) я... Jun 14 2013, 12:53 Golikov A. сдается мне у кого-то полная путаница в голове..
... Jun 14 2013, 13:59 serg_k1 Цитата(Golikov A. @ Jun 14 2013, 17:59)
... Jun 14 2013, 14:11 serg_k1 Цитата(Golikov A. @ Jun 14 2013, 17:59) г... Jun 17 2013, 13:25 serg_k1 Цитата(Golikov A. @ Jun 14 2013, 17:59) г... Jun 19 2013, 12:21  akorud Цитата(serg_k1 @ Jun 19 2013, 14:21) помо... Jun 19 2013, 13:25   serg_k1 Цитата(akorud @ Jun 19 2013, 17:25) Если ... Jun 19 2013, 14:05    akorud Цитата(serg_k1 @ Jun 19 2013, 16:05) т.е.... Jun 19 2013, 14:27     serg_k1 Цитата(akorud @ Jun 19 2013, 18:27) BE - ... Jun 20 2013, 13:53      akorud Не соглашусь, ну на то тут и форум чтобы можно был... Jun 20 2013, 15:51       TimeToSleep Цитата(akorud @ Jun 20 2013, 16:51) Зачем... Feb 12 2016, 07:16        akorud Цитата(TimeToSleep @ Feb 12 2016, 08:16) ... Feb 13 2016, 15:45         TimeToSleep Цитата(akorud @ Feb 13 2016, 16:45) Если ... Feb 17 2016, 14:34         TimeToSleep Цитата(akorud @ Jun 19 2013, 15:27) BE - ... Feb 18 2016, 07:40          akorud Цитата(TimeToSleep @ Feb 18 2016, 08:40) ... Feb 22 2016, 10:43           TimeToSleep Цитата(akorud @ Feb 22 2016, 11:43) 1. По... Feb 25 2016, 07:00            akorud Цитата(TimeToSleep @ Feb 25 2016, 08:00) ... Feb 25 2016, 09:48             TimeToSleep Цитата(akorud @ Feb 25 2016, 10:48) Если ... Feb 25 2016, 12:40              akorud Да, оно. Feb 25 2016, 18:58             TimeToSleep Цитата(akorud @ Feb 25 2016, 12:48) Далее... Feb 26 2016, 07:11              akorud Цитата(TimeToSleep @ Feb 26 2016, 08:11) ... Feb 26 2016, 10:17               TimeToSleep Цитата(akorud @ Feb 26 2016, 13:17) Что-т... Mar 9 2016, 06:04               TimeToSleep Цитата(akorud @ Feb 26 2016, 13:17) Что-т... Mar 11 2016, 06:13      akorud Цитата(serg_k1 @ Jun 20 2013, 15:53) спас... Jun 21 2013, 06:58 Golikov A. да ничего там не условно.
В модуль входит шина АК... Jun 17 2013, 19:47 Golikov A. чет я не понимаю.
вроде бы 2 задачи
1.
У вас модул... Jun 20 2013, 05:01 akorud Цитата(Golikov A. @ Jun 20 2013, 07:01) .... Jun 20 2013, 08:18 Golikov A. каким мастером? как можно управлять мастером?
я т... Jun 20 2013, 10:13 Golikov A. вообщем это делается так.
Есть микроблайз с ДДР, ... Jun 20 2013, 15:02      serg_k1 Цитата(serg_k1 @ Jun 25 2013, 15:14) или ... Jun 25 2013, 12:29   TimeToSleep Цитата(akorud @ Jun 24 2013, 11:03) Я бы ... Feb 19 2016, 12:55 TimeToSleep Здравствуйте, akorud .
Тема достаточно забытая, н... Feb 11 2016, 14:20 TimeToSleep Подскажите, пожалуйста, сталкивался ли кто-то с те... Mar 18 2016, 06:03
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|