2017-10-13 11 views
3

Je veux écrire une adresse IP pour stocker/lire des données en utilisant BRAM. Ce que j'ai jusqu'à présent utilise le DMA (C) pour lire les données mappées en mémoire hors de la RAM et obtenir un AXIS.combiner les ports à l'interface bram

Ensuite, j'ai créé un nouveau fichier source en VHDL pour accepter l'AXIS d'un côté qui a fonctionné comme un charme. De l'autre côté je veux créer une interface BRAM mais vivado ne combine pas les ports pour l'interface BRAM.

Le fichier "bram_rtl.xml" est présent dans le dossier "vivado/data/ip/interfaces/bram_v1_0". J'ai essayé d'utiliser les ports utilisés dans le fichier xml. Surtout les ports avec l'étiquette "required".

Le contrôleur AXI BRAM les combine correctement, donc je suis sûr que j'ai fait une erreur. Utiliser le même nom comme le contrôleur AXI BRAM ne fonctionnait pas non plus.

Mon VHDL ressemble à ceci:

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; 

J'utilise Vivado 2016,4 pour Zynq 7020 sur Linux.

Y at-il quelque chose qui manque dans le code VHDL pour que Vivado reconnaisse mes ports comme une interface BRAM ou est-ce un bug dans cette version?

votre Merci pour toutes les idées

+0

Avez-vous regardé \ Vivado \ 2016.4 \ data \ ip \ Xilinx \ axi_bram_ctrl_v4_0 \ component.xml? Là, vous pouvez voir la façon dont les ports sont connectés. – JHBonarius

+1

J'ai essayé mais malheureusement les noms sont les mêmes que j'ai déjà essayé. Peut-être que ce n'est possible que si je voudrais empaqueter le code vhdl dans un IP et créer un component.xml pour cela. –

+2

Vous devez ajouter des attributs, quelque chose comme 'ATTRIBUT X_INTERFACE_INFO DE dout: SIGNAL EST « xilinx.com:interface:bram:1.0 BRAM_PORTA DOUT »,' dans votre architecture. Ensuite, il sera déduit que le port BRAM de Xilinx. Ou créez une adresse IP et mappez vos ports BRAM à l'interface Xilinx existante –

Répondre

4

est ici le travail complet et le code VHDL synthétisable.

La bonne solution (ou au moins la partie importante) est donnée dans les commentaires de Vinay Madapura.

Les interfaces prédéfinies se trouvent dans le dossier $ vivado/$ version/data/ip/interfaces. J'espère que ce code aidera d'autres personnes aux prises avec des problèmes similaires.

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;