Generics 通用从属的实际表达式不能引用信号

Generics 通用从属的实际表达式不能引用信号,generics,port,vhdl,Generics,Port,Vhdl,在Quartus中,我收到以下错误消息: 错误(10795):通用从机的实际表达式不能引用信号 代码有一个组件实例化,其泛型如下: architecture rtl of System is component spi_master generic( slaves : INTEGER := 1; port(clock : IN STD_LOG

在Quartus中,我收到以下错误消息:

错误(10795):通用从机的实际表达式不能引用信号

代码有一个组件实例化,其泛型如下:

architecture rtl of System is

    component spi_master
        generic(
             slaves  : INTEGER := 1;                                        
        port(clock   : IN  STD_LOGIC;                                                                                                        
             sclk    : BUFFER STD_LOGIC;                                      
             ss_n    : BUFFER STD_LOGIC_VECTOR(slaves - 1 DOWNTO 0);               
    end component spi_master;                                                  


    signal spi_slaves   : INTEGER := 1;


begin

    spi : component spi_master
        generic map(
            slaves  => 1,           
        )
        port map(clock   => clk_clk,
            sclk    => dac_sclk,
            ss_n    => slave_sel,
        );

end architecture rtl;
错误指向行“generic map”(),我发现在端口声明中也不能使用“slaves”

问题: -我怎样才能解决这个问题


谢谢!

代码与问题描述不匹配,因为
从机=>1
是可以的,包括在声明
缓冲区标准逻辑向量(从机-1到0)中的重用

问题可能是失败的代码使用了
slaves=>spi_slaves
,其中
spi_slaves
是一个信号,这是非法的

spi_从机的声明更改为:

constant spi_slaves : INTEGER := 1;

错误信息非常清楚。奇怪的是,代码没有显示错误,所以有些事情你没有告诉我们。泛型本质上是一个编译时常量(实际上是精化时间),因此它无法连接到信号,其值在运行时可能会变化。这段代码没有显示Morten猜测答案的问题-“问题可能是"。它充满了语法错误,如果更正了,并且提供了实体声明和上下文子句,则可以在不更改常量spi_从属项声明的情况下成功分析。也许您可以“更正”代码以演示实际问题?是的,您是对的。通过引入常量,它解决了我的问题-谢谢!额外的
在最后一个端口和通用映射之后,难道不是一个错误吗?例如,
从选择,
应该是
从选择
?@可怕杰夫:是的,额外的
是一个语法错误,还有一个丢失的
,可能还有其他问题。顺便说一句,允许额外的
已被建议用于未来的VHDL版本,这是其他语言(如Python)中的一项功能,但VHDL中还没有legel。