如何使用输入';s值在“中”;“始终”;Verilog中的定义
我在Verilog中使用输入值时遇到了问题。 我写道: 但我得到了一个错误: 错误(10734):注册表向量处的Verilog HDL错误。v(25):温度不是 不变的 我该怎么修?如何使用输入';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
谢谢)即使向量始终为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