1
0
mirror of https://github.com/mist-devel/mist-board.git synced 2026-01-27 04:11:51 +00:00
Files
mist-devel.mist-board/tutorials/soc/lesson2/soc.v
2015-11-26 13:52:16 +01:00

74 lines
1.5 KiB
Verilog

// A simple system-on-a-chip (SoC) for the MiST
// (c) 2015 Till Harbaum
module soc (
input [1:0] CLOCK_27,
output SDRAM_nCS,
output VGA_HS,
output VGA_VS,
output [5:0] VGA_R,
output [5:0] VGA_G,
output [5:0] VGA_B
);
// de-activate unused SDRAM
assign SDRAM_nCS = 1;
wire pixel_clock;
// include VGA controller
vga vga (
.pclk (pixel_clock),
.cpu_clk ( pixel_clock ),
.cpu_wr ( copy_in_progress ),
.cpu_addr ( addr - 14'd1 ),
.cpu_data ( data ),
.hs (VGA_HS),
.vs (VGA_VS),
.r (VGA_R),
.g (VGA_G),
.b (VGA_B)
);
// include ROM containing the demo image
image image (
.clock ( pixel_clock ),
.address ( addr ),
.q ( data )
);
reg reset = 1'b1;
reg [13:0] addr;
wire [7:0] data;
reg copy_in_progress;
// A small state machine which copies image data from ROM into VRAM
// of the video controller. The state machines runs directly after power
// on and works on the falling clock edge since ROM and VRAM operate
// in the rising edge. The VRAM address is dereased by 1 since the ROM
// delivers it's data with one clock delay due to its internal registers.
always @(negedge pixel_clock) begin
if(reset) begin
reset <= 1'b0;
addr <= 14'd0;
copy_in_progress <= 1'b1;
end else begin
if(copy_in_progress) begin
addr <= addr + 14'd1;
if(addr == 15999)
copy_in_progress <= 1'b0;
end
end
end
// A PLL to derive the VGA pixel clocl from the MiSTs 27MHz
pll pll (
.inclk0(CLOCK_27[0]),
.c0(pixel_clock) // 25.175 MHz
);
endmodule