Я пытаюсь закодировать SRAM с 32-разрядным адресом с разрешением записи байтовой полосы. Но когда я пытаюсь получить доступ (читать или писать) адрес, отличный от x1F, я получаю «исключение с плавающей запятой 8» при компиляции с GHDL. Вот некоторые фрагменты кода:исключение с плавающей запятой ghdl 8
entity data_mem is
port(addr : in std_logic_vector(31 downto 0);
enable : in std_logic;
rd : in std_logic;
wr : in std_logic;
we : in std_logic_vector(3 downto 0);
din : in std_logic_vector(31 downto 0);
-- outputs
dout : out std_logic_vector(31 downto 0);
ack : out std_logic
);
end data_mem;
architecture structure of data_mem is
type mem_type is array (31 downto 0) of std_logic_vector(31 downto 0);
signal mem : mem_type := ((others => (others => '0'))); -- initialize to zero
begin
mem_write : process(addr,enable, wr, we, din)
begin
if (enable = '1') then
if (wr = '1') then
if (we(0) = '1') then
mem(to_integer(signed(addr)))(7 downto 0) <= din(7 downto 0) after 2 ns;
end if; ...
Так что, когда я установить адрес x0000_001F или ниже в тестбенче, он собирает, но не тогда, когда я ставлю x0000_0020 или больше.
Может оказаться полезным полный пример запуска. Я думаю, что vermaete определил проблему, но если это так, то диагностический вывод ghdl может быть полезен, если другие могут воспроизвести симптом. –