mirror of
https://github.com/MiSTer-devel/MacPlus_MiSTer.git
synced 2025-02-20 05:29:03 +00:00
100 lines
1.7 KiB
Systemverilog
100 lines
1.7 KiB
Systemverilog
//
|
|
//
|
|
// Copyright (c) 2018 Sorgelig
|
|
//
|
|
// This program is GPL Licensed. See COPYING for the full license.
|
|
//
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
`timescale 1ns / 1ps
|
|
|
|
module video_cleaner
|
|
(
|
|
input clk_vid,
|
|
input ce_pix,
|
|
|
|
input [7:0] R,
|
|
input [7:0] G,
|
|
input [7:0] B,
|
|
|
|
input HSync,
|
|
input VSync,
|
|
input HBlank,
|
|
input VBlank,
|
|
|
|
//optional de
|
|
input DE_in,
|
|
|
|
// video output signals
|
|
output reg [7:0] VGA_R,
|
|
output reg [7:0] VGA_G,
|
|
output reg [7:0] VGA_B,
|
|
output reg VGA_VS,
|
|
output reg VGA_HS,
|
|
output VGA_DE,
|
|
|
|
// optional aligned blank
|
|
output reg HBlank_out,
|
|
output reg VBlank_out,
|
|
|
|
// optional aligned de
|
|
output reg DE_out
|
|
);
|
|
|
|
wire hs, vs;
|
|
s_fix sync_v(clk_vid, HSync, hs);
|
|
s_fix sync_h(clk_vid, VSync, vs);
|
|
|
|
wire hbl = hs | HBlank;
|
|
wire vbl = vs | VBlank;
|
|
|
|
assign VGA_DE = ~(HBlank_out | VBlank_out);
|
|
|
|
always @(posedge clk_vid) begin
|
|
if(ce_pix) begin
|
|
HBlank_out <= hbl;
|
|
|
|
VGA_HS <= hs;
|
|
if(~VGA_HS & hs) VGA_VS <= vs;
|
|
|
|
VGA_R <= R;
|
|
VGA_G <= G;
|
|
VGA_B <= B;
|
|
DE_out <= DE_in;
|
|
|
|
if(HBlank_out & ~hbl) VBlank_out <= vbl;
|
|
end
|
|
end
|
|
|
|
endmodule
|
|
|
|
module s_fix
|
|
(
|
|
input clk,
|
|
|
|
input sync_in,
|
|
output sync_out
|
|
);
|
|
|
|
assign sync_out = sync_in ^ pol;
|
|
|
|
reg pol;
|
|
always @(posedge clk) begin
|
|
integer pos = 0, neg = 0, cnt = 0;
|
|
reg s1,s2;
|
|
|
|
s1 <= sync_in;
|
|
s2 <= s1;
|
|
|
|
if(~s2 & s1) neg <= cnt;
|
|
if(s2 & ~s1) pos <= cnt;
|
|
|
|
cnt <= cnt + 1;
|
|
if(s2 != s1) cnt <= 0;
|
|
|
|
pol <= pos > neg;
|
|
end
|
|
|
|
endmodule
|