我正在尝试用VHDL模拟RAM芯片,其中包含地址和数据总线宽度的通用参数以及RAM放置在地址空间中的基址 . 我的问题是我无法弄清楚如何获得一个通用的无约束数组参数片段来将它与std_logic_vector信号进行比较 .
这是用于计算“芯片选择”信号的简化代码:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity e is
generic (
BASE_ADDR :std_logic_vector := x"C000";
CELL_ADDR_WIDTH :integer := 4
);
port (
address :in std_logic_vector (BASE_ADDR'length-1 downto 0)
);
end;
architecture behavioral of e is
constant ADDR_WIDTH :integer := BASE_ADDR'length;
signal cs :std_logic;
begin
cs <= '1' when address(ADDR_WIDTH-1 downto CELL_ADDR_WIDTH) = BASE_ADDR(ADDR_WIDTH-1 downto CELL_ADDR_WIDTH) else '0';
end behavioral;
莱迪思ispLEVER VHDL编译器报告以下错误:
23:64:23:110|Slice range direction does not match argument range
该消息由表达式 BASE_ADDR(ADDR_WIDTH-1 downto CELL_ADDR_WIDTH)
引起 .
如何在VHDL中正确访问通用无约束数组 BASE_ADDR
的片段?
1 回答
@Paebbels和@ user1155120建议的两种解决方案都解决了VHDL编译错误 . 我引用这里的建议,相应地更新了代码 .
@Paebbels:在切片中使用
@ user1155120:声明别名以定义方向
我为别名使用了一个更突出的名字: