Skip to content

Commit f29d8ef

Browse files
Frame buffer vga rendering
1 parent 10a0d84 commit f29d8ef

1 file changed

Lines changed: 27 additions & 23 deletions

File tree

src/main/scala/RISCV/VGAController.scala

Lines changed: 27 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import chisel3._
44
import chisel3.util._
55
import _root_.circt.stage.ChiselStage
66

7+
// 320x240
78
class VGAController extends Module {
89
val H_VISIBLE = 640
910
val H_FRONT = 16
@@ -26,52 +27,55 @@ class VGAController extends Module {
2627
val vsync = Output(Bool())
2728
val rgb = Output(UInt(12.W))
2829
val blanking = Output(Bool())
29-
val hPos = Output(UInt(10.W))
30-
val vPos = Output(UInt(10.W))
3130
})
3231

33-
val memory = SyncReadMem(1024, UInt(32.W))
32+
val memory = SyncReadMem(320 * 240, UInt(8.W))
3433

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-
4134
when(io.write) {
4235
memory.write(io.address, io.write_value)
4336
}
4437

45-
when(hCount === (H_TOTAL - 1).U) {
46-
hCount := 0.U
47-
48-
when(vCount === (V_TOTAL - 1).U) {
49-
vCount := 0.U
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
5046
}.otherwise {
51-
vCount := vCount + 1.U
47+
v_pos := v_pos + 1.U
5248
}
5349
}.otherwise {
54-
hCount := hCount + 1.U
50+
h_pos := h_pos + 1.U
5551
}
5652

5753
val hSyncStart = (H_VISIBLE + H_FRONT).U
5854
val hSyncEnd = (H_VISIBLE + H_FRONT + H_SYNC).U
5955
val vSyncStart = (V_VISIBLE + V_FRONT).U
6056
val vSyncEnd = (V_VISIBLE + V_FRONT + V_SYNC).U
6157

62-
io.hsync := !(hCount >= hSyncStart && hCount < hSyncEnd)
63-
io.vsync := !(vCount >= vSyncStart && vCount < vSyncEnd)
58+
io.hsync := !(h_pos >= hSyncStart && h_pos < hSyncEnd)
59+
io.vsync := !(v_pos >= vSyncStart && v_pos < vSyncEnd)
6460

65-
val hActive = hCount < H_VISIBLE.U
66-
val vActive = vCount < V_VISIBLE.U
61+
val hActive = v_pos < H_VISIBLE.U
62+
val vActive = h_pos < V_VISIBLE.U
6763
val active = hActive && vActive
6864

6965
io.blanking := !active
70-
io.hPos := hCount
71-
io.vPos := vCount
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)
7277

7378
io.rgb := Mux(active, pixel, 0.U)
74-
// io.rgb := Mux(active, 0b111111111111.U, 0.U)
7579
}
7680

7781
object VGAMain extends App {

0 commit comments

Comments
 (0)