在VHDL中添加两个std_logic_vector的最佳和最快方法

时间:2016-11-10 14:39:55

标签: vhdl add quartus

在VHDL中如果我有STD_LOGIC_VECTOR,则按照以下声明:

CHUNK_SIZE = 1000 #for example

with open(source_file, 'rb') as source:
    with open(target_file, 'a') as target:
        bytes = bytearray(source.read(CHUNK_SIZE))
        source.seek(CHUNK_SIZE)

        for i in range(len(bytes)):
            bytes[i] ^= 0x71

        target.write(bytes)

如果我尝试使用' +'循环增加此地址运营商如下:

signal RAM_ADDR : STD_LOGIC_VECTOR (2 downto 0) := (others => '0');

我遇到以下错误:

  

错误(10327):X.vhd(40)处的VHDL错误:无法确定   运营商"" +"" - 找到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;

提前致谢,

1 个答案:

答案 0 :(得分:4)

最常推荐的方法是使用numeric_std包,并实例化unsigned类型的信号。

use ieee.numeric_std.all;

...

signal RAM_ADDR : unsigned (2 downto 0) := (others => '0');

...

RAM_ADDR <= RAM_ADDR + 1;

您可以尝试其他涉及打击类型系统的方法,但如果您习惯于在早期使用适当的类型,那么将来可以避免某些类型的错误。在我看来,使用适当的类型也可以使代码更具可读性。