Перейти к содержанию

    

Xilinx ISE14.7 ошибка при подключении dp_bRAM к AXI_user_IP

Платформа: Xilinx ISE 14.7; FPGA Spartan-6; Microblaze system

 

Есть проект где на AXI-lite создан user IP. Для работы с памятью из него наружу торчит BRAM Interface. К этому интерфейсу подключена одним портом bram_block_1.00.a. Другим же портом она подключена с lbm_bram_if_cntrl_3.10.c. Netlist в EDK собирается без проблем, а вот при мепинге в ISE выдается сообщение вида:

"PhysDesignRules:1678 - Issue with pin connections and/or configuration on

block:<mb_system_top_i/mb_system_i/bram_block_for_nand/bram_block_for_nand/ra

mb16bwer_0>:<RAMB16BWER_RAMB16BWER>. When using the DATA_WIDTH_A attribute

the port A control pins for the RAMB16BWER must be used."

 

Память используется через интерфейс:

  port(
    io_mem_BRAM_PORT_BRAM_EN : out std_logic;
    io_mem_BRAM_PORT_BRAM_WEN : out std_logic_vector(3 downto 0);
    io_mem_BRAM_PORT_BRAM_Addr : out std_logic_vector(31 downto 0);
    io_mem_BRAM_PORT_BRAM_Din : in std_logic_vector(31 downto 0);
    io_mem_BRAM_PORT_BRAM_Dout : out std_logic_vector(31 downto 0);
    ...
    );

 

Этот интерфейс уже в моем компоненте наружу торчит через:

    BRAM_Rst_A        : out std_logic;
    BRAM_Clk_A        : out std_logic;
    BRAM_En_A        : out std_logic;
    BRAM_WE_A        : out std_logic_vector(0 to C_BRAM_DWIDTH/8 + C_ECC*(1+(C_BRAM_DWIDTH/128))-1);
    BRAM_Addr_A        : out std_logic_vector(0 to C_BRAM_AWIDTH - 1);
    BRAM_WrData_A    : out std_logic_vector(0 to C_BRAM_DWIDTH + C_ECC*8*(1+(C_BRAM_DWIDTH/128))-1);
    BRAM_RdData_A    : in std_logic_vector(0 to C_BRAM_DWIDTH + C_ECC*8*(1+(C_BRAM_DWIDTH/128))-1);

 

Файл mpd выглядит следующим образом:

 

## Peripheral Options
OPTION IPTYPE = PERIPHERAL
OPTION IMP_NETLIST = TRUE
OPTION HDL = MIXED
OPTION IP_GROUP = MICROBLAZE:USER
OPTION DWIDTH = 32
OPTION AWIDTH = 32
### added to support ngc file
OPTION RUN_NGCBUILD = TRUE
OPTION STYLE = MIX

IO_INTERFACE IO_IF = NAND_if

## Bus Interfaces
BUS_INTERFACE BUS = S_AXI, BUS_STD = AXI, BUS_TYPE = SLAVE
BUS_INTERFACE BUS = BRAM_PORTA, BUS_STD = XIL_BRAM, BUS_TYPE = INITIATOR, SHARES_ADDR=DLMB

## Generics for VHDL or Parameters for Verilog
PARAMETER C_S_AXI_PROTOCOL = AXI4LITE, DT = STRING, BUS = S_AXI, VALUES = (AXI4LITE = AXI4LITE), ASSIGNMENT = CONSTANT, TYPE = NON_HDL, ISVALID = (C_ECC == 1)
PARAMETER C_S_AXI_ADDR_WIDTH = 32, DT = INTEGER, RANGE = (32), BUS = S_AXI, ASSIGNMENT = CONSTANT, ISVALID = (C_ECC == 1)
PARAMETER C_S_AXI_DATA_WIDTH = 32, DT = INTEGER, RANGE = (32), BUS = S_AXI, ASSIGNMENT = CONSTANT, ISVALID = (C_ECC == 1)
PARAMETER C_S_AXI_MIN_SIZE = 0x0000000f, DT = std_logic_vector, BUS = S_AXI
PARAMETER C_DPHASE_TIMEOUT = 4, DT = INTEGER
PARAMETER C_BASEADDR = 0xffffffff, DT = std_logic_vector, PAIR = C_HIGHADDR, ADDRESS = BASE, BUS = S_AXI
PARAMETER C_HIGHADDR = 0x00000000, DT = std_logic_vector, PAIR = C_BASEADDR, ADDRESS = HIGH, BUS = S_AXI
PARAMETER C_NUM_REG = 2, DT = INTEGER, RANGE = (2), ASSIGNMENT = CONSTANT
PARAMETER C_BRAM_AWIDTH = 32, DT = integer, BUS = BRAM_PORTA, RANGE = (32), ASSIGNMENT = CONSTANT
PARAMETER C_BRAM_DWIDTH = 32, DT = integer, BUS = BRAM_PORTA, RANGE = (32), ASSIGNMENT = CONSTANT
PARAMETER C_ECC = 0, DT = integer, RANGE = (0:1)

## Ports

PORT reset = "", DIR = I, SIGIS = RST
PORT clk_40MHz = "", DIR = I, SIGIS = CLK
PORT clk_40MHz_180 = "", DIR = I, SIGIS = CLK

PORT BRAM_Rst_A = BRAM_Rst, DIR = O, BUS = BRAM_PORTA
PORT BRAM_Clk_A = BRAM_Clk, DIR = O, BUS = BRAM_PORTA
PORT BRAM_En_A = BRAM_En, DIR = O, BUS = BRAM_PORTA
PORT BRAM_WE_A = BRAM_WEN, DIR = O, BUS = BRAM_PORTA, VEC = [0 : (C_BRAM_DWIDTH/8 + C_ECC*(1+(C_BRAM_DWIDTH/128)) - 1)], ENDIAN = LITTLE
PORT BRAM_Addr_A = BRAM_Addr, DIR = O, BUS = BRAM_PORTA, VEC = [0 : (C_BRAM_AWIDTH - 1)], ENDIAN = LITTLE
PORT BRAM_WrData_A = BRAM_Dout, DIR = O, BUS = BRAM_PORTA, VEC = [0 : (C_BRAM_DWIDTH + C_ECC*8*(1+(C_BRAM_DWIDTH/128)) - 1)], ENDIAN = LITTLE
PORT BRAM_RdData_A = BRAM_Din, DIR = I, BUS = BRAM_PORTA, VEC = [0 : (C_BRAM_DWIDTH + C_ECC*8*(1+(C_BRAM_DWIDTH/128)) - 1)], ENDIAN = LITTLE

 

При этом, если порт памяти вытащить наружу, на уровень выше, и уже там руками подключить память, то такого сообщения уже нет, все собирается. Но такое решение не удобное, в моем случае, подключил компонент в любой проект и пользуешься, а тут нужно еще и в vhdl верхнего уровня копипастить "нечто" из другого проекта.

Изменено пользователем Vadim_nsk

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я оставил минимум в проекте, чтобы его можно было бы собрать и увидеть ошибку. Может кто-то выскажет предположение как ее исправить?

https://drive.google.com/open?id=1kjMJy_m8k...xislf04o-38OvXM

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация