求助!编译器老是提示“无法给整个变量队列赋值”,为啥啊?都快把人整疯了~~
超级简单的计数器的程序!!就2句话!!在每个clk时候对timenumber计数,计数最大值为20'hC3500,
输出信号为servo1,在计数值小于20'h0EA60的时候,输出为高,否则为低
但是编的程序死活不对!!
module iansuav(clk,rst,servo1);
input clk,rst;
output servo1;
trireg servo1;
reg timenumber;
always @(posedge clk or rst)
if(!rst)timenumber<=0; //复位 这句提示有错,不能“对整个寄存器赋值”
else
begin
if(timenumber<20'hC3500)timenumber<=timenumber+1; //计数 提示有错,不能“对整个寄存器赋值”
else timenumber<=0; //提示有错,不能“对整个寄存器赋值”
end
assign servo1=(timenumber<20'h0EA60) ? 1'b1 : 1'b0; //输出 提示有错,不能“对整个队列取值”
endmodule
老是提示
“values cannot be assigned directly to all or part of array "<timenumber>" - assignments must be made to individual elements only
”(不能对整个队列赋值)
或者“expression cannot reference entire array "<timenumber>"”(不能对整个队列取值)
看quartus的help文件怎么讲的吧,它教你要“对元素单独赋值”,例如
x = mem1bit;
x = mem1bit;
我考,都是这么简单的赋值的了,还要编译器干什么用啊!!
奇怪的是,这个“不能队列取值、赋值”问题有时候会出现,有时又会莫名其妙的好了!
例如我另外写的程序
always@(posedge clk)
begin
cnt_scan<=cnt_scan+1;
end
又是可以用的!
唉!我都想砸电脑!烧房子了!!求大虾帮忙看下到底是啥原因啊,救人于水火之中啊!!! reg i;
always @ ( posedge CLK or negedge RSTn )
if( !RSTn )
i <= 4'd0;
else
i <= 4'b1111;
else if( ... )
i <= i + 1'b1; reg timenumber; // 声明2维数组,有B-1个,每个位宽A-1
而
reg timenumber; // 声明2维数组,20个元素,每个元素位宽为1
你这个case里面,应该改为
reg timenumber; // 声明一个寄存器,位宽20位,保证正确 回复【2楼】yuphone .COM 缺氧®
reg timenumber; // 声明2维数组,有b-1个,每个位宽a-1
而
reg timenumber; // 声明2维数组,20个元素,每个元素位宽为1
你这个case里面,应该改为
reg timenumber; // 声明一个寄存器,位宽20位,保证正确
-----------------------------------------------------------------------
原来是这样~~一试就对了!!太强了~~~~~
太谢谢了啊~~大哭~~~~~ ./emotion/em093.gif~~~~~~~~~
页:
[1]