求助,有两个流水灯代码,通过顶层文件将两个程序合并
时间:10-02
整理:3721RD
点击:
然是弄了好久弄不好
顶层代码如下:
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
按键消抖程序应该不影响,所以没贴上来,求大神教育
顶层代码如下:
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
按键消抖程序应该不影响,所以没贴上来,求大神教育
第一见过fpga的程序!