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

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

 

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


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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...