【问题标题】:ALU design errorALU 设计错误
【发布时间】:2016-11-09 09:02:07
【问题描述】:

我想在 VHDL 中设计一个 8 位 alu,但我得到了这个错误,我认为这与我的输入被声明为 bit_vectors 的事实有关。这是真的吗?

** Error: C:/Programs/Modeltech_pe_edu_10.4a/examples/alu.vhdl(19): No feasible entries for infix operator "+".
** Error: C:/Programs/Modeltech_pe_edu_10.4a/examples/alu.vhdl(19): Type error resolving infix expression "+" as type std.STANDARD.BIT_VECTOR.
** Error: C:/Programs/Modeltech_pe_edu_10.4a/examples/alu.vhdl(21): No feasible entries for infix operator "-".
** Error: C:/Programs/Modeltech_pe_edu_10.4a/examples/alu.vhdl(21): Type error resolving infix expression "-" as type std.STANDARD.BIT_VECTOR.
** Error: C:/Programs/Modeltech_pe_edu_10.4a/examples/alu.vhdl(23): No feasible entries for infix operator "-".
** Error: C:/Programs/Modeltech_pe_edu_10.4a/examples/alu.vhdl(23): Type error resolving infix expression "-" as type std.STANDARD.BIT_VECTOR.
** Error: C:/Programs/Modeltech_pe_edu_10.4a/examples/alu.vhdl(25): No feasible entries for infix operator "+".
** Error: C:/Programs/Modeltech_pe_edu_10.4a/examples/alu.vhdl(25): Type error resolving infix expression "+" as type std.STANDARD.BIT_VECTOR.
** Error: C:/Programs/Modeltech_pe_edu_10.4a/examples/alu.vhdl(40): VHDL Compiler exiting

这是我的模块:

entity alu is
 port ( bus_a : in bit_vector(7 downto 0);
 bus_b : in bit_vector(7 downto 0);
 state : in bit_vector (2 downto 0);
 out_c : out bit_vector(7 downto 0));
end alu;


architecture behave of alu is

begin

process(bus_a, bus_b, state)

begin
case state is
 when "000" => 
 out_c<= bus_a + bus_b; --addition 
 when "001" => 
 out_c<= bus_a - bus_b; --subtraction 
 when "010" => 
 out_c<= bus_a - 1; --sub 1 
 when "011" => 
 out_c<= bus_a + 1; --add 1 
 when "100" => 
 out_c<= bus_a and bus_b; --AND gate 
 when "101" => 
 out_c<= bus_a or bus_b; --OR gate 
 when "110" => 
 out_c<= not bus_a ; --NOT gate 
 when "111" => 
 out_c<= bus_a xor bus_b; --XOR gate 
 when others =>
 NULL;
end case; 

end process; 

end architecture behave;

您有什么想法吗?也许您对这个问题有任何其他建议?提前致谢!

【问题讨论】:

    标签: vhdl bit modelsim alu


    【解决方案1】:

    bit_vector 只是 bits 的集合,但没有任何内在价值,因此您必须告诉 VHDL 如何将 bit_vector 理解为一个值,然后才能使用像加法这样的算术运算符(+)。

    看一下numeric_bit 包,它具有signedunsigned 类型作为bit 的数组,您可以指定bit_vector 被视为有符号或无符号加法时的值。

    所以库的使用和转换可以如下所示进行无符号加法:

    library ieee;
    use ieee.numeric_bit.all;
    ...
    out_c <= bit_vector(unsigned(bus_a) + unsigned(bus_b));  --addition
    

    但通常使用std_logic_vector 而不是bit_vector,因此您可以考虑查看std_logic_1164numeric_std 包。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-15
      相关资源
      最近更新 更多