名称:流水灯控制设计Verilog代码VIVADO仿真
软件:VIVADO
语言:Verilog
代码功能:
流水灯控制
1.设计要求
设计能让一排灯(8只)自动改变显示花样的控制系统。可将实验板上的一排发光二极管作为彩灯用。控制器应有两种控制方式:
◆ 规则变化。变化节拍有0.5秒和0.25秒两种,交替出现,每种节拍可有8种花样,各执行或二个周期后轮换。彩灯变化方向有单向移动,双向移动,跳跃移动等。
◆ 随机变化。变化花样相同,但节拍及花样的转换都随机出现。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1.工程文件
2.程序文件
3.程序运行
4.管脚约束(xdc)
5.Testbench
6.仿真图
整体仿真图,前半部分为0.25s的变化频率,后半部分为0.5s的变化频率
8种变化效果
1、2
3、4
5、6
7、8
部分代码展示:
`timescale?1ns?/?1ps ////////////////////////////////////////////////////////////////////////////////// //?Company:? //?Engineer:? //? //?Create?Date:?2016/03/25?23:33:57 //?Design?Name:? //?Module?Name:?paomadeng //?Project?Name:? //?Target?Devices:? //?Tool?Versions:? //?Description:? //? //?Dependencies:? //? //?Revision: //?Revision?0.01?-?File?Created //?Additional?Comments: //? ////////////////////////////////////////////////////////////////////////////////// module?paomadeng( ????input?clk, ????input?reset, ????output?reg?[15:0]?light ????); reg?[1:0]?speed=2'd0; reg?[6:0]?led_count=7'b1111111; always@(posedge?led_clk) if(reset==1)begin ????led_count<=6'd0; ????speed<=2'd0; end ????else? ????????if(led_count==7'd127) ????????????begin ????????????????led_count<=6'd0; ????????????????speed<=speed+2'd1; ????????????end ????????else?begin ????????????????led_count<=led_count+6'd1; ????????????????speed<=speed;???????? ????????end reg?[4:0]?div_cnt=5'd0; always@(posedge?clk) ????if(reset==1) ????????div_cnt<=5'd0; ????else ????????div_cnt<=div_cnt+5'd1; wire?clk_1; wire?clk_2; wire?clk_3; wire?clk_4; assign?clk_1=div_cnt[1]; assign?clk_2=div_cnt[2]; assign?clk_3=div_cnt[3]; assign?clk_4=div_cnt[4]; reg?led_clk=0; always@(posedge?clk) ????case(speed) ????????2'b00:led_clk<=clk_1; ????????2'b01:led_clk<=clk_2; ????????2'b10:led_clk<=clk_3; ????????2'b11:led_clk<=clk_4; ????????default:; ????endcase reg?[15:0]?huayang_1=16'b1000000000000000; always@(posedge?led_clk) ????if(huayang_1==16'b1000000000000000) ????????huayang_1<=16'b0000000000000001; ????else ????????huayang_1[15:0]<={huayang_1[14:0],huayang_1[15]}; reg?[15:0]?huayang_2=16'b0000000000000001; always@(posedge?led_clk) ????if(huayang_2==16'b0000000000000001) ????????huayang_2<=16'b1000000000000000; ????else ????????huayang_2[15:0]<={huayang_2[0],huayang_2[15:1]}; reg?[15:0]?huayang_3=16'b1000000000000001; always@(posedge?led_clk) ????if(huayang_3==16'b1000000000000001) ????????huayang_3<=16'b0000000110000000; ????else?begin ????????huayang_3[15:8]<={huayang_3[14:8],huayang_3[15]};
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=900
							阅读全文
							
						
					
								
								
								
459