赞
踩
流水灯的实现方法:
想实现流水灯,只需用一个寄存器来对应开发板上的LED灯,初始时为寄存器中的某几位赋值为1,则开发板上对应的LED灯亮起。接着只需定时将寄存器进行移位,则开发板上的LED灯也跟着移位,即达到了流水灯的效果。想实现不同模式流水灯的转换,只需根据输入进行不同的寄存器初值赋值,以及采用不同的移位策略即可。
module LSD(clk,reset,SW,led); input clk,reset; input [1:0] SW; output reg [7:0] led; wire clk_2HZ; reg [1:0] CZ; Fdiv F(reset,clk,clk_2HZ); initial begin led <= 8'b0; end always @(posedge reset or posedge clk_2HZ) begin if(reset) begin led<=8'b00000000; end else if( led== 8'b0) begin case(SW) 2'b00:begin led<=8'b10000000;CZ<=SW; end 2'b01:begin led<=8'b00000001;CZ<=SW; end 2'b10:begin led<=8'b00011000;CZ<=SW; end 2'b11:begin led<=8'b10000001;CZ<=SW; end endcase end else if( SW!=CZ) begin case(SW) 2'b00:begin led<=8'b10000000;CZ<=SW; end 2'b01:begin led<=8'b00000001;CZ<=SW; end 2'b10:begin led<=8'b00011000;CZ<=SW; end 2'b11:begin led<=8'b10000001;CZ<=SW; end endcase end else begin case(SW) 2'b00:begin led[7:0] <= {led[0],led[7:1]};end 2'b01:begin led[7:0] <= {led[6:0],led[7]};end 2'b10:begin led[7:4] <= {led[6:4],led[7]};led[3:0] <= {led[0],led[3:1]};end 2'b11:begin led[7:4] <= {led[4],led[7:5]};led[3:0] <= {led[2:0],led[3]};end endcase end end endmodule module Fdiv(///分频 input rst_, input clk_25M, output reg clk_out ); reg [31:0] cnt; initial begin cnt =32'd0; end initial begin clk_out = 0; end always @(posedge rst_ or posedge clk_25M) begin if(rst_) begin cnt<=32'd0; clk_out<=1'b0;end else if (cnt==32'd12499999) begin clk_out <=~clk_out; cnt <= 32'd0; end else begin cnt<= cnt+1'b1; clk_out <= 0; end end endmodule
always #20 clk=~clk; initial begin clk=0; reset = 0; SW = 00; #2000000000; reset = 0;SW = 01; #2000000000; reset = 1;SW = 00; #1000000000; reset = 0;SW = 10; #2000000000; reset = 0;SW = 11; #2000000000; end endmodule
从波形图可以看出,起初寄存器led[7:0]未赋值,当第一次时钟脉冲累计到阈值时led[7:0]赋值为第一种模式,此后当时钟脉冲再次到达阈值时,led[7:0]进行移位,实现了流水灯的效果。
NET "led[7]" IOSTANDARD = LVCMOS18; NET "led[6]" IOSTANDARD = LVCMOS18; NET "led[5]" IOSTANDARD = LVCMOS18; NET "led[4]" IOSTANDARD = LVCMOS18; NET "led[3]" IOSTANDARD = LVCMOS18; NET "led[2]" IOSTANDARD = LVCMOS18; NET "led[1]" IOSTANDARD = LVCMOS18; NET "led[0]" IOSTANDARD = LVCMOS18; NET "SW[1]" IOSTANDARD = LVCMOS18; NET "SW[0]" IOSTANDARD = LVCMOS18; NET "led[7]" LOC = R1; NET "led[6]" LOC = P2; NET "led[5]" LOC = P1; NET "led[4]" LOC = N2; NET "led[3]" LOC = M1; NET "led[2]" LOC = M2; NET "led[1]" LOC = L1; NET "led[0]" LOC = J2; NET "SW[1]" LOC = T3; NET "SW[0]" LOC = U3; NET "clk" LOC = H4; NET "reset" LOC = R4; NET "clk" IOSTANDARD = LVCMOS18; NET "reset" IOSTANDARD = LVCMOS18; NET "reset" PULLDOWN; NET "SW[1]" PULLDOWN; NET "SW[0]" PULLDOWN;
工程文件: 流水灯实验.
关注我即可下载
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。