lae129 发表于 2013-6-7 16:35:53

延时电路为什么出这样的问题?

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 ;

lae129 发表于 2013-6-7 16:41:12

用quartus II 13.0编译后调用modelsim仿真,pos_edge3会出行刺,而且counter2会有不确定状态。

lae129 发表于 2013-6-7 16:46:20

若做点小改动: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

lae129 发表于 2013-6-7 16:47:48

这是什么原因?哪位大侠指点下。谢谢!

NJ8888 发表于 2013-6-7 16:53:08

本帖最后由 NJ8888 于 2013-6-7 16:54 编辑

因为你最上面代码,edge3是counter2的组合输出,而输出,是不能完全边沿对齐的

lae129 发表于 2013-6-7 17:06:05

不好意思,我还弄明白,
assign pos_edge3 = ((counter2 == cnt) && (trigger)) ? 1'b1 : 1'b0 ;  这个没改动。
pos_edge2只是另外一个输出。
谢谢!
页: [1]
查看完整版本: 延时电路为什么出这样的问题?