rodgi 0 2 июня, 2011 Опубликовано 2 июня, 2011 · Жалоба ISE 13.1, DSP Edition. В проекте есть такой кусок: parameter BLOCK_MAX_SIZE = 2047; parameter PARITY_MAX_SIZE = 1023; //memory reg [1:0] buffer_in[0:BLOCK_MAX_SIZE]; reg [1:0] buf_after_s1[0:BLOCK_MAX_SIZE]; reg [1:0] buf_after_s2[0:BLOCK_MAX_SIZE]; reg parity1[0:PARITY_MAX_SIZE]; reg parity2[0:PARITY_MAX_SIZE]; При симуляции и тестировании все работает замечательно, при имплементации на синтезе выдает такое: Found 2048x2-bit single-port RAM <Mram_buffer_in> for signal <buffer_in>. Found 2048x2-bit dual-port RAM <Mram_buf_after_s1> for signal <buf_after_s1>. Found 2048x2-bit dual-port RAM <Mram_buf_after_s2> for signal <buf_after_s2>. Found 1024x1-bit single-port RAM <Mram_parity1> for signal <parity1>. Found 1024x1-bit dual-port RAM <Mram_parity2> for signal <parity2>. ...... FATAL_ERROR:Xst:xstmacronode.c:118:1.14 - Invalid In Port Name : diB from Mram_parity2, index==-1 Process will terminate. For technical support on this issue, please open a WebCase with this project attached at http://www.xilinx.com/support. Описания ошибки ни на сайте xilinx, ни в инете не нашел %) В чем может быть дело? Process "Synthesize - XST" failed Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Koluchiy 0 2 июня, 2011 Опубликовано 2 июня, 2011 · Жалоба Дело может быть в чём угодно :). По описанию ошибки Вы ничего не сможете понять, поскольку не являетесь разработчиком XST. В общем-то, такого вида ошибки - это стандартная фича Xilinx, возникают обычно тогда, когда разработчик что-то делает не так, причем так "не так", что разработчики в данном случае XST такого варианта не предусмотрели. В Quartus тоже бывают, да... Но реже. У Вас есть 2 варианта: 1) Вручную искать, что Вы сделали не так в настройках или (скорее всего) исходном коде. При этом, например, можно комментарить куски кода и смотреть, ушла ли ошибка. 2) Применить другой синтезатор (как вариант - другую версию ISE, но это менее мощный метод) в надежде, что другой синтезатор от Вашего кода не повиснет, а выдаст ошибку, по которой можно будет чего-нибудь понять. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 2 июня, 2011 Опубликовано 2 июня, 2011 · Жалоба ISE 13.1, DSP Edition. В проекте есть такой кусок: parameter BLOCK_MAX_SIZE = 2047; parameter PARITY_MAX_SIZE = 1023; //memory reg [1:0] buffer_in[0:BLOCK_MAX_SIZE]; reg [1:0] buf_after_s1[0:BLOCK_MAX_SIZE]; reg [1:0] buf_after_s2[0:BLOCK_MAX_SIZE]; reg parity1[0:PARITY_MAX_SIZE]; reg parity2[0:PARITY_MAX_SIZE]; При симуляции и тестировании все работает замечательно, при имплементации на синтезе выдает такое: Found 2048x2-bit single-port RAM <Mram_buffer_in> for signal <buffer_in>. Found 2048x2-bit dual-port RAM <Mram_buf_after_s1> for signal <buf_after_s1>. Found 2048x2-bit dual-port RAM <Mram_buf_after_s2> for signal <buf_after_s2>. Found 1024x1-bit single-port RAM <Mram_parity1> for signal <parity1>. Found 1024x1-bit dual-port RAM <Mram_parity2> for signal <parity2>. ...... FATAL_ERROR:Xst:xstmacronode.c:118:1.14 - Invalid In Port Name : diB from Mram_parity2, index==-1 Process will terminate. For technical support on this issue, please open a WebCase with this project attached at http://www.xilinx.com/support. Описания ошибки ни на сайте xilinx, ни в инете не нашел %) В чем может быть дело? Process "Synthesize - XST" failed возможно Вы случайно где-то присвоили/(не перепутали) вектора по возрастанию с векторами по убыванию типа так: pipa (0 downto 7); или popa (7 to 0); в общем посмотрите вектора - особенно на их длину и как заданы. Еще: Если это память проверьте адресацию (счетчики и их разрядность, задание вектора). Если Вы используете циклы при создании/описании памяти, то проверьте параметры, чтобы в результате WIDTH-1 не был равен -1 или любому другому отрицательному числу library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; use IEEE.math_real.all; entity DualPortMemory is generic ( DEPTH : positive; WIDTH : positive ); port ( -- port a (read/write) clka : in std_logic; ena : in std_logic; wea : in std_logic; addra : in std_logic_vector(integer(ceil( log2(real(DEPTH))))-1 downto 0); dia : in std_logic_vector(WIDTH-1 downto 0); doa : out std_logic_vector(WIDTH-1 downto 0); -- port b (read/write) clkb : in std_logic; enb : in std_logic; web : in std_logic; addrb : in std_logic_vector(integer(ceil( log2(real(DEPTH))))-1 downto 0); dib : in std_logic_vector(WIDTH-1 downto 0); dob : out std_logic_vector(WIDTH-1 downto 0) ); end entity DualPortMemory; architecture rtl of DualPortMemory is type MEM_TYPE is array(0 to DEPTH-1) of std_logic_vector(WIDTH-1 downto 0); signal memory : MEM_TYPE; attribute syn_ramstyle : string; attribute syn_ramstyle of memory : signal is "block_ram"; attribute syn_ramstyle of memory : signal is "no_rw_check"; begin -------------------------------------- -- Port A (read/write) -------------------------------------- p_Port_A: process( clka ) begin if ( rising_edge(clka) ) then if ( ena = '1' ) then if ( wea = '1' ) then memory( conv_integer(unsigned(addra)) ) <= dia; end if; doa <= memory( conv_integer(unsigned(addra)) ); end if; end if; end process p_Port_A; -------------------------------------- -- Port B (read/write) -------------------------------------- p_Port_B: process( clkb ) begin if ( rising_edge(clkb) ) then if ( enb = '1' ) then if ( web = '1' ) then memory( conv_integer(unsigned(addrb)) ) <= dib; end if; dob <= memory( conv_integer(unsigned(addrb)) ); end if; end if; end process p_Port_B; end architecture rtl; Меня на эти мысли наталкнула строка index==-1 в FATAL_ERROR Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ivanpa 0 10 июня, 2011 Опубликовано 10 июня, 2011 · Жалоба reg [1:0] buffer_in[0:BLOCK_MAX_SIZE]; я бы имя поменял.. p.s.может быть я параноик,но это ведь не значит, что за нами не следят?! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
druzhin 4 21 июня, 2011 Опубликовано 21 июня, 2011 · Жалоба reg [1:0] buffer_in[0:BLOCK_MAX_SIZE]; reg [1:0] buf_after_s1[0:BLOCK_MAX_SIZE]; reg [1:0] buf_after_s2[0:BLOCK_MAX_SIZE]; reg parity1[0:PARITY_MAX_SIZE]; reg parity2[0:PARITY_MAX_SIZE]; Нафига обратное индексирование массива, то есть [0:BLOCK_MAX_SIZE], а не [bLOCK_MAX_SIZE:0]? Нафига reg parity1[0:PARITY_MAX_SIZE], а не reg [0:PARITY_MAX_SIZE] parity1, или даже reg [PARITY_MAX_SIZE:0] parity1? Я уверен, что ваш код можно переписать попрямее. Такой ваш код сожрёт разве что Sinplify. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться