Vadim_nsk 0 28 февраля, 2018 Опубликовано 28 февраля, 2018 (изменено) · Жалоба Платформа: 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 верхнего уровня копипастить "нечто" из другого проекта. Изменено 1 марта, 2018 пользователем Vadim_nsk Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vadim_nsk 0 1 марта, 2018 Опубликовано 1 марта, 2018 · Жалоба Я оставил минимум в проекте, чтобы его можно было бы собрать и увидеть ошибку. Может кто-то выскажет предположение как ее исправить? https://drive.google.com/open?id=1kjMJy_m8k...xislf04o-38OvXM Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться