Skip to content

Commit ccbd5e8

Browse files
author
Sebastien Bourdeauducq
committedJun 29, 2012
framebuffer: chop memory words
1 parent 0f9e16a commit ccbd5e8

File tree

1 file changed

+16
-2
lines changed

1 file changed

+16
-2
lines changed
 

Diff for: ‎milkymist/framebuffer/__init__.py

+16-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from migen.flow.actor import *
33
from migen.flow.network import *
44
from migen.flow import plumbing
5-
from migen.actorlib import ala, misc, dma_asmi
5+
from migen.actorlib import ala, misc, dma_asmi, structuring
66
from migen.bank.description import *
77
from migen.bank import csrgen
88

@@ -66,18 +66,30 @@ def get_fragment(self):
6666
]
6767
return Fragment(comb)
6868

69+
_bpp = 32
70+
_bpc = 10
71+
_pixel_layout = [
72+
("b", BV(_bpc)),
73+
("g", BV(_bpc)),
74+
("r", BV(_bpc)),
75+
("pad", BV(_bpp-3*_bpc))
76+
]
77+
6978
class Framebuffer:
7079
def __init__(self, address, asmiport):
7180
asmi_bits = asmiport.hub.aw
7281
alignment_bits = asmiport.hub.dw//8
7382
length_bits = _hbits + _vbits + 2 - alignment_bits
83+
pack_factor = asmiport.hub.dw//_bpp
84+
packed_pixels = structuring.pack_layout(_pixel_layout, pack_factor)
7485

7586
fi = ActorNode(_FrameInitiator(asmi_bits, length_bits, alignment_bits))
7687
adrloop = ActorNode(misc.IntSequence(length_bits))
7788
adrbase = ActorNode(ala.Add(BV(asmi_bits)))
7889
adrbuffer = ActorNode(plumbing.Buffer)
7990
dma = ActorNode(dma_asmi.SequentialReader(asmiport))
80-
# TODO: chop
91+
cast = ActorNode(structuring.Cast(asmiport.hub.dw, packed_pixels))
92+
unpack = ActorNode(structuring.Unpack(pack_factor, _pixel_layout))
8193
# TODO: VTG
8294

8395
g = DataFlowGraph()
@@ -86,6 +98,8 @@ def __init__(self, address, asmiport):
8698
g.add_connection(fi, adrbase, source_subr=["base"], sink_subr=["b"])
8799
g.add_connection(adrbase, adrbuffer)
88100
g.add_connection(adrbuffer, dma)
101+
g.add_connection(dma, cast)
102+
g.add_connection(cast, unpack)
89103
self._comp_actor = CompositeActor(g)
90104

91105
self.bank = csrgen.Bank(fi.actor.get_registers(), address=address)

0 commit comments

Comments
 (0)
Please sign in to comment.