@@ -4,7 +4,6 @@ import chisel3._
44import chisel3 .util ._
55import _root_ .circt .stage .ChiselStage
66
7- // 320x240
87class VGAController extends Module {
98 val H_VISIBLE = 640
109 val H_FRONT = 16
@@ -27,55 +26,52 @@ class VGAController extends Module {
2726 val vsync = Output (Bool ())
2827 val rgb = Output (UInt (12 .W ))
2928 val blanking = Output (Bool ())
29+ val hPos = Output (UInt (10 .W ))
30+ val vPos = Output (UInt (10 .W ))
3031 })
3132
32- val memory = SyncReadMem (320 * 240 , UInt (8 .W ))
33+ val memory = SyncReadMem (1024 , UInt (32 .W ))
3334
35+ val hCount = RegInit (0 .U (10 .W ))
36+ val vCount = RegInit (0 .U (10 .W ))
37+
38+ val pixel = WireInit (0 .U (12 .W ))
39+ pixel := memory.read(0 .U , true .B )
40+
3441 when(io.write) {
3542 memory.write(io.address, io.write_value)
3643 }
3744
38- val v_pos = RegInit (0 .U (10 .W ))
39- val h_pos = RegInit (0 .U (10 .W ))
40-
41- when(h_pos === (H_TOTAL - 1 ).U ) {
42- v_pos := 0 .U
43-
44- when(v_pos === (V_TOTAL - 1 ).U ) {
45- h_pos := 0 .U
45+ when(hCount === (H_TOTAL - 1 ).U ) {
46+ hCount := 0 .U
47+
48+ when(vCount === (V_TOTAL - 1 ).U ) {
49+ vCount := 0 .U
4650 }.otherwise {
47- v_pos := v_pos + 1 .U
51+ vCount := vCount + 1 .U
4852 }
4953 }.otherwise {
50- h_pos := h_pos + 1 .U
54+ hCount := hCount + 1 .U
5155 }
5256
5357 val hSyncStart = (H_VISIBLE + H_FRONT ).U
5458 val hSyncEnd = (H_VISIBLE + H_FRONT + H_SYNC ).U
5559 val vSyncStart = (V_VISIBLE + V_FRONT ).U
5660 val vSyncEnd = (V_VISIBLE + V_FRONT + V_SYNC ).U
5761
58- io.hsync := ! (h_pos >= hSyncStart && h_pos < hSyncEnd)
59- io.vsync := ! (v_pos >= vSyncStart && v_pos < vSyncEnd)
62+ io.hsync := ! (hCount >= hSyncStart && hCount < hSyncEnd)
63+ io.vsync := ! (vCount >= vSyncStart && vCount < vSyncEnd)
6064
61- val hActive = v_pos < H_VISIBLE .U
62- val vActive = h_pos < V_VISIBLE .U
65+ val hActive = hCount < H_VISIBLE .U
66+ val vActive = vCount < V_VISIBLE .U
6367 val active = hActive && vActive
6468
6569 io.blanking := ! active
66-
67- val read_address = WireInit (0 .U (32 .W ))
68-
69- when(! active) {
70- read_address := 0 .U
71- }.otherwise {
72- read_address := h_pos * 320 .U + v_pos
73- }
74-
75- val color = memory.read(read_address, true .B )
76- val pixel := color(7 , 5 ) ## color(5 ) ## color(4 , 2 ) ## color(2 ) ## color(1 , 0 ) ## color(0 ) ## color(0 )
70+ io.hPos := hCount
71+ io.vPos := vCount
7772
7873 io.rgb := Mux (active, pixel, 0 .U )
74+ // io.rgb := Mux(active, 0b111111111111.U, 0.U)
7975}
8076
8177object VGAMain extends App {
0 commit comments