1
0
mirror of https://github.com/Gehstock/Mist_FPGA.git synced 2026-01-25 19:45:57 +00:00
Files
Gehstock.Mist_FPGA/Arcade_MiST/ArcadeMenu_MIST/rtl/menu.sv
Gehstock 0806343c16 Some Updates/Releases
Thanks to Slingshot
2019-12-06 03:04:11 +01:00

179 lines
3.6 KiB
Systemverilog

////////////////////////////////////////////////////////////////////////////////
//
//
//
// MENU for MIST board
// (C) 2016 Sorgelig
//
//
//
////////////////////////////////////////////////////////////////////////////////
module MENU(
input CLOCK_27, // Input clock 27 MHz
output [5:0] VGA_R,
output [5:0] VGA_G,
output [5:0] VGA_B,
output VGA_HS,
output VGA_VS,
output LED,
input SPI_SCK,
output SPI_DO,
input SPI_DI,
input SPI_SS3,
input CONF_DATA0,
output [12:0] SDRAM_A,
inout [15:0] SDRAM_DQ,
output SDRAM_DQML,
output SDRAM_DQMH,
output SDRAM_nWE,
output SDRAM_nCAS,
output SDRAM_nRAS,
output SDRAM_nCS,
output [1:0] SDRAM_BA,
output SDRAM_CLK,
output SDRAM_CKE
);
assign LED = 1;
wire clk_x2, clk_pix, clk_ram, locked;
pll pll(
.inclk0(CLOCK_27),
.c0(clk_ram),
.c1(SDRAM_CLK),
.c2(clk_x2),
.c3(clk_pix),
.locked(locked)
);
//______________________________________________________________________________
//
// MIST ARM I/O
//
wire scandoubler_disable;
wire ypbpr;
wire key_pressed;
wire [7:0] key_code;
wire key_strobe;
user_io #(
.STRLEN(6))
user_io(
.clk_sys (clk_x2 ),
.conf_str("MENU;;"),
.SPI_CLK (SPI_SCK ),
.SPI_SS_IO (CONF_DATA0 ),
.SPI_MISO (SPI_DO ),
.SPI_MOSI (SPI_DI ),
.scandoubler_disable (scandoubler_disable),
.ypbpr (ypbpr )
);
sram ram(
.*,
.init(~locked),
.clk(clk_ram),
.wtbt(3),
.dout(),
.din(0),
.rd(0),
.ready()
);
reg we;
reg [24:0] addr = 0;
always @(posedge clk_ram) begin
integer init = 5000000;
reg [4:0] cnt = 9;
if(init) init <= init - 1;
else begin
cnt <= cnt + 1'b1;
we <= &cnt;
if(cnt == 8) addr <= addr + 1'd1;
end
end
//______________________________________________________________________________
//
// Video
//
reg [9:0] hc;
reg [8:0] vc;
reg [9:0] vvc;
reg [22:0] rnd_reg;
wire [5:0] rnd_c = {rnd_reg[0],rnd_reg[1],rnd_reg[2],rnd_reg[2],rnd_reg[2],rnd_reg[2]};
wire [22:0] rnd;
lfsr random(rnd);
always @(negedge clk_pix) begin
if(hc == 639) begin
hc <= 0;
if(vc == 311) begin
vc <= 0;
vvc <= vvc + 9'd6;
end else begin
vc <= vc + 1'd1;
end
end else begin
hc <= hc + 1'd1;
end
rnd_reg <= rnd;
end
reg hb, vb;
reg hs, vs;
wire blankn = !(hb & vb);
always @(posedge clk_pix) begin
if (hc == 310) hb <= 1;
else if (hc == 420) hb <= 0;
if (hc == 336) hs <= 1;
else if (hc == 368) hs <= 0;
if(vc == 308) vs <= 1;
else if (vc == 0) vs <= 0;
if(vc == 306) vb <= 1;
else if (vc == 2) vb <= 0;
end
reg [7:0] cos_out;
wire [5:0] cos_g = cos_out[7:3]+6'd32;
cos cos(vvc + {vc, 2'b00}, cos_out);
wire [5:0] comp_v = (cos_g >= rnd_c) ? cos_g - rnd_c : 6'd0;
wire [1:0] rotate;
mist_video #(.COLOR_DEPTH(6), .SD_HCNT_WIDTH(10)) mist_video(
.clk_sys ( clk_x2 ),
.SPI_SCK ( SPI_SCK ),
.SPI_SS3 ( SPI_SS3 ),
.SPI_DI ( SPI_DI ),
.R ( blankn ? comp_v : 0 ),
.G ( blankn ? comp_v : 0 ),
.B ( blankn ? comp_v : 0 ),
.HSync ( hs ),
.VSync ( vs ),
.VGA_R ( VGA_R ),
.VGA_G ( VGA_G ),
.VGA_B ( VGA_B ),
.VGA_VS ( VGA_VS ),
.VGA_HS ( VGA_HS ),
.rotate ( 2'b11 ),
.ce_divider ( 1 ),
.scandoubler_disable(scandoubler_disable),
.ypbpr ( ypbpr )
);
endmodule