2 * Video Graphic Array
\81@Signal Generate Circuit
3 * Module name is "vga_generate"
4 * @auther Yujiro Kaneko
8 #include "vga_ram.nsh" // vga ram module
10 #define H_ACT_MAX 10'd640
11 #define H_FRONTP_MAX 10'd655
12 #define H_SYNC_MAX 10'd751
13 #define H_BACKP_MAX 10'd799
15 #define V_ACT_MAX 10'd480
16 #define V_FRONTP_MAX 10'd489
17 #define V_SYNC_MAX 10'd491
18 #define V_BACKP_MAX 10'd519
20 #define VCNT_1SEC 26'd25000000
22 declare vga_gen interface {
23 input i_clk50 ; // 50MHz main clock
24 input i_fifo_rst ; // FIFO rst
27 output o_vsync ; // Vertical Sync
28 output o_hsync ; // Horizontal Hync
29 output o_vga_r[4] ; // VGA RED
30 output o_vga_g[4] ; // VGA GREEN
31 output o_vga_b[4] ; // VGA BLUE
32 output o_dummy_rgb[3] ; // VGA dummy signal
33 output o_vcnt[10] ; // V sync Count
35 /* FIFO write terminal */
37 func_in fi_fifo_write( i_wrdata ) ;
46 func_self fs_fifo_read() ; // FIFO read terminal
47 wire w_rddata[8] ; // FIFO read wire
48 func_self fs_fifo_ack(w_rddata) ;
49 func_self fs_initialize() ;
54 reg r_bit_cnt[3] = 0 ;
68 reg r_cnt1[26] = 0, r_cnt2[26] = 0, r_cnt3[26] = 0 ;
74 r_trg := { r_trg[1:0], 0b1 } ;
75 if(r_trg == 0b011) fs_initialize() ;
77 /* VGA Generate Node */
83 u_FIFO.i_clk50 = i_clk50 ;
84 u_FIFO.i_clk25 = m_clock ;
85 o_rdack = u_FIFO.o_rdack ;
86 u_FIFO.i_we = fi_fifo_write ;
87 u_FIFO.i_wrdata = i_wrdata ;
88 u_FIFO.i_rst = i_fifo_rst ;
89 u_FIFO.i_re = fs_fifo_read ;
91 /* TEST LED cnt routine */
95 r_cnt == VCNT_1SEC : {
104 /* VSync & HSync
\81@
\90¶
\90¬
\83\8b\81[
\83`
\83\93 */
106 if( r_hcnt < H_BACKP_MAX ) {
110 if( r_vcnt < V_BACKP_MAX ) {
118 // HACTMAX640 VACTMAX480
\83J
\83\89\81[
\95`
\89æ
\83G
\83\8a\83A
119 if( ( r_hcnt < H_ACT_MAX ) && ( r_vcnt < V_ACT_MAX ) && r_vsync ) {
121 //
\83f
\81[
\83^
\83o
\83b
\83t
\83@
\89^
\97p
\83J
\83E
\83\93\83^
\81i
\83e
\83X
\83g
\97p
\81j
124 r_bit_cnt++ ; //
\83r
\83b
\83g
\83J
\83E
\83\93\83g
\83A
\83b
\83v
126 //
\83\8c\83W
\83X
\83^
\83J
\83E
\83\93\83g
\94½
\93]
127 if(r_bit_cnt==0b111) {
128 r_reg_cnt := ~r_reg_cnt ;
132 // FIFO
\93Ç
\82Ý
\8fo
\82µ
\92l
\83o
\83b
\83t
\83@
\83\8a\83\93\83O
135 ~r_reg_cnt : r_data2 := w_rddata ;
136 r_reg_cnt : r_data1 := w_rddata ;
141 r_reg_cnt == 0b0 : o_dummy_rgb = 3#(r_data1[r_bit_cnt]) ;
142 // (r_reg_cnt == 0b1)
143 else : o_dummy_rgb = 3#(r_data2[r_bit_cnt]) ;
148 /*
\83J
\83\89\81[
\83o
\81[
\8dì
\90¬ */
149 if( r_outcnt < 3'd4 ) {
156 if( ~r_outclr[4]) o_vga_b = ~r_outclr[3:0] ;
158 if( ~r_outclr[5]) o_vga_r = ~r_outclr[3:0] ;
160 if( ~r_outclr[6]) o_vga_g = ~r_outclr[3:0] ;
164 //
\83J
\83\89\81[
\95`
\89æ
\82µ
\82È
\82¢
\83G
\83\8a\83A
166 r_hcnt == H_ACT_MAX : {
174 r_hcnt == H_FRONTP_MAX : {
177 r_hcnt == H_SYNC_MAX : {
182 // FIFO
\93Ç
\82Ý
\8fo
\82µ
\92l
\83o
\83b
\83t
\83@
\83\8a\83\93\83O
185 ~r_reg_cnt : r_data2 := w_rddata ;
186 r_reg_cnt : r_data1 := w_rddata ;
192 r_vcnt == V_ACT_MAX : ;
193 r_vcnt == V_FRONTP_MAX : r_vsync := 0 ;
194 r_vcnt == V_SYNC_MAX : r_vsync := 1 ;
198 // VGA Gen initialize command
199 func fs_initialize seq {
200 //
\83f
\81[
\83^
\83o
\83b
\83t
\83@
\82P
\81C
\82Q
\82ÉFIFO
\82Ì
\92l
\82ð
\8ai
\94[
202 r_data1 := u_FIFO.o_rddata ;
204 r_data2 := u_FIFO.o_rddata ;
209 func fs_fifo_read seq {
211 fs_fifo_ack( u_FIFO.o_rddata ) ;