如何从VHDL中的rom_type读取数据?

use*_*094 -1 vhdl

如何从rom_type读取数据?

entity my_rom is
 port(
  addr: in std_logic_vector(3 downto 0);
  data: out std_logic_vector(0 to 7)
 );
end my_rom;
architecture a of my_rom is

 type rom_type is array (0 to 7) of std_logic_vector(0 to 7);
 constant R1_ROM: rom_type :=
 (
  -- data
 );
begin
 data <= R1_rom(conv_integer(addr));
end a;
Run Code Online (Sandbox Code Playgroud)

Mar*_*son 5

你正在使用conv_integer,它不是原始VHDL的一部分...它在一个库中.但是,您不想使用它 - 它来自非标准库.

相反use ieee.numeric_std.all;,你需要在你的实体面前.然后to_integer(unsigned(addr))用来索引ROM.更好的是,将地址作为unsigned向量传递,或者甚至直接传递给integer.

尝试摆脱使用std_logic_vector(这只是一小部分)代表数字的习惯,并使用明确定义的数字类型.

或者使用Verilog,这不关心:)

我自己,我更喜欢VHDL强大的打字让我免受傻瓜射击......