Skip to content

Instantly share code, notes, and snippets.

@hakatashi
Last active August 29, 2015 14:04
Show Gist options
  • Save hakatashi/aca71903ab923b353a2e to your computer and use it in GitHub Desktop.
Save hakatashi/aca71903ab923b353a2e to your computer and use it in GitHub Desktop.
module display(row, col, red, green, blue, color, up, down, left, right, vnotactive, CLK, RST);
input [9:0] row, col;
input CLK, RST, color, up, down, left, right, vnotactive;
output red, green, blue;
reg red, green, blue;
reg [23:0] count, bang;
reg [9:0] originX, originY, slideY, randX;
reg [1:0] key_state;
reg [15:0] state;
function [15:0] Random;
input [15:0] seed;
integer value;
begin
value = (16'd35245 * state + 16'd1235) % 17'h10000;
state = value;
Random = value;
end
endfunction
always @(posedge CLK or negedge RST) begin
if(!RST) begin
red <= 1'b1;
green <= 1'b1;
blue <= 1'b1;
count <= 24'd0;
slideY <= 10'd0;
end else begin
integer vcol;
if (count == 24'd40000000) begin
count <= 24'd0;
end else begin
count <= count + 24'd1;
end
if (bang == 24'd0 && !up) begin
bang = 24'd40000000;
end
if (bang != 24'd0) begin
bang = bang - 24'd1;
if (count % 24'd500000 == 24'd0) begin
integer range;
range = bang / 24'd400000;
randX = Random(0) % (range * 2) - range;
end
end
vcol = (col + randX) % 10'd800;
if ((10'd400 - vcol) * (10'd400 - vcol) + (10'd300 - row) * (10'd300 - row) < 20'd40000) begin
integer X, cols, rows;
if (count % 24'd500000 == 24'd0) begin
slideY <= (slideY + 10'd1) % 10'd600;
end
rows = (row + slideY) % 10'd600;
cols = (col + rows * rows) % 10'd800;
if (rows % 10'd200 < 10'd100) begin
X = rows % 10'd100;
end else begin
X = 10'd100 - rows % 10'd100;
end
case (rows / 10'd100)
3'd0: begin
red <= 1'b1;
if (cols % 5'd10 * 5'd10 < X) begin
green <= 1'b1;
end else begin
green <= 1'b0;
end
blue <= 1'b0;
end
3'd1: begin
if (cols % 5'd10 * 5'd10 < X) begin
red <= 1'b1;
end else begin
red <= 1'b0;
end
green <= 1'b1;
blue <= 1'b0;
end
3'd2: begin
red <= 1'b0;
green <= 1'b1;
if (cols % 5'd10 * 5'd10 < X) begin
blue <= 1'b1;
end else begin
blue <= 1'b0;
end
end
3'd3: begin
red <= 1'b0;
if (cols % 5'd10 * 5'd10 < X) begin
green <= 1'b1;
end else begin
green <= 1'b0;
end
blue <= 1'b1;
end
3'd4: begin
if (cols % 5'd10 * 5'd10 < X) begin
red <= 1'b1;
end else begin
red <= 1'b0;
end
green <= 1'b0;
blue <= 1'b1;
end
3'd5: begin
red <= 1'b1;
green <= 1'b0;
if (cols % 5'd10 * 5'd10 < X) begin
blue <= 1'b1;
end else begin
blue <= 1'b0;
end
end
endcase
end else begin
red <= 1'b0;
green <= 1'b0;
blue <= 1'b0;
end
end
end
always @(posedge CLK or negedge RST) begin
if(!RST) begin
originX <= 10'd300;
originY <= 10'd200;
key_state <= 2'd0;
end
else begin
case(key_state)
2'd0: begin
if(vnotactive) key_state <= 2'd1;
end
2'd1: begin
if(!up) originY <= originY - 10'd2;
else if(!down) originY <= originY + 10'd2;
if(!left) originX <= originX - 10'd2;
else if(!right) originX <= originX + 10'd2;
if(!up|!down|!left|!right) key_state <= 2'd2;
else if(!vnotactive) key_state <= 2'd0;
end
2'd2: begin
if(!vnotactive) key_state <= 2'd0;
end
2'd3: begin
end
endcase
end
end
endmodule
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment