Advertisement
RickCHodgin

working k.i.t.t. example

Apr 29th, 2017
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module top (clk_in, pushbutton, resetbutton, allonbutton, altbutton, kittbutton, leds);
  2.    
  3.     input    wire        clk_in;
  4.     input    wire        pushbutton;
  5.     input    wire        resetbutton;
  6.     input    wire        allonbutton;
  7.     input    wire        altbutton;
  8.     input    wire        kittbutton;
  9.     output   wire[7:0]   leds;
  10.  
  11.     // Input clock 50 mhz (board has an oscillator, not just a crystal)
  12.     wire                clk1;    // 400 MHz
  13.     wire                clk2;    // 200 MHz
  14.     wire                clkOk;
  15.    
  16.      // Push the 50 mhz clock into a PLL and have it generate 400 and 25 mhz clocks.
  17.     // You can modify the generated frequencies by clicking on the pll.ipx file in Diamond
  18.     // modifying values in the GUI and regenerating.
  19.     pll pll100 (.CLK(clk_in), .CLKOP(clk1), .CLKOK(clk2), .LOCK(clkOk));
  20.  
  21.     slow_counter counter(.clock(clk1), .enable(pushbutton), .reset(resetbutton), .all_on(allonbutton), .alt(altbutton), .kitt(kittbutton), .output_byte(leds));
  22.  
  23. endmodule
  24.  
  25. module slow_counter (clock, enable, reset, all_on, alt, kitt, output_byte);
  26.  
  27.     input wire clock;
  28.     input wire enable;
  29.     input wire reset;
  30.     input wire all_on;
  31.     input wire alt;
  32.     input wire kitt;
  33.     output reg[7:0] output_byte;
  34.    
  35.     reg [31:0]   counter;
  36.     reg [7:0]    kittlight;
  37.     reg [31:0]   kittcounter;
  38.     reg [4:0]    kittstep;
  39.     reg          kittdirection;
  40.    
  41.     initial
  42.     begin
  43.         output_byte      = 8'b11111111;
  44.         kittlight        = 8'b00000001;
  45.         kittcounter      = 32'b0;
  46.         kittstep         = 32'b0;
  47.         kittdirection    = 1'b1;
  48.         counter          = 32'b0;
  49.     end
  50.    
  51.     always @(posedge clock)
  52.     begin
  53.         if (reset == 1'b0)
  54.         begin
  55.             counter <= 32'b0;
  56.             output_byte <= ~counter[23:16];
  57.         end
  58.         else if (all_on == 1'b0)
  59.         begin
  60.             counter <= 32'b11111111111111111111111;
  61.             output_byte <= ~counter[23:16];
  62.         end
  63.         else if (kitt == 1'b0)
  64.         begin
  65.             counter <= 32'b10101010101010101010101;
  66.             output_byte <= ~counter[23:16];
  67.         end
  68.         else if (alt == 1'b0)
  69.         begin
  70.             // Increase our counter
  71.             kittcounter <= kittcounter + 1'b1;
  72.             if (kittcounter[16] == 1'b1)
  73.             begin
  74.                 // Reset the counter
  75.                 kittcounter <= 32'b0;
  76.                
  77. // Note:  I tried using various syntaxes for a shift and none worked:  kittlight[7:0] <= (kittlight[7:0] << 1'b1);
  78. // Note:  I added a double-light for my son to see
  79.                 // Are we going left or right?
  80.                 if (kittdirection == 1'b1)
  81.                 begin
  82.                     // Going left
  83.                     if (kittstep == 0) begin
  84.                         kittlight <= 8'b10000001;
  85.                     end
  86.                     else if (kittstep == 1) begin
  87.                         kittlight <= 8'b01000010;
  88.                     end
  89.                     else if (kittstep == 2) begin
  90.                         kittlight <= 8'b00100100;
  91.                     end
  92.                     else if (kittstep == 3) begin
  93.                         kittlight <= 8'b00011000;
  94.                     end
  95.                     else if (kittstep == 4) begin
  96.                         kittlight <= 8'b00011000;
  97.                     end
  98.                     else if (kittstep == 5) begin
  99.                         kittlight <= 8'b00100100;
  100.                     end
  101.                     else if (kittstep == 6) begin
  102.                         kittlight <= 8'b01000010;
  103.                     end
  104.                     else if (kittstep == 7) begin
  105.                         kittlight <= 8'b10000001;
  106.                     end
  107.                 end
  108.                 else
  109.                 begin
  110.                     // Going right
  111.                     if (kittstep == 0) begin
  112.                         kittlight <= 8'b10000001;
  113.                     end
  114.                     else if (kittstep == 1) begin
  115.                         kittlight <= 8'b01000010;
  116.                     end
  117.                     else if (kittstep == 2) begin
  118.                         kittlight <= 8'b00100100;
  119.                     end
  120.                     else if (kittstep == 3) begin
  121.                         kittlight <= 8'b00011000;
  122.                     end
  123.                     else if (kittstep == 4) begin
  124.                         kittlight <= 8'b00011000;
  125.                     end
  126.                     else if (kittstep == 5) begin
  127.                         kittlight <= 8'b00100100;
  128.                     end
  129.                     else if (kittstep == 6) begin
  130.                         kittlight <= 8'b01000010;
  131.                     end
  132.                     else if (kittstep == 7) begin
  133.                         kittlight <= 8'b10000001;
  134.                     end
  135.                 end
  136.            
  137.                 // If we're reached the last step, change direciton
  138.                 kittstep <= kittstep + 1'b1;
  139.                 if (kittstep[3] == 1'b1) begin
  140.                     kittstep[4:0] <= 4'b0;
  141.                     kittdirection <= ~kittdirection;
  142.                 end
  143.  
  144.             end
  145.            
  146.             // Always update the light
  147.             output_byte <= ~kittlight[7:0];
  148.         end
  149.         else if (enable == 1'b0)
  150.         begin
  151.             counter <= counter + 1'b1;
  152.             output_byte <= ~counter[23:16];
  153.         end
  154.     end
  155.  
  156. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement