ghdl浮点异常8

时间:2013-02-19 15:52:22

标签: vhdl floating-point-exceptions ghdl

我正在尝试使用32位地址对SRAM进行编码,并使用字节通道写入启用。但是当我尝试访问(读取或写入)大于x1F的地址时,在使用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或更高时。

1 个答案:

答案 0 :(得分:0)

您正在使用signed进行地址转换。相当奇怪的地址类型。因为您有32个位置来存储内存中的数据,所以您只能使用6位(2 ^ 5 = 32)作为地址。保持signed时,第5位是符号位。 0x1ff - &gt;积极的地址:好的。 0x20 - &gt;否定地址:错误......

我想将signed更改为unsigned(来自ieee.numeric_std)可以解决问题。