|
超级简单的计数器的程序!!就2句话!!
在每个clk时候对timenumber计数,计数最大值为20'hC3500,
输出信号为servo1,在计数值小于20'h0EA60的时候,输出为高,否则为低
但是编的程序死活不对!!
module iansuav(clk,rst,servo1);
input clk,rst;
output servo1;
trireg servo1;
reg timenumber[19:0];
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[1] = mem1bit[1];
x[0] = mem1bit[0];
我考,都是这么简单的赋值的了,还要编译器干什么用啊!!
奇怪的是,这个“不能队列取值、赋值”问题有时候会出现,有时又会莫名其妙的好了!
例如我另外写的程序
always@(posedge clk)
begin
cnt_scan<=cnt_scan+1;
end
又是可以用的!
唉!我都想砸电脑!烧房子了!!求大虾帮忙看下到底是啥原因啊,救人于水火之中啊!!! |
阿莫论坛20周年了!感谢大家的支持与爱护!!
该献的血还是要献的。你不献他不献。难道让我去献? --- 出自坛友:lovejp1981
|