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

 
 
> Генерация IP_Core с прерываниями из Матлаб для Xilinx
Galeaf
сообщение Sep 19 2016, 11:39
Сообщение #1





Группа: Новичок
Сообщений: 2
Регистрация: 18-03-16
Из: Воронеж
Пользователь №: 90 912



Здравствуйте

В Матлабе создана модель обработки данных с АЦП. Стоит задача создать по ней IP_Core для MicroBlaze (no-os). Проект реализуется на Virtex 6 от Xilinx.

Так как IP_Core тактируется от внешних клоков и содержит CIC дециматор и демодулятор, в результате чего, данные с ядра выходят на низкой скорости.
Хотел забирать данные с него (используя AXI4-lite) по прерываниям, но не нашел способа в матлабе создать ядро с данным выходом.

Кто сталкивался с подобной проблемой, прошу помочь.

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
alexadmin
сообщение Sep 19 2016, 13:12
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 572
Регистрация: 17-11-05
Из: СПб, Россия
Пользователь №: 10 965



Цитата(Galeaf @ Sep 19 2016, 14:39) *
Так как IP_Core тактируется от внешних клоков и содержит CIC дециматор и демодулятор, в результате чего, данные с ядра выходят на низкой скорости. Хотел забирать данные с него (используя AXI4-lite) по прерываниям, но не нашел способа в матлабе создать ядро с данным выходом.


Вряд ли прямо так в матлабе выйдет. Из системы выходит поток данных, который по своей сути эквивалентен Axi-Stream. И дальше в EDK можно поставить мост (вроде были стандартные или самописный сделать с теми самыми прерываниями).
Go to the top of the page
 
+Quote Post
count_enable
сообщение Sep 19 2016, 20:46
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 310
Регистрация: 28-01-13
Из: Лондон
Пользователь №: 75 384



AXI-Stream с FIFO должны помочь. Интерфейс для работы с очередью думаю Матлаб осилит, остальное - стандартные компоненты. Тогда используя Scatter-Gather DMA Engine можно писать данные прямо в память, этот же движок будет генерировать прерывания. Будет и скорость приличная, и программисту проще. Если нет возможности возиться с памятью, можно AXI-Stream добавить прямо в процессор.
Go to the top of the page
 
+Quote Post
Maverick
сообщение Sep 20 2016, 15:39
Сообщение #4


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

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



Цитата(Galeaf @ Sep 19 2016, 14:39) *
Здравствуйте

В Матлабе создана модель обработки данных с АЦП. Стоит задача создать по ней IP_Core для MicroBlaze (no-os). Проект реализуется на Virtex 6 от Xilinx.

Так как IP_Core тактируется от внешних клоков и содержит CIC дециматор и демодулятор, в результате чего, данные с ядра выходят на низкой скорости.
Хотел забирать данные с него (используя AXI4-lite) по прерываниям, но не нашел способа в матлабе создать ядро с данным выходом.

Кто сталкивался с подобной проблемой, прошу помочь.

FIFO на SRL32
CODE
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity tiny_fifo is
generic (
GC_WIDTH : integer := 8; -- FIFO data width
GC_DEPTH : integer := 32); -- FIFO data depth, <= 32
port (
clk : in std_logic;

-- FIFO data input
fifo_in_data : in std_logic_vector(GC_WIDTH-1 downto 0);
fifo_in_valid : in std_logic;
fifo_in_ready : out std_logic := '0';

-- FIFO data output
fifo_out_data : out std_logic_vector(GC_WIDTH-1 downto 0) := (others => '0');
fifo_out_valid : out std_logic := '0';
fifo_out_ready : in std_logic;

-- status signals
fifo_index : out signed(5 downto 0));
end entity;

architecture arch of tiny_fifo is
type ram_type is array (GC_DEPTH-1 downto 0) of std_logic_vector (GC_WIDTH-1 downto 0);
signal fifo : ram_type := (others => (others => '0'));
signal fifo_index_i : signed (5 downto 0) := to_signed(-1, 6);
signal fifo_empty : boolean;
signal fifo_full : boolean;
signal fifo_in_enable : boolean;
signal fifo_out_enable : boolean;

begin
fifo_full <= (fifo_index_i = GC_DEPTH-1);
fifo_empty <= (fifo_index_i = -1);

fifo_in_ready <= '1' when (not fifo_full) else '0';
fifo_out_valid <= '1' when (not fifo_empty) else '0';

fifo_in_enable <= (fifo_in_valid = '1') and (not fifo_full );
fifo_out_enable <= (fifo_out_ready = '1') and (not fifo_empty);

fifo_out_data <= fifo(to_integer(unsigned(fifo_index_i(4 downto 0))));
fifo_index <= fifo_index_i;

process (clk)
begin
if rising_edge(clk) then
if fifo_in_enable then
fifo(GC_DEPTH-1 downto 1) <= fifo(GC_DEPTH-2 downto 0);
fifo(0) <= fifo_in_data;
if not fifo_out_enable then fifo_index_i <= fifo_index_i + 1; end if;
elsif fifo_out_enable then fifo_index_i <= fifo_index_i - 1;
end if;
end if;
end process;

end architecture;


SRL32 FIFO to AXI4-Stream
CODE
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity axis_tiny_fifo is
generic (
GC_WIDTH : integer := 8;
GC_DEPTH : integer := 32);
port (
aclk : in std_logic;

-- axi4 stream slave (data input)
s_axis_tdata : in std_logic_vector(GC_WIDTH-1 downto 0);
s_axis_tvalid : in std_logic;
s_axis_tready : out std_logic;

-- axi4 stream master (data output)
m_axis_tdata : out std_logic_vector(GC_WIDTH-1 downto 0);
m_axis_tvalid : out std_logic;
m_axis_tready : in std_logic;

-- status signals
index : out signed(5 downto 0));
end entity;

architecture arch of axis_tiny_fifo is
begin

tiny_fifo_i : entity work.tiny_fifo
generic map (
GC_WIDTH => GC_WIDTH,
GC_DEPTH => GC_DEPTH)
port map (
clk => aclk,
fifo_in_data => s_axis_tdata,
fifo_in_valid => s_axis_tvalid,
fifo_in_ready => s_axis_tready,
fifo_out_data => m_axis_tdata,
fifo_out_valid => m_axis_tvalid,
fifo_out_ready => m_axis_tready,
fifo_index => index);

end architecture;


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

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





Группа: Новичок
Сообщений: 2
Регистрация: 18-03-16
Из: Воронеж
Пользователь №: 90 912



Спасибо за ответы, буду пробовать
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 31st July 2025 - 23:20
Рейтинг@Mail.ru


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