プロが教える店舗&オフィスのセキュリティ対策術

VHDL記述の回路を設計というかプログラミングをしたのですが、出力が正しくありませんでした。内容は「加算・減算器」です。今回はオーバーフローを(考えてもいいのですが)考えないことにします。

記述内容は以下のようになっています。P_A で加算と減算を切り替えています。問題のボードへの出力ですが、

X_A + X_B = L_A としています。

0000 0000 0000
0001 0000 0001
0010 0000 0010
0011 0000 0011
0100 0000 0100


という風に X_A だけを 0 に統一した場合でも正しく出力されていますが、

0000 0001 0001
0001 0001 0000
0010 0001 0011
0011 0001 0010
0100 0001 0101
0101 0001 0100


このように、ビット同士の和の繰り上がりがきいてない感じなんですね。これって下の記述が間違ってるんでしょうか。それとも、ボード出力時のピンの当て方が間違ってるんでしょうか。詳しい方、アドバイスよろしくお願いします。


library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;

entity EX is
port ( P_A : in std_logic;
X_A : in std_logic_vector(3 downto 0);
X_B : in std_logic_vector(3 downto 0);
L_A : out std_logic_vector(3 downto 0) );
end EX;


architecture STRUCTURE of EX is
begin

process ( X_A, X_B, P_A )
begin
if P_A = '1' then
L_A <= X_A + X_B;
else
L_A <= X_A - X_B;
end if;
end process;

end STRUCTURE;

A 回答 (1件)

IEEE.std_logic_unsignedが読めてない


もしくは
std_logic_vectorの
算術演算子"+"がxorでオーバーロードされてるんじゃないのかな?

この回答への補足

後者は、プログラムの書き方が間違ってるということでしょうか。
であれば、どういう書き方にすればいいとかありますか。

補足日時:2011/06/19 23:57
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!