一个变量只能在一个always中赋值
时间:10-02
整理:3721RD
点击:
对按键计数,编译不通过!
module dc_counter(rstn,up,down,dout);
input rstn;
input up;
input down;
output[8:0] dout;
reg[8:0] dout_r;
reg[3:0]cnt;
always@(posedge up or negedge rstn)//计数范围50~450
begin
if(! rstn)
dout_r =9'd449)
dout_r<=450;
else
dout_r<=dout_r+1;
end
end
always@(posedge down or negedge rstn)
begin
if(! rstn)
dout_r<=9'd450;
else
begin
if(dout_r<=9'd50)
dout_r<=9'd50;
else
dout_r<=dout_r-1;
end
end
assign dout=dout_r;
endmodule
module dc_counter(rstn,up,down,dout);
input rstn;
input up;
input down;
output[8:0] dout;
reg[8:0] dout_r;
reg[3:0]cnt;
always@(posedge up or negedge rstn)//计数范围50~450
begin
if(! rstn)
dout_r =9'd449)
dout_r<=450;
else
dout_r<=dout_r+1;
end
end
always@(posedge down or negedge rstn)
begin
if(! rstn)
dout_r<=9'd450;
else
begin
if(dout_r<=9'd50)
dout_r<=9'd50;
else
dout_r<=dout_r-1;
end
end
assign dout=dout_r;
endmodule
是的,不能再两个always块里对一个变量赋值!你可以再定义一个reg变量,输出等于这两个reg相加就行啦!不过还是要用时钟信号比较正规,你这个写法本身就是不对的,我刚学fpga的时候也像你这么写,哈哈,posedge后面只能跟时钟!很重要!
不知道报错提示是什么,不过友情提示一下,posedge后面只能跟时钟信号,你可以用时钟信号来采down与up的沿,用沿来控制计数器!
Error (10028): Can't resolve multiple constant drivers for net "dout_r[8]" at dc_counter.v(29)
报错说:不能在两个always里边对同一个量进行操作。