1
0
mirror of https://github.com/Gehstock/Mist_FPGA.git synced 2026-05-01 06:09:05 +00:00
Files
Gehstock.Mist_FPGA/Computer_MiST/Bashkiria2M_MiST/rtl/b2m_mist.sv
2020-01-03 02:29:25 +01:00

206 lines
4.5 KiB
Systemverilog

module b2m_mist
(
input CLOCK_27,
output LED,
output SPI_DO,
input SPI_DI,
input SPI_SCK,
input SPI_SS2,
input SPI_SS3,
input SPI_SS4,
input CONF_DATA0,
inout [15:0] SDRAM_DQ, // SDRAM Data bus 16 Bits
output [12:0] SDRAM_A, // SDRAM Address bus 13 Bits
output SDRAM_DQML, // SDRAM Low-byte Data Mask
output SDRAM_DQMH, // SDRAM High-byte Data Mask
output SDRAM_nWE, // SDRAM Write Enable
output SDRAM_nCAS, // SDRAM Column Address Strobe
output SDRAM_nRAS, // SDRAM Row Address Strobe
output SDRAM_nCS, // SDRAM Chip Select
output [1:0] SDRAM_BA, // SDRAM Bank Address
output SDRAM_CLK, // SDRAM Clock
output SDRAM_CKE, // SDRAM Clock Enable
output AUDIO_L,
output AUDIO_R,
output VGA_HS,
output VGA_VS,
output [5:0] VGA_R,
output [5:0] VGA_G,
output [5:0] VGA_B
);
`include "rtl\build_id.v"
localparam CONF_STR = {
"B2M;;",
"O2,Turbo ,ON,OFF;",
"O3,Color Mode ,COLOR,B/W;",
"O4,Video Mode ,PAL,NTSC;",
"O56,Scandoubler Fx,None,HQ2x,CRT 25%,CRT 50%;",
"T7,Reset;",
"V,v1.00.",`BUILD_DATE
};
assign LED = 1'b1;
wire clk_sys;
wire clk12p5;
wire clk100;
wire [31:0] status;
wire [1:0] buttons;
wire [1:0] switches;
wire [7:0] kbjoy;
wire [7:0] joystick_0;
wire [7:0] joystick_1;
wire scandoubler_disable;
wire ypbpr;
wire ps2_kbd_clk, ps2_kbd_data;
wire [15:0] audio;
//assign LED = 1;
wire hblank, vblank;
wire ce_vid;
wire hs, vs;
wire [3:0] r,g,b;
pll pll(
.inclk0(CLOCK_27),
.c0(clk_sys),//50
.c1(clk12p5)
);
video_mixer #(.LINE_LENGTH(800), .HALF_DEPTH(0)) video_mixer(
.clk_sys(clk_sys),
.ce_pix(clk12p5),
.ce_pix_actual(clk12p5),
.SPI_SCK(SPI_SCK),
.SPI_SS3(SPI_SS3),
.SPI_DI(SPI_DI),
.R({r,r[1:0]}),
.G({g,g[1:0]}),
.B({b,b[1: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),
.scandoubler_disable(1),//scandoubler_disable),
.scanlines(scandoubler_disable ? 2'b00 : {status[6:5] == 3, status[6:5] == 2}),
.hq2x(status[6:5]==1),
.ypbpr_full(1),
.line_start(0),
.mono(0)
);
mist_io #(.STRLEN(($size(CONF_STR)>>3))) mist_io(
.clk_sys (clk_sys ),
.conf_str (CONF_STR ),
.SPI_SCK (SPI_SCK ),
.CONF_DATA0 (CONF_DATA0 ),
.SPI_SS2 (SPI_SS2 ),
.SPI_DO (SPI_DO ),
.SPI_DI (SPI_DI ),
.buttons (buttons ),
.switches (switches ),
.scandoubler_disable(scandoubler_disable),
.ypbpr (ypbpr ),
.ps2_kbd_clk (ps2_kbd_clk ),
.ps2_kbd_data (ps2_kbd_data ),
.joystick_0 (joystick_0 ),
.joystick_1 (joystick_1 ),
.status (status ),
.sd_lba (sd_lba ),
.sd_rd (sd_rd ),
.sd_wr (sd_wr ),
.sd_ack (sd_ack ),
.sd_conf (sd_conf ),
.sd_sdhc (sd_sdhc ),
.sd_buff_dout (sd_data_out ),
.sd_buff_din (sd_data_in ),
.sd_dout_strobe (sd_data_in_strobe),
.sd_din_strobe (sd_data_out_strobe)
);
wire [31:0] sd_lba;
wire sd_rd;
wire sd_wr;
wire sd_ack;
wire sd_conf;
wire sd_sdhc;
wire allow_sdhc;
wire [7:0] sd_data_in;
wire sd_data_in_strobe;
wire [7:0] sd_data_out;
wire sd_data_out_strobe;
wire sd_cs;
wire sd_sck;
wire sd_sdi;
wire sd_sdo;
sd_card sd_card(
.io_lba (sd_lba),
.io_rd (sd_rd),
.io_wr (sd_wr),
.io_ack (sd_ack),
.io_conf (sd_conf),
.io_sdhc (sd_sdhc),
.io_din (sd_data_out),
.io_din_strobe (sd_data_in_strobe),
.io_dout (sd_data_in),
.io_dout_strobe(sd_data_out_strobe),
.allow_sdhc (allow_sdhc),
.sd_cs (sd_cs),
.sd_sck (sd_sck),
.sd_sdi (sd_sdi),
.sd_sdo (sd_sdo)
);
b2m_top b2m_top(
.clk50mhz(clk_sys),
.res(~(status[0] || status[7] || buttons[1])),
.color_mode(~status[3] ),
.video_mode(status[4] ),
.turbo(~status[2] ),
.audio(audio),
.DRAM_DQ(SDRAM_DQ),
.DRAM_ADDR(SDRAM_A),
.DRAM_LDQM(SDRAM_DQML),
.DRAM_UDQM(SDRAM_DQMH),
.DRAM_WE_N(SDRAM_nWE),
.DRAM_CAS_N(SDRAM_nCAS),
.DRAM_RAS_N(SDRAM_nRAS),
.DRAM_CS_N(SDRAM_nCS),
.DRAM_BA_0(SDRAM_BA[0]),
.DRAM_BA_1(SDRAM_BA[1]),
.DRAM_CLK(SDRAM_CLK),
.DRAM_CKE(SDRAM_CKE),
.VGA_HS(hs),
.VGA_VS(vs),
.VGA_R(r),
.VGA_G(g),
.VGA_B(b),
.PS2_CLK(ps2_kbd_clk),
.PS2_DAT(ps2_kbd_data),
.SD_DAT(sd_sdo),
.SD_DAT3(sd_cs),
.SD_CMD(sd_sdi),
.SD_CLK(sd_sck)
);
dac dac(
.clk_i(clk_sys),
.res_n_i(1),
.dac_i(audio),
.dac_o(AUDIO_L)
);
assign AUDIO_R = AUDIO_L;
endmodule