【流水灯】— 黑金程序+按位拼接方法
方法一:
黑金使用 计数器 来控制4个LED灯
计数器分别去表示1s、2s、3s、4s这几个时间,然后实现流水灯
//================================================================================ // Revision History: // Date By Revision Change Description //-------------------------------------------------------------------------------- // 2017/7/19 meisq 1.0 Original //*******************************************************************************/ `timescale 1ns / 1ps module led_test ( input clk, // system clock 50Mhz on board input rst_n, // reset ,low active output led1, // led on core board output reg[3:0] led // LED,use for control the LED signal on expansion board ); assign led1 = led[0]; //define the time counter reg [31:0] timer; // cycle counter:from 0 to 4 sec always@(posedge clk or negedge rst_n) begin if (rst_n == 1'b0) timer <= 32'd0; //when the reset signal valid,time counter clearing else if (timer == 32'd199_999_999) //4 seconds count(50M*4-1=199999999) timer <= 32'd0; //count done,clearing the time counter else timer <= timer + 32'd1; //timer counter = timer counter + 1 end // LED control always@(posedge clk or negedge rst_n) begin if (rst_n == 1'b0) led <= 4'b0000; //when the reset signal active else if (timer == 32'd49_999_999) //time counter count to 1st sec,LED1 lighten led <= 4'b0001; else if (timer == 32'd99_999_999) //time counter count to 2nd sec,LED2 lighten led <= 4'b0010; else if (timer == 32'd149_999_999) //time counter count to 3rd sec,LED3 lighten led <= 4'b0100; else if (timer == 32'd199_999_999) //time counter count to 4th sec,LED4 lighten led <= 4'b1000; end endmodule
方法二:
// ---------------------------- // 功能:流水灯 // 细节:每个灯每隔1秒闪一次。不需要按键控制,上电就开始跑 // ---------------------------- module liu_led ( input Clk, input Rst_n, input key_flag, output reg [3:0]LED ); reg [25:0] count; always@(posedge Clk or negedge Rst_n)begin if(Rst_n == 1'b0) count <= 26'b0; else if(count == 26'd49_999_999) count <= 25'b0; // else if(key_flag == 1'b1) // count <= 25'b0; else count <= count + 25'd1; end always@(posedge Clk or negedge Rst_n)begin if(Rst_n == 1'b0) LED <= 4'b1110; // 高电平灯灭 // else if(key_flag == 1'b1) else if(count == 26'd49_999_999) LED <= {LED[2:0],LED[3]}; //高3位和低4位拼接 else LED <= LED; end endmodule

浙公网安备 33010602011771号