hanwuji621 发表于 2010-8-9 16:56:02

请教 关于边缘脉冲检测的问题



为什么led_d1, led_d2,led_d3 是在led_ctrl,led_ctrl,led_ctrl 下降沿被触发,为什么不是上升沿被触发。

下面是 程序,这是一个利用边缘脉冲检测进行 按键的操作。谢谢。

module lesson9( clk,
                          rst_n,
                          sw1_n,sw2_n,sw3_n,
                          led_d1,led_d2,led_d3,
                          led_ctrl
                          );
input clk;
input rst_n;
input sw1_n,sw2_n,sw3_n;
output led_d1,led_d2,led_d3;
output led_ctrl;

reg key_rst;


always @(posedge clk or negedge rst_n)
        if(!rst_n)
                key_rst<=3'b111;
        else        
                key_rst<={sw3_n,sw2_n,sw1_n};
               

reg key_rst_r;


always @(posedge clk or negedge rst_n)
        if(!rst_n)
                key_rst_r<=3'b111;
        else        
                key_rst_r<=key_rst;       
               
               
wire key_an;


assign         key_an=        (~key_rst_r)&(key_rst);

reg cnt;


always @(posedge clk or negedge rst_n)
        if(!rst_n)
                cnt<=20'd0;
               
        else if(key_an)       
                cnt<=2'b0;
        else
                cnt<=cnt+1'b1;
               
reg low_sw;


always @(posedge clk or negedge rst_n )       

        if(!rst_n)
                low_sw<=3'b111;
       
        else if (cnt==2'b10)
                low_sw<={sw3_n,sw2_n,sw1_n};
       
               
reg low_sw_r;


always @(posedge clk or negedge rst_n )       
        if(!rst_n)
                low_sw_r<=3'b111;
               
        else
                low_sw_r<=low_sw;
               
wire led_ctrl;

assign         led_ctrl=(~low_sw_r)&(low_sw);


reg d1;
reg d2;
reg d3;

always @(posedge clk or negedge rst_n )       
               
        if(!rst_n)
                begin
                        d1<=1'b0;
                        d2<=1'b0;
                        d3<=1'b0;
                end
        else
                begin
                        if(led_ctrl) d1<=~d1;
                        if(led_ctrl) d2<=~d2;
                        if(led_ctrl) d3<=~d3;
                end
               
assign led_d3=d3?1'b1:1'b0;       
assign led_d2=d2?1'b1:1'b0;       
assign led_d1=d1?1'b1:1'b0;               

endmodule
页: [1]
查看完整版本: 请教 关于边缘脉冲检测的问题