Ian11122840 发表于 2010-10-20 11:35:12

求助!编译器老是提示“无法给整个变量队列赋值”,为啥啊?都快把人整疯了~~

超级简单的计数器的程序!!就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

又是可以用的!

唉!我都想砸电脑!烧房子了!!求大虾帮忙看下到底是啥原因啊,救人于水火之中啊!!!

akuei2 发表于 2010-10-20 11:43:29

reg i;

always @ ( posedge CLK or negedge RSTn )
    if( !RSTn )
      i <= 4'd0;
    else
      i <= 4'b1111;
    else if( ... )
      i <= i + 1'b1;

yuphone 发表于 2010-10-20 12:17:17

reg timenumber; // 声明2维数组,有B-1个,每个位宽A-1


reg timenumber;      // 声明2维数组,20个元素,每个元素位宽为1


你这个case里面,应该改为
reg timenumber; // 声明一个寄存器,位宽20位,保证正确

Ian11122840 发表于 2010-10-20 12:29:00

回复【2楼】yuphone .COM 缺氧&reg;
reg timenumber; // 声明2维数组,有b-1个,每个位宽a-1

reg timenumber;      // 声明2维数组,20个元素,每个元素位宽为1
你这个case里面,应该改为
reg timenumber; // 声明一个寄存器,位宽20位,保证正确
-----------------------------------------------------------------------



原来是这样~~一试就对了!!太强了~~~~~

太谢谢了啊~~大哭~~~~~

Ian11122840 发表于 2010-10-20 12:37:26

./emotion/em093.gif~~~~~~~~~
页: [1]
查看完整版本: 求助!编译器老是提示“无法给整个变量队列赋值”,为啥啊?都快把人整疯了~~