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