在 VHDL 中添加两个 std_logic_vector 的最佳和最快方法
Best and Fastest Way for adding two std_logic_vector in VHDL
在 VHDL 中,如果我根据以下声明有一个 STD_LOGIC_VECTOR:
signal RAM_ADDR : STD_LOGIC_VECTOR (2 downto 0) := (others => '0');
如果我尝试按照以下方式使用“+”运算符在循环中递增此地址:
for i in 0 to 7 loop
RAM_RW <= '1';
wait until KEY_NUM'event;
RAM_RW <= '0';
RAM_ADDR <= RAM_ADDR + "1";
end loop;
我遇到以下错误:
Error (10327): VHDL error at X.vhd(40): can't determine definition of
operator ""+"" -- found 0 possible definitions
你能建议最好和最快的解决方法吗(也许不使用不同类型的数据,如整数)?
到目前为止,我正在使用以下(错误的)解决方案:
case RAM_ADDR is
when "000" =>
RAM_ADDR <= "001";
when "001" =>
RAM_ADDR <= "010";
when "010" =>
RAM_ADDR <= "011";
when "011" =>
RAM_ADDR <= "100";
when "100" =>
RAM_ADDR <= "101";
when "101" =>
RAM_ADDR <= "110";
when "110" =>
RAM_ADDR <= "111";
when "111" =>
RAM_ADDR <= "000";
when others =>
RAM_ADDR <= "000";
end case;
提前致谢,
最常推荐的方法是使用 numeric_std
包,并实例化一个类型为 unsigned
的信号。
use ieee.numeric_std.all;
...
signal RAM_ADDR : unsigned (2 downto 0) := (others => '0');
...
RAM_ADDR <= RAM_ADDR + 1;
您可以尝试其他涉及与类型系统作斗争的方法,但如果您及早习惯使用适当的类型,则可以避免将来出现某些类型的错误。在我看来,使用适当的类型还可以提高代码的可读性。
在 VHDL 中,如果我根据以下声明有一个 STD_LOGIC_VECTOR:
signal RAM_ADDR : STD_LOGIC_VECTOR (2 downto 0) := (others => '0');
如果我尝试按照以下方式使用“+”运算符在循环中递增此地址:
for i in 0 to 7 loop
RAM_RW <= '1';
wait until KEY_NUM'event;
RAM_RW <= '0';
RAM_ADDR <= RAM_ADDR + "1";
end loop;
我遇到以下错误:
Error (10327): VHDL error at X.vhd(40): can't determine definition of operator ""+"" -- found 0 possible definitions
你能建议最好和最快的解决方法吗(也许不使用不同类型的数据,如整数)?
到目前为止,我正在使用以下(错误的)解决方案:
case RAM_ADDR is
when "000" =>
RAM_ADDR <= "001";
when "001" =>
RAM_ADDR <= "010";
when "010" =>
RAM_ADDR <= "011";
when "011" =>
RAM_ADDR <= "100";
when "100" =>
RAM_ADDR <= "101";
when "101" =>
RAM_ADDR <= "110";
when "110" =>
RAM_ADDR <= "111";
when "111" =>
RAM_ADDR <= "000";
when others =>
RAM_ADDR <= "000";
end case;
提前致谢,
最常推荐的方法是使用 numeric_std
包,并实例化一个类型为 unsigned
的信号。
use ieee.numeric_std.all;
...
signal RAM_ADDR : unsigned (2 downto 0) := (others => '0');
...
RAM_ADDR <= RAM_ADDR + 1;
您可以尝试其他涉及与类型系统作斗争的方法,但如果您及早习惯使用适当的类型,则可以避免将来出现某些类型的错误。在我看来,使用适当的类型还可以提高代码的可读性。