Vhdl 使用Xilinx ISE设计套件在Spartan 6上生成单端口ROM

Vhdl 使用Xilinx ISE设计套件在Spartan 6上生成单端口ROM,vhdl,fpga,xilinx,spartan,Vhdl,Fpga,Xilinx,Spartan,我在设计斯巴达6板上的单端口rom时遇到了一些问题。我使用提供的core generator创建块内存,并选择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 thi

我在设计斯巴达6板上的单端口rom时遇到了一些问题。我使用提供的core generator创建块内存,并选择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文件的副本添加到我的工作目录。以后我将使用数组。

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


如果这是一个独立于其他设计的包,那么几行printf或一个简单的脚本就可以围绕内容生成VHDL样板文件,这些内容来自您的汇编程序或任何创建实际数据的工具

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


如果这是一个独立于其他设计的包,那么几行printf或一个简单的脚本就可以围绕内容生成VHDL样板文件,这些内容来自您的汇编程序或任何创建实际数据的工具,我想问题是,正如消息所说,拼写错误。要获得正确的组件声明/实例化,请在ISE的设计窗口中选择rom.xco。然后从流程窗口中选择查看vhdl实例化模板。使用其中描述的组件声明和实例化。

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

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

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

因为您要在ISE中向您的设计添加Xilinx生成的内核,所以您需要通过“项目”菜单的“添加源”添加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_位宽度匹配的常量行。行数是ROM中需要的地址位置数。在本例中,ROM位宽度必须设置为32,因为我在初始化列表中使用了32位十六进制常量。作为一个信号,它实际上是可修改的,因此如果您需要它是常量,只需使用常量而不是信号。

由于您要在ISE中向设计中添加Xilinx生成的内核,您需要通过“项目”菜单的“添加源”添加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_位宽度匹配的常量行。行数是ROM中需要的地址位置数。在本例中,ROM位宽度必须设置为32,因为我在初始化列表中使用了32位十六进制常量。作为一个信号,它实际上是可以修改的,所以如果你需要它是常数,就用常数代替信号