mirror of
https://github.com/nippur72/Apple1_MiST.git
synced 2024-09-27 09:55:45 +00:00
remove pixel clock
This commit is contained in:
parent
b7a1632485
commit
02cd9b5ecb
@ -26,7 +26,6 @@ module apple1(
|
|||||||
input reset, // reset
|
input reset, // reset
|
||||||
|
|
||||||
input sys_clock, // system clock
|
input sys_clock, // system clock
|
||||||
input pixel_clock, // 7 MHz pixel clock
|
|
||||||
input pixel_clken, // 7 MHz pixel clock
|
input pixel_clken, // 7 MHz pixel clock
|
||||||
input cpu_clken, // cpu clock enable
|
input cpu_clken, // cpu clock enable
|
||||||
|
|
||||||
@ -106,7 +105,7 @@ assign ram_wr = we & ram_cs;
|
|||||||
display display(
|
display display(
|
||||||
.reset(reset),
|
.reset(reset),
|
||||||
|
|
||||||
.pixel_clock(sys_clock),
|
.sys_clock(sys_clock),
|
||||||
.pixel_clken(pixel_clken),
|
.pixel_clken(pixel_clken),
|
||||||
.cpu_clken(cpu_clken & display_cs),
|
.cpu_clken(cpu_clken & display_cs),
|
||||||
|
|
||||||
|
@ -4,20 +4,16 @@
|
|||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
|
||||||
// TODO clean reset, reset_n
|
|
||||||
// TODO take power reset
|
|
||||||
// TODO take out cpu clock enable
|
|
||||||
// TODO make ram work with clock enable
|
|
||||||
// TODO load binary files into memory
|
|
||||||
// TODO make it work with SDRAM
|
// TODO make it work with SDRAM
|
||||||
|
// TODO make ram work with clock enable
|
||||||
// TODO ram refresh lost cycles
|
// TODO ram refresh lost cycles
|
||||||
// TODO power on-off key ? (init ram)
|
// TODO power on-off key ? (init ram)
|
||||||
// TODO ram powerup initial values
|
// TODO ram powerup initial values
|
||||||
// TODO reset if pll not locked
|
|
||||||
// TODO reorganize file structure
|
// TODO reorganize file structure
|
||||||
// TODO support ACI interface for load and save
|
// TODO support ACI interface for load and save
|
||||||
// TODO special expansion boards: TMS9918, SID, AY?
|
// TODO special expansion boards: TMS9918, SID, AY?
|
||||||
// TODO check diff with updated data_io.v and other modules
|
// TODO check diff with updated data_io.v and other modules
|
||||||
|
// TODO osd menu yellow, why it doesn't work?
|
||||||
// TODO keyboard: isolate ps2 keyboard from apple1
|
// TODO keyboard: isolate ps2 keyboard from apple1
|
||||||
// TODO keyboard: check ps2 clock
|
// TODO keyboard: check ps2 clock
|
||||||
// TODO keyboard: reset and cls key
|
// TODO keyboard: reset and cls key
|
||||||
@ -25,7 +21,6 @@
|
|||||||
// TODO display: powerup values
|
// TODO display: powerup values
|
||||||
// TODO display: simplify rom font
|
// TODO display: simplify rom font
|
||||||
// TODO display: reduce to 512 bytes font
|
// TODO display: reduce to 512 bytes font
|
||||||
// TODO display: use 7 MHz clock
|
|
||||||
// TODO display: check parameters vs real apple1
|
// TODO display: check parameters vs real apple1
|
||||||
// TODO display: check cursor blinking
|
// TODO display: check cursor blinking
|
||||||
|
|
||||||
@ -115,18 +110,17 @@ wire reset_button = status[0] | st_menu_reset | st_reset_switch | !pll_locked;
|
|||||||
|
|
||||||
wire pll_locked;
|
wire pll_locked;
|
||||||
|
|
||||||
wire pixel_clock; // the 14.31818 MHz clock
|
wire sys_clock; // cpu x 7 x 8 system clock (sdram.v)
|
||||||
wire clk_osd; // x2 clock for the OSD menu
|
wire osd_clock; // cpu x 7 x 2 for the OSD menu
|
||||||
wire sdram_clock; // cpu x 7 x 8 for sdram.v interface
|
|
||||||
wire sdram_clock_ph; // cpu x 7 x 8 phase shifted -2.5 ns
|
wire sdram_clock_ph; // cpu x 7 x 8 phase shifted -2.5 ns
|
||||||
|
|
||||||
pll pll
|
pll pll
|
||||||
(
|
(
|
||||||
.inclk0(CLOCK_27),
|
.inclk0(CLOCK_27),
|
||||||
.locked(pll_locked),
|
.locked(pll_locked),
|
||||||
.c0( clk_osd ), // x2 video clock for OSD menu
|
|
||||||
.c1( pixel_clock ), // 7.15909 MHz (14.318180/2)
|
.c0( osd_clock ), // cpu x 7 x 2 video clock for OSD menu
|
||||||
.c2( sdram_clock ), // cpu x 7 x 8
|
.c2( sys_clock ), // cpu x 7 x 8 system clock (sdram.v)
|
||||||
.c3( sdram_clock_ph ) // cpu x 7 x 8 phase shifted -2.5 ns
|
.c3( sdram_clock_ph ) // cpu x 7 x 8 phase shifted -2.5 ns
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -165,7 +159,7 @@ downloader
|
|||||||
.ROM_done ( ROM_loaded ),
|
.ROM_done ( ROM_loaded ),
|
||||||
|
|
||||||
// external ram interface
|
// external ram interface
|
||||||
.clk ( sdram_clock ),
|
.clk ( sys_clock ),
|
||||||
.clk_ena ( cpu_clken ),
|
.clk_ena ( cpu_clken ),
|
||||||
.wr ( download_wr ),
|
.wr ( download_wr ),
|
||||||
.addr ( download_addr ),
|
.addr ( download_addr ),
|
||||||
@ -180,8 +174,8 @@ downloader
|
|||||||
|
|
||||||
// RAM
|
// RAM
|
||||||
ram ram(
|
ram ram(
|
||||||
.clk (sdram_clock),
|
.clk (sys_clock ),
|
||||||
.ena (cpu_clken ),
|
.ena (cpu_clken ), // fake does not work
|
||||||
.address(sdram_addr[15:0]),
|
.address(sdram_addr[15:0]),
|
||||||
.w_en (sdram_wr ),
|
.w_en (sdram_wr ),
|
||||||
.din (sdram_din ),
|
.din (sdram_din ),
|
||||||
@ -226,7 +220,7 @@ assign LED = ~dummy;
|
|||||||
// WozMon ROM
|
// WozMon ROM
|
||||||
wire [7:0] rom_dout;
|
wire [7:0] rom_dout;
|
||||||
rom_wozmon rom_wozmon(
|
rom_wozmon rom_wozmon(
|
||||||
.clk(sdram_clock),
|
.clk(sys_clock),
|
||||||
.address(cpu_addr[7:0]),
|
.address(cpu_addr[7:0]),
|
||||||
.dout(rom_dout)
|
.dout(rom_dout)
|
||||||
);
|
);
|
||||||
@ -234,7 +228,7 @@ rom_wozmon rom_wozmon(
|
|||||||
// Basic ROM
|
// Basic ROM
|
||||||
wire [7:0] basic_dout;
|
wire [7:0] basic_dout;
|
||||||
rom_basic rom_basic(
|
rom_basic rom_basic(
|
||||||
.clk(sdram_clock),
|
.clk(sys_clock),
|
||||||
.address(cpu_addr[11:0]),
|
.address(cpu_addr[11:0]),
|
||||||
.dout(basic_dout)
|
.dout(basic_dout)
|
||||||
);
|
);
|
||||||
@ -258,10 +252,9 @@ apple1 apple1
|
|||||||
(
|
(
|
||||||
.reset(reset_button),
|
.reset(reset_button),
|
||||||
|
|
||||||
.sys_clock(sdram_clock), // system clock
|
.sys_clock ( sys_clock ), // system clock
|
||||||
.pixel_clock(pixel_clock), // pixel clock 7 Mhz
|
.cpu_clken ( cpu_clken ), // CPU clock enable
|
||||||
.cpu_clken(cpu_clken), // CPU clock enable
|
.pixel_clken ( pixel_clken ), // pixel clock enable
|
||||||
.pixel_clken(pixel_clken), // pixel clock enable
|
|
||||||
|
|
||||||
// RAM interface
|
// RAM interface
|
||||||
.ram_addr (cpu_addr),
|
.ram_addr (cpu_addr),
|
||||||
@ -282,14 +275,22 @@ apple1 apple1
|
|||||||
.vga_cls() // clear screen button (not connected yet)
|
.vga_cls() // clear screen button (not connected yet)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
/******************************************************************************************/
|
||||||
|
/******************************************************************************************/
|
||||||
|
/***************************************** @mist_video ************************************/
|
||||||
|
/******************************************************************************************/
|
||||||
|
/******************************************************************************************/
|
||||||
|
|
||||||
mist_video
|
mist_video
|
||||||
#(
|
#(
|
||||||
.COLOR_DEPTH(1), // 1 bit color depth
|
.COLOR_DEPTH(1), // 1 bit color depth
|
||||||
.OSD_AUTO_CE(1) // OSD autodetects clock enable
|
.OSD_AUTO_CE(1), // OSD autodetects clock enable
|
||||||
|
.OSD_COLOR(3'b110) // yellow menu color
|
||||||
)
|
)
|
||||||
mist_video
|
mist_video
|
||||||
(
|
(
|
||||||
.clk_sys(clk_osd), // OSD needs 2x the VDP clock for the scandoubler
|
.clk_sys(osd_clock), // OSD needs 2x the VDP clock for the scandoubler
|
||||||
|
|
||||||
// OSD SPI interface
|
// OSD SPI interface
|
||||||
.SPI_DI(SPI_DI),
|
.SPI_DI(SPI_DI),
|
||||||
@ -321,6 +322,12 @@ mist_video
|
|||||||
.VGA_HS(VGA_HS),
|
.VGA_HS(VGA_HS),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/******************************************************************************************/
|
||||||
|
/******************************************************************************************/
|
||||||
|
/***************************************** @user_io ***************************************/
|
||||||
|
/******************************************************************************************/
|
||||||
|
/******************************************************************************************/
|
||||||
|
|
||||||
user_io
|
user_io
|
||||||
#(
|
#(
|
||||||
.STRLEN(conf_str_len)
|
.STRLEN(conf_str_len)
|
||||||
@ -329,7 +336,7 @@ user_io
|
|||||||
user_io (
|
user_io (
|
||||||
.conf_str (CONF_STR ),
|
.conf_str (CONF_STR ),
|
||||||
|
|
||||||
.clk_sys (sdram_clock ),
|
.clk_sys (sys_clock ),
|
||||||
|
|
||||||
.SPI_CLK (SPI_SCK ),
|
.SPI_CLK (SPI_SCK ),
|
||||||
.SPI_SS_IO (CONF_DATA0 ),
|
.SPI_SS_IO (CONF_DATA0 ),
|
||||||
@ -356,7 +363,7 @@ user_io (
|
|||||||
|
|
||||||
// SDRAM control signals
|
// SDRAM control signals
|
||||||
assign SDRAM_CKE = 1'b1;
|
assign SDRAM_CKE = 1'b1;
|
||||||
assign SDRAM_CLK = sdram_clock_ph;
|
assign SDRAM_CLK = sdram_clock_ph; // same as sys_clock but with -2.5 ns phase
|
||||||
|
|
||||||
/*
|
/*
|
||||||
wire [24:0] sdram_addr;
|
wire [24:0] sdram_addr;
|
||||||
@ -421,7 +428,7 @@ wire cpu_clken; // provides the cpu clock enable signal derived from main clo
|
|||||||
wire pixel_clken; // provides the cpu clock enable signal derived from main clock
|
wire pixel_clken; // provides the cpu clock enable signal derived from main clock
|
||||||
|
|
||||||
clock clock(
|
clock clock(
|
||||||
.sys_clock ( sdram_clock ), // input: main clock
|
.sys_clock ( sys_clock ), // input: main clock
|
||||||
.reset ( reset_button ), // input: reset signal
|
.reset ( reset_button ), // input: reset signal
|
||||||
|
|
||||||
.cpu_clken ( cpu_clken ), // output: cpu clock enable
|
.cpu_clken ( cpu_clken ), // output: cpu clock enable
|
||||||
|
12
rtl/clock.v
12
rtl/clock.v
@ -4,8 +4,8 @@ module clock
|
|||||||
input sys_clock, // master clock at cpu x 7 x 8
|
input sys_clock, // master clock at cpu x 7 x 8
|
||||||
input reset, // reset
|
input reset, // reset
|
||||||
|
|
||||||
output reg cpu_clken, // 1MHz clock enable for the CPU
|
output cpu_clken, // 1MHz clock enable for the CPU
|
||||||
output reg pixel_clken // 7MHz clock enable for the display
|
output pixel_clken // 7MHz clock enable for the display
|
||||||
);
|
);
|
||||||
|
|
||||||
localparam CPU_DIVISOR = 56; // (sys_clock / CPU_DIVISOR) = 1 MHz
|
localparam CPU_DIVISOR = 56; // (sys_clock / CPU_DIVISOR) = 1 MHz
|
||||||
@ -27,10 +27,10 @@ localparam PIXEL_DIVISOR = 8; // (sys_clock / PIXEL_DIVISOR) = 7 MHz
|
|||||||
|
|
||||||
if (counter_pixel == (PIXEL_DIVISOR-1)) counter_pixel <= 0;
|
if (counter_pixel == (PIXEL_DIVISOR-1)) counter_pixel <= 0;
|
||||||
else counter_pixel <= counter_pixel + 1;
|
else counter_pixel <= counter_pixel + 1;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
cpu_clken <= counter_cpu == 0;
|
assign cpu_clken = counter_cpu == 0;
|
||||||
pixel_clken <= counter_pixel == 0;
|
assign pixel_clken = counter_pixel == 0;
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
endmodule
|
endmodule
|
||||||
|
@ -1,10 +1,9 @@
|
|||||||
module display (
|
module display (
|
||||||
input reset, // active high reset signal
|
input reset, // active high reset signal
|
||||||
|
|
||||||
input pixel_clock, // 7 MHz clock signal
|
input sys_clock, // system clock
|
||||||
input pixel_clken, // pixel clock enable
|
input pixel_clken, // pixel clock enable
|
||||||
|
input cpu_clken, // cpu clock enable
|
||||||
input cpu_clken, // clock cpu_clken strobe,
|
|
||||||
|
|
||||||
input clr_screen, // clear screen button
|
input clr_screen, // clear screen button
|
||||||
|
|
||||||
@ -73,7 +72,7 @@ module display (
|
|||||||
wire v_active = (v_cnt >= vbp && v_cnt < vfp);
|
wire v_active = (v_cnt >= vbp && v_cnt < vfp);
|
||||||
|
|
||||||
// horizontal and vertical counters
|
// horizontal and vertical counters
|
||||||
always @(posedge pixel_clock or posedge reset) begin
|
always @(posedge sys_clock or posedge reset) begin
|
||||||
if (reset) begin
|
if (reset) begin
|
||||||
h_cnt <= 10'd0;
|
h_cnt <= 10'd0;
|
||||||
v_cnt <= 10'd0;
|
v_cnt <= 10'd0;
|
||||||
@ -112,7 +111,7 @@ module display (
|
|||||||
// Character ROM
|
// Character ROM
|
||||||
|
|
||||||
font_rom font_rom(
|
font_rom font_rom(
|
||||||
.clk(pixel_clock),
|
.clk(sys_clock),
|
||||||
.character(font_char),
|
.character(font_char),
|
||||||
.pixel(font_pixel),
|
.pixel(font_pixel),
|
||||||
.line(font_line),
|
.line(font_line),
|
||||||
@ -123,7 +122,7 @@ module display (
|
|||||||
// Video RAM
|
// Video RAM
|
||||||
|
|
||||||
vram vram(
|
vram vram(
|
||||||
.clk(pixel_clock),
|
.clk(sys_clock),
|
||||||
.read_addr(vram_r_addr),
|
.read_addr(vram_r_addr),
|
||||||
.write_addr(vram_w_addr),
|
.write_addr(vram_w_addr),
|
||||||
.r_en(h_active),
|
.r_en(h_active),
|
||||||
@ -135,7 +134,7 @@ module display (
|
|||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
// Video Signal Generation
|
// Video Signal Generation
|
||||||
|
|
||||||
always @(posedge pixel_clock or posedge reset) begin
|
always @(posedge sys_clock or posedge reset) begin
|
||||||
if (reset) begin
|
if (reset) begin
|
||||||
vram_h_addr <= 0;
|
vram_h_addr <= 0;
|
||||||
vram_v_addr <= 0;
|
vram_v_addr <= 0;
|
||||||
@ -162,7 +161,7 @@ module display (
|
|||||||
|
|
||||||
reg blink;
|
reg blink;
|
||||||
reg [22:0] blink_div;
|
reg [22:0] blink_div;
|
||||||
always @(posedge pixel_clock or posedge reset)
|
always @(posedge sys_clock or posedge reset)
|
||||||
begin
|
begin
|
||||||
if (reset)
|
if (reset)
|
||||||
blink_div <= 0;
|
blink_div <= 0;
|
||||||
@ -200,7 +199,7 @@ module display (
|
|||||||
|
|
||||||
assign vram_clr_addr = vram_end_addr + {3'd0, vram_v_addr[1:0]};
|
assign vram_clr_addr = vram_end_addr + {3'd0, vram_v_addr[1:0]};
|
||||||
|
|
||||||
always @(posedge pixel_clock or posedge reset)
|
always @(posedge sys_clock or posedge reset)
|
||||||
begin
|
begin
|
||||||
if (reset)
|
if (reset)
|
||||||
begin
|
begin
|
||||||
|
Loading…
Reference in New Issue
Block a user