对给定的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等数字。
此帖出自
小平头技术问答
一周热门 更多>