VHDL記述の回路設計「加算減算器」
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;
補足
旧バージョンのMAX+2にはそのようなライブラリがあったそうですが、 QuartusIIからは無くなっているようです。