for 循环的问题
定义了一个 integer i;
always @ (posedge clk or negedge rst)
begin
for (i=0;i<=7;i=i+1)
begin
encode[55-i*7:52-i*7]<=data_in[31-i*4:28-i*4];
end
end
报错:Quartus Error : i is not a constant
Modelsim :Range must be bounded by constant expressions.
高手请指教,不胜感激涕零!
把i定义成integer即可
把i定义成integer即可,是的要改,可是还是不行呀,还是报错。我觉着错误在这里
encode[55-i*7:52-i*7]<=data_in[31-i*4:28-i*4];
高手帮咱一把呀!
非常量不能用在slice边界定义选择中
搞定没?
没有硬件概念。for循环必须确定i的值才能综合。
没搞定。
encode[55:52]=data_in[31:28];
encode[48:45]=data_in[27:24];
encode[41:38]=data_in[23:20];
encode[34:31]=data_in[19:16];
encode[27:24]=data_in[15:12];
encode[20:17]=data_in[11:8];
encode[13:10]=data_in[7:4];
encode[6:3]=data_in[3:0];
只有这样写了6# schj
请注意,你用的是verilog。不是c。你搞出来的东西是硬件电路。不是跑在cpu上的程序。强烈建议不要用for。以便更好对电路结构控制。刚开始肯定不习惯。但是对以后深入理解和应用有好处。
听人说for的综合很费资源,看来还是要展开写好。多谢!
你这个使用连接赋值也是可以的,毕竟encode其他位置你也要赋值嘛。
感觉小编把verilog当c来写了 你要是搞清楚for语句怎么综合出来的 那你就知道原因了。
毕竟是硬件电路。还有I的位宽没定义吧
正确,位宽里面不能有i,我是这样理解的
说得太好了,顶一个
这样应该是可以的啊,你要不是一下 把for 套在 always外面
顶顶,高手解释透彻点
时代变了!现在综合工具对for支持的很好了!
你这样写!
encode[52-i*7+:4]<=data_in[28-i*4+:4];
这样就可以了,这个是verilog2001的增量下标的语法!
定义成int
http://blog.163.com/yunwang2008@126/blog/static/11531450320107414623395/
我也遇到这个问题了 第13 个问题
13.Verilog-2001向量部分选择
在Verilog-1995中,可以选择向量的任一位输出,也可以选择向量的连续几位输出,不过此时连续几位的始末数值的index需要是常量。而在Verilog-2001中,可以用变量作为index,进行part select。
[base_expr +: width_expr] //positive offset
[base_expr -: width_expr] //negative offset
其中base_expr可以是变量,而width_expr必须是常量。+:表示由base_expr向上增长width_expr位,-:表示由base_expr向上递减width_expr位。例如:
reg [63:0] word;
reg [3:0] byte_num; //a value from 0 to 7
wire [7:0] byteN = word[byte_num*8 +: 8];
如果byte_num的值为4,则word[39:32]赋值给byteN。
学习了
路过。
学习了
学习一下了,呵呵。
学习一下
