我有一个std_logic_vector
的输入信号并保存一个地址。我用它来读取内存,我需要读取500位,但由于我的内存数据总线只有256位宽,我需要读取两个连续的256位块。为此,我想从存储在信号中的地址第一次读取,第二次从地址存储后的地址读取256位(32字节)。如何向std_logic_vector
添加常数:
ADRESS : in std_logic_vector (0 to 31);
--code
--read first word:
dfmc_DDR2Interface_address <= ADRESS;
dfmc_DDR2Interface_read <= '1';
-- more code
--read second word (what I want to do)
dfmc_DDR2Interface_address <= ADRESS+32;
dfmc_DDR2Interface_read <= '1';
答案 0 :(得分:1)
简单的方法是使用numeric_std_unsigned
包:
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std_unsigned.all; -- if you add this...
entity add_integer_literal_to_slv_signal is
port (
address: in std_logic_vector(0 to 31);
dfmc_DDR2Interface_address: out std_logic_vector (0 to 31);
dfmc_DDR2Interface_read: out std_logic
);
end;
architecture example of add_integer_literal_to_slv_signal is
begin
--read first word:
dfmc_DDR2Interface_address <= address;
dfmc_DDR2Interface_read <= '1';
-- more code
--read second word (what I want to do)
dfmc_DDR2Interface_address <= address + 256; -- ...this will work out of the box!
dfmc_DDR2Interface_read <= '1';
end;
对于记录,您应该正确查看numeric_std包。 @JimLewis对VHDL 2008算法有一个很好的综述: http://www.gstitt.ece.ufl.edu/vhdl/refs/vhdl_math_tricks_mapld_2003.pdf
答案 1 :(得分:0)
一种解决方案是询问地址在您的设计环境中的含义。
如果我通常发现它代表一个无符号数,那么最干净的答案是将Address声明为Unsigned(来自numeric_std)库,或者有时甚至是Natural的远程子类型。
然后添加整数将简单地工作,没有大惊小怪,VHDL-2008支持脑死亡工具也没有问题。
在您的测试平台中,您可能必须转换为std_logic_vector才能连接到设计不佳的仿真模型,但此类转换可能很少。