SE-VGA/vgacount.sv

67 lines
1.7 KiB
Systemverilog

/******************************************************************************
* SE-VGA
* VGA signal counter
* techav
* 2021-04-06
******************************************************************************
* Low-level VGA signal counter
*****************************************************************************/
module vgacount (
input wire nReset, // system reset signal
input wire clock, // counter increment clock
output logic [9:0] count, // count output
output wire nSync, // sync pulse
output wire activeVid, // active video signal
output wire activeSE // secondary active video signal (SE)
);
parameter COUNTMAX=800,
SYNCBEGIN=592,
SYNCEND=688,
ACTBEGIN=576,
ACTEND=736,
SEACTBEGIN=512;
logic [9:0] counter;
// primary counter
always @(negedge clock or negedge nReset) begin
if(nReset == 1'b0) begin
counter <= 10'h0;
end else begin
if (counter < COUNTMAX) begin
counter <= counter + 10'h1;
end else begin
counter <= 10'h0;
end
end
end
// combinatorial logic derived from the counters
always_comb begin
// output the count signals
count <= counter;
// Sync pulse
if(hCount >= SYNCBEGIN && hCount < SYNCEND) begin
nhSync <= 1'b0;
end else begin
nhSync <= 1'b1;
end
if(hCount >= ACTBEGIN && hCount < ACTEND) begin
hActive <= 1'b0;
end else begin
hActive <= 1'b1;
end
if(hCount >= SEACTBEGIN) begin
hSEActive <= 1'b0;
end else begin
hSEActive <= 1'b1;
end
end
endmodule