go-board-code/image_index_to_color.v

95 lines
1.7 KiB
Verilog

module ImageIndexToColor(
input i_Clk,
input [4:0] i_ColorIndex,
input i_DoWrite,
input [3:0] i_WriteColorIndex,
input [2:0] i_WriteColor_Red,
input [2:0] i_WriteColor_Green,
input [2:0] i_WriteColor_Blue,
output [2:0] o_Red,
output [2:0] o_Green,
output [2:0] o_Blue,
output reg o_WriteComplete
);
reg [8:0] r_colors[0:31];
initial begin
$readmemb("palette_data.txt", r_colors);
end
always @(posedge i_Clk) begin
if (i_DoWrite) begin
r_colors[i_WriteColorIndex] <= {
i_WriteColor_Red, i_WriteColor_Green, i_WriteColor_Blue
};
o_WriteComplete <= i_DoWrite;
end
end
assign o_Red = r_colors[i_ColorIndex][8:6];
assign o_Green = r_colors[i_ColorIndex][5:3];
assign o_Blue = r_colors[i_ColorIndex][2:0];
endmodule
module TestImageIndexToColor();
reg i_Clk = 0;
always #2 i_Clk <= !i_Clk;
reg [3:0] r_colorIndex = 0;
wire [2:0] w_Red, w_Green, w_Blue;
wire w_writeComplete;
reg r_doWrite = 0;
reg [2:0] r_WriteColor_Red = 3'b111;
reg [2:0] r_WriteColor_Green = 3'b000;
reg [2:0] r_WriteColor_Blue = 3'b001;
reg [3:0] r_writeColorIndex = 0;
ImageIndexToColor ii2c (
.i_Clk(i_Clk),
.i_ColorIndex(r_colorIndex),
.i_DoWrite(r_doWrite),
.i_WriteColorIndex(r_writeColorIndex),
.i_WriteColor_Red(r_WriteColor_Red),
.i_WriteColor_Green(r_WriteColor_Green),
.i_WriteColor_Blue(r_WriteColor_Blue),
.o_Red(w_Red),
.o_Green(w_Green),
.o_Blue(w_Blue),
.o_WriteComplete(w_writeComplete)
);
initial begin
$dumpfile("test.vcd");
$dumpvars;
#2;
#2;
r_colorIndex = 1;
#2;
#2;
r_doWrite = 1;
#2;
#2;
r_colorIndex = 15;
#2;
#2;
$finish;
end
endmodule