以下代码用于bcd添加两个数字。每当我输入一些值时,最重要的4位输出都是不正确的(X)。我不知道我错在哪里。
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;
请帮忙!
答案 0 :(得分:0)
缺少Minimal, Complete and Verifiable example您的代码需要合适的样式(空白)应用以提高可读性。
你是用菊花链接两个加法器(一个是c_out到另一个的c_in)。
c_out_final有多达三个驱动程序,z0,z1和testbench实际的两个c_out - 端口c_out_final
模式是inout。
c_out_final的值是所有在c_out_final
处有两个或更多驱动程序的驱动程序的解析值,可能会产生'X'。
'x'将通过z1中的加法“毒化”你的sum_final2。
向final_adder添加信号。请勿对inout
使用模式c_out_final
使用模式out
。
如果没有包含测试平台的最小,完整和可验证的示例,您的读者无法保证不再存在问题。
这个答案确实解决了
每当我输入一些值时,最重要的4位输出都是不正确的(X)`...
假设您在z1
端口sum
或final_adder
端口上表示“XXXX”
sum_final2
,或意味着c_out_final
上的值。