求助,有两个流水灯代码,通过顶层文件将两个程序合并

2019-07-15 23:56发布

然是弄了好久弄不好

顶层代码如下:

module biyesheji(sys_clk,sys_rstn,
                led, key_in);
input sys_clk,sys_rstn;
input [1:0]key_in;
output [7:0]led;
wire [7:0]led1;
wire [7:0]led2;
wire [1:0]key_en;
reg [7:0] led;
led_run u1(.sys_clk (sys_clk),
                           .sys_rstn(sys_rstn),
                           .led1(led1),
                                //.key_en(key_en[1])
                                   );
led_water u2(.sys_clk(sys_clk),
                                 .sys_rstn(sys_rstn) ,
                                 .led2(led2),
                                 //.key_en(key_en[0])
                                   );
key_elim u3(.clk(sys_clk), .rst_n(sys_rstn),
                        .key_in(key_in), .key_en(key_en)
                        );

always@(posedge sys_clk or negedge sys_rstn)
   begin
        if (!sys_rstn)
    led<=8'd0;
         else if(key_en[0])
              led<=led1;
         else if(key_en[1])
                        led<=led2;
        end
endmodule
                       
        合并之后的工程通过两个按键KEY1.kEY2控制程序切换,但是不怎么成功,两个原代码都是按一下才会变一下。求大神帮忙

module led_water(sys_clk,//key_en,
                                 sys_rstn,
                                 led2
                                   );

input sys_clk;
//input key_en;
input sys_rstn;
output [7:0] led2;

reg [7:0] led2;  
reg [24:0] delay_cnt;

always@(posedge sys_clk or negedge sys_rstn)
        begin
                if(!sys_rstn)
                        delay_cnt<=25'd0;
                else if(delay_cnt==25'd24999999)
                        delay_cnt<=25'd0;
                else
                        delay_cnt<=delay_cnt+1'b1;       
        end
always@(posedge sys_clk or negedge sys_rstn)
        begin
                if(!sys_rstn)
                        led2<=8'b11111111;
                else //if(key_en)
                        begin
                                if(delay_cnt==25'd24999999)
                                        begin
                                                led2<=led2<<1;
                                                if(led2==8'b00000000)
                                                        led2<=8'b11111111;
                                        end       
                                else
                                        led2<=led2;       
                        end
                //else led2<=led2;
        end
endmodule

module led_run(sys_clk ,//key_en,
                           sys_rstn,
                           led1
                                   );
//
input sys_clk ;
//input key_en;
input sys_rstn;
output [7:0] led1;

reg [7:0] led1;
reg [24:0] delay_cnt     ;

always@(posedge sys_clk or negedge sys_rstn)
        begin
                if(!sys_rstn)
                        delay_cnt<=25'd0;
                else if(delay_cnt==25'd24999999)
                        delay_cnt<=25'd0;
                else
                        delay_cnt<=delay_cnt+1'b1;       
        end
always@(posedge sys_clk or negedge sys_rstn)
        begin
                if(!sys_rstn)
                        led1<=8'b10000000;
                else //if(key_en)
                        begin
                                if(delay_cnt==25'd24999999)
                                        led1<={led1[0],led1[7:1]};
                                else
                                        led1<=led1;       
                        end
                //else led1<=led1;
        end
endmodule

按键消抖程序应该不影响,所以没贴上来,求大神教育

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。