2013-09-06 6 views
0

Я пытаюсь создать схему потока данных для компаратора в VHDL. Он компилирует и имитирует штраф в Xilinx, но я должен использовать Cadence/NCLaunch. Когда я скопировал один и тот же код в gedit и запустил его, он дал ошибку о запятой.Код VHDL в NCLaunch, дающий ошибки, не указанные в Xilinx

мой код:

library ieee; 
use ieee.std_logic_1164.all; 
----------------------------------------------------- 
entity Comparator is 
port( A: in std_logic_vector (3 downto 0); 
     B: in std_logic_vector (3 downto 0); 
     AeqB: out std_logic; 
    AltB: out std_logic; 
    AgtB: out std_logic); 
end Comparator; 


architecture dataflow of Comparator is 

signal AeB : std_logic; 
signal AlB : std_logic; 
signal AgB : std_logic; 
signal i : std_logic_vector (3 downto 0); 
signal j : std_logic_vector (3 downto 0); 

begin 
    B1: BLOCK BEGIN 
     AeB <= i(3) AND i(2) AND i(1) and i(0); 
     AgB <= j(3) or j(2) or j(1) or j(0); 
     AlB <= AeB nor AgB; 
    END BLOCK B1; 


    B2: BLOCK BEGIN 
      i <= a xnor b; 
    END BLOCK B2; 


    B3: BLOCK BEGIN 
     j(3) <= (not b(3)) and a(3); 
     j(2) <= i(3) and not b(2) and a(2); 
     j(1) <= i(3) and i(2) and not b(1) and a(1); 
     j(0) <= i(3) and i(2) and i(1) and not b(0) and a(0);  
    END BLOCK B3; 


    B4: BLOCK BEGIN 
     AeqB <= AeB; 
     AltB <= AlB; 
     AgTB <= AgB; 
    END BLOCK B4; 


end dataflow; 

... и ошибка, я получаю:

i <= a xnor b; 
     | 
ncvhdl_p: *E,EXPSMI (/ugrad/syedhuq/ECE425/Lab2/Comparator.vhd,29|11): expecting a semicolon (';') [9.5.1]. 

Насколько я могу сказать, у меня есть точка с запятой там ... и если я заменить заявление на четыре отдельных заявления, таких как

i(n) <= a(n) xnor b(n); //[n = 1, 2, 3, 4], 

Я получаю ту же ошибку 4 раза. Может ли кто-нибудь помочь мне с этим?

Кроме того, он отлично компилируется в Synopsys (VCSMX) и так же файл TestBench, но в процессе связывания, он говорит мне:

Design unit 'COMPARATOR(BEHAVE)' from library '.' cannot be opened for 
    reading. 
    Possible causes: 
    [1] Incorrect logical to physical mapping in synopsys_sim.setup file. 
    [2] Intermediate file generation was prematurely terminated during analysis. 
    Reanalyze the design unit and resolve any errors that occur during analysis. 

соответствующая строка из кода TestBench является:

for x1: Comparator use entity work.Comparator(Behave); 

Заранее благодарим за помощь.

ответ

4

Я не знаком с Cadence/NCLaunch, но зная, что ваш код анализируется правильно в соответствующем IEEE 1076-1993 инструменте, и отмечая, где ошибка (вы указали положение символа 11 в строке 29, отметив, что это символ позиция 17), я бы сказал, что это либо не имеет «xnor», не прокомментированный в пакете std_logic_1164 (как спецификация, так и тело), ​​или это совместимый с VHDL87 инструмент, или имеется некоторый недостающий набор инструментов или командная строка аргумент для использования использует соответствующий пакет std_logic_1164.

В распределенном источнике std_logic_1164, доступный от http://standards.ieee.org/downloads/1076/1076.2-1996/

-- -------------------------------------------------------------------- 
-- version | mod. date:| 
-- v4.200 | 01/02/92 | 
-- -------------------------------------------------------------------- 

Вы увидите, что XNOR закомментирован по умолчанию, когда после VHDL92 (-1993, не спрашивайте), был утвержден именно предполагается, что он не комментируется.

-- ----------------------------------------------------------------------- 
-- Note : The declaration and implementation of the "xnor" function is 
-- specifically commented until at which time the VHDL language has been 
-- officially adopted as containing such a function. At such a point, 
-- the following comments may be removed along with this notice without 
-- further "official" ballotting of this std_logic_1164 package. It is 
-- the intent of this effort to provide such a function once it becomes 
-- available in the VHDL standard. 
-- ----------------------------------------------------------------------- 
-- function "xnor" (l, r : std_logic_vector ) return std_logic_vector; 
-- function "xnor" (l, r : std_ulogic_vector) return std_ulogic_vector; 

9.5.1 относится к присвоению условного сигнала в IEEE = 1076-1993.

Анализатор действует как он не признает XNOR как оператор, и если вы посмотрите в -1993 7.2.1 Логические операторы:

логических операторов и, или, Nand, ни, XOR, xnor, а не , определенные для предопределенных типов BIT и BOOLEAN. Они также определены для любого типа одномерного массива, тип элемента которого BIT или BOOLEAN.

Что говорит нам в соответствующем IEEE 1076-1993 инструменте, объявления для xnor будут поступать из пакета std_logic_1164.

У меня был быстрый gander через некоторые NCSIM и т. Д. Онлайн-руководства пользователя и учебные пособия и ничего не видел в связи с проблемой. Вероятно, пакет std_logic_1164 не имел xnor без комментариев в объявлении и теле.

Проблема может быть провидением (возрастом) или конкретной копией инструмента, которую вы используете, и может потребоваться помощь sysadmin для исправления. В то же время вы можете либо написать свою собственную функцию xnor (показано), при запуске любых трудностей попробуйте вместо этого использовать вместо (xor b).

architecture dataflow of Comparator is 


function "xnor" (l : std_logic; r : std_logic) return ux01 is 
begin 
    return not (l xor r); 
end "xnor"; 

signal AeB : std_logic; 
signal AlB : std_logic; 
signal AgB : std_logic; 
signal i : std_logic_vector (3 downto 0); 
signal j : std_logic_vector (3 downto 0); 

begin 

Также см Weird XNOR behaviour in VHDL

+0

И если вы можете это исправить есть три места в обоих std_logic_1164.vhdl И std_logic_1164-body.vhdl, которые должны быть просто не заметил, std_ulogic_vector, std_logic_vector (различных типов) и std_ulogic (std_logic - это подтип std_logic). – user1155120

+0

Да, вы правы. Мой одноклассник позже сказал мне, что xnor не работает. Я просто предположил, что это произошло, так как он стал синим в xilinx и, будучи опытным в компиляторах C++, я думал, что это означает, что он распознал функцию. – DDauS

+0

Вы можете получить свои типы администрирования sys, чтобы исправить это более чем вероятно. – user1155120