次のコードは、2つの数値をbcdで加算するためのコードです。いくつかの値を入力するたびに、最も重要な4ビットの出力が不正確(X)になります。私はこれでどこが間違っているのか分かりません。このvhdlコードでbcdを追加すると何が問題になりますか?
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity bcd_adder1 is
port(a,b : in unsigned(3 downto 0);
c_in : in std_logic;
sum : out unsigned(3 downto 0);
c_out : out std_logic);
end bcd_adder1;
architecture func of bcd_adder1 is
begin
process(a,b)
variable sum_temp : unsigned(4 downto 0);
begin
sum_temp := ('0' & a) + ('0' & b) + ("0000" & c_in);
if(sum_temp > 9) then
c_out <= '1';
sum <= resize((sum_temp + "00110"),4);
else
c_out <= '0';
sum <= sum_temp(3 downto 0);
end if;
end process;
end architecture;
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity final_adder is
port(a_final1,a_final2,b_final1,b_final2 : in unsigned(3 downto 0);
c_in_final : in std_logic;
sum_final1,sum_final2 : out unsigned(3 downto 0);
c_out_final : inout std_logic);
end final_adder;
architecture final of final_adder is
component bcd_adder1
port(a,b : in unsigned(3 downto 0);
c_in : in std_logic;
sum : out unsigned(3 downto 0);
c_out : out std_logic);
end component;
begin
z0:bcd_adder1 port map(a_final1,b_final1,c_in_final,sum_final1,c_out_final);
z1:bcd_adder1 port map(a_final2,b_final2,c_out_final,sum_final2,c_out_final);
end final;
助けてください!
あなたはこの中で間違っているところ、見つけるテストベンチを書いて、それをシミュレートします。 –
'std_ulogic_vector'と' u_unsigned'(別名 'unresolved_unsigned')型を使用すると、これらの解決された型の代わりに、このシミュレーションの振る舞いはありません。複数のドライバのため、コンパイル時にすでにエラーが発生します。 – JHBonarius