延时电路为什么出这样的问题?
module Edge_delay(CLK,
Resetn,
trigger,
pos_edge2,
pos_edge3
);
input CLK; // 5.3MHz
input Resetn;
input trigger;
output pos_edge2;
output pos_edge3;
reg pos_edge2;
wire pos_edge3;
reg counter2;
localparam cnt = 4'd11 ; //
always @(posedge CLK or negedge Resetn) //
begin
if (!Resetn)
begin
counter2 <= 4'd0 ;
pos_edge2 <= 1'b0;
end
else
begin
if (!trigger)
begin
counter2 <= 4'd0 ;
pos_edge2 <= 1'b0;
end
else if (counter2 < cnt)
begin
counter2 <= counter2 + 1'b1 ;
pos_edge2 <= 1'b1;
end
else
begin
counter2 <= cnt ;
pos_edge2 <= 1'b1;
end
end
end
assign pos_edge3 = ((counter2 == cnt) && (trigger)) ? 1'b1 : 1'b0 ; 用quartus II 13.0编译后调用modelsim仿真,pos_edge3会出行刺,而且counter2会有不确定状态。 若做点小改动:pos_edge2只在counter2加1操作为1,甚其他时候为0。那么波形正常
always @(posedge CLK or negedge Resetn)
begin
if (!Resetn)
begin
counter2 <= 4'd0 ;
pos_edge2 <= 1'b0;
end
else
begin
if (!trigger)
begin
counter2 <= 4'd0 ;
pos_edge2 <= 1'b0;
end
else if (counter2 < cnt)
begin
counter2 <= counter2 + 1'b1 ;
pos_edge2 <= 1'b1;
end
else
begin
counter2 <= cnt ;
pos_edge2 <= 1'b0;
end
end
end 这是什么原因?哪位大侠指点下。谢谢! 本帖最后由 NJ8888 于 2013-6-7 16:54 编辑
因为你最上面代码,edge3是counter2的组合输出,而输出,是不能完全边沿对齐的 不好意思,我还弄明白,
assign pos_edge3 = ((counter2 == cnt) && (trigger)) ? 1'b1 : 1'b0 ; 这个没改动。
pos_edge2只是另外一个输出。
谢谢!
页:
[1]