Платформа: 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 - Mar 1 2018, 05:55