2017-10-13 6 views
3

BRAM을 사용하여 데이터를 저장/읽기 위해 IP를 쓰고 싶습니다.포트를 bram 인터페이스에 연결하십시오.

내가 지금까지 RAM으로 메모리 매핑 된 데이터를 읽고 AXIS를 얻으려면 (C) DMA를 사용하고있다.

그런 다음 VHDL에 새로운 소스 파일을 만들어서 AXIS를 매력적으로 활용했습니다. 반대쪽에서 BRAM 인터페이스를 만들고 싶지만 vivado는 BRAM 인터페이스 용 포트를 결합하지 않습니다.

"vivado/data/ip/interfaces/bram_v1_0"폴더에 "bram_rtl.xml"파일이 있습니다. xml 파일에 사용 된 포트를 사용하려고했습니다. 특히 "필수"태그가있는 포트.

AXI BRAM 컨트롤러가 올바르게 결합되어 있으므로 실수를 저 지르지 않았을 것입니다. AXI BRAM 컨트롤러와 같은 이름을 사용하면 작동하지 않습니다.

내 VHDL은 다음과 같습니다 : 나는 리눅스에 Zynq 7020에 대한 vivado 2016.4을 사용하고

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; 

.

vivado에서 내 포트를 BRAM 인터페이스로 인식하는 데 VHDL 코드에 누락 된 것이 있습니까? 아니면이 버전의 버그입니까?

다음은 전체 작업 및 합성 VHDL 코드 어떤 아이디어

+0

\ Vivado \ 2016.4 \ data \ ip \ xilinx \ axi_bram_ctrl_v4_0 \ component.xml을 보셨습니까? 포트가 연결되는 방식을 볼 수 있습니다. – JHBonarius

+1

나는 그것을 시험했다. 그러나 불행하게도 이름은 벌써 시험해 보았던 같은 것이다. IP에 vhdl 코드를 패키지로 만들고 component.xml을 만드는 경우에만 가능합니다. –

+2

속성을 추가해야합니다 (예 :'ATTRIBUTE X_INTERFACE_INFO OF dout : SIGNAL IS "xilinx.com:interface:bram:1.0 BRAM_PORTA DOUT";). 자일링스의 BRAM 포트로 추측된다. 또는 IP를 생성하고 기존의 자일링스 인터페이스에 BRAM 포트를 매핑하십시오. –

답변

4

대한 감사드립니다.

올바른 해결책 (또는 중요한 부분)은 Vinay Madapura의 의견에 제공됩니다.

사전 정의 된 인터페이스는 $ vivado/$ version/data/ip/interfaces 폴더에서 찾을 수 있습니다.

이 코드가 다른 사람들이 비슷한 문제로 고민하는 데 도움이되기를 바랍니다.

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;