tariq786

bi-drectional led walker

Dec 23rd, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*`timescale 1ns / 1ps
  2. //////////////////////////////////////////////////////////////////////////////////
  3. // Company:
  4. // Engineer:
  5. //
  6. // Create Date:    03:01:54 12/23/2019
  7. // Design Name:
  8. // Module Name:    led_march2
  9. // Project Name:
  10. // Target Devices:
  11. // Tool versions:
  12. // Description:
  13. //
  14. // Dependencies:
  15. //
  16. // Revision:
  17. // Revision 0.01 - File Created
  18. // Additional Comments:
  19. //
  20. //////////////////////////////////////////////////////////////////////////////////
  21. module led_march2(
  22.     input i_clk,
  23.     output reg [7:0] o_led
  24.     );
  25. reg toggle;
  26. initial
  27.     begin
  28.         o_led = 8'd1;
  29.         toggle = 0;
  30.     end
  31. always @(posedge i_clk)
  32.     begin
  33.         o_led <= (toggle==1) ? o_led >> 1 : o_led << 1;
  34.         if(o_led == 8'd0)
  35.             begin
  36.             if(toggle)
  37.                 o_led <= 8'h2;
  38.                 else
  39.                     o_led <= 8'h40;
  40.                 toggle = ~toggle;
  41.             end
  42.     end
  43.  
  44. endmodule
  45. */
  46.  
  47.  
  48. module led_march2(input i_clk,
  49.                   output reg [7:0] o_led
  50.                   );
  51.  
  52. reg reverse;
  53. reg [2:0] counter;
  54. reg [23:0] speed_control;
  55. reg stb;
  56. initial
  57.     begin
  58.      reverse = 0;
  59.      counter = 0;
  60.      o_led   = 1;
  61.      speed_control = 0;
  62.      stb = 0;
  63.     end
  64.  
  65. always @(posedge i_clk)
  66.   if(stb)
  67.   begin
  68.   if(~reverse)
  69.      o_led <= {o_led[6:0],o_led[7]};   //walking right to left
  70.   else
  71.       o_led <= {o_led[0],o_led[7:1]};  //walking left to right
  72.     end
  73.  
  74. always  @(posedge i_clk)
  75.     counter <= counter + 1;
  76.  
  77. always @(posedge i_clk)
  78.         {stb,speed_control} <= speed_control + 1;
  79.    
  80. always @*
  81. begin
  82.     reverse = 0;
  83.    if(counter == 3'd7)
  84.         reverse = ~reverse;
  85.    end
  86.  
  87. endmodule
Add Comment
Please, Sign In to add comment