赞
踩
//8彩灯控制三种花色,频率:1hz,50MHz //总体思路:用计数器的计数状态控制闪烁不同的花色: // 0-->>00000000;1-->>10000000;2-->>11000000 //花色设计:(1)左-->右亮;右-->左灭;16时钟; // (2)两边——>中间亮;中间-->两边灭;8时钟 // (3)奇偶交替亮灭四次;4时钟 //leds信号:cnt1==0:leds==00000000;cnt1==1:leds=10000000 //一个周期一共需要:16+8+4+1(初始状态)=29 module flow_leds_ctrl ( clk, rst_n, leds, ); input clk; input rst_n; output[7:0] leds; reg [25:0]cnt0; reg [4:0]cnt1; reg [7:0]leds; wire add_cnt0; wire end_cnt0; wire add_cnt1; wire end_cnt1; parameter SCOUNT=50_000_000; //时钟计数器 always @(posedge clk or negedge rst_n)begin if(!rst_n)begin cnt0<=0; end else if(add_cnt0)begin if(end_cnt0) cnt0<=0; else cnt0<=cnt0+1; end end assign add_cnt0 = 1; assign end_cnt0 = add_cnt0 && cnt0 == SCOUNT-1; //leds计数器 always @(posedge clk or negedge rst_n)begin if(!rst_n)begin cnt1<=0; end else if(add_cnt1)begin if(end_cnt1) cnt1<=0; else cnt1<=cnt1+1; end end assign add_cnt1 = end_cnt0; assign end_cnt1 = add_cnt1 && cnt1 == 29-1; //花色设计: (1)左-->右亮;右-->左灭;16时钟; // (2)两边——>中间亮;中间-->两边灭;8时钟 // (3)奇偶交替亮灭四次;4时钟 //leds信号:cnt1==0:leds==00000000;cnt1==1:leds=10000000 always @(*)begin case(cnt1) 0:leds=00000000; 1:leds=10000000; 2:leds=11000000; 3:leds=11100000; 4:leds=11110000; 5:leds=11111000; 6:leds=11111100; 7:leds=11111110; 8:leds=11111111; 9:leds=11111110; 10:leds=11111100; 11:leds=11111000; 12:leds=11110000; 13:leds=11100000; 14:leds=11000000; 15:leds=10000000; 16:leds=00000000; 17:leds=10000001; 18:leds=11000011; 19:leds=11100111; 20:leds=11111111; 21:leds=11100111; 22:leds=11000011; 23:leds=10000001; 24:leds=00000000; 25:leds=01010101; 26:leds=10101010; 27:leds=01010101; 28:leds=10101010; default:leds=00000000; endcase end endmodule
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。