| //See README and tcl for more info | 
 |  | 
 | `default_nettype none | 
 |  | 
 | `include "defines.v" | 
 |  | 
 | module roi(input wire clk, | 
 |         input wire [DIN_N-1:0] din, output wire [DOUT_N-1:0] dout); | 
 |     parameter DIN_N = `DIN_N; | 
 |     parameter DOUT_N = `DOUT_N; | 
 |  | 
 |     wire [DIN_N-1:0] din_lut; | 
 |     wire [DOUT_N-1:0] dout_lut; | 
 |  | 
 |     genvar i; | 
 |     generate | 
 |         //CLK | 
 |         (* KEEP, DONT_TOUCH *) | 
 |         reg clk_reg; | 
 |         always @(posedge clk) begin | 
 |             clk_reg <= clk_reg; | 
 |         end | 
 |  | 
 |         //DIN | 
 |         for (i = 0; i < DIN_N; i = i+1) begin:ins | 
 |             (* KEEP, DONT_TOUCH *) | 
 |             LUT6 #( | 
 |                 .INIT(64'b01) | 
 |             ) lut ( | 
 |                 .I0(din[i]), | 
 |                 .I1(1'b0), | 
 |                 .I2(1'b0), | 
 |                 .I3(1'b0), | 
 |                 .I4(1'b0), | 
 |                 .I5(1'b0), | 
 |                 .O(din_lut[i])); | 
 |         end | 
 |  | 
 |         //DOUT | 
 |         for (i = 0; i < DOUT_N; i = i+1) begin:outs | 
 |             (* KEEP, DONT_TOUCH *) | 
 |             LUT6 #( | 
 |                 .INIT(64'b01) | 
 |             ) lut ( | 
 |                 .I0(dout_lut[i]), | 
 |                 .I1(1'b0), | 
 |                 .I2(1'b0), | 
 |                 .I3(1'b0), | 
 |                 .I4(1'b0), | 
 |                 .I5(1'b0), | 
 |                 .O(dout[i])); | 
 |         end | 
 |     endgenerate | 
 |  | 
 |     demoscene demoscene(.clk(clk), .din(din_lut), .dout(dout_lut)); | 
 | endmodule | 
 |  | 
 | module demoscene(input wire clk, | 
 |         input wire [DIN_N-1:0] din, output wire [DOUT_N-1:0] dout); | 
 |     parameter DIN_N = `DIN_N; | 
 |     parameter DOUT_N = `DOUT_N; | 
 |  | 
 |     //assign dout = 8'b10101010; | 
 |     demoscene_scroll dut(.clk(clk), .din(din), .dout(dout)); | 
 | endmodule | 
 |  | 
 | /* | 
 | Leftmost LED counts at one second | 
 | */ | 
 | module demoscene_counter(input wire clk, | 
 |         input wire [DIN_N-1:0] din, output wire [DOUT_N-1:0] dout); | 
 |     parameter DIN_N = `DIN_N; | 
 |     parameter DOUT_N = `DOUT_N; | 
 |     /* | 
 |     100 MHz clock | 
 |     Lets get MSB to 1 second | 
 |     Need 27 bits | 
 |     In [3]: math.log(100e6, 2) | 
 |     Out[3]: 26.5754247590989 | 
 |     */ | 
 |     reg [26:0] div; | 
 |     always @(posedge clk) begin | 
 |         div <= div + 1'b1; | 
 |     end | 
 |     assign dout = div[26:19]; | 
 | endmodule | 
 |  | 
 | //Loosely based on http://www.asic-world.com/code/hdl_models/lfsr.v | 
 | module lfsr(input wire clk, output wire dout); | 
 |     reg [7:0] out = 8'hAA; | 
 |     wire feedback = !(out[7] ^ out[3]); | 
 |  | 
 |     always @(posedge clk) begin | 
 |         out <= {out[6],out[5], | 
 |               out[4],out[3], | 
 |               out[2],out[1], | 
 |               out[0], feedback}; | 
 |     end | 
 |     assign dout = out[0]; | 
 | endmodule | 
 |  | 
 | // http://www.fpga4fun.com/Counters3.html | 
 | module lfsr2(input wire clk, output wire dout); | 
 |     reg [7:0] LFSR = 255; | 
 |     wire feedback = LFSR[7]; | 
 |     assign dout = LFSR[0]; | 
 |  | 
 |     always @(posedge clk) begin | 
 |       LFSR[0] <= feedback; | 
 |       LFSR[1] <= LFSR[0]; | 
 |       LFSR[2] <= LFSR[1] ^ feedback; | 
 |       LFSR[3] <= LFSR[2] ^ feedback; | 
 |       LFSR[4] <= LFSR[3] ^ feedback; | 
 |       LFSR[5] <= LFSR[4]; | 
 |       LFSR[6] <= LFSR[5]; | 
 |       LFSR[7] <= LFSR[6]; | 
 |     end | 
 | endmodule | 
 | /* | 
 | Scrolls an LSFR across | 
 | */ | 
 | module demoscene_scroll(input wire clk, | 
 |         input wire [DIN_N-1:0] din, output wire [DOUT_N-1:0] dout); | 
 |     parameter DIN_N = `DIN_N; | 
 |     parameter DOUT_N = `DOUT_N; | 
 |  | 
 |     reg [26:0] div; | 
 |     always @(posedge clk) begin | 
 |         div <= div + 1'b1; | 
 |     end | 
 |  | 
 |     wire randbit; | 
 |     lfsr2 lfsr(.clk(clk), .dout(randbit)); | 
 |  | 
 |     reg [7:0] leds = 8'hCC; | 
 |     reg last; | 
 |     reg tick; | 
 |     always @(posedge clk) begin | 
 |         last <= div[23]; | 
 |         tick <= div[23] ^ last; | 
 |  | 
 |         if (tick) begin | 
 |             leds = {leds, randbit}; | 
 |         end | 
 |     end | 
 |  | 
 |     assign dout = leds; | 
 | endmodule | 
 |  |