AR# 13421

|

3.x FPGA Express - 「ERROR:OldMap:448 - The CY4 symbol "symbol_name" (output signal=net_name) is missing its required carry-mode designation...」というエラー メッセージが表示される

説明

キーワード : CY4, FPGA, Express, carry, logic, mode, Spartan, XC4000, 4000, 4K, increment, decrement, キャリー, ロジック, モード, インクリメント, デクリメント,

重要度 : 標準

概要 :
次のように、インクリメンタ、デクリメンタの一方または両方をデザインに使用します。

一般的なインクリメンタ :

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_arith.all;
USE ieee.std_logic_unsigned.all;

entity inc_16 is port (
a: in std_logic_vector (15 downto 0);
s: out std_logic_vector (15 downto 0));
end inc_16;
architecture made of inc_16 is
begin
s <= a + 1;
end made;

一般的なデクリメンタ :

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_arith.all;
USE ieee.std_logic_unsigned.all;

entity dec_16 is port (
a: in std_logic_vector (15 downto 0);
s: out std_logic_vector (15 downto 0));
end dec_16;
architecture made of dec_16 is
signal cout : std_logic_vector (1 downto 0);
signal stemp : std_logic_vector (14 downto 0);
begin

s <= a - 1;
end made;


FPGA Express では正確にこのキャリー ロジックが接続されず、次のようなエラー メッセージが表示されます。

"ERROR:OldMap:448 - The CY4 symbol "symbol_name" (output signal=net_name) is missing its required carry-mode designation. Please check the original schematic, vendor macro, or synthesis library to make sure a carry-mode designator symbol (CY4_xx) is attached to this CY4."

ソリューション

この問題を回避するには、インクリメンタとデクリメンタに修正を入れる必要があります。 以下のような解決策はファンクションとしてインプリメントされます。 次のように VHDL 内でファンクションを宣言してください。

-- stepsize_inc is the increment value
-- operand_inc holds the count value

function incrementor
(operand_inc : in std_logic_vector; stepsize_inc : in integer)
return std_logic_vector is

variable temp_inc : std_logic_vector(operand_inc'high-1 downto 0);
variable cout_inc : std_logic_vector (1 downto 0);
variable result_inc : std_logic_vector(operand_inc'range);

begin

temp_inc := '0' & operand_inc(operand_inc'high-2 downto 0) + stepsize_inc;
cout_inc := (std_logic_vector'('0', temp_inc(operand_inc'high-1))) + operand_inc(operand_inc'high downto operand_inc'high-1);
result_inc := cout_inc & temp_inc(operand_inc'high-2 downto 0);
return result_inc;
end function;

-- stepsize is the increment value
-- operand holds the count value

function decrementor
(operand : in std_logic_vector; stepsize : in integer)
return std_logic_vector is

variable temp : std_logic_vector(operand'high-1 downto 0);
variable cout : std_logic_vector (1 downto 0);
variable result : std_logic_vector(operand'range);

begin

temp := '0' & operand(operand'high-2 downto 0) - stepsize;
cout := operand(operand'high downto operand'high-1) - (std_logic_vector'('0', temp(operand'high-1)));
result := cout & temp(operand'high-2 downto 0);
return result;
end function;
AR# 13421
日付 08/11/2003
ステータス アーカイブ
種類 一般
People Also Viewed