赞
踩
- //方法一:连接符移位操作实现跑马灯,在DEO上跑通//
- module Led10flash_DEO_shift(clk,rstn,led);
- input clk, rstn;
- output[9:0] led;
- reg[18:0] count;
- reg[7:0] cnt;
- //50MHz,20ns,20*500_000=10ms,2^19 count=[18:0]
- parameter dely1ms=500_000;
-
- always @(posedge clk or negedge rstn)
- begin
- if(!rstn) begin count<=18'd0;end
- else if(count==dely1ms) begin count<=16'd0; end
- else begin count<=count+1'd1;end
- end
-
- always @(posedge clk or negedge rstn)
- begin
- if(!rstn) begin cnt<=0;end
- else if(cnt==9) begin cnt<=0;end
- else if(count==dely1ms) begin cnt<=cnt+1'd1;end
-
- end
- //移位操作实现跑马灯
- reg[9:0] shiftR;
-
- always @(posedge clk or negedge rstn)
- begin
- if(!rstn) begin shiftR<=9'h01;end//初始化为9'h01很重要
- else if(cnt==9) begin shiftR<={shiftR[0],shiftR[9:1]};end
- else begin shiftR<=shiftR;end
- end
-
- assign led=shiftR;
- endmodule
- module Led10flash_DEO_Operator(clk,rstn,led);
- input clk, rstn;
- output[9:0] led;
- reg[18:0] count;
- reg[7:0] cnt;
- //50MHz,20ns,20*500_000=10ms,2^19 count=[18:0]
- parameter dely1ms=500_000;
-
- always @(posedge clk or negedge rstn)
- begin
- if(!rstn) begin count<=18'd0;end
- else if(count==dely1ms) begin count<=16'd0; end
- else begin count<=count+1'd1;end
- end
-
- always @(posedge clk or negedge rstn)
- begin
- if(!rstn) begin cnt<=0;end
- else if(cnt==9) begin cnt<=0;end
- else if(count==dely1ms) begin cnt<=cnt+1'd1;end
-
- end
- //移位实现跑马灯
- reg[9:0] shiftL;
-
- always @(posedge clk)
- begin
- if(!rstn)begin shiftL<=9'h01;end
- else if(cnt==9)begin shiftL<={shiftL<<1};end//移位运算符
- else if(shiftL==10'h400)begin shiftL<=10'h01;end
- //end
- else begin
- shiftL<=shiftL;
- end
-
- end
-
- assign led=shiftL;
- endmodule
- module Led10flash_DEO_case(clk,rstn,led);
- input clk,rstn;
- output[9:0] led;
- //reg[9:0] led;
- //50MHz,20ns,20*500_000=10ms,2^19 count=[18:0]
- parameter dely1ms=500_000;
- reg[18:0] count;
- reg[3:0] cnt;
-
- always @(posedge clk or negedge rstn)
- begin
- if(!rstn) begin count<=18'd0;end
- else if(count==dely1ms) begin count<=16'd0; end
- else begin count<=count+1'd1;end
- end
-
- always @(posedge clk or negedge rstn)
- begin
- if(!rstn) begin cnt<=0;end
- else if(cnt==9) begin cnt<=0;end
- else if(count==dely1ms) begin cnt<=cnt+1'd1;end
-
- end
- reg[9:0]shiftL;
- reg[3:0]i;
-
- always@(posedge clk or negedge rstn)
- begin
- if(!rstn)begin shiftL<=10'h01;i<=4'd0;end
- else begin
- case(i)//case语句循环
- 4'd0:begin
- if(cnt==9)begin i<=i+4'd1;shiftL<=10'h02;end
- else begin shiftL<=10'h01;end
- end
- 4'd1:begin
- if(cnt==9)begin i<=i+4'd1;shiftL<=10'h04;end
- else begin shiftL<=10'h02;end
- end
- 4'd2:begin
- if(cnt==9)begin i<=i+4'd1;shiftL<=10'h08;end
- else begin shiftL<=10'h04;end
- end
- 4'd3:begin
- if(cnt==9)begin i<=i+4'd1;shiftL<=10'h10;end
- else begin shiftL<=10'h08;end
- end
- 4'd4:begin
- if(cnt==9)begin i<=i+4'd1;shiftL<=10'h20;end
- else begin shiftL<=10'h10;end
- end
- 4'd5:begin
- if(cnt==9)begin i<=i+4'd1;shiftL<=10'h40;end
- else begin shiftL<=10'h20;end
- end
- 4'd6:begin
- if(cnt==9)begin i<=i+4'd1;shiftL<=10'h80;end
- else begin shiftL<=10'h40;end
- end
- 4'd7:begin
- if(cnt==9)begin i<=i+4'd1;shiftL<=10'h100;end
- else begin shiftL<=10'h80;end
- end
- 4'd8:begin
- if(cnt==9)begin i<=i+4'd1;shiftL<=10'h200;end
- else begin shiftL<=10'h100;end
- end
- 4'd9:begin
- if(cnt==9)begin i<=4'd0;shiftL<=10'h01;end
- else begin shiftL<=10'h200;end
- end
- default:begin shiftL<=10'h01;i=4'd0;end
- endcase
- end
- end
-
- assign led=shiftL;
- endmodule
- module Led10flash_DEO_caseLR(clk,rstn,led);
- input clk,rstn;
- output[9:0] led;
-
- parameter dely=500_000;//19位,所以count为[18:0]
- reg[18:0]count;
- reg[3:0]cnt;
-
- always@(posedge clk or negedge rstn)
- begin
- if(!rstn) begin count<=18'd0;end
- else if(count==dely)begin count<=18'd0;end
- else count<=count+1'd1;
- end
-
- always@(posedge clk or negedge rstn)
- begin
- if(!rstn) begin cnt<=3'd0;end
- else if(cnt==9) begin cnt<=3'd0;end
- else if(count==dely)begin cnt<=cnt+1'd1;end
- end
-
- reg[9:0] shiftLR;
- reg[2:0] i;
-
- //连接符移位操作实现左右循环跑
- always @(posedge clk or negedge rstn)
- begin
- if(!rstn)begin i<=3'd0;shiftLR<=10'h01;end
- else if(cnt==9)begin//循环
- case(i)
- 3'd0:begin
- shiftLR<={shiftLR[8:0],shiftLR[9]}; //左移//if(cnt==9)
- if(shiftLR==10'h200) begin
- i=3'd1;
- shiftLR<=10'h100; //右移
- end
- end
- 3'd1:begin
- shiftLR<={shiftLR[0],shiftLR[9:1]};//右移 //if(cnt==9)
- if(shiftLR==10'h01)begin
- i=3'd0;
- shiftLR<=10'h02;//左移
- end
- end
- default:begin i<=3'd0; shiftLR<=10'h01;end
- endcase
- end
- end
-
- assign led=shiftLR;
-
- endmodule
- ///*******************************
- //这个是在另DEO开发板上跑通的,所要注意引脚数目和引脚分配//
- ///******************************
- module led10flash_DEO(clk,rst,led);
- input clk,rst;
- output[9:0] led;
- reg[9:0] led;
- reg[3:0] state;
- reg[24:0] cnt;
- reg[11:0] count;
- parameter s0='d0,s1='d1,s2='d2,s3='d3,s4='d4,s5='d5,s6='d6,s7='d7,s8='d8,s9='d9,s10='d10,s11='d11;
- parameter led0=8'b1111_1111,led1=8'b0000_0000,led2=8'b1000_0000,led3=8'b0100_0000,led4=8'b0010_0000,
- led5=8'b0001_0000,led6=8'b0000_1000,led7=8'b0000_0100,led8=8'b0000_0010,led9=8'b0000_0001,
- led10=8'b1010_1010,led11=8'b0101_0101;
- parameter dely=250_000_000;//延时0.5s,25位,[24:0]
- wire clk2hz;
-
- always @(posedge clk)
- begin
- if(!rst) cnt<=1'b0;
- else if(cnt==dely) cnt<=1'b0;
- else cnt<=cnt+1'b1;
- end
-
- assign clk2hz=cnt[24];
-
-
-
- always @(posedge clk2hz )
- begin
- if(!rst) state<=s0;
- else if(count==11) begin count<=0;end
- // else if(cnt==dely) begin //count<=count+1'b1;
- else
- case(state)
- s0:begin if(count==0)begin count<= count+1'd1;state<=s1;end
- end
- s1:begin if(count==1)begin count<= count+1'd1; state<=s2;end
- else state<=s1;
- end
- s2:begin if(count==2)begin count<= count+1'd1; state<=s3;end
- else state<=s2;
- end
- s3:begin if(count==3)begin count<= count+1'd1; state<=s4;end
- else state<=s3;
- end
- s4:begin if(count==4)begin count<= count+1'd1; state<=s5;end
- else state<=s4;
- end
- s5:begin if(count==5)begin count<= count+1'd1; state<=s6;end
- else state<=s5;
- end
- s6:begin if(count==6)begin count<= count+1'd1; state<=s7;end
- else state<=s6;
- end
- s7:begin if(count==7)begin count<= count+1'd1; state<=s8;end
- else state<=s7;
- end
- s8:begin if(count==8)begin count<= count+1'd1; state<=s9;end
- else state<=s8;
- end
- s9:begin if(count==9)begin count<= count+1'd1; state<=s10;end
- else state<=s9;
- end
- s10:begin if(count==10)begin count<= count+1'd1; state<=s11;end
- else state<=s10;
- end
- s11:begin if(count==11)begin count<= count+1'd1; state<=s0;end
- else state<=s0;
- end
- default:state<=s0;
- endcase
-
- end
-
- always @(state)
- begin
- case(state)
- s0:led<=led0;
- s1:led<=led1;
- s2:led<=led2;
- s3:led<=led3;
- s4:led<=led4;
- s5:led<=led5;
- s6:led<=led6;
- s7:led<=led7;
- s8:led<=led8;
- s9:led<=led9;
- s10:led<=led10;
- s11:led<=led11;
- default:led<=led0;
- endcase
- end
-
-
-
- endmodule
- ///在DEO开发板上已经跑通了//
- module Led10flash_DEO(clk,rst,led);
- input clk,rst;
- output[9:0] led;
- reg[9:0] led;
- reg[6:0] state;
- //parameter s0='d0,s1='d1,s2='d2,s3='d3,s4='d4,s5='d5,s6='d6,s7='d7,
- // s8='d8,s9='d9,s10='d10,s11='d11,s12='d12,s13='d13,s14='d14,
- // s15='d15,s16='d16,s17='d17,s18='d18,s19='d19,s20='d20,s21='d21,
- // s22='d22,s23='d23,s24='d24,s25='d25,s26='d26,s27='d27,s28='d28,s29='d29;
- parameter s0='d0,s1='d1,s2='d2,s3='d3,s4='d4,s5='d5,s6='d6,s7='d7,s8='d8,s9='d9,s10='d10,s11='d11,s12='d12, s13='d13,s14='d14,s15='d15,s16='d16,s17='d17,s18='d18,s19='d19,s20='d20,s21='d21,s22='d22,s23='d23, s24='d24,s25='d25,s26='d26,s27='d27,s28='d28,s29='d29;
- parameter led0=10'b1111_1111_11,
- led1=10'b0000_0000_00,
- led2=10'b1000_0000_00,
- led3=10'b0100_0000_00,
- led4=10'b0010_0000_00,
- led5=10'b0001_0000_00,
- led6=10'b0000_1000_00,
- led7=10'b0000_0100_00,
- led8=10'b0000_0010_00,
- led9=10'b0000_0001_00,
- led10=10'b1010_1010_10,
- led11=10'b0000_0000_01,
- led12=10'b0000_1100_00,
- led13=10'b0001_1110_00,
- led14=10'b0011_1111_00,
- led15=10'b0111_1111_10,
- led16=10'b1111_1111_11,
- led17=10'b1000_0000_01,
- led18=10'b1100_0000_11,//中间到两边
- led19=10'b1110_0001_11,
- led20=10'b1111_0011_11,
- led21=10'b1111_1111_11,
- led22=10'b0111_1111_10,//两边到中间
- led23=10'b0011_1111_00,
- led24=10'b0001_1110_00,
- led25=10'b0000_1100_00,
- led26=10'b0011_1111_00,
- led27=10'b0111_1111_10,
- led28=10'b1010_1010_10,
- led29=10'b0101_0101_01;
- //parameter dely=250_000_000;//延时0.5s,25位,[24:0]
- parameter dely=25_000_000;
- reg[24:0] cnt;
- reg[6:0] count;
- wire clk2hz;
-
- always @(posedge clk)
- begin
- if(!rst)cnt<=1'b0;
- else if(cnt==dely) cnt<=1'b0;//延时5s,频率为0.2hz一定要计算好,计数25_000_000次,25位
- else cnt<=cnt+1;//若要分频成为4hz的时钟,则需要计数12500_000次,24位
- end
-
- assign clk2hz=cnt[24];
-
- always @(posedge clk2hz )
- begin
- if(!rst) state<=s0;
- else if(count==29) begin count<=0;end
- // else if(cnt==dely) begin //count<=count+1'b1;
- else
- case(state)
- s0:begin if(count==0)begin count<= count+1'd1;state<=s1;end
- end
- s1:begin if(count==1)begin count<= count+1'd1; state<=s2;end
- else state<=s1;
- end
- s2:begin if(count==2)begin count<= count+1'd1; state<=s3;end
- else state<=s2;
- end
- s3:begin if(count==3)begin count<= count+1'd1; state<=s4;end
- else state<=s3;
- end
- s4:begin if(count==4)begin count<= count+1'd1; state<=s5;end
- else state<=s4;
- end
- s5:begin if(count==5)begin count<= count+1'd1; state<=s6;end
- else state<=s5;
- end
- s6:begin if(count==6)begin count<= count+1'd1; state<=s7;end
- else state<=s6;
- end
- s7:begin if(count==7)begin count<= count+1'd1; state<=s8;end
- else state<=s7;
- end
- s8:begin if(count==8)begin count<= count+1'd1; state<=s9;end
- else state<=s8;
- end
- s9:begin if(count==9)begin count<= count+1'd1; state<=s10;end
- else state<=s9;
- end
- s10:begin if(count==10)begin count<= count+1'd1; state<=s11;end
- else state<=s10;
- end
- s11:begin if(count==11)begin count<= count+1'd1; state<=s12;end
- else state<=s11;
- end
- s12:begin if(count==12)begin count<= count+1'd1; state<=s13;end
- else state<=s12;
- end
- s13:begin if(count==13)begin count<= count+1'd1; state<=s14;end
- else state<=s13;
- end
- s14:begin if(count==14)begin count<= count+1'd1; state<=s15;end
- else state<=s14;
- end
- s15:begin if(count==15)begin count<= count+1'd1; state<=s16;end
- else state<=s15;
- end
- s16:begin if(count==16)begin count<= count+1'd1; state<=s17;end
- else state<=s16;
- end
- s17:begin if(count==17)begin count<= count+1'd1; state<=s18;end
- else state<=s17;
- end
- s18:begin if(count==18)begin count<= count+1'd1; state<=s19;end
- else state<=s18;
- end
- s19:begin if(count==19)begin count<= count+1'd1; state<=s20;end
- else state<=s19;
- end
- s20:begin if(count==20)begin count<= count+1'd1; state<=s21;end
- else state<=s20;
- end
- s21:begin if(count==21)begin count<= count+1'd1; state<=s22;end
- else state<=s21;
- end
- s22:begin if(count==22)begin count<= count+1'd1; state<=s23;end
- else state<=s22;
- end
- s23:begin if(count==23)begin count<= count+1'd1; state<=s24;end
- else state<=s23;
- end
- s24:begin if(count==24)begin count<= count+1'd1; state<=s25;end
- else state<=s24;
- end
- s25:begin if(count==25)begin count<= count+1'd1; state<=s26;end
- else state<=s25;
- end
- s26:begin if(count==26)begin count<= count+1'd1; state<=s27;end
- else state<=s26;
- end
- s27:begin if(count==27)begin count<= count+1'd1; state<=s28;end
- else state<=s27;
- end
- s28:begin if(count==28)begin count<= count+1'd1; state<=s29;end
- else state<=s28;
- end
- s29:begin if(count==29)begin count<= 0;state<=s0;end //可以直接begin count<=0;state<=s0;end
- else begin state<=s0;count<=0;end
- end
- default:begin state<=s0;end
- endcase
-
- end
- always @(state)
- begin
- case(state)
- s0:led<=led0;
- s1:led<=led1;
- s2:led<=led2;
- s3:led<=led3;
- s4:led<=led4;
- s5:led<=led5;
- s6:led<=led6;
- s7:led<=led7;
- s8:led<=led8;
- s9:led<=led9;
- s10:led<=led10;
- s11:led<=led11;
- s12:led<=led12;
- s13:led<=led13;
- s14:led<=led14;
- s15:led<=led15;
- s16:led<=led16;
- s17:led<=led17;
- s18:led<=led18;
- s19:led<=led19;
- s20:led<=led20;
- s21:led<=led21;
- s22:led<=led22;
- s23:led<=led23;
- s24:led<=led24;
- s25:led<=led25;
- s26:led<=led26;
- s27:led<=led27;
- s28:led<=led28;
- s29:led<=led29;
- default:led<=led0;
- endcase
- end
- endmodule
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。