реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Xilinx ISE14.7 ошибка при подключении dp_bRAM к AXI_user_IP
Vadim_nsk
сообщение Feb 28 2018, 11:01
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 7-09-05
Из: г. Новосибирск
Пользователь №: 8 335



Платформа: 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
Go to the top of the page
 
+Quote Post
Vadim_nsk
сообщение Mar 1 2018, 04:32
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 7-09-05
Из: г. Новосибирск
Пользователь №: 8 335



Я оставил минимум в проекте, чтобы его можно было бы собрать и увидеть ошибку. Может кто-то выскажет предположение как ее исправить?
https://drive.google.com/open?id=1kjMJy_m8k...xislf04o-38OvXM
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th June 2018 - 23:59
Рейтинг@Mail.ru


Страница сгенерированна за 0.00999 секунд с 7
ELECTRONIX ©2004-2016