82 lines
1.7 KiB
Coq
82 lines
1.7 KiB
Coq
|
module VGAImageRenderer(
|
||
|
input i_Clk,
|
||
|
input i_HSync,
|
||
|
input i_VSync,
|
||
|
|
||
|
output o_HSync,
|
||
|
output o_VSync,
|
||
|
output [2:0] o_Red,
|
||
|
output [2:0] o_Green,
|
||
|
output [2:0] o_Blue
|
||
|
);
|
||
|
// sync signals
|
||
|
wire w_HSync_FromCurrentPos, w_VSync_FromCurrentPos;
|
||
|
wire w_IsActiveArea;
|
||
|
|
||
|
// screen location
|
||
|
wire [9:0] w_X, w_Y;
|
||
|
wire [6:0] w_CellX;
|
||
|
wire [5:0] w_CellY;
|
||
|
|
||
|
// ram reading
|
||
|
reg r_doImageRAMRead = 1;
|
||
|
reg r_doImageRAMWrite = 0;
|
||
|
wire w_imageRAMReadDataReady;
|
||
|
wire [4:0] w_imageRAMReadData;
|
||
|
|
||
|
wire [2:0] w_Red, w_Green, w_Blue;
|
||
|
|
||
|
VGA_Current_Beam_Position currentPos (
|
||
|
.i_Clk(i_Clk),
|
||
|
.i_HSync(i_HSync),
|
||
|
.i_VSync(i_VSync),
|
||
|
|
||
|
.o_HSync(w_HSync_FromCurrentPos),
|
||
|
.o_VSync(w_VSync_FromCurrentPos),
|
||
|
.o_X(w_X),
|
||
|
.o_Y(w_Y),
|
||
|
.o_IsActiveArea(w_IsActiveArea)
|
||
|
);
|
||
|
|
||
|
assign w_CellX = w_X[9:3];
|
||
|
assign w_CellY = w_Y[9:3];
|
||
|
|
||
|
// takes a tick, so add one to HSync/VSync
|
||
|
ImageRAM imageRam (
|
||
|
.i_Clk(i_Clk),
|
||
|
.i_ReadX(w_CellX),
|
||
|
.i_ReadY(w_CellY),
|
||
|
.i_doRead(r_doImageRAMRead),
|
||
|
.o_ReadDataReady(w_imageRAMReadDataReady),
|
||
|
.o_ReadData(w_imageRAMReadData),
|
||
|
|
||
|
.i_WriteX(),
|
||
|
.i_WriteY(),
|
||
|
.i_WriteData(),
|
||
|
.i_DoWrite(r_doImageRAMWrite),
|
||
|
.o_WriteComplete()
|
||
|
);
|
||
|
|
||
|
ImageIndexToColor palette (
|
||
|
.i_Clk(i_Clk),
|
||
|
.i_ColorIndex(w_imageRAMReadData),
|
||
|
.o_Red(w_Red),
|
||
|
.o_Green(w_Green),
|
||
|
.o_Blue(w_Blue),
|
||
|
|
||
|
.i_DoWrite(r_doImageRAMWrite),
|
||
|
.i_WriteColorIndex(),
|
||
|
.i_WriteColor_Red(),
|
||
|
.i_WriteColor_Green(),
|
||
|
.i_WriteColor_Blue(),
|
||
|
.o_WriteComplete()
|
||
|
);
|
||
|
|
||
|
assign o_Red = w_IsActiveArea ? w_Red : 0;
|
||
|
assign o_Green = w_IsActiveArea ? w_Green : 0;
|
||
|
assign o_Blue = w_IsActiveArea ? w_Blue : 0;
|
||
|
|
||
|
assign o_HSync = w_HSync_FromCurrentPos;
|
||
|
assign o_VSync = w_VSync_FromCurrentPos;
|
||
|
endmodule
|