реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Microblaze и обмен данными
Alexsandr000
сообщение Mar 12 2013, 05:46
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 97
Регистрация: 23-10-12
Пользователь №: 74 054



Уважаемые форумчане!


Кто может посоветовать каким образом лучше всего передавать данные с IP core в Microblaze и обратно?

На IP core формируются 32-битные вектора и их надо передать на Microblaze, где происходит их обработка (арифметика + передача через UART на ПК) после чего полученные 32-битные вектора необходимо передать на IP core, где они передаются на ЦАП. cool.gif


--------------------
Go to the top of the page
 
+Quote Post
Mad_max
сообщение Mar 12 2013, 05:58
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 377
Регистрация: 23-12-06
Из: Зеленоград
Пользователь №: 23 811



Цитата(Alexsandr000 @ Mar 12 2013, 09:46) *
Кто может посоветовать каким образом лучше всего передавать данные с IP core в Microblaze и обратно?


В Microblaze ничего передать нельзя, можно только в память записать/прочитать, к кторой имеет доступ Mb.
Или сделать переферию доступную процу на чтение/запись.

EDK Concepts, Tools and Techniques найдите для своей версии софта, далее chapter 7.
Go to the top of the page
 
+Quote Post
des00
сообщение Mar 12 2013, 06:21
Сообщение #3


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



FSL линки чем не подходят ?


--------------------
Go to the top of the page
 
+Quote Post
Bad0512
сообщение Mar 12 2013, 07:29
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 802
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650



Цитата(Alexsandr000 @ Mar 12 2013, 12:46) *
Уважаемые форумчане!


Кто может посоветовать каким образом лучше всего передавать данные с IP core в Microblaze и обратно?

На IP core формируются 32-битные вектора и их надо передать на Microblaze, где происходит их обработка (арифметика + передача через UART на ПК) после чего полученные 32-битные вектора необходимо передать на IP core, где они передаются на ЦАП. cool.gif

Существует много различных вариантов.И много различных микроблейзов. Для каждой задачи - свой способ. Определитесь вначале какой у вас микроблейз (standalone или полноценный) и какая требуется скорость передачи данных. Тогда можно будет что-то посоветовать.
Go to the top of the page
 
+Quote Post
Alexsandr000
сообщение Mar 12 2013, 11:21
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 97
Регистрация: 23-10-12
Пользователь №: 74 054



Цитата(Bad0512 @ Mar 12 2013, 11:29) *
Существует много различных вариантов.И много различных микроблейзов. Для каждой задачи - свой способ. Определитесь вначале какой у вас микроблейз (standalone или полноценный) и какая требуется скорость передачи данных. Тогда можно будет что-то посоветовать.


Microblaze я так понимаю полноценный, скорость порядка 70 кГц (передаются 32-битные слова). Пытался через AXI, но пока выходит ерунда какая-то.

Возможно кто-то подскажет ссылку на пример

Цитата(des00 @ Mar 12 2013, 10:21) *
FSL линки чем не подходят ?


Пробую, но пока не совсем ясно как с ними работать


--------------------
Go to the top of the page
 
+Quote Post
des00
сообщение Mar 12 2013, 12:22
Сообщение #6


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Alexsandr000 @ Mar 12 2013, 05:21) *
Пробую, но пока не совсем ясно как с ними работать

там тупо интерфейс типа FIFO + 2 операции чтения/записи с блокировкой конвейера по сигналу готовности FIFO либо без оной


--------------------
Go to the top of the page
 
+Quote Post
Bad0512
сообщение Mar 12 2013, 13:52
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 802
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650



Цитата(Alexsandr000 @ Mar 12 2013, 18:21) *
Microblaze я так понимаю полноценный, скорость порядка 70 кГц (передаются 32-битные слова). Пытался через AXI, но пока выходит ерунда какая-то.

Наиболее распространенный случай, скорости низкие - напрашивается банальный AXI slave с генерацией интераптов чтобы зря не мучить микроблейз поллингом. Думаю можно даже тупо майлбоксами от ползти на таких частотах.
Go to the top of the page
 
+Quote Post
Alexsandr000
сообщение Mar 12 2013, 14:16
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 97
Регистрация: 23-10-12
Пользователь №: 74 054



Цитата(des00 @ Mar 12 2013, 16:22) *
там тупо интерфейс типа FIFO + 2 операции чтения/записи с блокировкой конвейера по сигналу готовности FIFO либо без оной


Хм ... я не сталкивался еще, мне сложновато понять, вот нашел пример пример но как это реализовать на плате, примеров, что-то не найду, скачал с Xilinx, но они нифига не работают.



Цитата(Bad0512 @ Mar 12 2013, 17:52) *
Наиболее распространенный случай, скорости низкие - напрашивается банальный AXI slave с генерацией интераптов чтобы зря не мучить микроблейз поллингом. Думаю можно даже тупо майлбоксами от ползти на таких частотах.


Надо попробовать, а есть у кого пример такой системы?


--------------------
Go to the top of the page
 
