Math N-1是VHDL中可用于泛型的最大术语吗

Math N-1是VHDL中可用于泛型的最大术语吗,math,vhdl,fpga,intel-fpga,Math,Vhdl,Fpga,Intel Fpga,我是VHDL新手,我想问,如果我想编写任意大小的输入向量,我可以使用什么通用术语来开发 GENERIC (n1 : integer); x:IN BIT_VECTOR(n1-1 downto 0); 这是一个正确的例子吗?根据“Paebbels”的评论,我编辑了这个答案: 每次你想要合成你的代码,合成工具应该知道你使用的参数的大小,否则你到底想要合成什么?!!!(什么硬件?!) 如果要合成顶层模块代码(其自身实体中包含通用参数),可以为其指定默认值,如以下代码: ENTITY ... IS

我是VHDL新手,我想问,如果我想编写任意大小的输入向量,我可以使用什么通用术语来开发

GENERIC (n1 : integer); 
x:IN BIT_VECTOR(n1-1 downto 0);
这是一个正确的例子吗?

根据“Paebbels”的评论,我编辑了这个答案:

每次你想要合成你的代码,合成工具应该知道你使用的参数的大小,否则你到底想要合成什么?!!!(什么硬件?!)

如果要合成顶层模块代码(其自身实体中包含通用参数),可以为其指定默认值,如以下代码:

ENTITY ... IS
    GENERIC(n1 : INTEGER := 8);
    PORT(
         -- use generic parameter
    );
END ENTITY;
此外,您还可以在体系结构中使用通用参数(信号大小、环路索引等)。

根据“Paebbels”注释,我编辑此答案:

每次你想要合成你的代码,合成工具应该知道你使用的参数的大小,否则你到底想要合成什么?!!!(什么硬件?!)

如果要合成顶层模块代码(其自身实体中包含通用参数),可以为其指定默认值,如以下代码:

ENTITY ... IS
    GENERIC(n1 : INTEGER := 8);
    PORT(
         -- use generic parameter
    );
END ENTITY;
此外,您还可以在体系结构中使用通用参数(信号大小、环路索引等)。

根据“Paebbels”注释,我编辑此答案:

每次你想要合成你的代码,合成工具应该知道你使用的参数的大小,否则你到底想要合成什么?!!!(什么硬件?!)

如果要合成顶层模块代码(其自身实体中包含通用参数),可以为其指定默认值,如以下代码:

ENTITY ... IS
    GENERIC(n1 : INTEGER := 8);
    PORT(
         -- use generic parameter
    );
END ENTITY;
此外,您还可以在体系结构中使用通用参数(信号大小、环路索引等)。

根据“Paebbels”注释,我编辑此答案:

每次你想要合成你的代码,合成工具应该知道你使用的参数的大小,否则你到底想要合成什么?!!!(什么硬件?!)

如果要合成顶层模块代码(其自身实体中包含通用参数),可以为其指定默认值,如以下代码:

ENTITY ... IS
    GENERIC(n1 : INTEGER := 8);
    PORT(
         -- use generic parameter
    );
END ENTITY;

您还可以在体系结构中使用通用参数(信号大小、循环索引等)。

您的通用参数没有可见的默认值

您对
x
的声明不完整。它似乎是一个带有模式的实体声明项,而您没有端口声明

此VHDL代码在语法和语义上有效:

entity foo is
    generic ( n1:   integer);
    port (
        x: in   bit_vector(n1-1 downto 0)
    );
end entity;

architecture fum of foo is

begin

end architecture;
它将进行分析。如果不知道
n1
的值,就无法详细说明:

entity foo_tb is
    constant N_1: integer := 4;
end entity;

architecture fum of foo_tb is
    signal x:  bit_vector (N_1-1 downto 0);
begin
DUT:
    entity work.foo
    generic map (n1 => N_1)
    port map ( x => x);
end architecture;
实体
foo
本身不能是精化模型的顶层,因为没有为精化定义
n1

实体
foo_tb
可以细化,它使用常量
N_1
n1
提供一个值

foo_tb
甚至可以模拟,但它将立即退出,因为初始化后没有挂起的信号分配

既不能合成
foo
也不能合成
foo\u tb
foo_tb
,因为它没有端口,而且它的设计层次结构中的任何逻辑都会被优化为未使用
foo
,因为它只有一个输出,充其量是一个常量

如果
foo
有多个端口,其输出取决于输入,则只要定义了用于细化的通用端口,就可以进行合成或模拟


(这里的寓意是使用a,这样人们就不必对它的缺点挥手)。

您的泛型没有可见的默认值

您对
x
的声明不完整。它似乎是一个带有模式的实体声明项,而您没有端口声明

此VHDL代码在语法和语义上有效:

entity foo is
    generic ( n1:   integer);
    port (
        x: in   bit_vector(n1-1 downto 0)
    );
end entity;

architecture fum of foo is

begin

end architecture;
它将进行分析。如果不知道
n1
的值,就无法详细说明:

entity foo_tb is
    constant N_1: integer := 4;
end entity;

architecture fum of foo_tb is
    signal x:  bit_vector (N_1-1 downto 0);
begin
DUT:
    entity work.foo
    generic map (n1 => N_1)
    port map ( x => x);
end architecture;
实体
foo
本身不能是精化模型的顶层,因为没有为精化定义
n1

实体
foo_tb
可以细化,它使用常量
N_1
n1
提供一个值

foo_tb
甚至可以模拟,但它将立即退出,因为初始化后没有挂起的信号分配

既不能合成
foo
也不能合成
foo\u tb
foo_tb
,因为它没有端口,而且它的设计层次结构中的任何逻辑都会被优化为未使用
foo
,因为它只有一个输出,充其量是一个常量

如果
foo
有多个端口,其输出取决于输入,则只要定义了用于细化的通用端口,就可以进行合成或模拟


(这里的寓意是使用a,这样人们就不必对它的缺点挥手)。

您的泛型没有可见的默认值

您对
x
的声明不完整。它似乎是一个带有模式的实体声明项,而您没有端口声明

此VHDL代码在语法和语义上有效:

entity foo is
    generic ( n1:   integer);
    port (
        x: in   bit_vector(n1-1 downto 0)
    );
end entity;

architecture fum of foo is

begin

end architecture;
它将进行分析。如果不知道
n1
的值,就无法详细说明:

entity foo_tb is
    constant N_1: integer := 4;
end entity;

architecture fum of foo_tb is
    signal x:  bit_vector (N_1-1 downto 0);
begin
DUT:
    entity work.foo
    generic map (n1 => N_1)
    port map ( x => x);
end architecture;
实体
foo
本身不能是精化模型的顶层,因为没有为精化定义
n1

实体
foo_tb
可以细化,它使用常量
N_1
n1
提供一个值

foo_tb
甚至可以模拟,但它将立即退出,因为初始化后没有挂起的信号分配

既不能合成
foo
也不能合成
foo\u tb
foo_tb
,因为它没有端口和