|
Microblaze и обмен данными |
|
|
|
Mar 12 2013, 05:46
|
Частый гость
 
Группа: Участник
Сообщений: 97
Регистрация: 23-10-12
Пользователь №: 74 054

|
Уважаемые форумчане! Кто может посоветовать каким образом лучше всего передавать данные с IP core в Microblaze и обратно? На IP core формируются 32-битные вектора и их надо передать на Microblaze, где происходит их обработка (арифметика + передача через UART на ПК) после чего полученные 32-битные вектора необходимо передать на IP core, где они передаются на ЦАП.
--------------------
|
|
|
|
|
Mar 12 2013, 05:58
|
Местный
  
Группа: Свой
Сообщений: 377
Регистрация: 23-12-06
Из: Зеленоград
Пользователь №: 23 811

|
Цитата(Alexsandr000 @ Mar 12 2013, 09:46)  Кто может посоветовать каким образом лучше всего передавать данные с IP core в Microblaze и обратно? В Microblaze ничего передать нельзя, можно только в память записать/прочитать, к кторой имеет доступ Mb. Или сделать переферию доступную процу на чтение/запись. EDK Concepts, Tools and Techniques найдите для своей версии софта, далее chapter 7.
|
|
|
|
|
Mar 12 2013, 07:29
|
Знающий
   
Группа: Свой
Сообщений: 802
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650

|
Цитата(Alexsandr000 @ Mar 12 2013, 12:46)  Уважаемые форумчане! Кто может посоветовать каким образом лучше всего передавать данные с IP core в Microblaze и обратно? На IP core формируются 32-битные вектора и их надо передать на Microblaze, где происходит их обработка (арифметика + передача через UART на ПК) после чего полученные 32-битные вектора необходимо передать на IP core, где они передаются на ЦАП.  Существует много различных вариантов.И много различных микроблейзов. Для каждой задачи - свой способ. Определитесь вначале какой у вас микроблейз (standalone или полноценный) и какая требуется скорость передачи данных. Тогда можно будет что-то посоветовать.
|
|
|
|
|
Mar 12 2013, 11:21
|
Частый гость
 
Группа: Участник
Сообщений: 97
Регистрация: 23-10-12
Пользователь №: 74 054

|
Цитата(Bad0512 @ Mar 12 2013, 11:29)  Существует много различных вариантов.И много различных микроблейзов. Для каждой задачи - свой способ. Определитесь вначале какой у вас микроблейз (standalone или полноценный) и какая требуется скорость передачи данных. Тогда можно будет что-то посоветовать. Microblaze я так понимаю полноценный, скорость порядка 70 кГц (передаются 32-битные слова). Пытался через AXI, но пока выходит ерунда какая-то. Возможно кто-то подскажет ссылку на пример Цитата(des00 @ Mar 12 2013, 10:21)  FSL линки чем не подходят ? Пробую, но пока не совсем ясно как с ними работать
--------------------
|
|
|
|
|
Mar 12 2013, 14:16
|
Частый гость
 
Группа: Участник
Сообщений: 97
Регистрация: 23-10-12
Пользователь №: 74 054

|
Цитата(des00 @ Mar 12 2013, 16:22)  там тупо интерфейс типа FIFO + 2 операции чтения/записи с блокировкой конвейера по сигналу готовности FIFO либо без оной Хм ... я не сталкивался еще, мне сложновато понять, вот нашел пример пример но как это реализовать на плате, примеров, что-то не найду, скачал с Xilinx, но они нифига не работают. Цитата(Bad0512 @ Mar 12 2013, 17:52)  Наиболее распространенный случай, скорости низкие - напрашивается банальный AXI slave с генерацией интераптов чтобы зря не мучить микроблейз поллингом. Думаю можно даже тупо майлбоксами от ползти на таких частотах. Надо попробовать, а есть у кого пример такой системы?
--------------------
|
|
|
|
|
Mar 12 2013, 15:20
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 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 линком на светодиоды и тренируйтесь %) даже примеров не надо. ЗЫ. Имена функций драйвера могу написать не правильно, но смысл понятен.
--------------------
|
|
|
|
|
Mar 13 2013, 06:07
|
Частый гость
 
Группа: Участник
Сообщений: 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 к часам
--------------------
|
|
|
|
|
Mar 13 2013, 08:50
|
Частый гость
 
Группа: Участник
Сообщений: 97
Регистрация: 23-10-12
Пользователь №: 74 054

|
Цитата(Maverick @ Mar 13 2013, 12:34)  Может это поможетЯ аналогично подключал - работало... (правда по ссылке шина старая PLB) Спасибо!!! Сейчас попробую!
--------------------
|
|
|
|
|
Mar 13 2013, 13:53
|
Частый гость
 
Группа: Участник
Сообщений: 97
Регистрация: 23-10-12
Пользователь №: 74 054

|
Цитата(Alexsandr000 @ Mar 13 2013, 12:50)  Спасибо!!! Сейчас попробую! Пример хороший, но к сожалению в проекте используется AXI
--------------------
|
|
|
|
|
Mar 18 2013, 08:43
|
Частый гость
 
Группа: Участник
Сообщений: 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 МГц. Кто сталкивался с такой проблемой?
--------------------
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|