+Quote Post
des00
сообщение Mar 12 2013, 15:20
Сообщение #9


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Alexsandr000 @ Mar 12 2013, 08:16) *
Хм ... я не сталкивался еще, мне сложновато понять, вот нашел пример пример но как это реализовать на плате, примеров, что-то не найду, скачал с Xilinx, но они нифига не работают.

если посмотреть описание FSL линка, то там примитивный интерфейс empty/full/read/write. В SDK тоже все просто FSL_blockread/blockwrite(Ncnahhel) или FSL_unblockread/unblockwrite(Nchannel). Соберите систему с микробом и одним выходным FSL линком на светодиоды и тренируйтесь %) даже примеров не надо.

ЗЫ. Имена функций драйвера могу написать не правильно, но смысл понятен.


--------------------
Go to the top of the page
 
+Quote Post
Alexsandr000
сообщение Mar 13 2013, 06:07
Сообщение #10


Частый гость
**

Группа: Участник
Сообщений: 97
Регистрация: 23-10-12
Пользователь №: 74 054



Цитата(des00 @ Mar 12 2013, 19:20) *
если посмотреть описание FSL линка, то там примитивный интерфейс empty/full/read/write. В SDK тоже все просто FSL_blockread/blockwrite(Ncnahhel) или FSL_unblockread/unblockwrite(Nchannel). Соберите систему с микробом и одним выходным FSL линком на светодиоды и тренируйтесь %) даже примеров не надо.

ЗЫ. Имена функций драйвера могу написать не правильно, но смысл понятен.


Спасибо, начал подключать ip к microblaze, все нормально подключается, но, что-то не пойму почему я не могу подключить FSL_M_Clk к часам


--------------------
Go to the top of the page
 
+Quote Post
Alexsandr000
сообщение Mar 13 2013, 08:07
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 97
Регистрация: 23-10-12
Пользователь №: 74 054



Правильно я понял, что на MB добавляется подключение к FSL, потом я добавляю IP CORE FSL BUS, блок с которого будут передаваться данные. MB и мой VHDL блок подключаю к шине FSL?

Что-то я запутался с часами FSL_M_Clk и FSL_S_Clk. На MB и моем блоке они CLK, а на шине обычные сигналы.


--------------------
Go to the top of the page
 
+Quote Post
Maverick
сообщение Mar 13 2013, 08:34
Сообщение #12


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(Alexsandr000 @ Mar 13 2013, 10:07) *

Может это поможет

Я аналогично подключал - работало... (правда по ссылке шина старая PLB)


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
Alexsandr000
сообщение Mar 13 2013, 08:50
Сообщение #13


Частый гость
**

Группа: Участник
Сообщений: 97
Регистрация: 23-10-12
Пользователь №: 74 054



Цитата(Maverick @ Mar 13 2013, 12:34) *
Может это поможет

Я аналогично подключал - работало... (правда по ссылке шина старая PLB)


Спасибо!!! Сейчас попробую!


--------------------
Go to the top of the page
 
+Quote Post
Alexsandr000
сообщение Mar 13 2013, 13:53
Сообщение #14


Частый гость
**

Группа: Участник
Сообщений: 97
Регистрация: 23-10-12
Пользователь №: 74 054



Цитата(Alexsandr000 @ Mar 13 2013, 12:50) *
Спасибо!!! Сейчас попробую!

Пример хороший, но к сожалению в проекте используется AXI


--------------------
Go to the top of the page
 
+Quote Post
Alexsandr000
сообщение Mar 18 2013, 08:43
Сообщение #15


Частый гость
**

Группа: Участник
Сообщений: 97
Регистрация: 23-10-12
Пользователь №: 74 054



Кто может подсказать в чем может быть проблема
есть VHDL блок:
Код
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_signed.all;
Library UNISIM;
use UNISIM.vcomponents.all;
-------------------------------------------------------------------------------------
-- Definition of Ports
-- FSL_Clk         : Synchronous clock
-- FSL_Rst         : System reset, should always come from FSL bus
-- FSL_S_Clk       : Slave asynchronous clock
-- FSL_S_Read      : Read signal, requiring next available input to be read
-- FSL_S_Data      : Input data
-- FSL_S_CONTROL   : Control Bit, indicating the input data are control word
-- FSL_S_Exists    : Data Exist Bit, indicating data exist in the input FSL bus
-- FSL_M_Clk       : Master asynchronous clock
-- FSL_M_Write     : Write signal, enabling writing to output FSL bus
-- FSL_M_Data      : Output data
-- FSL_M_Control   : Control Bit, indicating the output data are contol word
-- FSL_M_Full      : Full Bit, indicating output FSL bus is full
-----------------------------------------------------------------------------
entity fsbox is
    port(
    --- global -----------------------------
        FSL_Clk         : in    std_logic;
        FSL_Rst         : in    std_logic;
        clk           : in    std_logic;
    --- io ---------------------------------
        input_data_r  : in    std_logic_vector(17 downto 0);
        input_data_i  : in    std_logic_vector(17 downto 0);
        output_data   : out    std_logic_vector(17 downto 0);
        tr_enbl       : out    std_logic;
    --- slave ------------------------------
        FSL_S_Clk      : in    std_logic;
        FSL_S_Read      : out    std_logic;
        FSL_S_Data      : in    std_logic_vector(0 to 31);
        FSL_S_Control : in    std_logic;
        FSL_S_Exists  : in    std_logic;
    --- master -----------------------------
        FSL_M_Clk      : in    std_logic;
        FSL_M_Write      : out    std_logic;
        FSL_M_Data      : out    std_logic_vector(0 to 31);
        FSL_M_Control : out    std_logic;
        FSL_M_Full      : in    std_logic
    );
    attribute SIGIS : string;
    attribute SIGIS of FSL_Clk : signal is "Clk";
    attribute SIGIS of FSL_S_Clk : signal is "Clk";
    attribute SIGIS of FSL_M_Clk : signal is "Clk";
    attribute iob: string;
