假设我要在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;
答案 0 :(得分:1)
编辑1 :是的,您可以直接比较相同类型的两个数组类型。
按照测试台及其结果进行VHDL描述。
波形
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';