2017-10-13 4 views
3

Ich möchte eine IP schreiben, um Daten zu speichern/lesen mit BRAM.kombinieren Ports zu Bram-Schnittstelle

Was ich bis jetzt habe, ist die Verwendung der (C) DMA, um gespeicherte Daten aus dem RAM zu lesen und eine AXIS zu bekommen.

Dann habe ich eine neue Quelldatei in VHDL erstellt, um die AXIS auf einer Seite zu akzeptieren, die wie ein Zauber wirkte. Auf der anderen Seite möchte ich eine BRAM-Schnittstelle erstellen, aber vivado kombiniert keine Ports für die BRAM-Schnittstelle.

Im Ordner "vivado/data/ip/interfaces/bram_v1_0" befindet sich eine Datei "bram_rtl.xml". Ich habe versucht, die in der XML-Datei verwendeten Ports zu verwenden. Vor allem die Ports mit dem "erforderlichen" Tag.

Der AXI BRAM Controller kombiniert sie richtig, also bin ich ziemlich sicher, dass ich einen Fehler gemacht habe. Die gleiche Benennung wie der AXI BRAM Controller funktioniert auch nicht.

Meine VHDL sieht wie folgt aus:

library IEEE; 
use IEEE.STD_LOGIC_1164.ALL; 

entity AXIS_TO_BRAM is 
    generic (
     addr_size : integer range 1 to 12 := 10 
    ); 
    Port (
     --axistream 
     tdata : in std_logic_vector(31 downto 0); 
     tkeep : in std_logic_vector(3 downto 0); 
     tlast : in std_logic; 
     tready : out std_logic; 
     tvalid : in std_logic; 
     aclk : in std_logic;  

     --BRAM 
     en : out std_logic; 
     dout : in std_logic_vector(31 downto 0); 
     din : out std_logic_vector(31 downto 0); 
     we : out std_logic; 
     addr : out std_logic_vector(addr_size-1 downto 0); 
     clk : out std_logic; 
     rst : out std_logic); 
end AXIS_TO_BRAM; 

architecture Behavioral of AXIS_TO_BRAM is 

begin  
end Behavioral; 

I vivado 2016,4 für Zynq 7020 auf Linux verwende.

Gibt es etwas in der VHDL-Code fehlt vivado erkennen meine Ports als BRAM-Schnittstelle oder ist das ein Fehler in dieser Version?

Vielen Dank für alle Ideen

+0

würden Sie \ Vivado aussehen \ 2016,4 \ data \ ip \ Xilinx \ axi_bram_ctrl_v4_0 \ component.xml? Dort können Sie sehen, wie die Ports verbunden sind. – JHBonarius

+1

Ich habe das versucht, aber leider sind die Namen die gleichen, die ich bereits versucht habe. Vielleicht ist dies nur möglich, wenn ich den vhdl-Code in einer IP verpacken und eine component.xml dafür erstellen würde. –

+2

Sie müssen Attribute hinzufügen, etwa wie ATTRIBUTE X_INTERFACE_INFO OF dout: SIGNAL IST xilinx.com:interface:bram:1.0 BRAM_PORTA DOUT ";" in Ihrer Architektur. Dann wird es als Xilinx BRAM-Port abgeleitet. Oder erstellen Sie eine IP-Adresse und ordnen Sie Ihre BRAM-Ports der vorhandenen Xilinx-Schnittstelle zu –

Antwort

4

Dies ist die komplette Arbeits- und synthetisierbaren VHDL-Code.

Die richtige Lösung (oder zumindest der wichtige Teil) wird in den Kommentaren von Vinay Madapura gegeben.

Die vordefinierten Schnittstellen finden Sie im Ordner $ vivado/$ version/data/ip/interfaces.

Ich hoffe, dieser Code wird anderen Menschen helfen, die mit ähnlichen Problemen kämpfen.

library IEEE; 
use IEEE.STD_LOGIC_1164.ALL; 

entity AXIS_TO_BRAM is 
generic(
    addr_size : integer range 1 to 12 := 10 
); 
Port(
    tdata : in std_logic_vector(31 downto 0); 
    tkeep : in std_logic_vector(3 downto 0); 
    tlast : in std_logic; 
    tready : out std_logic; 
    tvalid : in std_logic; 
    aclk : in std_logic; 

    addra : out std_logic_vector(addr_size-1 downto 0); 
    clka : out std_logic; 
    dina : out std_logic_vector(31 downto 0); 
    douta : in std_logic_vector(31 downto 0); 
    ena : out std_logic; 
    rsta : out std_logic; 
    wea : out std_logic_vector(0 downto 0) 
); 
end AXIS_TO_BRAM; 

architecture Behavioral of AXIS_TO_BRAM is 

    ATTRIBUTE X_INTERFACE_INFO : string; 
    ATTRIBUTE X_INTERFACE_INFO OF addra: SIGNAL IS "xilinx.com:interface:bram:1.0 BRAM_PORTA ADDR"; 
    ATTRIBUTE X_INTERFACE_INFO OF clka: SIGNAL IS "xilinx.com:interface:bram:1.0 BRAM_PORTA CLK"; 
    ATTRIBUTE X_INTERFACE_INFO OF dina: SIGNAL IS "xilinx.com:interface:bram:1.0 BRAM_PORTA DIN"; 
    ATTRIBUTE X_INTERFACE_INFO OF douta: SIGNAL IS "xilinx.com:interface:bram:1.0 BRAM_PORTA DOUT"; 
    ATTRIBUTE X_INTERFACE_INFO OF ena: SIGNAL IS "xilinx.com:interface:bram:1.0 BRAM_PORTA EN"; 
    ATTRIBUTE X_INTERFACE_INFO OF rsta: SIGNAL IS "xilinx.com:interface:bram:1.0 BRAM_PORTA RST"; 
    ATTRIBUTE X_INTERFACE_INFO OF wea: SIGNAL IS "xilinx.com:interface:bram:1.0 BRAM_PORTA WE"; 

begin 
end Behavioral;