end fsbox;

architecture EXAMPLE of fsbox is
---------------------------------------------------------------------------------
    signal sign18_data_in_r      : std_logic_vector(17 downto 0):=(others=>'0');
    signal sign18_data_in_i      : std_logic_vector(17 downto 0):=(others=>'0');
    signal sign18_data_out_ff_r  : std_logic_vector(17 downto 0):=(others=>'0');
    signal sign18_data_out_ff_i  : std_logic_vector(17 downto 0):=(others=>'0');
    signal sign18_data_out_fsl_r : std_logic_vector(0 to 31):=(others=>'0');
    signal sign18_data_out_fsl_i : std_logic_vector(0 to 31):=(others=>'0');
    signal full                  : std_logic:='0';
    signal empty                 : std_logic:='0';
    signal rd_en                 : std_logic:='0';
    signal i                     : integer:=0;
---------------------------------------------------------------------------------
    COMPONENT ififo  
        PORT (
            wr_clk : IN STD_LOGIC;
            rd_clk : IN STD_LOGIC;
            din    : IN STD_LOGIC_VECTOR(17 DOWNTO 0);
            wr_en  : IN STD_LOGIC;
            rd_en  : IN STD_LOGIC;
            dout   : OUT STD_LOGIC_VECTOR(17 DOWNTO 0);
            full   : OUT STD_LOGIC;
            empty  : OUT STD_LOGIC
        );
    END COMPONENT;
begin
    input_ff_r : ififo PORT MAP(clk,FSL_Clk, input_data_r, '1', rd_en,sign18_data_out_ff_r,full,empty);
    input_ff_i : ififo PORT MAP(clk,FSL_Clk, input_data_i, '1', rd_en,sign18_data_out_ff_i,open, open);
---------------------------------------------------------------------------------------------
    Dout_IOB_Arr: for i in 17 downto 0
    generate
        attribute iob of Dout_IOB_r    : label is "TRUE";
        attribute iob of Dout_IOB_i    : label is "TRUE";
    begin
        Dout_IOB_r:  FD port map(D => input_data_r(i),Q => sign18_data_in_r(i), C => clk );
        Dout_IOB_i:  FD port map(D => input_data_i(i),Q => sign18_data_in_i(i), C => clk );
  end generate;
---------------------------------------------------------------------------------------------
    tr_enbl <= '0';
    sign18_data_out_fsl_i <= FSL_S_Data;
   output_data <= sign18_data_out_fsl_i(0 to 17);
    FSL_S_Read    <= '0';
---------------------------------------------------------------------------------------------
    wrt_data : process (FSL_Clk)
   begin  
        if FSL_Clk'event and FSL_Clk = '1' then
            if FSL_M_Full = '0' and empty = '0' then
                case i is
                    when 0 =>
                        rd_en <= '1';
                        i<=i+1;
                    when 1 =>
                        FSL_M_Write <= '1';
                        FSL_M_Control <= '1';
                        rd_en <= '1';
                        FSL_M_Data <= SXT(sign18_data_in_r, 32);
                        i<=i+1;
                    when 2 =>
                        FSL_M_Write <= '0';
                        FSL_M_Control <= '0';
                        rd_en <= '0';
                        i<=0;
                    when others =>
                end case;
            else
                FSL_M_Write <= '0';
                rd_en <= '0';
            end if;
        end if;
   end process wrt_data;
end architecture EXAMPLE;

пытаюсь считать данные в MB:
Код
    
        int h=0,g=0;
    delay(10);
    while (h<50){
        //getfsl(g,0);
        microblaze_nbread_cntlfsl(g,0);
        //nputfsl(g,0);
        xil_printf("%d;\n",g);
        h++;
    }

На VHDL блок посылается пила, а в MB:
94;
62;
15;
63;
45;
94;
68;
66;
40;
105;
2;
20;
79;
90;

Данные посылаются на VHDL блок с частотой 8МГц, сама шина FSL работает с частотой 50 МГц.

Кто сталкивался с такой проблемой?


--------------------
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 5th July 2025 - 19:37
Рейтинг@Mail.ru


Страница сгенерированна за 0.01517 секунд с 7
ELECTRONIX ©2004-2016