如何使用输入';s值在“中”;“始终”;Verilog中的定义

如何使用输入';s值在“中”;“始终”;Verilog中的定义,verilog,quartus,Verilog,Quartus,我在Verilog中使用输入值时遇到了问题。 我写道: 但我得到了一个错误: 错误(10734):注册表向量处的Verilog HDL错误。v(25):温度不是 不变的 我该怎么修? 谢谢)即使向量始终为1字节宽,工具也会将其理解为可变大小,不知道如何处理。(您还反转了向量选择中的索引temp*8和temp*8+8) 另一种方法是使用换档操纵器 OUT = INPUT >> (temp*8); 这应该起作用,因为OUT将通过INPUTINPUT[temp*8:temp*8+8]的8

我在Verilog中使用输入值时遇到了问题。 我写道:

但我得到了一个错误:

错误(10734):注册表向量处的Verilog HDL错误。v(25):温度不是 不变的

我该怎么修?
谢谢)

即使向量始终为1字节宽,工具也会将其理解为可变大小,不知道如何处理。(您还反转了向量选择中的索引
temp*8
temp*8+8

另一种方法是使用换档操纵器

OUT = INPUT >> (temp*8);

这应该起作用,因为
OUT
将通过
INPUT

INPUT[temp*8:temp*8+8]
8*temp
移位取下8位,因为
范围语法要求两边都是常量。
您需要的是使用
+:
数组切片:
输入[temp*8+:8]
+:
的左侧允许变量并表示起始索引。右边是宽度,必须是常数。有关
+:
的更多信息,请参阅

其他问题:

  • 从灵敏度列表中删除
    temp
  • temp
    需要分配给某个对象

  • OUT
    应分配非阻塞(
    好吧,错误已经消失,但我不确定移位运算符是否是解决方案。我需要将输入支腿与输出连接起来,这取决于NR输入。我的意思是如果NR=0 OUT=IN[7:0],如果NR=1 OUT=IN[15:8]
    
    OUT = INPUT >> (temp*8);
    
    always @(posedge ICLK) // no temp in sensitivity list
    begin
      if (IENBL)
      begin
        OUT <= INPUT[temp*8 +: 8]; // non-blocking and +:
      end
    end