在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;
提前致谢,
答案 0 :(得分:4)
最常推荐的方法是使用numeric_std
包,并实例化unsigned
类型的信号。
use ieee.numeric_std.all;
...
signal RAM_ADDR : unsigned (2 downto 0) := (others => '0');
...
RAM_ADDR <= RAM_ADDR + 1;
您可以尝试其他涉及打击类型系统的方法,但如果您习惯于在早期使用适当的类型,那么将来可以避免某些类型的错误。在我看来,使用适当的类型也可以使代码更具可读性。