`timescale 1ns / 1ps
|
`timescale 1ns / 1ps
|
//////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////
|
// Company:
|
// Company:
|
// Engineer:
|
// Engineer:
|
//
|
//
|
// Create Date: 00:32:52 11/20/2008
|
// Create Date: 00:32:52 11/20/2008
|
// Design Name:
|
// Design Name:
|
// Module Name: color_fsm
|
// Module Name: color_fsm
|
// Project Name:
|
// Project Name:
|
// Target Devices:
|
// Target Devices:
|
// Tool versions:
|
// Tool versions:
|
// Description:
|
// Description:
|
//
|
//
|
// Dependencies:
|
// Dependencies:
|
//
|
//
|
// Revision:
|
// Revision:
|
// Revision 0.01 - File Created
|
// Revision 0.01 - File Created
|
// Additional Comments:
|
// Additional Comments:
|
//
|
//
|
//////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////
|
module color_fsm(reset,clk_20MHz,clk_2MHz,pixel_set_rgb,fifo_full,fifo_empty,
|
module color_fsm(reset,clk_20MHz,clk_2MHz,pixel_set_rgb,fifo_full,fifo_empty,
|
hcount,vcount,red_in,green_in,blue_in,
|
hcount,vcount,red_in,green_in,blue_in,
|
read_fifo,write_fifo,write_memory,read_memory,count);
|
read_fifo,write_fifo,write_memory,read_memory,count);
|
|
|
//Inputs
|
//Inputs
|
input clk_20MHz,clk_2MHz,reset,fifo_full,fifo_empty;
|
input clk_20MHz,clk_2MHz,reset,fifo_full,fifo_empty;
|
input [15:0] pixel_set_rgb;
|
input [15:0] pixel_set_rgb;
|
input [10:0] hcount;
|
input [10:0] hcount;
|
input [10:0] vcount;
|
input [10:0] vcount;
|
//Outputs
|
//Outputs
|
output red_in,green_in,blue_in,read_fifo,write_fifo;
|
output red_in,green_in,blue_in,read_fifo,write_fifo;
|
output write_memory, read_memory,count;
|
output write_memory, read_memory,count;
|
|
|
//regs
|
//regs
|
reg red_in, green_in, blue_in,read_fifo,write_fifo,read_memory,write_memory;
|
reg red_in, green_in, blue_in,read_fifo,write_fifo,read_memory,write_memory;
|
reg [2:0] pixel_state = 0;
|
reg [2:0] pixel_state = 0;
|
reg count = 0;
|
reg count = 0;
|
|
|
//parameters
|
//parameters
|
parameter [2:0] pixel_1 = 0;
|
parameter [2:0] pixel_1 = 0;
|
parameter [2:0] pixel_2 = 1;
|
parameter [2:0] pixel_2 = 1;
|
parameter [2:0] pixel_3 = 2;
|
parameter [2:0] pixel_3 = 2;
|
parameter [2:0] pixel_4 = 3;
|
parameter [2:0] pixel_4 = 3;
|
parameter [2:0] pixel_5 = 4;
|
parameter [2:0] pixel_5 = 4;
|
|
|
parameter [8:0] xpos_start = 192;
|
parameter [8:0] xpos_start = 192;
|
parameter [8:0] ypos_start = 48;
|
parameter [8:0] ypos_start = 48;
|
parameter [8:0] xpos_end = 448;
|
parameter [8:0] xpos_end = 448;
|
parameter [8:0] ypos_end = 432;
|
parameter [8:0] ypos_end = 432;
|
|
|
always @ (clk_2MHz)
|
always @ (clk_2MHz)
|
begin
|
begin
|
if(count == 0) begin
|
if(count == 0) begin
|
write_memory <= 0;
|
write_memory <= 0;
|
read_memory <= 1;
|
read_memory <= 1;
|
if(hcount == 649 && vcount == 479)
|
if(hcount == 649 && vcount == 479)
|
count <= 1;
|
count <= 1;
|
end
|
end
|
|
|
else if(count == 1) begin
|
else if(count == 1) begin
|
read_memory <= 0;
|
read_memory <= 0;
|
write_memory <= 1;
|
write_memory <= 1;
|
end
|
end
|
end
|
end
|
|
|
always @ (posedge clk_20MHz)
|
always @ (posedge clk_20MHz)
|
begin
|
begin
|
if(count == 1) begin
|
if(count == 1) begin
|
if(reset) begin
|
if(reset) begin
|
pixel_state <= pixel_1;
|
pixel_state <= pixel_1;
|
end
|
end
|
|
|
else if(vcount >= ypos_start && vcount < ypos_end) begin
|
else if(vcount >= ypos_start && vcount < ypos_end) begin
|
if(hcount >= xpos_start && hcount < xpos_end) begin
|
if(hcount >= xpos_start && hcount < xpos_end) begin
|
case(pixel_state)
|
case(pixel_state)
|
pixel_1 :
|
pixel_1 :
|
begin
|
begin
|
red_in <= pixel_set_rgb[2];
|
red_in <= pixel_set_rgb[2];
|
green_in <= pixel_set_rgb[1];
|
green_in <= pixel_set_rgb[1];
|
blue_in <= pixel_set_rgb[0];
|
blue_in <= pixel_set_rgb[0];
|
pixel_state <= pixel_2;
|
pixel_state <= pixel_2;
|
|
|
end
|
end
|
pixel_2 :
|
pixel_2 :
|
begin
|
begin
|
red_in <= pixel_set_rgb[5];
|
red_in <= pixel_set_rgb[5];
|
green_in <= pixel_set_rgb[4];
|
green_in <= pixel_set_rgb[4];
|
blue_in <= pixel_set_rgb[3];
|
blue_in <= pixel_set_rgb[3];
|
pixel_state <= pixel_3;
|
pixel_state <= pixel_3;
|
|
|
end
|
end
|
pixel_3 :
|
pixel_3 :
|
begin
|
begin
|
red_in <= pixel_set_rgb[8];
|
red_in <= pixel_set_rgb[8];
|
green_in <= pixel_set_rgb[7];
|
green_in <= pixel_set_rgb[7];
|
blue_in <= pixel_set_rgb[6];
|
blue_in <= pixel_set_rgb[6];
|
pixel_state <= pixel_4;
|
pixel_state <= pixel_4;
|
|
|
end
|
end
|
pixel_4 :
|
pixel_4 :
|
begin
|
begin
|
red_in <= pixel_set_rgb[11];
|
red_in <= pixel_set_rgb[11];
|
green_in <= pixel_set_rgb[10];
|
green_in <= pixel_set_rgb[10];
|
blue_in <= pixel_set_rgb[9];
|
blue_in <= pixel_set_rgb[9];
|
|
|
pixel_state <= pixel_5;
|
pixel_state <= pixel_5;
|
|
|
end
|
end
|
pixel_5 :
|
pixel_5 :
|
begin
|
begin
|
red_in <= pixel_set_rgb[14];
|
red_in <= pixel_set_rgb[14];
|
green_in <= pixel_set_rgb[13];
|
green_in <= pixel_set_rgb[13];
|
blue_in <= pixel_set_rgb[12];
|
blue_in <= pixel_set_rgb[12];
|
pixel_state <= pixel_1;
|
pixel_state <= pixel_1;
|
|
|
end
|
end
|
endcase
|
endcase
|
end
|
end
|
end
|
end
|
|
|
if(fifo_empty == 1)
|
if(fifo_empty == 1)
|
read_fifo <= 0;
|
read_fifo <= 0;
|
else
|
else
|
read_fifo <= 1;
|
read_fifo <= 1;
|
|
|
if(fifo_full == 1)
|
if(fifo_full == 1)
|
write_fifo <= 0;
|
write_fifo <= 0;
|
else
|
else
|
write_fifo <= 1;
|
write_fifo <= 1;
|
|
|
end
|
end
|
end
|
end
|
endmodule
|
endmodule
|
|
|