OpenCores
URL https://opencores.org/ocsvn/rtftextcontroller/rtftextcontroller/trunk

Subversion Repositories rtftextcontroller

[/] [rtftextcontroller/] [trunk/] [rtl/] [verilog/] [SyncGen640x400_70Hz.v] - Blame information for rev 28

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 28 robfinch
// ============================================================================
2
//        __
3
//   \\__/ o\    (C) 2016-2017  Robert Finch, Waterloo
4
//    \  __ /    All rights reserved.
5
//     \/_//     robfinch<remove>@finitron.ca
6
//       ||
7
//
8
//
9
//      SyncGen640x400_70Hz.v
10
//              sync generator
11
//
12
// This source file is free software: you can redistribute it and/or modify 
13
// it under the terms of the GNU Lesser General Public License as published 
14
// by the Free Software Foundation, either version 3 of the License, or     
15
// (at your option) any later version.                                      
16
//                                                                          
17
// This source file is distributed in the hope that it will be useful,      
18
// but WITHOUT ANY WARRANTY; without even the implied warranty of           
19
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            
20
// GNU General Public License for more details.                             
21
//                                                                          
22
// You should have received a copy of the GNU General Public License        
23
// along with this program.  If not, see <http://www.gnu.org/licenses/>.    
24
//                                                                          
25
//
26
//
27
//      WXGA video sync generator.
28
//
29
//      Input clock:     25.00 MHz (100 MHz * 2/8)
30
//      Horizontal freq: 31.25 kHz (generated) (31.250KHz)
31
//      Vertical freq:   69.60  Hz (generated) (69.599 Hz)
32
//
33
//      This module generates the basic sync timing signals required for a
34
//      WXGA display.
35
//
36
// ============================================================================
37
 
38
module SyncGen640x400_70Hz(rst, clk, hSync, vSync, hCtr, vCtr, blank, border, csel, rsel);
39
parameter phSyncOn  = 8;                //   8 front porch
40
parameter phSyncOff = 104;              //  96 sync
41
parameter phBlankOff = 144;             //  40 back porch
42
parameter phBorderOff = 152;    //   8 border
43
parameter phBorderOn = 792;             // 640 display
44
parameter phBorderOff2 = 168;
45
parameter phBorderOn2 = 776;
46
parameter phBlankOn = 800;              //    8 border
47
parameter phTotal = 800;                // 800 total clocks
48
//
49
parameter pvSyncOn  = 5;                //    5 front porch
50
parameter pvSyncOff = 7;                //    2 vertical sync
51
parameter pvBlankOff = 35;              //   28 back porch
52
parameter pvBorderOff = 42;             //    7 border  0
53
parameter pvBorderOn = 442;             //  400 display
54
parameter pvBorderOff2 = 50;
55
parameter pvBorderOn2 = 434;
56
parameter pvBlankOn = 449;      //    7 border  0
57
parameter pvTotal = 449;                //  449 total scan lines
58
// 70 Hz
59
// 640x400
60
input rst;                      // reset
61
input clk;                      // video clock
62
output reg hSync, vSync;        // sync outputs
63
output [9:0] hCtr;
64
output [9:0] vCtr;
65
output blank;                   // blanking output
66
output border;
67
input csel;                     // column select
68
input rsel;                     // row select
69
 
70
//---------------------------------------------------------------------
71
//---------------------------------------------------------------------
72
 
73
wire vBlank, hBlank;
74
wire vBorder,hBorder;
75
wire hSync1,vSync1;
76
reg blank;
77
reg border;
78
 
79
wire eol = hCtr==phTotal;
80
wire eof = vCtr==pvTotal && eol;
81
 
82
assign vSync1 = vCtr >= pvSyncOn && vCtr < pvSyncOff;
83
assign hSync1 = !(hCtr >= phSyncOn && hCtr < phSyncOff);
84
assign vBlank = vCtr >= pvBlankOn || vCtr < pvBlankOff;
85
assign hBlank = hCtr >= phBlankOn || hCtr < phBlankOff;
86
wire vBorder1 = vCtr >= pvBorderOn || vCtr < pvBorderOff;
87
wire hBorder1 = hCtr >= phBorderOn || hCtr < phBorderOff;
88
wire vBorder2 = vCtr >= pvBorderOn2 || vCtr < pvBorderOff2;
89
wire hBorder2 = hCtr >= phBorderOn2 || hCtr < phBorderOff2;
90
assign vBorder = rsel ? vBorder2 : vBorder1;
91
assign hBorder = csel ? hBorder2 : hBorder1;
92
 
93
counter #(10) u1 (.rst(rst), .clk(clk), .ce(1'b1), .ld(eol), .d(12'd1), .q(hCtr), .tc() );
94
counter #(10) u2 (.rst(rst), .clk(clk), .ce(eol),  .ld(eof), .d(12'd1), .q(vCtr), .tc() );
95
 
96
always @(posedge clk)
97
    blank <= #1 hBlank|vBlank;
98
always @(posedge clk)
99
    border <= #1 hBorder|vBorder;
100
always @(posedge clk)
101
        hSync <= #1 hSync1;
102
always @(posedge clk)
103
        vSync <= #1 vSync1;
104
 
105
endmodule
106
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.