module led_shift(UP, DOWN, RES, CLK, LED); input UP, DOWN, RES, CLK; output reg [7:0] LED; reg [7:0] STATE_UP, STATE_DOWN, STATE; reg pre_sync_UP, sync_UP, pre_sync_DOWN, sync_DOWN; always @(posedge CLK) begin if(!RES) begin LED = 8'b00000001; pre_sync_UP <= 1; sync_UP <= 1; pre_sync_DOWN <= 1; sync_DOWN <= 1; end else begin pre_sync_UP <= UP; sync_UP <= pre_sync_UP; pre_sync_DOWN <= DOWN; sync_DOWN <= pre_sync_DOWN; LED <= STATE; end end always@(*) begin if(sync_UP && !pre_sync_UP) begin if(STATE == 8'b10000000) STATE = 8'b10000000; else STATE <= LED << 1; end else begin if(sync_DOWN && !pre_sync_DOWN) begin if(STATE == 8'b00000001) STATE = 8'b00000001; else STATE <= LED >> 1; end else begin STATE <= LED; end end end endmodule