Цитата(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.
"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"