1

我在将单端口 rom 设计到 spartan 6 板上时遇到了一些麻烦。我使用提供的核心生成器来创建块内存,并选择具有 32 位宽度和 256 深度的单端口 rom,其 coe 文件的计数从 0 到 255。我将 rom 作为组件放入我的 vhdl 中,并将 XilinxCoreLib 添加为图书馆。当我尝试生成编程文件时,出现翻译错误:

logical block 'rom1' with type 'rom' could not be
resolved. A pin name misspelling can cause this, a missing edif or ngc file,
case mismatch between the block name and the edif or ngc file name, or the
misspelling of a type name. Symbol 'rom' is not supported in target
'spartan6'.

如果有帮助,我目前正在使用 Xilinx ISE 13.1。我觉得这应该很容易做到,但我一直无法找到如何做到这一点。

编辑:谢谢大家,是事物的结合。速度等级错误,并且没有将 ngc 文件的副本添加到我的工作目录中。我将来会使用数组。

4

4 回答 4

4

最简单的方法是完全忘记供应商工具并简单地声明一个常量数组!

如果这是在与设计的其余部分分开的包中,几行 printf 或一个简单的脚本可以围绕内容生成 VHDL 样板,这些样板来自您的汇编程序或任何创建实际数据的工具

于 2013-04-13T20:16:38.063 回答
1

有很多因素会导致这个问题,一个是您正在使用为另一个 FPGA 系列生成的块并在 Spartan6 中使用它。另一个是您可能使用旧版本的工具生成了 ROM,并且此后 ROM 的包装器发生了变化。您可以像 Brian 建议的那样生成一个阵列并忘记工具特定的 ROM 类型,或者在您的当前项目设置下重新生成 IP 并查看它是如何进行的。

于 2013-04-14T13:08:10.290 回答
1

由于您在 ISE 中将 Xilinx 生成的内核添加到您的设计中,因此您需要通过 Project 菜单的“Add Source”添加 VHD 文件和 NGC 文件。

更简单的是,根据您的 ROM 需要多大以及进入其中的数据,甚至无需使用 Xilinx 内核,而是使用纯 VHDL 在您的 VHDL 文件中声明一个常量数组和初始化值。这是一个例子:

type array_ROM is array (0 to NUMBER_OF_ROWS-1) of std_logic_vector (ROM_BITWIDTH-1 downto 0);

signal my_ROM : array_ROM
    :=
        (
            x"12345678",
            x"ABCDEF01",
            ...
            x"01010101"
        );

现在,您不要将省略号 (...) 放入该初始化列表中,只需放入位宽与 ROM_BITWIDTH 匹配的常量行。NUMBER_OF_ROWS 是您在 ROM 中需要的地址位置数。在此示例中,ROM_BITWIDTH 必须设置为 32,因为我在初始化列表中使用了 32 位十六进制常量。作为一个信号,它实际上是可以修改的,所以如果你需要它是常数,只需使用“常数”而不是信号。

于 2013-04-17T21:20:08.347 回答
1

正如消息所说,我想问题是拼写错误。要获得正确的组件声明/实例化,请在 ISE 的设计窗口中选择您的 rom.xco。然后从进程窗口中选择“查看 vhdl 实例化模板”。使用其中描述的组件声明和实例化。

于 2013-04-14T07:07:54.273 回答