1

我在使用 2-Bitgreater than Comparator和 2-bit创建 4-Bit Comparator 时遇到了麻烦equality Comparator

大于比较器

entity bit2com is                
    Port ( a,b: in  STD_LOGIC_vector(1 downto 0);
           y : out  STD_LOGIC);
end bit2com;

architecture Behavioral of bit2com is

signal p0,p1,p2:std_logic;

begin

p0  <= a(1) and not b(1);
p1  <= a(0) and a(1) and not b(0);
p2<=a(0) and not b(0) and not b(1);
y <= p0 or p1 or p2;

end Behavioral;

相等比较器

entity comaeqb is

    Port ( a,b: in  STD_LOGIC_vector(1 downto 0);
           y : out  STD_LOGIC);
end comaeqb;

architecture Behavioral of comaeqb is

signal p0,p1,p2,p3:std_logic;
begin

p0  <= a(0) and a(1) and b(0) and b(1);
p1  <= a(0) and not a(1) and b(0) and not b(1);

p2<=not a(0) and not a(1) and not b(0) and not b(1);
p3<=not a(0) and a(1) and not b(0) and b(1);
y <= p0 or p1 or p2 or p3;

我如何使用它来比比较器大 4 位?

4

1 回答 1

0

如我所见,您尝试从 2 位比较器(>=)创建 4 位比较器。但我认为您的问题有两个答案:

  1. 如果您只想创建没有任何比较器的 4 位比较器(独立),请声明A and Bsignedunsigned进行比较(如果您使用,则可以转换为该类型std_logic_vector)。有两个库可供使用:arithnumeric_std(只使用其中一个,两者都被违反)。
  2. 如果您必须使用 2 位比较器。使用这种方式:

提议A = [A3 A2 A1 A0]B = [B3 B2 B1 B0]。运行两步:

第 1 步将两个 MSB 与您的比较器进行比较:

if [A3 A2] > [B3 B2] then
  A_greater_than_B <= '1';
elsif [A3 A2] < [B3 B2] then
  A_greater_than_B <= '0';
else -- [A3 A2] = [B3 B2]
-- next step >>>
end if;

步骤 2使用与步骤 1类似的方法将两个 LSB 与您的比较器进行比较。这个分支发生在[A3 A2] =[ B3 B2]. 步骤 2的结果是 4 位比较器的结果。例如,如果[A1 A0] = [B1 B0]那么A = B.

于 2013-04-15T07:30:39.883 回答