比较两个没有布尔逻辑的bit_vector

时间:2018-09-10 16:00:06

标签: vhdl

假设我要在VHDL中编写一个2位比较器。

有一个向量a和一个向量b。

比较像这样的向量

(a=b)

采用这种方法:

library ieee;

entity comp is port(
a,b: in bit_vector(1 downto 0);
a_eq_b; out bit);

architecture behav of comp is
   begin
   a_eq_b <= '1' when (a=b) 
           else '0';
end of behav;

工作吗?还是我必须通过真值表获取最小项并使用布尔逻辑来完成?

欢呼

EDIT1:

library ieee;

entity comp is port(
a,b: in bit_vector(1 downto 0);
a_eq_b: out bit);
end comp;

architecture behav of comp is
  begin
  a_eq_b <= a=b;
end behav;

2 个答案:

答案 0 :(得分:1)

编辑1 :是的,您可以直接比较相同类型的两个数组类型。

按照测试台及其结果进行VHDL描述。

波形

Waveform for <code>comp</code> entity

tb.v

 library IEEE;

 entity tb is
 end tb;

 architecture behav of tb is
   signal a : bit_vector(1 downto 0) := "00";
   signal b : bit_vector(1 downto 0) := "00";
   signal a_eq_b : bit;
 begin
   dut: entity work.comp port map (a=>a, b=>b, a_eq_b=>a_eq_b );
   stimulus: process
   begin
     wait for 10 ns;
     a <= "01";
     wait for 10 ns;
     b <= "01";
     wait for 10 ns;
     a <= "10";
     wait for 10 ns;
     b <= "11";
     wait for 10 ns;
     b <= "10";
     wait;
   end process stimulus;

 end behav;

编辑2 : 您可以使用=运算符来控制输出分配:a_eq_b1 <= '1' when (a = b) else '0';,但是不能直接将等于布尔值的相等运算符=的结果分配给{{1} }。

如果您要查找特定内容,请告诉我,因为您的问题仅要求“它是否有效”。

答案 1 :(得分:0)

如果使用vhdl 2008,则可以使用匹配的关系运算符,因为它们返回源类型(位或std_ulogic),而不是布尔值。

a_eq_b <= (a ?= b);

它等效于

a_eq_b <= a <= '1' when a = b else '0';