Verilog程序实现功能不对怎么办啊?

2019-03-25 10:46发布

对给定的4个输入in1,in2,in3,in4,对应4个输出c1,c2,c3,c4,每个输出随着输入的上升沿来到而+1,就是c1计算in1上升沿的个数,c2,c3,c4类似,接下来对c1,c2,c3,c4进行比较,当c1,c2,c3,c4中有两个以上的数相同时,让输出等于这个数。程序中还设置了个复位键reset,当reset为1时,复位。
程序如下:
module ronghe(c,in1,in2,in3,in4,c1,c2,c3,c4,reset);
input reset,in1,in2,in3,in4;
inout c1,c2,c3,c4;
reg [15:0] c1,c2,c3,c4;
output [15:0] c;
reg[15:0] c;

always @(posedge in1 )
begin
if (reset)  c1<=0;
else        c1<=c1+1;
end

always @(posedge in2 )
begin
if (reset)  c2<=0;
else        c2<=c2+1;
end

always @(posedge in3 )
begin
if (reset)  c3<=0;
else        c3<=c3+1;
end

always @(posedge in4 )
begin
if (reset)  c4<=0;
else        c4<=c4+1;
end

always@(c1 or c2 or c3 or c4 or reset)
begin
if(reset)                                          c<=0;
else if(c1==c2 && c1==c3 && c1==c4)                c<=c1;
else if(c1==c2 && c1==c3)                          c<=c1;
else if(c1==c2 && c1==c4)                          c<=c1;
else if(c1==c3 && c1==c4)                          c<=c1;
else if(c2==c3 &&  c2==c4)                         c<=c2;
else if(c1==c2)                                    c<=c1;
else if(c1==c3)                                    c<=c1;
else if(c1==c4)                                    c<=c1;
else if(c2==c3)                                    c<=c2;
else if(c2==c4)                                    c<=c2;
else if(c3==c4)                                    c<=c3;
else                                               c<=0;
end
endmodule
问题:仿真时,我设置仿真时间为1us,in1,in2,in3,in4是以10ns为周期的时钟激励,结果得到的输出的问题是等了几个周期输出c才开始有数,然后在输入的两个周期之间会莫名其妙的多出来一些数,例如对应第一个方波,计数应该是00001,对应第二个方波应该是00002,对应第3个方波应该是00003,然后有时在第n和第n+1个方波间,会多显示出来0000x,000xx等数字。
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。