无法将切片名称解析为std.standard.integer类型

时间:2014-05-19 16:59:19

标签: vhdl mips

以下代码是Memory CPU

中的简单指令Mips
LIBRARY ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;

ENTITY instructionMemory IS
   generic (delay :time :=10 ns);
  PORT( a : INOUT STD_LOGIC_VECTOR ( 31 downto 0);
      output: OUT STD_LOGIC_VECTOR( 31 downto 0)
      );
END ENTITY;
ARCHITECTURE instructionMemory OF instructionMemory IS
  type MemMatrix is array ( 0 to 7 ) of std_logic_vector(31 downto 0); -- instruction from memory
  signal Mem:MemMatrix := (x"00000000",x"00000001",x"00000000",x"00000001",x"00000001",x"00000001",x"00000001",x"00000001");

  BEGIN
     output <= Mem(conv_integer(a(6 downto 2)));             
END instructionMemory;

我假设Mem是Memory并且使用一些值来启动它。我想读取这些数据并将其分配给输出。

但它给了我以下错误:

no feasible entries for subprogram conv_integer  

我将错误行更改为:

Mem(a(6 downto 2));

但是它又给了我一个错误:

cannot resolve slice name to type std.standard.integer

我不知道如何解决这个问题,任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

以下分析和阐述:

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;

entity instructionmemory is
   generic (delay :time :=10 ns);
  port( a : inout std_logic_vector ( 31 downto 0);
      output: out std_logic_vector( 31 downto 0)
      );
end entity;
architecture instructionmemory of instructionmemory is
  type memmatrix is array ( 0 to 7 ) of std_logic_vector(31 downto 0); -- instruction from memory
  signal mem:memmatrix := ( 
      x"00000000",x"00000001",x"00000000",x"00000001",
      x"00000001",x"00000001",x"00000001",x"00000001"
      );

  begin
     output <= mem(conv_integer(a(6 downto 2))); -- closing paren for mem();
end instructionmemory;

与此不同的是在并发信号分配语句目标输出中添加匹配的结束语。

ghdl实际上用一条不太有用的消息指出了问题的字符位置。

  

instructionMemory.vhdl:20:47:&#39;,&#39;预期而不是&#39 ;;&#39;

预计没有结束的假设是一个额外的论点。您的错误消息可能表示基于YACC / Bison的解析器无法在非终端上提供错误消息。

<强>附录

如果您注意到Russell的评论,6 downto 0和memmatrix (0 to 7)的转换之间存在整数范围不匹配。转换的二进制范围为2 ** 5,而mem的范围为0到7.如果a(6 downto 2)每个都超出范围0到7,则会发生运行时错误。使用整数类型将允许通过检查整数值与mem的界限来修改或以其他方式处理超出范围的字段。

您还可以增加memmatrix大小以适应a(6 downto 2)的全部范围。

关于如何为mem分配不同的索引以分配输出的其他问题需要更多的上下文。你想从哪里得到索引?